티스토리 뷰
- Batch Gradient Descent
- Stochastic Gradient Descent
- Mini-batch Gradient Descent
$$ \large \begin{matrix} \\ \vec p_{t+1} = \vec p_t - \lambda \nabla E(\vec p_t) \tag {1} \end{matrix} \\ \\ \lambda \text{ : learning rate } $$
우선 Batch 경우는 $\vec p_{t+1}$ 업데이트를 할때 주어진 학습 데이터를 전부 사용하여 진행하기 때문에 방향에 대해서는 정확할 수 있지만, 계산량 면에서는 너무 많을 수 있습니다. 다음 경우로 Stochastic 경우는 하나의 데이터 $( x_i , y_i )$ 를 이용하여 업데이트를 진행하기 때문에 속도면에서는 빠를 순 있지만, 정확하지 않을 수도 있습니다. 따라서 현재 가장 많이 사용하는 Mini-Batch 는 전체 학습 데이터 중 임의로 N 개의 sample을 추려서 N 개의 데이터를 통해 업데이틀 진행하기 때문에, Batch 와 Stochastic 을 합쳐 놓았다고 생각 하시면 될 것 같아요.
제가 사용할 예제는 학습 데이터가 많지 않기 때문에 Batch Gradient Descent 위주로 설명하면서 진행하도록 할께요.
Gradient Descent Algorithm 종류
- Naive Gradient Descent
- Momentum
- Nestrov Gradient
- Adagrad
- Adadelta
- RMSprop
- Adam
Naive Gradient Descent
: 식 1로 정의가 됩니다.
Momentum
관성이라는 말이 딱 들어 맞을 것 같습니다. 이전 업데이트에서 parameter 값이 최적화를 통해 가고 있는 방향에 대해서, 즉 이전 업데이트시 가고 있는 방향에 대한 가중치를 주면서, 진행하는 방식입니다. 느낌이 와닿지 않으면, 관성이란 말을 까먹으시면 안됩니다. 제가 지금 전력으로 달리다가 갑자기 뒤로 돌면, 달리던 방향으로 넘어가겠죠..?
$$ \large \begin{matrix} \vec m_t &=& \gamma \vec m_{t-1} + \nabla E(\vec p_t) \\ \vec p_{t+1} &=& \vec p_t - \vec m_t \tag {2} \end{matrix} \\ \\ \\ \gamma \text{ : momentum rate } $$
import numpy as np
import numdifftools as nd
import matplotlib.pyplot as plt
def optimizer_momentum(xdata,ydata,learning_rate,max_iter,momentum=0.9):
# implementation moment gradient
동일한 learning rate 로 Gradient descent 와 momentum 결과를 살펴 볼까요? 아래 그림을 보시면, momentum 알고리즘을 왜 사용해야 되는지 알 수 있어요, 단순한 gradient descent 보다 수렴속도가 엄청나네요!!
< Gradient Descent : iteration >
< Momentum : iteration >
Adagrad ( Adaptive Gradient )
- 업데이트 컨셉을 많이 최적화 된 parameter 는 learning rate 를 줄이고 최적화가 덜 된 parameter 들은 learning rate 를 더 높게 가져가 보는건 어떨 까요?, 최적화가 많이 되고 안되었다는 기준은 무엇인지 고민할 필요가 있어 보이네요,, 파라미터가 초기값에서 많이 변했다면 ,이 값은 최적화가 더 되었다고 생각해보는 컨셉이 Adagrad 의 핵심 입니다. 아래 수식을 보면 parameter 마다 learning rate 이 다르다는 것이 보이시죠? 한가지 아쉬운 점이 있다면 $g_1 , g_2, \cdots , g_m $ 값이 항상 커지는 방향이라는 거죠,, 한 번 이를 통해서 학습을 진행 해보도록 하겠습니다.
$$ \large \begin{matrix}\ \vec g_t &=& \vec g_{t-1} + \nabla E(\vec p_t) \odot \nabla E(\vec p_t) &=& \begin{bmatrix} g_1 \\ g_2 \\ \vdots \\ g_m \end{bmatrix}\\ \\ \\ \vec p_{t+1} &=& \vec p_t - { \lambda \over \sqrt{ \vec g_t + \epsilon } } \odot \nabla E(\vec p_t) &=& \vec p_t - \lambda \begin{bmatrix} { 1 \over \sqrt {g_1 + \epsilon } } \\ {1 \over \sqrt {g_2 + \epsilon } } \\ \vdots \\ {1 \over \sqrt {g_m + \epsilon } } \end{bmatrix} \odot \nabla E(\vec p_t) \end{matrix} \\ \\ \\ \odot \text{ : element wise multiplication } \quad \lambda \text{ : learning rate} \quad \epsilon \ : \ 10^{-4} \sim 10^{-8} $$
'머신러닝 > 기초' 카테고리의 다른 글
[ 기본 ] Neural network - feed forward (0) | 2017.06.30 |
---|---|
[ 과제 2 ] Gauss-Newton Method (0) | 2017.06.24 |
[ 과제 1 ] Gradient Descent (0) | 2017.06.16 |
행렬 연산 (Matrix C) (0) | 2017.05.08 |
선형회귀(linear regression)-최소자승법 (0) | 2017.04.26 |
- Total
- Today
- Yesterday
- Digital watermarking
- 캡처방지
- flask serving
- implementation
- keras
- Residual Block
- tensorflow serving
- 네이버웹툰
- SvD
- numpy
- backpropagation
- gPRC
- dct
- DWT-DCT
- DW
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |