您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:深度学习优化函数详解(6)-- adagrad

51自学网 2020-09-23 14:19:53
  python
这篇教程深度学习优化函数详解(6)-- adagrad写得很实用,希望能帮到您。

深度学习优化函数详解(6)-- adagrad

 

深度学习优化函数详解系列目录

本系列课程代码,欢迎star:
https://github.com/tsycnh/mlbasic

深度学习优化函数详解(0)-- 线性回归问题
深度学习优化函数详解(1)-- Gradient Descent 梯度下降法
深度学习优化函数详解(2)-- SGD 随机梯度下降
深度学习优化函数详解(3)-- mini-batch SGD 小批量随机梯度下降
深度学习优化函数详解(4)-- momentum 动量法
深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG)
深度学习优化函数详解(6)-- adagrad

前面的一系列文章的优化算法有一个共同的特点,就是对于每一个参数都用相同的学习率进行更新。但是在实际应用中各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。
adagrad方法是将每一个参数的每一次迭代的梯度取平方累加再开方,用基础学习率除以这个数,来做学习率的动态更新。这个比较简单,直接上公式。

公式推导

\nabla_{\theta_i} J(\theta)∇θi​​J(θ) 表示第 ii 个参数的梯度,对于经典的SGD优化函数我们可以这样表示
\theta_{i\_new}=\theta_i - \eta\nabla_{\theta_i} J(\theta)θi_new​=θi​−η∇θi​​J(θ)
adagrad这样表示
\theta_{i,t+1}=\theta_{i,t}- \frac{\eta}{\sqrt{G_{i,t}+\epsilon}}\nabla_{\theta_{i,t}} J(\theta)θi,t+1​=θi,t​−Gi,t​+ϵ​η​∇θi,t​​J(θ)
t代表每一次迭代。\epsilonϵ 一般是一个极小值,作用是防止分母为0 。$G_{i,t} $ 表示了前tt 步参数 \theta_iθi​ 梯度的累加
G_{i,t} = G_{i,t-1}+ \nabla_{\theta_{i,t}} J(\theta)Gi,t​=Gi,t−1​+∇θi,t​​J(θ)
简化成向量形式
\theta_{t+1}=\theta_t- \frac{\eta}{\sqrt{G_t+\epsilon}}\nabla_{\theta_t} J(\theta)θt+1​=θt​−Gt​+ϵ​η​∇θt​​J(θ)

容易看出,随着算法不断的迭代,G_tGt​ 会越来越大,整体的学习率会越来越小。所以一般来说adagrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。

实验

实验取 \eta = 0.2, \epsilon = 1e-8η=0.2,ϵ=1e−8
这里写图片描述

可以看出收敛速度的确是特别慢(在该数据集下),最重要的原因就是动态学习率处于一个单向的减小状态,最后减到近乎为0的状态。

实验源码:https://github.com/tsycnh/mlbasic/blob/master/p6 adagrad.py


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tsyccnh/article/details/76769232
深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG)
Adam优化算法详细解析
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。