본문 바로가기

Deep learning from scratch

신경망 학습에서의 오차역전파 (Back-propagation)


먼저 해당 섹션의 포스팅들은 사이토 고키의 밑바닥부터 시작하는 딥러닝 2를 참조하여 작성되었음을 밝힙니다.

영상처리 분야와 더불어 기계 번역, 음성 인식 등 실생활에 큰 영향을 주는 기술의 근간에는 자연어 처리 분야가 활용되고 있는 것을 볼 수 있습니다. 더 나아가 멀티 모달리티 분야에서 딥러닝을 적용하여 문제를 해결하기 위해서는 자연어 처리와 시계열 데이터 처리에 대하여 추가로 학습할 필요가 있다고 생각하였기에 밑바닥부터 시작하는 딥러닝 2를 참조하여 공부해보고자 합니다.

신경망 학습의 목표는 손실 함수를 최소화 하는 가중치 파라미터를 찾는 것입니다. 이 과정에 있어서 중요한 것이 오차역전파(back-propagation)와 연쇄 미분 법칙(chain rule)이라고 할 수 있겠습니다. 머신러닝 알고리즘을 처음 접하였을 때 이를 직접 계산해보고 머리에 익히기 위해 연습했던 기억이 떠오릅니다. 시간이 흐르며 기억은 점차 희미해지기 마련이기에 기본적이고 중요한 내용들을 포스팅을 통해 되새겨보고자 합니다.

1. 신경망의 추론과 학습과정

신경망의 추론 과정은 신경망의 순전파(forward propagation)라고 합니다. 순전파란 말 그대로 입력층에서부터 출력층으로의 전파입니다. 순전파 때는 각 layer의 입력이 출력 방향으로 결과를 차례로 전파해나갑니다. 한편, 신경망의 학습은 문제를 해결하기 위한 최적의 매개값을 찾아나가는 과정입니다. 이때 학습의 과정 중 특정 시점에서 성능을 파악할 수 있는 척도가 필요한데, 그 지표로서 손실 값(loss)을 사용합니다. 손실 값은 신경망이 수행하는 작업에 따라 다르므로 손실 함수(loss function)가 다를 수 있습니다. 대개 다중 클래스 분류를 수행하는 신경망에서는 손실 함수로서 크로스 엔트로피(cross entropy)를 사용합니다.

그림. 1 다중 클래스 분류를 위한 신경망의 예

그림. 1은 다중 클래스 분류를 위한 신경망의 예입니다. 위와 같이 신경망은 연산을 수행하는 여러 계층(layer)로 구성됩니다. 예시에서는 완전연결계층(fully connected layer)를 Affine layer로 명시하였습니다. 영상처리에서 Affine 변환은 translation, scaling, rolation을 수행하며, 선형성을 보장하는 변환입니다. 완전연결계층은 weight와 bias를 통하여 입력 에 대한 가중합을 수행하기 때문에 이렇게 명명한것 같습니다. Affine layer 뒤에 Sigmoid는 활성화함수를 의미합니다. 앞서 설명한 바와 같이 완전연결계층만으로는 입력과 출력 사이의 비선ㅁ형적인 관계를 매핑하기에 충분하지 않습니다. 그러므로 이러한 은닉층 사이에는 활성화함수가 존재합니다. 이러한 연속된 계층을 거쳐 순전파가 이루어지고, 손실 함수를 통해 손실 값이 계산됩니다. 이렇게 순전파 과정을 거쳐 구해진 손실 값으로부터 우리는 연쇄 미분 법칙을 통해서 역방향으로 계층의 국소적인 미분을 계산할 수 있으며, 가중치 파라미터를 학습시킬 수 있습니다. 이 과정을 역전파(back-propagation)라고 합니다.

 


2. 행렬곱의 역전파

행렬곱 노드의 역전파는 다소 복잡하기 때문에 간단한 설명 후 살펴보도록 하겠습니다.

그림. 2 Stochastic gradient descent에서 행렬곱 노드의 역전파

그림. 2와 같이 $y = xW$라는 수식으로 설명을 진행하겠습니다. 이 경우 $x$의 $i$번째 원소에 대한 미분 $\frac{\partial L}{\partial x_i}$는 다음과 같이 구할 수 있습니다.

수식. 1 손실 값에 대한 $x$의 $i$번째 원소의 미분

$x_i$의 변화량에 따라 $y$의 모든 원소가 변할 것이며 최종적으로 $L$이 변하게 될것입니다. 따라서 $x_i$에서 $L$까지의 연쇄 미분 법칙의 경로는 여러 개가 있으며, 그것들의 총 합이 $\frac{\partial L}{\partial x_i}$가 됩니다. 위 식을 간단히 하면 아래와 같습니다.

수식. 2 손실 값에 대한 $x$의 $i$번째 원소의 미분

$\frac{\partial y_j}{\partial x_i} = W_ij$이므로 위 수식. 2에서 $\frac{\partial L}{\partial x_i}$은 벡터 $\frac{\partial L}{\partial y}$와 $W$의 $i$행의 내적을 통해서 구할 수 있음을 알 수 있습니다. 이에 따라서 수식. 3을 유도할 수 있습니다.

