시작하며
오늘은 머신러닝에서 가장 큰 고비 중 하나인 ' Back Propagation(역전파) 알고리즘' 에 대해 공부해보겠습니다.
알고리즘을 이해하기 어려울 수도 있고, 복잡한 수식이 나와 거부감이 드실 수도 있습니다.
하지만 정말 중요한 개념이니 조급해하지 마시고 최소 3번은 정독하며 완전히 이해하시고 다음 개념들을 공부하시길 바랍니다.
이번 포스팅은 아래 포스팅을 먼저 공부하시고 보시면 훨씬 효과적입니다.
https://box-world.tistory.com/17?category=397062
Neural Network의 목적
우리는 두개 혹은 그 이상의 결과값을 분류(Classification)하기 위해 Logistic Regression을 사용하였습니다.
그런데 만약 위와 같이 'non-linear'한 Decision Boundary가 필요한 경우 가설함수가 복잡해져 기존의 Logistic Regression으로는 연산이 어려웠지만 Neural Network로 이를 해결할 수 있었습니다.
우리가 Neural Network도 정규화된 Logistic Regression을 기반으로 그 목표는 최대한 실제값에 가깝게 잘 예측하는 것입니다.
이를 위해선 Neural Network를 학습시켜야 하고, 결국 학습시킨다는 말은 실제값과 예측값의 오차인 Cost(비용)을 최소화 한다는 것입니다.
우리가 익히 아는 Gradient Descent Algorithm을 Neural Network에 이용하여 Cost를 최소화해보겠습니다.
Neural Network 속 하나의 Unit은, Input과 가중치 W 가 곱해져 Z가 만들어집니다. 이를 sigmoid 함수 g에 넣어 도출된 결과값 g(Z)를 다음 Layer로 보냅니다.
최종적인 목표는 Cost를 최소화시키는 Neural Network 내의 모든 Unit의 가중치 W 를 찾는 것입니다.
이를 Neural Network를 최적화한다고 표현합니다.
Forward Propagation
본격적으로 Back Propagation을 알아보기 전, 위 Neural Network에서 Layer 2의 첫번째 Unit을 최적화하며, Forward Propagation의 문제점을 알아보겠습니다.
우선 Cost를 구하기 위해서는 Neural Network의 예측값을 구해야합니다.
- 따라서 Output Layer에서의 최종적인 예측값을 구하기 위해서는, Layer 3의 4개의 Unit이 각각의 g(z)값을 Output Layer에 보내줘야 합니다.
- 근데 이 layer 3의 g(z)을 각각 구하기 위해서는, Layer 2의 unit들은 'Input Layer'에서 받은 Input으로 g(z)값 을 계산해서 Layer 3에 보내줘야합니다.
- 이렇게 구한 예측값을 실제값에서 빼면 Cost를 구할 수 있게 됩니다.
그러면 현재 우리는 Gradient Descent Algorithm을 이용하고 있으므로, 계산한 Cost의 미분값에 learning rate를 곱하여 가중치 W에서 뺌으로써 한번의 갱신이 이뤄집니다.
근데 여기서 끝이 아닙니다! 우리는 한번의 갱신을 한것이지 Cost를 최소화하기 위해 이 짓을 적게는 몇 백번, 많게는 몇 천번을 연산해줘야 합니다.
백보 양보해서 하나의 Unit에서 최적화 하는데 성공했습니다. 그러나 우리는 이 짓을 Neural Network에 있는 나머지 Unit들에 대해서 똑같이 다 해줘야 합니다.
만약 우리가 사용하려는 Neural Network의 Layer가 100개였다면 이러한 방식은 연산량이 무한대에 가까울 것이며 불가능합니다.
이처럼 Forward Propagation은 Neural Network가 커질수록 최적화를 위한 연산량이 기하급수적으로 늘어나게 됩니다.
한동안 전문가들은 이러한 문제에 봉착하여 한동안 연구가 진전되지 못하다가 나오게 된것이 바로 Back Propagation입니다.
Back Propagation이란
'Back Propagation' 는 Output Layer 직전의 Layer부터 최적화합니다.
미리 말하고 싶은 것은 'Back Propagation'도 Gradient Descent를 이용합니다. 즉 앞서 배웠던 Forward Propagation처럼 Cost를 구하여 W를 여러번 갱신하여 최적화합니다.
다만 그 차이는 'Forward Propagation'은 한번의 갱신을 위한 Cost를 구하는데 비효율적으로 많은 연산을 필요로 합니다.
그러나 'Back Propagation'에서는 최적화의 순서를 달리하여 몇번의 연산만으로 Cost를 구할 수 있습니다.
Back Propagation 계산
Back Propagation 연산에서 핵심은 'Chain Rule' 즉 연쇄법칙(함성함수의 도함수)입니다.
다시 말하지만 Back Propagation은 Cost를 최소화하기 위해 w를 갱신해야하며 이를 위해선 Cost의 미분값이 필요합니다. 이것이 위 이미지 좌측 상단의 '∂f / ∂w' 이고 이것을 구하는데 이용되는 것이 연쇄법칙인 것입니다.
'∂f / ∂w'을 [∂f//∂g와 ∂g/∂w의 곱] 으로 구할 수 있다는 부분에서 연쇄법칙이 이용됐음을 확인할 수 있습니다.
핵심은 우리가 하나의 Unit을 최적화하기 위해 Forward Propagation에선 엄청난 연산량이 필요했는데, Back Propagation에선 편미분값을 구해서 '한번의 곱셈'으로 아주 간단하게 구할 수 있다는 점입니다.
저런 방식으로 나머지 모든 Unit의 Cost 미분값을 간단하게 구하여 Neural Network를 최적화할 수 있습니다.
결론적으로 Back Propagation은 Output Layer에서 시작하여 직전 레이어로 이동하면서 Cost를 구하는 최적화 알고리즘으로, Chain Rule을 이용하여 Forward Propagatin에 비해 연산량을 현저히 줄이게 되었습니다.
아래 링크는 Back Propagation을 애니메이션화하여 알고리즘의 작동원리를 보다 쉽게 이해하는데 도움 될거라 생각합니다. (한글 자막도 있습니다!)
- What is backpropagation really doing?
https://www.youtube.com/watch?v=Ilg3gGewQ5U&t=11s
요약
제가 Back Propagation에서 이해가 안됐던 부분들을 하나씩 짚어가며, 맥락적으로 설명하고자 이번 포스팅을 굉장히 오랫동안 준비하였습니다.
따라서 여러분들도 제 포스팅을 통해서 Back Propagation을 공부하려 하신다면, 요약보다는 맥락에 집중하여 오늘 글의 흐름을 읽으려고 하시는게 좋을 거 같습니다.
'AI > Coursera ( Machine Learning )' 카테고리의 다른 글
[머신러닝] 머신러닝 학습 시 고려해야할 것 : Test data와 Cv data란? (2) | 2020.05.03 |
---|---|
[머신러닝] 딥러닝의 시작 Neural Network 정복하기 2 (0) | 2020.05.01 |
[머신러닝] Neural Network를 이용한 XNOR 연산 그리고 Multi Classification (0) | 2020.05.01 |
[머신러닝] 딥러닝의 시작 Neural Network 정복하기 1 (0) | 2020.04.30 |
[머신러닝] 모델의 과적합(Overfitting)을 피하기 위한 방법 (1) | 2020.04.30 |