틀림을 거꾸로 되돌리기, 역전파
앞에서 신경망이 신호를 앞으로 흘려 답을 내는 걸 배웠어요. 그런데 그 답이 틀리면 어떻게 고칠까요? 망에는 가중치가 수없이 많은데, 그중 누가 틀림에 책임이 있는지 어떻게 알아낼까요? 답은 의외로 단순해요. 틀림을 출력에서 입력 쪽으로 거꾸로 되짚어, 각 가중치의 지분을 계산하는 거예요. 도미노를 거꾸로 따라가 범인을 찾듯이요. 이게 역전파예요.
먼저 앞으로 예측해요
신경망은 답을 낼 때 신호를 앞으로 흘려요.
입력에서 출발해
층을 차례로 지나
출력에서 예측이 나와요.
앞 강에서 본 그 순방향 흐름이에요.
그런데 처음 만든 망은
가중치가 아무렇게나 정해져 있어서
예측이 정답과 한참 다를 수 있어요.
먼저 이 앞으로 흐름부터 다시 봐요.
버튼을 눌러 신호를 입력에서 출력까지 한 층씩 앞으로 흘려봐요. 끝에 예측이 나오는데, 아직 정답과 달라요.
예측이 나왔지만 정답과 다르죠.
이 차이가 바로 틀림이에요.
얼마나 틀렸는지를 숫자로 잰 걸
손실이라고 불러요.
손실이 크면 많이 틀린 거고,
손실이 0에 가까우면 잘 맞춘 거예요.
우리 목표는 이 손실을 줄이는 거예요.
그런데 망에는 가중치가 수없이 많아요.
그중 누구를 고쳐야 손실이 줄까요?
누가 틀림에 책임이 있을까요
출력이 틀렸어요.
하지만 출력 혼자 틀린 게 아니에요.
출력은 바로 앞 층에서 받은 신호로 답을 냈고,
그 앞 층은 또 그 앞 층 신호로 답을 냈어요.
그러니 틀림의 책임은
한 가중치에만 있는 게 아니라
예측에 끼어든 모든 가중치에
조금씩 나뉘어 있어요.
먼저 출력에서 틀림의 크기부터 확인해요.
출력의 예측과 정답을 비교해요. 버튼을 눌러 틀림(손실)을 표시하면, 이 틀림이 어디서 왔는지 거꾸로 찾아야 한다는 게 보여요.
출력에서 틀림의 크기를 봤어요.
이제 이 틀림을 거슬러 올라가야 해요.
생각해봐요.
출력으로 들어가는 연결이 여럿일 때,
어떤 연결은 신호를 크게 보냈고
어떤 연결은 작게 보냈어요.
크게 보낸 연결일수록
틀린 출력에 더 많이 기여한 거예요.
그러니 그 연결의 책임도 더 커요.
틀림을 거꾸로 되돌려요
이제 진짜 역전파예요.
틀림을 출력에서 입력 쪽으로
한 층씩 거꾸로 흘려보내요.
앞으로 갈 때와 정반대 방향이에요.
도미노가 쓰러진 길을 거꾸로 따라가
맨 처음 누가 건드렸나 찾는 것과 같아요.
한 층씩 되돌아갈 때마다
그 층의 각 연결이
틀림에 얼마나 기여했는지 지분이 정해져요.
버튼을 눌러 틀림을 출력에서 입력 쪽으로 한 층씩 거꾸로 흘려봐요. 되돌아갈 때마다 각 연결에 책임 지분이 매겨져요. 굵을수록 책임이 커요.
거꾸로 다 되돌아갔어요.
이제 망의 모든 가중치가
저마다 책임 지분을 하나씩 받았어요.
어떤 가중치는 틀림에 크게 기여했고,
어떤 가중치는 거의 책임이 없어요.
신기한 건, 출력의 틀림 하나만으로
저 안쪽 깊은 가중치의 지분까지
전부 계산됐다는 거예요.
도미노를 거꾸로 따라간 덕분이에요.
지분만큼 가중치를 고쳐요
이제 책임을 알았으니 고칠 차례예요.
앞 강에서 배운 경사하강을 떠올려봐요.
손실이 줄어드는 방향으로
조금씩 내려가는 그 방법이요.
각 가중치를 그 지분만큼 살짝 조정해요.
책임이 큰 가중치는 많이,
책임이 작은 가중치는 조금만 바꿔요.
한 번에 확 고치지 않고
조금씩 고치는 게 중요해요.
조정 버튼을 눌러 각 가중치를 지분만큼 한 걸음씩 고쳐봐요. 누를 때마다 손실 막대가 줄고, 다시 앞으로 예측하면 정답에 가까워져요.
조정할수록 손실이 줄었죠.
하지만 한 번 고쳤다고 끝이 아니에요.
다시 앞으로 예측하고,
또 틀림을 재고,
또 거꾸로 되짚어 지분을 구하고,
또 그만큼 조정해요.
이 한 바퀴를 수없이 되풀이하면
망의 예측이 점점 정답에 가까워져요.
이렇게 망은 스스로 더 나아져요.
정리해볼까요
한 줄로 모으면 이래요.
먼저 신호를 앞으로 흘려 예측을 내요.
정답과 비교해 틀림을 손실로 재요.
그 손실을 출력에서 입력 쪽으로
거꾸로 흘려, 각 가중치의 지분을 구해요.
그리고 지분만큼 경사하강으로 조정해요.
이 앞으로 예측, 거꾸로 되짚기, 조정을
수없이 되풀이하면 예측이 정답에 가까워져요.
도미노를 거꾸로 따라가 범인을 찾는 거예요.
핵심을 차례로 눌러 되짚어봐요. (앞으로 예측 -> 틀림을 손실로 재기 -> 거꾸로 되짚어 지분 구하기 -> 지분만큼 조정)
이제 신경망이 어떻게 틀림을 고치는지 알게 됐어요.
앞으로 흘려 답을 내고,
틀리면 그 틀림을 거꾸로 되짚어
누가 책임인지 가려내고,
그만큼 가중치를 조금씩 고쳐요.
이 거꾸로 되짚는 단순한 아이디어 덕분에
수많은 가중치를 가진 큰 망도
스스로 배울 수 있게 됐어요.
오늘날 똑똑한 기계들이 학습하는 비결이 바로 이거예요.