오늘은 여러 가중치 갱신 방법을 알아보고자 한다.


그 전에 생각할 점은, 앞서 본 은닉층 없는 허접한 신경망 대신 다층 신경망을 학습시킬 준비를 해야 한다.


이를 위해 먼저 1986년에 개발된 역전파(backpropagation) 알고리즘을 알아보자.


이 알고리즘은 은닉층의 가중치를 바꿀 때 얼마나 오차가 빨리 변하는지를 계산할 수 있다. 즉 개별 시냅스의 가중치를 변경할 때의 오차가 얼마나 빨리 변


하는지를 알 수 있는 것이다. 이를 통해 가장 가파른 하강 방향을 찾아 빠르게 극점으로 도달하는게 목표다.



대충 생각해보면 기계학습은 매직 박스마냥 층만 잘 쌓으면 수행되는걸로 오해할 수 있다. 이처럼 추상화로 덮힌 부분을 잘 모르고 가져다 쓸 때 발생하는 


비효율을 leaky abstraction이라고 한다. 그래서 자체적으로 역전파를 이해하려는 노력이 필요한 것이다. 



하나의 은닉 노드는 모든 출력 노드에 영향을 미칠 수 있다. 따라서 오차에 대한 여러 은닉 노드들의 효과를 결합해서 분석해야한다.


이 때 역전파의 전략은 일종의 다이나믹 프로그래밍이다.


한 은닉층에 대해 오차 도함수를 얻은 다음에, 이를 전의 가중치에 대한 오차 도함수를 계산하는데 사용하는 것이다.



디피문제처럼 귀납적으로 다뤄진다.


먼저 j번째 층에 대한 오차 도함수가 있다고 생각해보자. 최종적으로는 i번째 층에 대한 오차 도함수를 알아내야 한다.


이를 위해 i번째 층의 아웃풋들이 j번째 층의 오차에 얼마나 영향을 주는지에 대한 정보를 모아야 한다. 



0. 역전파 알고리즘


먼저 출력층에서 오차 도함수를 각 출력층 뉴런에 대한 편미분으로 구하면 다음과 같다.


이제 귀납적으로 i번째 층의 뉴런 출력이 j번째 층의 모든 뉴런의 오차에 얼마나 영향을 미치는지에 대한 정보를 모아야 한다.


고맙게도 아래층에서 들어오는 출력의 오차를 연결 가중치 들로 편미분 될 수 있으므로 다음과 같이 표현할 수 있다.



또한 로짓에 대한 출력의 도함수를 표현한다면 시그모이드 함수르 쓴다면 다음과 같이 표현된다.


이제 두식을 합치면 j번째 층의 오차 도함수의 관점에서 본 i번째 층의 오차 도함수를 다음과 같이 표현할 수 있다.


모든 은닉층들도 재귀적으로 오차 도함수를 구할 수 있게 되었다. 다음은 한 데이터셋을 학습한 이후 어떻게 수정되어야하는지를 알려준다.

마지막으로 데이터셋에 전체 학습 데이터셋에 대한 도함수를 합산하면 다음과 같이 수정된 식으로 나타낼 수 있다.



수학적으로 주저리 주저리 쓰여있는데,


역전파는 말 그래도 내가 영향을 주었던 노드들에게서 전부 피드백을 받아 가중치를 수정해 나가는 과정이다.(겉핡기)


(미완성)


'머신러닝' 카테고리의 다른 글

머신러닝 둘째날 - 신경망 - 델타 규칙  (0) 2018.03.27
머신러닝 첫날 - 용어  (0) 2018.02.07

+ Recent posts