---
# System prepended metadata

title: Gradient Descent Optimization Algorithms
tags: [論文、部落格]

---

Gradient Descent Optimization Algorithms
===

###### tags: `論文、部落格`

## 參考資料
* [機器/深度學習-基礎數學(三):梯度最佳解相關算法(gradient descent optimization algorithms)](https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E6%95%B8%E5%AD%B8-%E4%B8%89-%E6%A2%AF%E5%BA%A6%E6%9C%80%E4%BD%B3%E8%A7%A3%E7%9B%B8%E9%97%9C%E7%AE%97%E6%B3%95-gradient-descent-optimization-algorithms-b61ed1478bd7)

## Gradient Descent(GD)
原始的 Gradient Descent，Gradient g 是用 Loss 對參數做偏微分算出來的。下面的 f() 就是把 Loss 對參數做偏微分的過程。
\begin{equation}
w^{(t+1)}=w^t-η*g^t
\end{equation}

\begin{equation}
g_t = f(w^t)
\end{equation}

```python=
x = x - lr * g
```

## Stochastic Gradient Descent(SGD)
把 Training Data 分成很多 Mini-batch，每算完一個 Mini-batch 的 Gradient 就更新一次；或是算完全部 Mini-batch 的 Gradient，平均後更新一次。

## Momentum
會考慮之前的 Gradient，所以如果之前 Gradient 是負的，而這次是正的，就會達到緩衝的效果。m 通常等於 0.9。

\begin{equation}
    v^{(t)} = \begin{cases}
    η*g_t,\ t=0\\
    mv^{(t-1)}+η*g^{(t)},\ t>=1
    \end{cases}%
\end{equation}

\begin{equation}
w^{(t+1)}=w^{(t)}-v^{(t)}
\end{equation}


## Adagrad (Adative Gradient)
調整 Learning Rate，一開始用比較大，越後面越小，避免 Local Minimum。每次都會除以歷屆 Gradient 的平方和開根號，ε 通常等於 1e-7，避免分母為 0。

\begin{equation}
w^{(t+1)}_i = w^{(t)} - \dfrac{η}{\sqrt{\sum_{t'=1}^{t}g_{t',1}^2} + ε} * g_{t,1}
\end{equation}


## RMSProp
由於擔心 Adagrad 對 Learning Rate 的修正過大，所以改用 Gradient 平方的平均值，ρ 通常等於 0.9。

\begin{equation}
w^{(t+1)}_i = w^{(t)} - \dfrac{η}{\sqrt{\sum_{t'=1}^{t}ρE(g_i^2)_{t-1} + (1-ρ)g^2_{t,i}} + ε} * g_{t',1}
\end{equation}


## Adam (Adaptive Moment Estimation)
Momentum + RMSprop，所以可以同時考慮以前的 Gradient 和調整 Learning Rate。m、v 是初始為 0 的向量，β1 通常等於 0.9，β2 通常等於 0.999。

\begin{equation}
m_t = β_1*m_{t-1} + (1-β_1) * g_t
\end{equation}

\begin{equation}
v_t = β_2*v_{t-1} + (1-β_2) * g_t^2
\end{equation}

\begin{equation}
\hat{m}_t = \dfrac{m_t}{1-β_1^{t}}
\end{equation}

\begin{equation}
\hat{v}_t = \dfrac{v_t}{1-β_2^{t}}
\end{equation}

\begin{equation}
w^{(t+1)}=w^{(t)} - \dfrac{η}{\sqrt{\hat{v_t}} + ε} * \hat{m_t}
\end{equation}