TensorFlow

신경망 첫걸음, 04 가중치 학습하기

LEEHANDS 2022. 3. 31. 18:44
반응형

여러 노드에서 가중치 학습하기

선형함수의 매개변수인 기울기의 값을 조정해감으로써 선형분류자를 업데이트해나갔던 것을 기억

 

여러개의 노드가 결과 값과 오차에 영향을 주는 경우에는 가중치를 어떻게 업데이트 할까?

 

결과 노드에 영향을 주는 노드가 한개인 경우에는 훨씬 간단했지만 이와 같이 2개의 노드를 가지는 경우에는 결과 값의 오차를 어떻게 활용해야 할까요?

 

오차를 하나의 가중치 업데이트에만 사용하는 것은 합리적이지않다.

위 그림과 같이 연결된 노드에 대해 오차를 균일하게 나누어 분해하는 것

또다른 방법은 오차를 나누어 분배하지만 차별을 두는 것인데 더 큰 가중치를 가지는 연결에 더 큰차를 분배하는 것이다.

우리는 가중치를 두가지방법으로 활용한다는 점을 확인할 수 있다.

 

신호를 하나의 계층에서 다음 계층으로 전파하는데 가중치를 사용

두번째로 오차를 하나의 계층에서 직전계층으로 즉 역으로 전파하는데에도 가중치를 이용합니다.

두번째방법을 역전파라고 부릅니다.

 

출력 계층이 2개의 노드를 가진다면 우리는 두번째 노드에 대해서도 동일한 작업을 하게 됩니다.

두번 째 노드의 결과 값 역시 그 자체의 오차를 가지므로 연결되는 노드에 대해 이 오차를 분배해주면 되는 것입니다.

 

여러 노드에서의 오차의 역전파

 

이번에는 2개의 출력 노드를 가지는 다음 그림을 보겠습니다.

2개의 출력 노드 모두 오차를 가질 수 있습니다. 특히 우리가 아직 네트워크를 학습시키지 않은 경우에는 거의 무조건 오차를 가지고 있을 것입니다.

 

출력 노드가 여러개 라고해서 변하는것은 아무것도 없습니다.

그저 첫번째 출력 노드에서 했던 작업을 두번째 출력 노드에서 동일하게 반복하면 되는 것입니다.

 

첫 번째 출력 노드의 오차를 e1 이라고 표기

이 오차는 학습데이터 t1 에  의해 제공된 실제 값과 우리가 계산한 출력 값 o1사이의 차이를 의미

다시말해 e1 = t1- o1 입니다.

그리고 두번째 출력 노드에서의 오차는 e2 라고 표기

그림을 자세히 보면 e1 은 w11 과 w21의 가중치 값에 비례해 나뉘어 연결된 노드로 전달됩니다.

이와 유사하게 e2 는 w12 와 w22 의 값에 비례해 나뉩니다.

 

e1 은 w11 과 w21 의 업데이트에 영향을 주게됩니다.

w11 을 업데이트 하기 위해 사용되는 e1 의 일부는 다음과 같이 표현

그리고 w21 을 업데이트하기위해 사용되는 e1의 일부는 다음과 같이 표현될 수 있습니다.

이러한 수식의 의미는 오차 e1 은 나뉘어 전달될 때 작은 가중치를 가지는 연결노드보다 큰 가중치를 가지는 연결 노드에 더 많이 전달된다는 것.

 

으아 잘모르겠다.

 

 

만약에 w11 = 6 이고, w21 = 3 이라는 값을 가진다고하면 w11 은 w21보다 2배 크다.

이때 w11 을 업데이트하기위해 전달되는 오차 e1 의 일부는 6 / (6+3) = 2/3 이 됩니다.

그러면 1/3 이 남는데요 실제로 오차 e1 에서 w21 을 업데이트하기위해 전달되는 부분은 1/3 입니다.

 

만약 가중치가 같다면 1/2씩 전달되게 될 것입니다.

 

 

정리하자면 

오차를 이용해 네트워크 내 매개변수들의 값 (가중치)을 조정해나간다는 사실을 알게되었습니다.

최종 출력 계층으로부터 그 직전 계층으로가는 연결 노드의 가중치를 업데이트하는 방식을 살펴보았는데

여러개 출력 노드가 있는 경우에도 그저 각각의 출력 노드를 개별적으로 처리하면 될 뿐 복잡해질것 전혀 없다는 사실

 

그렇다면 2개 더 많은 계층을 가지는 신경망에서는 어떻게하면 될까?

