파이썬 이것저것/파이썬 딥러닝 관련

[Python] 딥러닝 모델의 학습 방법

agingcurve 2022. 7. 14. 09:57
반응형

딥러닝 모델의 구성요소

각 노드가 있고, 노드는 x1, x2 등 각 차원의 값을 노드들이 표현하고 있다고 봄 다음 노드로 갈때, weight 값들이 곱해져서 각각을 곱하고 더하는 가중합을 실시

각각 레이어에 있는 가중치 계산을 해서 나오는 레이어들을 말한다.

딥러닝은 Loss function을 최소화하기 위해 최적화 알고리즘을 적용한다.

 

loss function


input과 output이 연결되는 화살표들의 의미 하고 있는게 weight값 이다. input을줄 때, 실제값이 1인데  이것을 4라고 할때,
이를 오차값이라고 한다.

개념적으로 볼때, x,y 가 있을때, 이를 선형으로 표현하고, 이를 실제 값과 예측값의 차이를 오차값이라 부르며 이를 loss값으로 쓸 수 있다.
잘 못 예측 했을때, 높은 loss값을 좋지 않기 때문에 loss값의 최소값을 찾는게 중요한 문제인데, 뉴럴 네트워크에서는 이 w 값이 어떤값을 가지는지, 예를 들어 w값이 1.1 인지 0.3 인지에 따라값이 달라지므로 가장 적합한 w값을 찾는게
머신러닝, 딥러닝의 가장 중요한 역할임

 

 

예측값과 실제값 간의 오차값을 최소화 하기위해 오차값을 최소화 하는 모델의 인자를 찾는 알고리즘을 적용한다

 

가장 기본적인 최적화 알고리즘 Gradient Descent (GD)

 

loss 값을 알 수 있따면 좋겠지만 사전에 알 수 없다.

지금 찾은 loss가 weight값이 왼쪽 또는 오른쪽으로 갔을때 아는 방법은 내가 갖고있는 weight의 기울기를 보면 알 수 있다.
이러한 기울기가 loss가 낮아지는 방향으로 갈 수 있게 loss를 줄이고자 하는게 Gradient Descent 이다.

 

딥러닝에서는 역전파(Backproapgtaion)을 통해 각 자중치들의 기울기를 구할 수 있음

딥러닝에는 역전파를 통해 각 가중치를 수정하여 사용함

 

순전파
역전파

순전파는 Input 에서 Output으로 행하고, 이를 다 안다고 생각하고, 각 다음 레이어의 노드 값을 계산하고 지속적으로 계산하다보면 Output 값으로 도달하게 됨

역전파는 내가 원하는 데이터 값에서 이게 0이 나와야 된다면0.7로 나온다고 할 때, 이 값을 줄이려고 할때 이전 레이어 값들이 어떻게 되야 마지막 output값이 0이 되는지 역으로 이를 실시하는 것임
즉 이들의 변수들을 Input 방향으로 지속적으로 갱신하게 된다.

 

 

계산 방법

- 모든 가중치 w에 대해서 역전파를 통해 업데이트를 실시한다. bias b는 고려하지 않는다.

 

순전파

 - 입력층에서 은닉층 방향으로 향하며 가중치를 곱하게 된다.

 - z1과 z2는 각각의 은닉층 뉴런에서 시그모이드 함수를 지나서 리턴하는 은닉층 뉴런의 최종 출력값이다.

- h1과 h2이 두값은 다시 출력층의 뉴런으로 향하게 되는데, 각각의 값에 해당되는 가중치와 곱해지고 다시 가중합이 되어 출력층의 뉴런 시그모이드 함수의 입력값이 됨

z3, z4이 출력층 뉴런에서 시그모이드 함수를 지난 값은 인공신경망이 최종적으로 계산한 출력값임

이 출력값을 통해 예측값과 실제값의 오차를 계산하기 위한 오차함수를 선택하고, 각 오차를 모두 더하면 오차 E_total이 만들어짐 (loss는 MSE사용)

 

 

역전파

 - 역전파는 반대로 출력층에서 입력층으로 계산하면서 가중치를 업데이트 함, 출력층 바로 이전의 은닉층을 N층 이라 할때, 출력층과 N층 사이의 가중치를 업데이트 하는것을 1단계, 그리고 N층과 N층 사이의 가중치를 업데이트 하는 것을 2단계라고 한다. 노드는 8개가 있다고 가정하고 실시(w1,w2,w3,w4 입력층 근처, w5,w6,w7,w8 출력층 근처)

 

 

- 역전파 1단계에서 업데이트 해야할 가중치가 w5,w6,w7,w8 총 4개라고 할때, w5 먼저 가중치 업데이트를 위해 E_total/w5 를 계산해야 한다. 이것을 계산하기 위해서 미분의 연쇄 법칙 (Chain rule)에 따라 아래와 같이 풀어 쓸 수 있다.

각 항을 순서대로 계산해보면

o1 이라는 값은 시그모이드 함수의 출력값이다. 글너데 시그모이드 함수의 미분은 f(x) * (1-f(x))이다.

이 값을 모두 곱해주면 됨

 

이를 이용하여 경사 하강법의 가중치를 업데이트 한다.

 

동일한 원리로 w6, w7, w8도 계산이 가능하다.

 

- 역전파 2단계에서는 이제 입력층 방향으로 이동하며 계산을 이어간다. w1, w2, w3, w4 가중치를 업데이트 한다.

- w1을 먼저 보면 동일하게 미분의 연쇄 법칙에 따라 

 

첫번째 항 에 대해서 항을 분해 및 계산하면

이와 같은 원리로 E02 / h1 또한 구한다.

경사 하강법을 통해 가중치를 업데이트 하면

이를 나머지 w2, w3, w4에 적용하면

이를 통해 업데이트를 진행하게 되면, 1번의 역전파로 오차가 감소하게 되는 과정을 거치게 된다.