在线优化算法
OGD
直接截取把权重绝对值小于ø的权重直接取0
$$
W_{t+1}=W_t-\eta_tL(W_t) \
\eta:学习率 \
\eta_t=\frac {1}{\sqrt t} \
L(W_t):W_t的梯度 \
W_{t+1}=\begin{cases}
0, & \text|W_t- \eta_tL(W_t)|<\theta \
W_i- \eta_tL(W_t), & \text{out}
\end{cases}
$$
TG
改进了OGD,增加了一个α参数,使大于α和小于ø的权重按比例缩小,小于α的取0
$$
W_{t+1}=\begin{cases}
W_i- \eta_tL(W_t)+ \alpha, & \text -\theta<W_i- \eta_tL(W_t)<-\alpha \
0, & \text-\alpha<|W_i- \eta_tL(W_t)|<\alpha \
W_i- \eta_tL(W_t)- \alpha, & \text \ \theta<W_i- \eta_tL(W_t)<\alpha \
W_i- \eta_tL(W_t), & \text{out}
\end{cases} \
\alpha=\eta g,g为重力因子
$$
FOBOS
$$
W_{t+\frac {1}{2}}=W_t-\eta_tL(W_t) \
W_{t+1} = \mathop {argmin}{W}{\frac {1}{2}||W-W{t+\frac {1}{2}}||^2+\eta_{t+\frac {1}{2}}\Psi(W)}\
\Psi(W)为正则项
$$
第一个公式为正常的梯度下降,第二个公式得到越靠近$W_{t+\frac {1}{2}}$的同时保存W为一个偏小的值
把L1正则项进去可以推导出如下结果
$$
W_{t+1}=\begin{cases}
0, & \text|W_i- \eta_tL(W_t)|<\eta_{t+\frac {1}{2}}\lambda \
W_i- \eta_tL(W_t)-\eta_{t+\frac {1}{2}}\lambda sgn(W_i- \eta_tL(W_t)), & \text{out}
\end{cases}
$$
缺点随着次数越来越多,能沟满足取到0的值会越来越少
RDA
上面三种算法都是用到了当前次的梯度,这里引入了累计梯度平均,而且截断是一个固定值不会因为随着次数t上升,使得截断要求越来越困难
$$
求出当前梯度:G_t=L(W_t) \
计算历史平均梯度:\overline G_t=\frac {1}{t} \sum_{r=1}^{t}G_r \
W_{t+1}=\mathop {argmin}{W} {\frac {1}{2}||W-W{t+\frac {1}{2}}||^2+\Psi(W)} \
\Psi(W)=\lambda||W||_1+\frac {\sigma}{2}||W||2^2 \
\sigma 和 \lambda 为正则化参数
$$
化简单可得
$$
W{t+1}=\begin{cases}
0, & \text|\overline G_t|<\lambda \
-\frac {1}{\sigma}(\overline G_t-\lambda sgn(\overline G_t)), & \text{out}
\end{cases}
$$
FTRL
结合FOBOS(精度)和RDA(稀疏)的优点的算法,结合随机梯度下降的精度
Follow The Regularized Leader
- 一种获得稀疏模型并且防止过拟合的优化方法
$$
求出当前梯度:G_t=L(W_t) \
计算累计梯度:G_{1:t}=\frac {1}{t} \sum_{r=1}^{t}G_r \
W_{t+1}=\mathop {argmin}{W} {G{1:t}*W+\frac {1}{2}\sum_{s=1}^{t}\sigma_s||W-W_{s}||^2+\Psi(W)} \
\Psi(W)=\lambda||W||_1 \
$$
化简可得
$$
W_{t+1}=\begin{cases}
0, & \text|z_t|<\lambda \
-\eta_t(z_t-\lambda_1 sgn(z_t)), & \text{out}
\end{cases}\
\eta_t=(\frac {\beta+\sqrt {n_1}}{\alpha}+\lambda_2)^{-1} \
z_t=G_{1:t}-\sum_{s=1}^t\sigma_sW_s
$$
结果和RDA的公式很像,截断的阈值也不会随着迭代次数的增加而减少,而且z_t再次化简像梯度下降,也具有比较强的精度性
$$
z_t=G_{1:t-1}+G_t-\sum_{s=1}^t\sigma_sW_s=G_{1:t-1}-(\sum_{s=1}^t\sigma_sW_s-G_t)
$$
使用
TensorFlow使用
1 | module=tf.estimator.LinearClassifier(feature_columns=feature_cl, |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com