딥러닝:수치예측
틀:딥러닝이론 딥러닝을 위한 자료. 이론에 대해 다룬다.
개요[편집 | 원본 편집]
선형회귀라고도 한다. 데이터가 나타나는 함수 형태를 찾아내려는 시도.
전략[편집 | 원본 편집]
경사하강법.
모델의 기울기를 조금씩 조정하는 최적화 알고리즘이다. y_predict=wx+b에서, 임의로 w,b를 정한 후, 샘플을 하나 선택하여 y를 계산한다. 이 계산값과 실제값을 비교하고, 둘이 가까워지게끔 w,b를 조절한다. 모든 샘플을 처리할 때까지 이 과정을 진행한다.
오차역전파법.
자, 그렇다면 어떻게 조정할 것인가? 일단 값이 잘 안맞을 때, 정해진 만큼 w값을 조절한 후, 새로 만들어진 모델이 더 잘 예측하는지 살펴본다. 가중치 w,b를 업데이트 하려면 어떻게 하면 좋을까?
얼마나 변화시킬지에 대해 예상함수와 실제함수의 차이가 크면 크게 변화시키고, 작으면 작게 변화시키는 방법이 좋을 듯하다. 따라서 변화량의 분자엔 예상함수와 실제값의 차이가 포함되어 있어야 할 것이다. 분모는 대충 넣으면 될 듯하고... 그냥 각각 임의의 변화율에 오차를 곱하면 되리라 생각된다.
에포크.
그런데, 그냥 생각해봐도 데이터가 나오는 순서에 따라 결과가 달라지리라 예상 가능하다. 하여, 모든 데이터를 사용하여 학습을 시키되, 이 방법을 많이 반복하는 전략을 사용한다. 모든 데이터를 사용하여 교육을 마친 것을 1에포크라 한다. 경우에 따라 수천번의 에포크를 거치기도 한다. 다음과 같은 형태로 100에포크를 학습한다.
for i in range(1,100):
for x_i, y_i in 자료(x,y):
예상=x_i * w + b
err=y_i-예상#실제값과의 차이
가중치#전략에 따라 가중치를 구한다.
w=w+가중치 * err
b=b+1 +err
손실함수(비용함수, 목적함수)
손실함수란, 오차에 대한 함수를 의미한다. 그리고 이 손실함수를 최소로 만들 수 있을 때 적당한 모델을 찾았다고 말할 수 있게 될 것이다. 이 손실함수를 각 가중치에 대해 미분하면 가중치가 어느 방향으로 변해야 손실함수가 감소할지 찾아낼 수 있다.
제곱오차 sequared error
모델에 대한 오차를 합해 단순 평균을 찾아내면 어떤 형태의 방정식이든 거의 0에 수렴하고 만다. 오차의 정확한 진단을 하려면 분산을 구하듯 오차^2를 해야 한다. 이를 통해 함수가 실제값을 제대로 예측하는가 여부를 살필 수 있다.
제곱오차함수의 최소값을 찾기 위해선 함수의 기울기에 따라 그 값이 낮아지는 쪽으로 이동시켜야 한다. 오차제곱을 가중치에 대하여 미분해 보자. 손실함수 SE를 미분한다.
<math>{\partial SE\over\partial w}={\partial \over\partial w}*(y-y\hat)^2=2(y-y\hat){-{\partial y\hat\over\partial w}}=2(y-y\hat)(-x)=-2(y-y\hat)x</math> 결국 이 값을 기존의 w에 더해주면 업데이트가 가능하다.
뉴런 구현해보기[편집 | 원본 편집]
뉴런 클래스를 만들어 보자.
__init__(self): 를 통해 가중치의 값을 설정하고, 예상함수를 forpass(self, x): 형태로 만들어 예상값을 반환한다.
그리고 오차를 계산하여 가중치 값에 변화를 주기 위한 backpropagation(self, x, err): 를 만든다.
그리고 훈련을 위한 fit 함수를 만들어 가중치를 업데이트 한다.[1]
- ↑ Do it! 정직하게 코딩하며 배우는 딥러닝 입문. 74p