seegongsik
인공지능

어떻게 틀림을 거꾸로 되돌리기, 역전파

앞 레슨에서 신경망이 신호를 앞으로 흘려 답을 낸다는 것을 봤다. 그런데 그 답이 틀리면 어떻게 고칠까? 망에는 가중치가 수없이 많은데, 그중 무엇이 틀림에 얼마나 책임이 있는지 알아야 고칠 수 있다. 방법은 틀림을 출력에서 입력 쪽으로 거꾸로 되짚으며 가중치마다 책임의 몫을 계산하는 것이다. 쓰러진 도미노를 거꾸로 따라가 처음 민 곳을 찾는 것과 비슷한 이 방법이 역전파예요.

01

먼저 앞으로 예측해요

신경망은 답을 낼 때 신호를 앞으로 흘린다. 입력에서 출발해 층을 차례로 지나 출력에서 예측이 나온다. 앞 레슨에서 본 바로 그 흐름이에요.
처음 만든 망은 가중치를 아무렇게나 정해 두기 때문에 예측이 정답과 한참 다를 수 있다. 이 앞으로의 흐름부터 다시 보자.

입력층은닉층출력층
버튼을 누르면 신호가 앞으로 흘러요
0 / 3

버튼을 눌러 신호를 입력에서 출력까지 한 층씩 앞으로 보내 보자. 끝에 예측이 나오지만 아직 정답과 달라요.

예측이 나왔지만 정답과 다르다. 이 차이가 틀림이고, 얼마나 틀렸는지를 숫자로 잰 것이 손실이에요. 손실이 크면 많이 틀린 것이고, 손실이 0에 가까우면 잘 맞힌 것이다.
목표는 손실을 줄이는 것이다. 그런데 망에는 가중치가 수없이 많다. 그중 무엇을 얼마나 고쳐야 손실이 줄까?

02

누가 틀림에 책임이 있을까요

출력이 틀렸다. 하지만 출력 혼자 틀린 것이 아니다. 출력은 바로 앞 층에서 받은 신호로 답을 냈고, 그 앞 층은 또 그 앞 층의 신호로 계산했어요.
그러니 틀림의 책임은 한 가중치에만 있지 않고, 예측에 끼어든 모든 가중치에 조금씩 나뉘어 있다. 먼저 출력에서 틀림이 얼마나 큰지부터 확인하자.

예측0.3정답1.0
버튼을 누르면 예측과 정답의 차이가 표시돼요

출력의 예측과 정답을 견줘 보자. 버튼을 눌러 틀림(손실)을 표시하면, 이 틀림이 어디서 왔는지 거꾸로 찾아야 한다는 것이 보여요.

출력에서 틀림의 크기를 확인했다. 이제 이 틀림을 거슬러 올라가야 한다. 출력으로 들어가는 연결이 여럿이라면, 어떤 연결은 신호를 크게 보냈고 어떤 연결은 작게 보냈을 것이다.
신호를 크게 보낸 연결일수록 틀린 출력에 더 많이 기여했으니 책임도 커요. 바꿔 말하면, 그 연결의 가중치를 조금 바꿨을 때 손실이 크게 변한다는 뜻이다. 가중치를 바꿀 때 손실이 얼마나 변하는지, 이것이 경사 하강법에서 본 기울기다.

03

틀림을 거꾸로 되돌려요

이제 역전파의 차례다. 틀림을 출력에서 입력 쪽으로 한 층씩 거꾸로 흘려보낸다. 앞으로 갈 때와 정반대 방향이다. 쓰러진 도미노를 거꾸로 따라가며 어디서부터 쓰러졌는지 찾는 것과 비슷해요.
한 층씩 되돌아갈 때마다 그 층의 연결이 틀림에 얼마나 기여했는지가 정해진다. 안쪽 층의 몫은 바깥쪽 층의 몫에 그 사이 연결의 영향을 곱해 구한다. 이렇게 곱해 가며 거슬러 올라가는 계산 규칙을 미분의 연쇄 법칙이라고 부른다.

입력층은닉층출력층
버튼을 누르면 틀림이 출력에서 입력 쪽으로 되돌아가요
0 / 2

버튼을 눌러 틀림을 출력에서 입력 쪽으로 한 층씩 거꾸로 보내 보자. 되돌아갈 때마다 연결마다 책임의 몫이 매겨지고, 굵을수록 책임이 커요.

