下面分别给出Adagrad、Adadelta和Adam算法的更新公式:
1. **Adagrad**(自适应梯度算法):
Adagrad是一种自适应学习率的优化算法,它会根据参数的历史梯度调整学习率,使得稀疏梯度的参数可以具有更大的学习率,而常见梯度的参数则会有较小的学习率。
Adagrad的更新公式如下:
\[
\theta_{t+1,i} = \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,ii} + \epsilon}} \cdot g_{t,i}
\]
其中:
- \(\theta_{t,i}\) 是第 \(t\) 次迭代时参数 \(i\) 的值;
- \(g_{t,i}\) 是第 \(t\) 次迭代时参数 \(i\) 的梯度;
- \(G_{t,ii}\) 是前 \(t\) 次迭代时参数 \(i\) 的梯度的平方和的累积;
- \(\eta\) 是学习率;
- \(\epsilon\) 是为了避免除以零而添加的一个小的常数(通常取 \(10^{-8}\))。
2. **Adadelta**:
Adadelta是Adagrad的一种变体,它解决了Adagrad学习率过早衰减的问题,并且不需要手动设置全局学习率。
Adadelta的更新公式如下:
\[
\Delta \theta_{t} = -\frac{\sqrt{E[g^2]_{t-1} + \epsilon}}{\sqrt{E[\Delta \theta^2]_{t-1} + \epsilon}} \cdot g_t
\]
\[
\theta_{t+1} = \theta_{t} + \Delta \theta_{t}
\]
其中:
- \(g_t\) 是第 \(t\) 次迭代时的梯度;
- \(E[g^2]_{t-1}\) 是梯度平方的指数加权平均;
- \(E[\Delta \theta^2]_{t-1}\) 是参数变化量平方的指数加权平均;
- \(\epsilon\) 是为了数值稳定性而添加的一个小的常数。
3. **Adam**(Adaptive Moment Estimation):
Adam是一种结合了动量和自适应学习率的优化算法,它可以自适应地调整每个参数的学习率,并且具有动量的加速作用。
Adam的更新公式如下:
\[
m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t
\]
\[
v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2
\]
\[
\hat{m}_t = \frac{m_t}{1 - \beta_1^t}
\]
\[
\hat{v}_t = \frac{v_t}{1 - \beta_2^t}
\]
\[
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \cdot \hat{m}_t
\]
其中:
- \(m_t\) 是第 \(t\) 次迭代时的一阶矩(梯度的指数加权平均);
- \(v_t\) 是第 \(t\) 次迭代时的二阶矩(梯度平方的指数加权平均);
- \(\beta_1\) 和 \(\beta_2\) 是指数加权平均的衰减率;
- \(\hat{m}_t\) 和 \(\hat{v}_t\) 是对一阶矩和二阶矩的修正项;
- \(\eta\) 是学习率;
- \(\epsilon\) 是为了数值稳定性而添加的一个小的常数。
这些算法都是用于训练深度学习模型时常用的优化算法,具有不同的优缺点适用于不同的场景。