블로그를 개설하고 처음으로 리뷰할 논문은 Learning representations by back-propagating errors 으로 결정했다. 개인적으로 수업 시간에 역전파가 잘 이해되지 않았기도 하고, 딥러닝이 한번 더 도약하게 되는 논문이라 생각하기 때문이다.
논문 이름 : Learning representations by back-propagating errors
발행 년도 : 1986
저자 : David E. Rumelhart*, Geoffrey E. Hintont & Ronald J. Williams*
연구 배경과 목적
역전파 알고리즘이 제안되기 이전에는 다층 신경망을 효율적으로 학습시켜 활용할 수 있는 방법이 제한적이었다. 당시에는 Gradient Descent 등 단층 신경망에서 가중치를 학습시키는 방법은 존재했으나, 이를 다층 신경망에 그대로 적용하기에는 이론적으로도, 현실적으로도 많은 어려움이 있었다.
이 논문은 단층 신경망의 학습 방식과 구별되는 back-propagation을 소개한다. 이 방식을 통해 input, output layer만 있는 단층 신경망을 넘어 hidden layer들도 의미있는 특성을 학습하여 우리가 기대하는 결과를 제공하기 위해 동작할 수 있도록 한다. hidden layer의 학습은 비선형 구조 (비대칭)를 학습할 수 있도록 하며 더욱 복잡한 모델을 구현할 수 있도록 해준다.
주요 아이디어와 개념
논문에서는 간단한 형태의 다층 신경망 학습 구조를 소개하며 시작한다. 입력 유닛이 맨 아래 (bottom) 있고, 중간 층이 있으며 (hidden layer), 출력 유닛이 맨 위에 (top)에 있는 네트워크 구조이다. 같은 layer간 연결과, 상위 layer에서 하위 layer로의 연결은 금지되어 있다. 각 layer의 유닛 상태는 아래 수식 (1), (2)가 적용하면서 결정된다.

수식 1 - 이전 i번째 노드의 출력을 y_i라 하고, i번째 노드에서 j번째 노드로의 연결 가중치를 w_j_i라 할 때, j번째 노드에 대한 가중 입력 x_j

수식 2 - j번째 노드가 가중 입력 x_j를 받았을 때 출력. 시그모이드 어서오고.
이제 우리가 원하는 가중치를 찾기 위해 원하는 결과와 예측한 결과를 비교하기 위한 error를 정의한다. 이는 각 케이스에 대한 예측된 output과 기대한 output을 비교함으로 에러를 정의한다.

수식 3 - output 을 y_j_c, 기대한 값을 d_j_c라 할 때 전체 에러. 여기서 c는 케이스에 대한 인덱스, j는 출력 유닛에 대한 인덱스이다.
여기까지는 일반적인 Forward Pass이고, 상위 레이어에서 하위 레이어로 다시 전파하는 backward pass는 전체 에러 E를 output y에 대해 편미분을 하면서 시작한다.

수식 4 - 수식 3을 y_j에 대해 편미분한 값. 즉, 출력값의 변화가 전체 E에 미치는 영향.


이제 체인 룰과 수식 2를 미분한 결과를 적용하면 아래 값을 얻을 수 있다.

수식 5 - 입력 x_j의 변화가 전체 에러 E에 주는 변화량
수식 5를 통해 입력의 변화가 오류에 어떤 영향을 미치는지 알 수 있다. 이 입력 값은 하위 레이어의 상태에 대한 선형 함수이자 연결의 가중치에 대한 선형 함수이므로, 가중치를 이용하여 편미분을 하면 다음과 같은 수식을 얻을 수 있다.


수식 6 - 유닛 i에서 j로의 가중치 w_i_j에 대한 편미분, 즉 가중치들이 오류에 미치는 영향
이를 통해 특정한 가중치가 전체 에러에 영향을 나타내는 값을 구했으니, 이를 반복해서 가중치를 업데이트 해 나가면 된다.


그리고 이제 출력층에서의 에러 기울기를 알고 있으니까 이전 레이어의 유닛 i의 기울기를 계산해준다. 이 과정에서 별도의 메모리가 필요하지 않고, 체인룰과 함께 행복하게 역방향으로 가중치를 업데이트 해가면서 학습시키는 원리이다. 그리고 논문에서는 여러가지 가중치의 변화에 따른 전체 에러의 변화를 응용한 예시도 보여주고 있다.
더 많은 수학적인 내용이 있지만... 내가 더 공부해서 나중에 리뷰를 리팩토링 할 때가 온다면 다시 한번 수정할 예정이다.
기타

논문에서 예시로 설명하는 네트워크 이미지. 2 개의 hidden node를 사용하고 있고, 상위 계층에서 하위 계층으로 연결과 같은 계층 간 연결은 불가능하게 되어있다. 이 외에도 논문에서는 여러가지 실험적 결과들을 제공하고 있는 것 같은데, 솔직히 완전히 이해하지 못했다.

1. 처음에 이미지 1을 보고 직관적으로 이해하지 못했다... 아쉬워서 피그마로 다시 그려봤다.