neural network에서 에러를 줄이기 위해 지속적으로 weight와 bias를 학습한다.
이 전 글에서 weight를 optimizing 하는 방법으로 backpropagation 을 사용한다고 했다.
backpropagation을 하기 전에 weight와 bias를 어떻게 조절하는지 알아보겠다.
그 방법으로 gradient descent algorithm을 사용한다고 한다.
여기서 gradient descent algorithm은 자세히 다루지 않겠다.
inputs이 들어오고 weight와 bias 연산을 거쳐서 ouput이 나오게 된다.
우리는 알고있는 Desired 값과 Guessed 값을 비교해서 에러를 찾는다.
*Desired 값: 이미 우리가 알고 있는 값 (나와야 하는 값)
*Guessed 값: NN를 통해 나온 값 (만약 두 값의 차가 0이면 정확하게 예측한 것이다. )
목표는 에러값을 줄이는 것이다.
이런 것을 수학적으로 말하면 수학 함수의 최적화 또는 에너지 최소화 문제 라고 한다.
낭비되는 값(?) 이런식의 느낌으로 cost function 을 optimization하는 것이다.
그렇다면 NN에서 우리의 함수가 얼마나 목표에 잘 적합한지 Cost function을 정의해보면
이라고 할 수 있다.
w - NN에 관여하는 모든 weights
b - layers의 biases
n - 전체 inputs 의 수
a - x의 input이 들어왔을 때, 우리가 원하는 목표 output
y(x) - output
식에서 ||v|| 의 사용은 벡터의 길이로 보기 위해서 사용한다.
아래에 벡터의 사이즈나 길이를 구하는 방법이다.
함수 C를 quadratic cost function 이라고 할텐데
우리가 알고 있는 유효성을 측정하는 mean squared error (MSE)를 통해, 예측의 정확도를 측정하는 것이다.
C(w, b)는 음수가 나올 수 없고, 점점 작아진다. C(w, b)가 0에 가까운 값으로 간다. 그렇게되면 y(x) 는 우리가 Desired한 a값과 같아지게 되는 것이다.
그렇게 때문에 좋은 트레이닝 알고리즘이 되기 위해서는 C(w, b)가 0에 가까워야 한다.
그리서 우리의 목표는 cost function C(w, b)를 최소화 시키는 것이다.
최적의 weight와 bias값을 찾아 C함수를 가장 작게 만들어야 한다. 이때 gradient descent 알고리즘을 사용해서 할 수 있다.
간단하게 gradient descent 알고리즘을 살펴보면 미분을 사용해서 local minimum을 찾아내는 것이다.
예를 들어 C(v)함수가 있다고 하겠다. 다양한 변수를 가지고 있고 v = v1, v2, ... (w1, w2, ..) 등으로 나타낸다고 가정하겠다.
두 변수 v1, v2의 최소가 되는 C(v)함수를 계산해보면
C의 그라디언트는 가 된다.
각 변수에 일차 편미분한 값으로 구성되어 있는데 이것은 벡터의 크기정도를 나타낸다.
그림으로 보면 위와 같은 그래프에서 가장 아래 있는 local minimum 장소를 찾아 가는 것이다.
위 그림에서 보라색 점처럼 점진적으로 최소가 되는 곳을 찾아가는 방법을 식으로 보면
먼저
(1) C의 변화크기는 미분함수와 v값들의 변화를 곱한 것과 거의 비슷하다고 할 수 있다.
라고 할 수 있기 때문이다.
(2)는 learning rate로 작은 값이다. 알고리즘의 수렴 속도를 조절하는 파라미너라고 할 수 있다. 양수 값인데 gradient descent search 의 step size를 나타낸다.
음수인 이유는 우리는 v값(vectors)을 decreases(감소)한 방향으로 옮기고 싶기 때문이다.
정리하면
(2.1)에 (0)의 식을 넣어 계산하면 (2.2)가 나온다.
v를 w으로 바꾸면 (2.3)이 되는 것을 알 수 있다.
곧 최적의 weight와 bias값을 찾아 C함수를 가장 작게 만드는 것은
기존 weight에 계산된 weight값을 더해 이것을 반복하는 것이다.
계산된 weight는 (2.3)으로 나타낼 수 있는데
t - 타겟 Desired output
o - 퍼셉트론으로 나온 Guessed output
t에서 o를 뺀 값에 learning rate와 input을 곱한 값이다.
이 알고리즘으로 single local minimum을 찾을 수 잇다.
만약 learning rate가 크면 gradient descent search는 overstepping 될 수 있기 때문에 점자적으로 작은 value로 한다고 한다.
'IT > [Everyday]Coding' 카테고리의 다른 글
랜덤 포레스트 Random Forests (1) | 2014.12.22 |
---|---|
gradient descent 와 stochastic gradient descent 차이 (0) | 2014.12.19 |
딥러닝_Neural Network_멀티 퍼셉트론 (0) | 2014.12.19 |
딥러닝_Neural Network_퍼셉트론3 (0) | 2014.12.19 |
딥러닝_Neural Network_퍼셉트론2 (1) | 2014.12.19 |