최종 출력 계층에 인접하는 계층이 아니라 멀리 떨어져있는 계층과 관련된 가중치는 어떻게 업데이트해야할까??

 

다중 계층에서 오차의 역전파

오른쪽 끝의 최종 출력 계층부터 출력계층의 오차를 이용해 출력 계층의 연결된 노드들의 가중치를 업데이트 합니다.

조금 일반화해보면 출력 계층의 오차는 eoutput 으로 , 여기에서의 가중치는 Who 로 표현할 수 있다.

 

새로 추가된 계층에 대해 어떻게하면 좋을지 감을 잡을 수 있다.

은닉 계층의 노드의 출력 값과 관련된 오차를 ehidden 이라고 하고 이 오차를 입력 계층과 은닉 계층을 연결하는 가중치 Wih 에 대해 그 비율에 맞게 나누어주면 되는 것

 

오차의 역전파를 이용해 연결 노드에 대해 나뉜 오차를 재조합해야 합니다.

따라서 은닉 계층의 첫번 째 노드의 오차는 이 은닉 계층에서 다음 계층으로 연결되는 모든 연결 노드에 있는 나뉜 오차들의 합이 됩니다.

 

ehidden1 = 연결 노드 w11 , w12로 나뉘어 전달되는 오차의 합

 

 

첫번 째 노드의 오차 0.8 은 이와 연결된 2개의 가중치 2.0 과 3.0에 비례하여 0.32 와 0.48 로 나뉘어 전달된다

출력계층의 두번째 노드의 오차 0.5는 연결된 2개의 가중치 1.0 과 4.0 에 비례하여 각각 0.1 과 0.4로 나뉜다.

 

은닉계층 첫번째 노드의 오차는 0.32와 0.1의 합인 0.42가 되고 두번째 노드의 오차는 0.48과 0.4의 합인 0.88이 된다.

 

인공신경망에서 학습이란 연결 노드의 가중치를 업데이트하는 과정을 의미

가중치 의 업데이트는 오차에 의해 주도되는데 오차는 학습데이터로부터 주어진 정답과 출력값 간의 차이를 의미

출력 노드의 오차는 실제 값(정답) 과 출력값 사이의 차이를 말한다.

중간계층에 존재하는 노드들의 오차는 명백하지 않고, 한가지 접근 방법은 출력 계층의 노드들의 오차를 이와 연결된 가중치의 크기에 비례해 나눠서 역전파하고 이를 재조합하는 방법입니다.

 

행렬곱을 이용한 오차의 역전파

오차의 역전파를 행렬곱으로 간결하게 만들 수 있는지 보기위해 단계별로 기호를 이용해 적어보자

행렬곱으로 표현하는 방식을 벡터화한다 (Vectorize)

 

모든 역전파는 행렬로 표현이 된다 우와~ 신기하다.

 

이 행렬을 보다 간결하게 행렬곱으로 다시 쓸 수 있다면 좋을 것같습니다. 마치 전파법을 본것처럼

안타깝게 전파법에서 봤던 수준으로 간결하게 이행렬을 다시 쓸 수 없다.

 

위 수식을 다시봅시다. 

이수식에서 핵심은 출력오차인 en 과 가중치 wij의 곱셈 연산입니다.

가중치가 크면 클 수록 많은 출력 오차가 은닉 계층으로 돌아오게됩니다.

이것이 핵심입니다.

분수에서 분모 부분을 일종의 정규화 인자 (normalizing factor) 라고 할 수 있습니다.

만약 이 정규화 인자를 무시한다고해도 우리는 되돌아오는 오차의 일정 비율 정도를 잃을 뿐입니다.

따라서

아래와 같이 간결하게 표현해도 됩니다.

우측상단의 가중치와 좌측하단의 가중치가 바뀌어있습니다.

아처럼 행렬의 행과 열을 바꾸는 것을 전치 (transpose) 라고합니다.

행렬W 의 전치행렬의 기호로는 

 

 

라고 표기합니다.

 

역전파를 행렬로 간결하게 표현할 수 있게 됩니다.

 

오차의 역전파를 행렬곱으로 표현할 수 있다.

오차의 역전파를 행렬곱으로 표현함으로써 우리는 네트워크 크기에 상관없이 이를 간결하게 표현할 수 있으며,

컴퓨터로 효율적이고 빠르게 업무처리를 할 수 있다.

전파법과 역전파 행렬곱을 통해 효율적으로 처리할 수 있다는 사실을 알게 되었다.

반응형