Machine Learning

Deep Learning from Scratch - 1 (Chapter 1 ~ 4) 신경망

BEOKS 2019. 5. 18. 14:30

Chapter 1 ~ 3은 파이썬의 초기설정, 퍼셉트론 이론 그리고 신경망이론에 대해서 설명하고 있다.

이에 대해서는 기본적으로 알고 있다고 생각하고 여기에는 신경망을 실질적으로 이해하고 코드로 구현하는 방법에 대해서 설명하고자 한다.

 

1. 신경망의 정의

 

책에서 설명하는 신경망은 사실상 퍼셉트론의 확장이라고 할 수 있다. 퍼셉트론에서 활성화 함수(인공뉴런 의 입력값을 출력값으로 바꿀때 쓰이는 함수)로 시그모이드 함수나 ReLU함수 같은 비계단형 함수를 사용하면 그것이 신경망의 물리적 구조라고 할 수 있기 때문이다. 

 

2. 신경망의 학습과정

 

신경망의 학습과정은 추상적으로 표현할 경우 다음과 같다.

1. 모델(예측함수) -> 2. 결과값 비교 -> 3. 매개변수 업데이트 계산 -> 1. 모델(예측함수) .....

 

이런 말은 상당히 많이 들어봤을 거라고 생각한다. 그래서 하나하나 문장의 의미를 프로그래밍 코드로 표현할 수 있도록 수학적으로 표현해 볼 예정이다.

 

1. 모델(예측함수)

 여기서 말하는 모델은 말그대로 신경망 자체를 의미한다. 신경망은 입력층 - 은닉층 - 출력층으로 구성되어 있고 각 층 사이에는 가중치값들로 노드들이 서로 연결되어있다. 

 그리고 예측은 입력층부터 출력층까지 가중치 값을 통해서 계산하여 결과값을 나타내는 것을 의미한다.

 

이를 세부적으로 풀어서 말해보자

 

1) 입력층

입력층은 말그대로 데이터를 입력하는 뉴런들이 있는 첫 번째 층이다. 예를 들어 우리가 24x24 사이즈의 사진 데이터를 입력하여 사진에 고양이가 있는지 없는지 판단해본다고 하자. 그럼 입력해야하는 데이터는 24x24 = 576가지가 된다. 그러므로 입력층에는 576개의 뉴런들이 존재하게된다.

 

2) 출력층

은닉층을 설명하기 전 출력층에 대해서 설명해보도록 하자. 출력층 또한 말 그대로 전 단계의 층에서 받은 데이터를 처리해서 출력하는 것을 의미한다. 우리가 원하는 출력은 고양이가 있는지/없는지 즉 두 가지 종류를 가지고 있다. 이를 좀더 수식으로 표현하면 Result = 1 ( 고양이가 존재함 ) or 0 (고양이가 존재하지 않음)으로 표현할 수 있다. 따라서 마지막 출력층은 두 가지 데이터를 출력 할 수있으므로 출력층의 뉴런은 1개만 있어도 된다.

 

3) 은닉층

은닉층은 입력층과 출력층 사이에 존재하면서 데이터를 처리하도록 한다. 만약 은닉층이 없을 경우 입력층에서 바로 출력층으로 이어지게 되며 위와 같은 예시에서는 576개의 입력층 뉴런이 1개의 출력층 뉴런에 바로 이어지게 되며 이에 사용되는 매개변수는 576개가 된다. 이 때 매개변수가 매우 적으므로 범용적으로 데이터의 출력값을 정확히 하기에는 어려움이 있다. 왜냐하면 매개변수가 적을 경우 데이터를 판별하는 기준이 적다는 의미가 되고 기준이 적다는건 컴퓨터가 제대로 데이터를 판단하는데 부족한 능력을 가질 수 밖에 없기 때문이다.