brunch

You can make anything
by writing

C.S.Lewis

by Forest Writer Aug 15. 2021

세상에서 가장 쉽게 인공지능 아는 척하기 #2

손실을 최소화하는 방향으로 변화한다.


<1편에 이어서 계속>


인공지능은 반복 학습을 통해 각각 개체의 대표 이미지 (인공신경망의 연결 강도, 시냅스 웨이트)를 계속해서 변화시켜 나가면서, 무수히 많은 입력 객체를 분류한다.


예를 들어, 어떠한 입력 이미지에 대해 자동차, 기차, 비행기를 구분한다고 하면, 일단 자동차, 기차, 비행기와의 3가지의 유사함의 정도를 모두 평가한다. 그중에 가장 높은 값을 갖는 출력 값을 정답으로 하고, 다음번에 유사한 입력 이미지가 들어왔을 때는 더욱 손쉬운 구분이 되도록 시냅스 웨이트를 변화시켜 나가는 것이다. 이제 남은 문제는 간단하다. 시냅스 웨이트를 어떠한 방법으로 바꿔나갈 것인가?

사실 원리는 굉장히 간단하다. 인공신경망에서는 가장 최종 연산 결과로써 손실 함수 (그림에서 맨 우측에 'z')라는 것이 있다. 이것은 현재의 시냅스 웨이트 상태에서 특정 이미지 객체가 들어왔을 때 출력 값이 이상적인 닮음 값에 비해 얼마나 차이가 있는 지를 정량적으로 나타낸다.


예를 들어, 자동차, 기차, 비행기 이렇게 3가지의 선택지가 있을 때, 우리가 자동차 이미지를 학습을 시킨다고 하자. 그랬을 때, 이상적으로는 각각의 닮음 연산의 결과가 자동차=1, 기차=0, 비행기=0 (t1, t2, t3 = 1,0,0) 이렇게 나와야 좋을 것이다. (결과값을 0에서 1로 범위 조정했을 때) 하지만 실제 연산 결과는 자동차=0.5, 기차=0.2, 비행기=0.3 이렇게 될 수도 있다. 


그럴 경우 일반적인 손실 값은 이상 값과의 차이의 제곱의 합으로 구해지게 된다. (통계학에서 분산을 구하는 것과 비슷하다) 물론 각각의 항들의 앞에 가중치 상수가 붙을 수도 있지만, 여기서는 간단하게 1로 가정한다.


손실 값 = (1 - 0.5)^2 + (0 - 0.2)^2 + (0 - 0.3)^2 =  0.25 + 0.04 + 0.09 = 0.38


이렇게 손실 값이 0.38 이 나왔다. 즉, 같은 자동차 이미지를 다음번에 입력을 했을 때는 손실 값이 0.38보다 작게 나오도록 시냅스 웨이트를 변화시켜야 되는 것이다.


같은 입력 이미지, 같은 시냅스 웨이트 상태에서 특정 웨이트 딱 하나가 '아주 조금' 변했을 때의 손실 함수 z의 변화는 미분 표현으로 dz/dw 와 같이 나타낼 수 있다. 이 값을 구하기 위해서는 미분의 연쇄법칙을 이용하면 된다.


예를 들어, x -> y -> z 이렇게 변하는 함수관계에서, dz/dx = dz/dy x dy/dx 이렇게 나타낼 수 있는 것이다.

먼저 h 층과 y 층 사이의 시냅스 웨이트를 w2라고 한다면, 그중에 하나, 예를 들어 h2와 y3 이 연결된 w(2)23 웨이트 (그림에서 빨간선) 값이 아주 조금 변했을 때 손실 함수 z가 얼마나 변할 것인지는 미분의 연쇄법칙에 의해서 위의 그림과 같이 파란색 경로를 통해 구할 수 있다. 물론 데이터 값의 범위나 여러 변환 양식을 조절하는 여러 함수들도 중간중간 섞여있지만, 여기서는 간단히 이렇게만 표현하였다. (실제로는 더 복잡하다) 그리고 잘 생각해보면, dy3/dw(2)23 = h2 인 것을 쉽게 알 수 있다. y3로 오는 다섯 개의 경로 중에 w(2)23 의 편미분에 해당되는 항은 h2 밖에 없기 때문이다.


여기서 중요한 점은, 같은 입력 이미지에 대해서 시냅스 웨이트 w2 가 변한다고 하더라도 x 값과 h 값은 전혀 변화가 없다는 점이다. 즉, 손실 함수 가까이에 있는 시냅스 웨이트는 경로를 몇 번 거치지 않고 거의 직접적으로 손실 함수에 영향을 주기 때문에 계산이 상당히 쉬운 편이다.

입력값 x 층과 h 층 사이의 시냅스 웨이트 w1 이 아주 조금 변했을 때, 손실 함수 z 가 얼마나 변할 것인지는 위의 그림과 같이 구할 수 있다. 예를 들어, x4와 h2 가 연결된 w(1)42 웨이트 (그림에서 빨간선) 값이 변하면 h2 값 자체가 변한다. 그러면 연쇄적으로 y1, y2, y3 가 모두 변하기 때문에 총 3가지의 변화 경로 (그림에서 파란선)의 모든 미분 값의 합을 구해야 한다. 그리고 마찬가지로 dh2/dw(1)42 = x4 인 것 역시 쉽게 알 수 있다.


이렇게 손실 함수에서 멀리 있는 시냅스 웨이트의 경우 조금의 변화만으로도 굉장히 많은 손실 함수 변화가 생기기 때문에 인공신경망의 학습과정에서 가장 중요한 웨이트 부분이다. 그래서 까다로운 테크닉 (옵티마이징이라고도 한다) 들을 많이 사용할 때가 많다. 


이렇게 현재의 입력 이미지에 대해서, 각각의 시냅스 웨이트 성분에 '아주 조금' 변화를 가했을 때 손실 함수 변화량을 안다면, 학습은 손실 함수가 작아지는 방향으로 이루어진다. 예를 들어, dz/dw 값이 양수라면 웨이트 값이 상승함에 따라 손실이 증가한다는 것이다. 즉 이럴 때는 웨이트를 음의 방향으로 변화시켜야 한다. 마찬가지의 원리로 dz/dw 값이 음수라면 웨이트 값이 증가함에 따라 손실이 감소하므로, 지금 있는 웨이트 값에서 더 증가시켜줘야 하는 것이다.


결론적으로, 다른 모든 값들을 고정하고 시냅스 웨이트 성분이 아주 조금 변했을 때 dz/dw 값은 손실 함수에 영향을 줄 수 있는 모든 경로의 합으로 구할 수 있고, dz/dw의 반대 방향으로 적당한 학습률과 함께 시냅스 웨이트를 학습하게 된다. 




매거진의 이전글 세상에서 가장 쉽게 인공지능 아는 척하기 #1
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari