최적화 알고리즘 Adagrad 에 대해 보겠습니다. Adaptive Gradient 의 준말로 Adagrad라고 부릅니다. Adagrad는 무엇일까요? 바로 최적화 알고리즘인데요. 어떤 식으로 작동할까요? 찬찬히 알아보도록 하겠습니다.
Adagrad 왜?
Adagrad 는 왜 사용할까요? gradient descent 알고리즘을 사용하면 방향 별로 learning rate 가 동일합니다. 그렇게 되면 빠른 방향으로는 더 빠르게 가고 느린 곳은 더 느리게 갑니다. 그렇게 되면 학습의 불균형이 생기죠. 방향 별로 learning rate 를 다르게 하는 방법이 바로 Adagrad 입니다.
Adagrad 방법
$J$를 우리가 최적화 하고자 하는 loss입니다. 그리고 우리의 parameter는 $\mathbf{w} = (w_1,…,w_n)$는 입니다.
Adagrad의 방법은 아래와 같습니다.
$$G_k(n) = G_k(n-1) + \left(\frac{\partial J}{\partial w_k}(\theta(n)) \right)$$
$$ w_k(n+1) = w_k(n) – \frac{\mu}{\sqrt{G_k(n) + \epsilon}}(\frac{\partial J}{\partial w_k})$$
$$\mu: \text{learning rate}, \epsilon > 0 $$
$w_k$를 $k$별로 다르게 줍니다. gradient $\frac{\partial J}{\partial w_k}$가 가지고 있는 에너지$\left(\frac{\partial J}{\partial w_k}\right)^2$에 따라 업데이트 한다고 보면 됩니다. 에너지가 크다면(많이 움직였다면) 보폭을 줄여주고 에너지가 작다면(적게 움직였다면) 보폭을 늘려줍니다.