거꾸로 끝까지 되돌아왔다. 이제 망의 모든 가중치가 저마다 책임의 몫을 하나씩 받았다. 어떤 가중치는 틀림에 크게 기여했고, 어떤 가중치는 거의 책임이 없어요.
놀라운 점은 출력의 틀림 하나에서 출발해 안쪽 깊은 가중치의 몫까지 한 번에 계산했다는 것이다. 가중치마다 따로 시험해 보지 않아도 되니, 가중치가 수백만 개인 망에서도 계산을 감당할 수 있다.

04

몫만큼 가중치를 고쳐요

책임을 알았으니 이제 고칠 차례다. 앞에서 본 경사 하강법을 떠올려 보자. 손실이 줄어드는 방향으로 조금씩 내려가던 방법이다.
역전파로 구한 몫이 바로 가중치마다의 기울기이므로, 그 기울기에 학습률을 곱한 만큼 가중치를 고친다. 책임이 큰 가중치는 많이, 책임이 작은 가중치는 조금만 바뀌어요. 한 번에 크게 고치지 않고 조금씩 고치는 것이 중요하다.

가중치 1
0.00
가중치 2
0.00
가중치 3
0.00
남은 틀림(손실)
1.00
조정을 누르면 가중치가 몫만큼 고쳐져요
0 / 4

몫만큼 조정을 눌러 가중치를 한 걸음씩 고쳐 보자. 누를 때마다 손실 막대가 줄고, 책임이 큰 가중치가 더 많이 움직여요.

조정할수록 손실이 줄었다. 하지만 한 번 고쳤다고 끝이 아니다. 다시 앞으로 예측하고, 틀림을 재고, 거꾸로 되짚어 몫을 구하고, 그만큼 고친다.
이 한 바퀴를 수없이 되풀이하면 망의 예측이 점점 정답에 가까워져요. 오늘날의 신경망은 거의 모두 이렇게 학습한다.

05

정리

정리하면 이렇다. 먼저 신호를 앞으로 흘려 예측을 내고, 정답과 견줘 틀림을 손실로 잰다. 그 손실을 출력에서 입력 쪽으로 거꾸로 흘리며 가중치마다 책임의 몫, 곧 기울기를 구한다.
그리고 그 몫만큼 경사 하강법으로 가중치를 고쳐요. 앞으로 예측하고, 거꾸로 되짚고, 고치는 일을 되풀이하면 예측이 정답에 가까워진다.

핵심을 차례로 눌러 되짚어요

핵심을 차례로 눌러 되짚어 보자. (앞으로 예측 → 틀림을 손실로 재기 → 거꾸로 되짚어 몫 구하기 → 몫만큼 조정)

이제 신경망이 틀림을 어떻게 고치는지 알게 됐다. 거꾸로 되짚는 이 아이디어 덕분에 가중치가 수없이 많은 큰 망도 스스로 배울 수 있게 됐어요.
그런데 학습 데이터의 손실을 끝없이 줄이기만 하면 좋을까? 연습 문제의 답만 외운 학생이 처음 보는 시험에서 헤매듯, 신경망도 학습 데이터에 지나치게 맞춰질 수 있다. 이 문제를 다음 레슨 과적합에서 다룬다.

한 줄 정리역전파는 신경망이 틀렸을 때 그 틀림을 거꾸로 되짚어 가중치마다 고칠 양을 구하는 방법이다. 먼저 신호를 앞으로 흘려 예측을 내고, 정답과 견줘 얼마나 틀렸는지 손실로 잰다. 그다음 그 손실을 출력에서 입력 쪽으로 거꾸로 흘리며 각 가중치가 틀림에 얼마나 기여했는지, 곧 기울기를 계산해요. 안쪽 층의 몫은 바깥쪽 몫에 사이 연결의 영향을 곱해 구하는데, 이것이 연쇄 법칙이다. 마지막으로 그 몫만큼 경사 하강법으로 가중치를 조금씩 고친다. 앞으로 예측하고 거꾸로 되짚어 고치는 일을 수없이 되풀이하면 망의 예측이 점점 정답에 가까워져요.
← 인공지능
이 페이지가 도움 됐다면 후원하기