비용 함수(Cost function)와 활성화 함수(Activation function)란?
# Cost function과 Activation function이란?
Cost function(비용 함수)은 Loss function(손실 함수)이라고도 한다. loss function은 신경망이 '최적의 가중치', 즉 최적의 parameter(매개변수)를 찾게 만드는 '지표'이다. 이 loss function의 값이 클수록 신경망이 적절한 parameter를 찾지 못하는 것이다. 즉 우리는 loss function의 값을 낮추기 위해 노력해야 한다.
대표적으로 MSE(Mean Squared Error)와 cross-entropy error가 있다. MSE는 실제값과 예측값의 오차의 제곱합으로, 왜 이런 식의 loss function을 쓰는지 직관적으로 이해가 간다. 직관적인 이해가 가지 않는 cross-entropy error에 대해서 좀 더 살펴보겠다.
cross-entropy error는 신경망의 출력값이 확률일 때 쓰이는 loss function이다. 위 식에서 log식은 밑이 e인 자연로그이다. y는 실제 데이터의 정답 레이블, p_hat은 신경망의 출력이다. y는 정답에 해당하는 인덱스의 원소만 1이고 나머지는 0이다(원-핫 인코딩으로 인해서). 그래서 실질적으로 정답일 때만, 즉 y = 1일 때만 로그 식을 계산하게 된다. 그래서 사실상 정답 클래스에 해당하는 확률만을 갖고 cross-entropy error를 계산한다.
즉, 정답 클래스에 대한 확률이 1이 나오도록 하는 loss function이 cross-entropy error이고, 그러한 확률 분포를 벡터로서 나타낼 수 있어야 cross-entropy error를 계산할 수 있는데, 이는 softmax 활성화 함수가 가능하게 한다. softmax layer는 최종 뉴런의 아웃풋 값(logit)을 모두 합쳤을 때 1이 되도록 하는 확률 분포 형태로 최종 아웃풋 벡터를 만들어낸다. (그렇기 때문에 여기 수식에서 log 안에 들어가는게 각 클래스가 정답 클래스에 얼마나 해당할까에 대한 확률값)
예를 들어 정답 레이블은 '2'가 정답이라 하고 이때 신경망 출력이 0.6이라고 하자. 즉, 이 숫자 그림이 2일 확률이 0.6이라고 말하는 것이다. 그렇다면 cross-entropy error값은 -1 * log0.6 = 0.51이다. 2일 확률이 1.0이라고 말한다면 error값은 0이고, 2일 확률이 0.0이라고 말한다면 error값은 무한대로 발산한다.
정리하자면, 예측값과 실제값이 같도록, 즉 cross-entropy error를 loss function으로 두어 이 값이 최소가 되는 방향으로 학습을 시킨다. 개념을 좀 더 확장하자면, '실제 데이터의 분포'인 y_hat과 '모델이 추정한 데이터의 분포' y가 같도록 학습을 시키는 것이다.
Activation function은 이전 레이어들로부터 온 값들, 즉 입력 신호의 총합을 출력 신호로 변환하는 함수이다. activation이라는 단어 자체에서 알 수 있듯이, 입력 신호의 총합이 다음 레이어의 활성화를 일으킬지 말지를 결정한다.
이 활성화 함수의 값은 곧 뉴런의 표현력을 뜻한다. 즉, 활성화 함수의 값이 어느 한 곳으로 치우쳐져 있으면 모델의 표현력이 떨어진다는 얘기다. (ex. 10개의 뉴런에서 나온 활성화 함수 값이 0.5에만 집중되어 있으면, 1~2개의 뉴런을 사용하는 것과 마찬가지) 이를 위해서 가중치의 초기화는 매우 중요하다.
이때 가중치를 0으로 초기화해버리면 안된다. 각 레이어에 할당된 가중치가 모두 0이라는 같은 값 (또는 0이 아닌 아무 같은 값) 이면, loss function의 미분값이 0이 되기 때문에, 역전파를 통한 학습이 안된다. 따라서 He 초기화와 (ReLU 함수 전용) Xavier 초기화 (Sigmoid 함수 전용) 가 제안되었다.
그리고 배치 정규화는 각 미니 배치 안에 있는 데이터의 평균과 표준 편차를 이용해서 평균 0, 표준편차 1인 정규분포 형태로 미니 배치의 데이터들을 정규화한다. 이는 곧 가중치 초기화에 집중하지 않아도 되는 결과로 이어진다.