머신러닝/딥러닝 공부

신경망 (3) - 역전파 알고리즘(BackPropagation algorithm) 본문

AI 공부/Machine Learning

신경망 (3) - 역전파 알고리즘(BackPropagation algorithm)

호사린가마데라닌 2021. 11. 25. 22:12




다층 퍼셉트론 같은 깊은 신경망이 등장한 후 선형으로 분류가 가능하지 않은 데이터들을 분류하는 것이 가능해졌습니다. 하지만 모델의 깊이(depth)가 깊어질수록, 즉 모델의 층이 많아질수록 모델의 가중치의 수는 기하급수적으로 많이 늘어납니다. 기존의 경사하강법은 기울기를 이용하여 가중치를 업데이트하는 방법을 사용하긴 하지만, 여러 층에 존재하는 가중치들을 모두 하나하나 업데이트하는 것은 매우 많은 연산량과 메모리를 요구합니다.


이를 해결하고자 고안된 알고리즘이 바로 역전파 알고리즘(backpropagation algorithm)입니다.


제가 여태까지 정리했던 신경망은 모두 연산이 입력층에서 출력층으로 방향(앞)으로 이동하였습니다. 이러한 신경망을 순방향 신경망(Feed Forward Neural Network, FFNN)이라고 합니다. 또한 이처럼 연산이 앞으로 이동하는 과정을 순전파(Feed Forward)라고 합니다.

순전파(Feed Forward)



순방향 신경망은 다음 과정을 반복하며 학습을 합니다.


- 입력층에 들어온 입력값을 순전파하여 예측값을 도출해냅니다.
- 타깃과의 오차를 계산한 뒤 역전파 알고리즘(backpropagation algorithm)을 이용하여 가중치를 업데이트합니다.


역전파 알고리즘(back propagation)은 이름에서 유추할 수 있듯이 출력층에서 입력층 방향으로 오차를 전파시키며 각 층의 가중치를 업데이트합니다. 역전파 알고리즘의 원리를 이해하기 위해 간단히 은닉층을 하나만 갖는 신경망을 예시로 들겠습니다. 입력층은 2개의 노드, 은닉층은 3개의 노드, 출력층은 2개의 노드를 가진다고 하겠습니다. 또한 바이어스는 생략하도록 하겠습니다. 이 신경망은 다음 그림과 같이 생겼습니다.

 

 

 

 

검은색으로 칠해진 조그마한 원은 활성화 함수입니다. 처음 입력값이 모델에 주입되면 순전파를 통해 각 노드의 값들을 계산합니다.


그 후 출력층의 노드에 있는 값과 타깃(y)값의 차이를 이용하여 전체 손실(L)을 구합니다. 전체 손실(L)은 출력층의 각 노드와 그에 대응하는 타깃 값과의 차이를 누적하여 더한 값입니다. 각 손실을 L1, L2라고 하겠습니다. 또한 위 첨자 (k)는 층을 구별하기 위해 사용하고, 선형 방정식을 통과한 값을 z, 활성화 함수를 통과한 z값을 a라고 하겠습니다.

 

 

 


역전파 알고리즘은 출력층에서 입력층 방향으로 작용한다고 했습니다. 따라서 먼저 출력층과 가장 가까운 가중치부터 살펴보겠습니다. 가중치가 여러개이므로 헷갈리지 않게 다음과 같이 표기하겠습니다.

 


i와 j는 같은 층에 작용하는 가중치를 구별하기 위해, k는 가중치의 층을 구별하기 위해 사용하였습니다.

 



이 규칙을 이용하여 다음과 같이 가중치를 설정하겠습니다.

 

 

 

역전파 알고리즘은 출력층부터 시작하여 입력층으로 오차를 전파합니다. 오차가 전파 되면서 도달한 층의 가중치들을 업데이트합니다. 위의 신경망에서 처음으로 업데이트가 이루어질 가중치들은 위 첨자 (1)을 달고 있는 가중치들입니다. 가중치 업데이트는 다음과 같은 방식으로 이루어졌었습니다.

 

 

L, a, z의 값들은 각각 다음과 같습니다. 

 

 

 

 

L1을 결정하는데에 관여했던 가중치들은 각각 위 첨자 (1)을 달고 있는 w11, w21, w31입니다. 따라서 L1은 저 가중치들을 업데이트합니다. 기울기를 구할 때에는 연쇄 법칙(chain rule)이 적용되어 다음의 기울기들을 곱합니다.

 

 

 

 

위의 식을 다음과 같이 바꿔주겠습니다.

 

 

 

따라서 위의 식에 학습률(learning rate)를 곱하여 가중치에서 빼준다면 가중치를 업데이트 할 수 있습니다.

 

 

 

 

마찬가지 방법으로 오차 L2도 거꾸로 이동하면서 가중치들을 업데이트합니다. 

 

 

 

 

다음으로 입력층과 가장 가까운 가중치들을 보겠습니다. 위의 그림에서 위첨자 (0)을 달고 있는 가중치들입니다. 가장 먼저 w11이 업데이트되는 과정을 보겠습니다. 먼저 w11에 대한 손실 함수의 기울기를 구해보겠습니다. 

 

 

(0) 층의 가중치 w11은 L1과 L2 오차 모두에 관여하고 있기 때문에 위의 식처럼 나눠서 생각을 해주어야 합니다. 그런데 다음 식을 살펴보면 익숙한 식이 보입니다. 

 

 

따라서 처음 식에 대입한 다음 정리해보면 다음과 같습니다. 

 

 

마찬가지로 위의 식에 학습률을 곱하여 가중치에서 빼주는 식으로 가중치를 업데이트할 수 있겠죠. 복잡한 수식이 나왔지만 중요한 것은 이미 계산되었던 값이 또 사용된다는 것입니다. 정확히는 역전파가 일어날 때 어떤 층에서 계산한 기울기(오차)가 다음 층에서도 사용됩니다. 이는 오차가 역방향으로 전파되는 것처럼 보입니다. 그림으로 보면 다음과 같습니다. 

 

 

같은 층의 다른 가중치들에 대해서도 같은 방식으로 업데이트가 일어납니다. 

 

 

전체적으로 순전파(Feed Forward)와 역전파(BackPropagation)의 흐름을 살펴보면 다음과 같습니다.

 

 

 

역전파 알고리즘(backpropagation algrithm)은 깊은 층을 갖는 신경망의 가중치를 효과적으로 업데이트하는 알고리즘입니다. 역전파 알고리즘 또한 경사 하강법의 기울기를 이용하여 오차를 줄이는 방법을 따르므로 항상 global minimum으로 수렴할 것이라는 보장이 없습니다. 또한 기울기를 이용하는 방법은 모델의 층이 깊어질수록 기울기가 사라지는(0이 되는) 기울기 소실(vanishing gradient) 현상을 보입니다. 따라서 깊은 층을 가진 모델에서 역전파 알고리즘을 적용할 때 위와 같은 문제들을 인지해야 합니다. 

 

Comments