수식. 3 $손실값에 대한 $x$의 미분

수식. 3과 같이 행렬의 곱을 이용하여 $\frac{\partial L}{\partial x}$를 단번에 구할 수 있습니다. 동일한 방식으로 미니 배치에서 손실 값에 대한 배치 전체의 미분은 아래와 그림. 3과 같이 표현 할 수 있습니다.

수식. 3 Mini-bacth gradient descent에서 행렬곱 노드의 역전파(좌)와 $손실값에 대한 $x$의 미분

 


3. 활성화 함수(Sigmoid)의 역전파

활성화 함수로 잘 쓰이지는 않지만, 그림. 1에서 활성화 함수로 시그모이드 함수를 사용하였으니 시그모이드 함수를 미분해보겠습니다. 먼저 시그모이드 함수를 수식으로 쓰면 $\frac{1}{1+e^{-x}}$이고, 미분 과정은 아래와 같습니다.

$$y = \frac{1}{1+e^{-x}}$$
$$ \frac{d}{dx}({1+e^{-x}})^{-1} \quad=\quad \frac{1}{{({1+e^{-x}})}^2}\frac{d}{dx}({1+e^{-x}})$$
$$=\quad -\frac{1}{{({1+e^{-x}})}^2}(e^{-x}+ 0 ) \quad=\quad \frac{e^x}{{(1+e^{-x})}^2}$$
$$=\quad \frac{-1}{{(1+e^{-x})}^2} + \frac{1+e^{-x}}{{(1+e^{-x})}^2}$$
$$=\quad y(1-y)$$

 

그림. 3 활성화 함수(sigmoid) 계층의 역전파

이렇게 계산한 시그모이드 함수의 미분에 의하여 활성화 함수 계층에서는 계산된 입력된 역전파 값 $\frac{\partial L}{\partail y}$에 $y(1-y)$이 곱하여 다음 계층의 역전파의 입력 값으로 보내줍니다.

 


 

3. Sigmoid with Loss계층의 역전파

그림. 3 Softmax with Loss의 역전파

그림.3은 소프트맥스 함수와 크로스 엔트로피 손실 함수 계층의 역전파 계산 그래프입니다. 소프트맥스 함수는 입력에 대한 정규한 확률 값을 다음 계층으로 내보냅니다. 이를 토대로 크로스 엔트로피 함수는 다중 분류를 위한 손실 값을 계산합니다.

수식. 4 소프트맥스 함수(좌)와 mini-batch gradeint descent의 크로스 엔트로피 함수(우)

먼저 크로스 엔트로피 함수는 해당 클래스의 원핫 벡터로 변환된 정답 레이블($t_nk$)을 통해서 손실 값을 계산합니다. 이때 정답 레이블에 대응하는 확률 값의 자연로그를 취하여 합산합니다. 이러한 순전파 과정에 따라서 역전파 또한 간단하게 진행됩니다. 자세한 과정은 그림. 4와 같습니다.

그림. 4 Softmax with Loss의 역전파 과정 (손실 값을 1로 가정합니다.)

손실 값에서부터 거슬러 올라오며 역전파를 계산해보겠습니다. 먼저 크로스 엔트로피 함수에서 합산되는 자연로그의 지수가 1보다 작으므로 그 결과는 음수에 해당합니다. 이를 고려하여 크로스 엔트로피 함수에서는 -1을 곱한 값을 손실 값으로 내보냅니다. 이에 따라 역전파 과정에서는 먼저 손실 값에 -1이 곱합니다. 그 후 덧셈 노드의 역전파에 따라 각 노드에는 각자 동일한 값이 전파됩니다. 다음 곱셈 노드에서는 자연로그에 곱해진 원핫 벡터의 원소를 동일하게 곱해줍니다. 로그 노드에서는 역전파 값에 자연로그의 미분 값이 곱해집니다. 다음 곱셈 노드는 역전파된 값이 분기하는 지점이므로 앞서 살펴본 바와 같이 서로의 입력에 대한 미분 값을 교차하여 역전파 값에 곱해줍니다. 다음 익스포렌셜 노드는 두 분기점이 만나는 지점이므로 각각의 역전파 값을 더해줍니다. 이렇게 해서 최종적인 값이 계산되는 것을 살펴보았습니다.

 


이렇게 신경망 학습에서의 오차역전파에 대하여 간단히 살펴보았습니다. 다음 포스팅에서부터는 자연어처리(NLP) 분야의 추론 기반 기법에 해당하는 word2vec에 대하여 알아보도록 하겠습니다. 질문이나 지적사항은 댓글로 남겨주시면 감사하겠습니다.

'Deep learning from scratch' 카테고리의 다른 글

LSTM (Long Short-Term Memory)  (0) 2021.09.20
RNN (Recurrent Neural Network)  (0) 2021.09.12
Word2Vec : CBOW와 Skip-Gram  (0) 2021.08.30