最小化经验风险为代价函数在训练集上的平均:
Require: \alpha_k : 第k轮学习率
Require: 初始化参数w
while 未达到条件 do
mini-batch
计算梯度:$g=\frac{1}{m}\triangledown_wL(f(x^i;w),y^i)$
更新:
end while
重要的一点就是指数的加权平均,添加速度v
仅仅是在计算梯度直接更新w参数
Require: \alpha_k : 第k轮学习率,动量参数$\beta$
Require: 初始化参数w, 速度v
while 未达到条件 do
mini-batch
$w=w+\beta{v}$ //重要部分
计算梯度:$g=\frac{1}{m}\triangledown_wL(f(x^i;w),y^i)$
$v = \beta{v} + (1-\beta)g$ 指数加权
更新:
end while
属于自适应算法,随着学习的轮数自动的更改学习率,Adagrad的算法是累计梯度的平方和从而更改学习率。
Require: 全局学习率$\alpha$,初始化参数w
Require:
Require: r = 0 : 累计梯度平方和
while 未达到条件 do
mini-batch
计算梯度:$g=\frac{1}{m}\triangledown_wL(f(x^i;w),y^i)$
$r=r+g.g$
$\triangledown{w}=-\frac{\alpha}{\sqrt{r}+\delta}.g$
更新$w=w-\triangledown{w}$
end while
Adagrad算法对凸优化算法有较好的解决,但实验证明对于深度网络而言,从开始累计梯度平方会导致学习率过低或过量减少,从而后期优化效果较差。为了解决这个问题,可以保留近期的梯度,而遗忘较远的梯度,因此就有了RMSProp
adam可以看做是对Momentum和RMSProp的合体,进行了一阶和二阶的整合
Require: 学习率
Require: 矩估计衰减率 p_1(0.9), p_2(0.999)
Require: 初始化参数w, 一阶矩和二阶矩变量s=0,r=0,轮数t=0
while 为满足条件 do
mini-batch
计算梯度:$g=\frac{1}{m}\triangledown_wL(f(x^i;w),y^i)$
t=t+1
更新有偏一阶矩:
更新有偏二阶矩:
修正一阶矩:
修正二阶矩:
$\triangledown{w}=-\alpha\frac{s}{\sqrt{r}+
\delta}$
$w=w+\triangledown{w}$
end while