> 신경망 <
사람의 뇌에는 천억개 가까운 신경계 뉴런들이 있다.
이들은 서로 복잡하게 얽혀 있으며 하나의 거대한 그물망과 같은 형태를 이루고 있어 보통 이를 신경망이라고 부른다.
머신러닝/딥러닝에서도 사람의 뇌 속의 신경망 구조에 착안해 퍼셉트론(Perceptron)이라는 형태를 제안했고 이를 연결한 형태를 인공신경망(Artificial Neural Network)이라고 불렀다.
> 다층 퍼셉트론 <
입력값이 있는 입력층(input layer), 최종 결과값이 있는 출력층(output layer), 이 두 층 사이에 있는 은닉층(hidden layer)으로 총 3개의 레이어로 구성된 퍼셉트론을 나타낸 이미지이며, 은닉층에는 H개의 노드, 출력층에는 K개의 노드가 존재하는 인공신경망이다.
그림으로 인공신경망을 표현할 땐 노드를 기준으로 레이어를 표시하기 때문에 3개의 레이어라고 할 수 있지만 실제 인공신경망은 2개의 레이어를 가지고 있는 것이다.
위의 그림처럼 2개 이상의 레이어를 쌓은 것을 다층 퍼셉트론(Multi-Layer Perceptron, MLP)이라고 부른다.
- Parameters / Weights
입력층-은닉층, 은닉층-출력층 사이에는 각 행렬이 존재한다.
입력값이 100개, 은닉 노드가 20개면 입력층-은닉층 사이에 100x20 형태의 행렬이 존재하게 된다.
이러한 행렬들을 Parameter 또는 Weights라고 한다.
> 활성화 함수 (Activation Functions) <
수학적 이유 + 모델의 표현력 때문에 딥러닝에서 활성화 함수의 존재는 필수적이다.
활성화 함수는 보통 비선형 함수를 사용하는데 이를 MLP에 포함시키면서 모델의 표현력이 좋아진다.
활성화 함수의 종류에는 Sigmoid, Tanh, ReLu가 있다.
- Sigmoid
이전부터 활성화 함수로써 많이 사용되어 온 sigmoid 함수는 입력값들을 0 ~ 1 사이의 값으로 바꾸어 준다.
- Tanh
tanh 함수는 함수의 중심값을 0으로 옮겨 sigmoid의 최적화 과정이 느려지는 문제를 해결 해 준다.
- ReLu
위의 두 함수에 비해 ReLu는 학습이 빠르며 연산 비용이 적고 구현이 매우 간단하다.
> 손실함수 <
비선형 활성화 함수를 가진 여러 개의 은닉층을 거친 후 다음 신호 정보들은 출력층으로 전달된다.
원하는 정답과 전달된 신호 정보들의 차이를 계산하여 이 차이를 줄이기 위해 조정하는 것이 딥러닝의 전체적인 학습 흐름이다.
이 차이를 구하는데 사용되는 손실함수는 비용함수라고도 한다.
손실함수의 종류에는 평균제곱오차, 교차 엔트로피가 있다.
-평균제곱오차
실제 데이터와 예측 데이터 편차의 제곱의 합이었던 오차 제곱 합(SSE)을 데이터의 크기로 나누어 평균으로 만든 것이다.
- 교차 엔트로피 (Cross Entropy)
교차 엔트로피는 두 확률 분포 사이의 유사도가 클수록 작아지는 값이다.
> 경사하강법 <
위에서의 오차를 줄이기 위해 경사하강법을 사용한다.
쉽게 말해 각 단계에서 기울기를 구해 기울기가 가리키는 방향으로 이동하는 방법이다.
학습률이라는 개념을 사용하여 기울기 값과 학습률을 곱한 값만큼 이동한다.
파라미터 값들을 어떻게 초기화하는지의 문제와 간련하여 이동하는 속도도 관련이 있다.
-가중치 초기화
딥러닝에서 가중치를 잘못 설정하면 기울기 소실, 표현력의 한계와 같은 문제를 야기하기 때문에 초기 가중치 초기화 설정은 매우 중요하다.
가중치를 초기화하는 방법은 LeCun Initialization, Xavier Initialization, He Initialization가 있다.
이 3가지에 대한 자세한 설명은 아래 링크로 대신한다
> 오차역전파법 <
위에서 구한 기울기를 입력층에 전달하여 파라미터들을 조정하기 위해서는 오차역전파법을 사용한다.
이는 MLP를 학습시키이 위해 사용하는 일반적인 알고리즘 중 하나이다.
오차역전파법은 출력층의 결과와 원하는 타겟의 값과의 차이를 구하여 그 오차 값을 각 레이어들을 지나며 역전파 해서 각 노드가 가진 변수들을 갱신하는 방법이다.