# 深度学习框架TensorFlow系列之（五）优化器3

1 背景

[En]

The goal of the gradient descent method is to update the model parameters in the opposite direction of the gradient. Geometrically, the surface created by the objective function goes all the way down to the valley along the direction of the slope (the fastest). And through reasonable step size setting to accelerate and stabilize the convergence of the algorithm model, train a more generalized model. The basic idea can also be understood like this: we start from a certain point on the mountain, find the steepest slope and take a step (that is, to find the direction of the gradient). After reaching a point, we find the steepest slope and take another step until we keep going like this. to the lowest point (minimum cost function convergence point), but the actual modeling scene is more complex, with the existence of saddle points and local lows. Based on this, relevant researchers have carried out extensive and in-depth research on the algorithm.

• 模型的代价函数：J ( θ ) J(\theta)J (θ)
• 模型的相关参数：θ ∈ R d \theta \in R^d θ∈R d
• 参数的梯度：▽ θ J ( θ ) \bigtriangledown_{\theta}J(\theta)▽θ​J (θ)
• 参数的梯度：η \eta η

## 2.2 方案设计

[En]

We know from the above description that we need a method to perceive and predict the trend of future gradient changes. So how to operate it exactly?

• 算法设计

1. 第一步，预测参数下一步的更新位置，并且在更新后的位置求梯度，预测未来的梯度方向变化与强度；
2. 第二步，计算历史动量，也就是累计下来的梯度值；
3. 第三步，将第一步与第二步的梯度值进行矢量相加，作为待更新的梯度值；
4. 第四步，将参数与第三步的梯度值进行计算；

5. 公式如下

V t = γ V t − 1 + η ▽ θ J ( θ − γ V t − 1 ) V_t = \gamma V_{t-1} + \eta \bigtriangledown_{\theta}J(\theta – \gamma V_{t-1})V t ​=γV t −1 ​+η▽θ​J (θ−γV t −1 ​)

θ = θ − V t \theta = \theta – V_t θ=θ−V t ​

• 图形化描述

## ; 3.2 方案设计

• 算法设计

• 普通的优化器算法，例如SGD对所有参数θ \theta θ进行统一更新，所以每个参数θ \theta θ都使用相同的参数学习速率η \eta η。而Adagrad算法对每个参数θ i \theta_i θi ​在时间点t处使用不同的学习率$\eta 。 为 了 简 便 起 见 ， 我 们 设 。为了简便起见，我们设。为了简便起见，我们设g_{t,i}为 时 间 点 t 时 对 参 数 为时间点t时对参数为时间点t 时对参数\theta_i$的梯度为: g t , i = ▽ θ t J ( θ t , i ) g_{t,i} = \bigtriangledown_{\theta_t}J(\theta_t, i)g t ,i ​=▽θt ​​J (θt ​,i )

• TSGD算法在时间t的时候，同时更新所有的参数，公式如下： θ t + 1 , i = θ t , i − η ∗ g t , i \theta_{t+1}, i = \theta_{t,i} – \eta * g_{t,i}θt +1 ​,i =θt ,i ​−η∗g t ,i ​
• 基于自适应的弹性更新规则，Adagrad算法在每个时间点t更新每个参数的时候，根据过去累计的二阶动量的进行学习率的调整，公式如下： θ t + 1 , i = θ t , i − η ( G t , i i + ϵ ) ∗ g t , i \theta_{t+1}, i = \theta_{t,i} – \frac{\eta}{\sqrt{(G_{t,ii} + \epsilon)}} * g_{t,i}θt +1 ​,i =θt ,i ​−(G t ,i i ​+ϵ)​η​∗g t ,i ​
• G t , i i G_{t,ii}G t ,i i ​是历史梯度平方累加和。 对于训练数据少的特征，对应的参数更新就缓慢，也就是说他们的梯度变化平方累加和就会比较小，所以对应于上面参数更新方程中的学习速率就会变大，所以对于某个特征数据集少，相应参数更新速度就快。同时为了防止上述分母为0，所以往往添加一个平滑项参数ϵ \epsilon ϵ，避免除零，通常大小在1e − 8。

• 优点是消除了手动调整学习率的问题，实现了自动化。大多数其他优化器实现使用默认值0.01并保持不变。
[En]

the advantage is that it eliminates the problem of manually adjusting the learning rate and realizes automation. Most of the other optimizer implementations use the default value of 0.01 and remain the same.*

• 缺点是平方梯度在分母中累积：基于平方和，每增加一步就累积一个正数，且训练过程中累积的总和不断增加。这反过来又导致学习速度逐渐降低，当算法不再能够获得额外的知识并且不能被训练时，最终变得无穷小。
[En]

the disadvantage is that square gradients are accumulated in the denominator: based on the sum of squares, a positive number is accumulated with each additional step, and the sum accumulated during the training process continues to increase. This in turn leads to the gradual decrease of the learning rate, and finally becomes infinitesimal, when the algorithm can no longer obtain additional knowledge and can not be trained.*

• 计算二阶动量的指数衰减加权值，基于历史累计梯度与当前的梯度，计算公式如下，可见历史梯度是不断的进行衰减的 E [ g 2 ] t = γ E [ g 2 ] t − 1 + ( 1 − γ ) g t 2 E[g^2]t = \gamma E[g^2]{t-1} + (1-\gamma) g_t^2 E [g 2 ]t ​=γE [g 2 ]t −1 ​+(1 −γ)g t 2 ​
• 从上面的Adagrad章节，我们知道参数更新公式如下： θ t + 1 = θ t − η ( G t + ϵ ) ∗ g t \theta_{t+1} = \theta_{t} – \frac{\eta}{\sqrt{(G_{t} + \epsilon)}} * g_{t}θt +1 ​=θt ​−(G t ​+ϵ)​η​∗g t ​
• 将衰减加权值代入上面的公式，则公式改进为 θ t + 1 = θ t − η ( E [ g 2 ] t + ϵ ) ∗ g t \theta_{t+1} = \theta_{t} – \frac{\eta}{\sqrt{(E[g^2]t + \epsilon)}} * g{t}θt +1 ​=θt ​−(E [g 2 ]t ​+ϵ)​η​∗g t ​
• 由于分母是梯度的均方根误差的形式，所以我们定义一个新的简写形式 θ t + 1 = θ t − η R M S [ g ] t ∗ g t \theta_{t+1} = \theta_{t} – \frac{\eta}{RMS[g]t} * g{t}θt +1 ​=θt ​−R M S [g ]t ​η​∗g t ​
• 至此，dagrad算法带来的分母越来越大的问题得以解决。但是作者注意到梯度更新中的单位(以及SGD、Momentum或Adagrad)没有匹配，即更新应该具有与参数相同的假设单位。那么为何单位不匹配呢？我们看下公式： θ t + 1 = θ t − η ∗ ∂ ( l o s s ) ∂ ( θ t ) \theta_{t+1} = \theta_{t} -{\eta}* \frac{\partial(loss)}{\partial(\theta_t)}θt +1 ​=θt ​−η∗∂(θt ​)∂(l o s s )​
• 假设loss的单位为A，参数的单位为B，已知学习率没有单位，设为1，则上面的等式的单位运算为：B=B-1*(A/B)。可以看出单位确实不匹配。（这个问题确实是一个比较深刻的思考，很多人基本没有从这方面进行思考过）
• 为了保障单位的匹配，作者设计了非常精妙的方法， 定义另一个指数衰减加权均值，与梯度的二阶动量计算类似，我们定义△ θ \triangle \theta △θ 的二阶动量的指数衰减加权均值。 E [ △ θ 2 ] t = γ E [ △ θ 2 ] t − 1 + ( 1 − γ ) △ θ 2 E[{\triangle \theta}^2]t = \gamma E[{\triangle \theta}^2]{t-1} + (1-\gamma) {\triangle \theta}^2 E [△θ2 ]t ​=γE [△θ2 ]t −1 ​+(1 −γ)△θ2
• 使用RMS进行化简; R M S [ △ θ ] t = E [ △ θ 2 ] + ϵ RMS[{\triangle \theta}]_t= \sqrt{E[{\triangle \theta}^2] + \epsilon}R M S [△θ]t ​=E [△θ2 ]+ϵ​
• 现在我们用用R M S [ △ θ ] t − 1 RMS[{\triangle \theta}]{t-1}R M S [△θ]t −1 ​替换之前更新规则中的学习速率η，后生成Adadelta更新规则： △ θ t = − R M S [ △ θ ] t − 1 R M S [ g ] t ∗ g t \triangle \theta_t = – \frac{RMS[{\triangle \theta}]{t-1}}{RMS[g]{t}}*g_t △θt ​=−R M S [g ]t ​R M S [△θ]t −1 ​​∗g t ​ △ θ t + 1 = △ θ t + △ θ t \triangle \theta{t+1} = \triangle \theta_{t} + \triangle \theta_t △θt +1 ​=△θt ​+△θt ​

; 5 RMSprop

RMSprop也将学习速率除以平方梯度的指数衰减平均值。Hinton建议将γ设置为0.9，而学习速率η默认值为0.001。

[En]

As can be seen from the above analysis, we are currently solving two types of problems in the optimizer:

• 梯度历史动量如何累计与校正：梯度动量引入梯度更新（加权衰减累加等）、NAG提前的梯度方向预判算法；

• 首先计算一阶与二阶动量累计值m t m_t m t ​和v t v_t v t ​。 m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1- \beta_1)g_t m t ​=β1 ​m t −1 ​+(1 −β1 ​)g t ​ v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2v_{t-1} + (1-\beta_2)g_t^2 v t ​=β2 ​v t −1 ​+(1 −β2 ​)g t 2 ​
• 当m t m_t m t ​和v t v_t v t ​被初始化为0的时候，Adam的作者观察到它们偏向于0，特别是当衰减率较大时(即β1和β2接近1)。所以作者重新计算一个偏差来抵消这些偏差: m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1-\beta_1^t}m ^t ​=1 −β1 t ​m t ​​ v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1-\beta_2^t}v ^t ​=1 −β2 t ​v t ​​
• 最后进行参数的更新，就像我们在Adadelta和RMSprop中看到的那样生成Adam更新规则，并且通过使用一阶动量梯度累计值一起更新当前梯度（不同于Adadelta和RMSprop仅仅通过二阶动量控制学习率），添加了梯度的累计动量。 β t + 1 = β t − η v ^ t + ϵ ∗ m ^ t \beta_{t+1} = \beta_t – \frac{\eta}{\sqrt{\hat{v}_t + \epsilon}} * \hat{m}_t βt +1 ​=βt ​−v ^t ​+ϵ​η​∗m ^t ​

Adam更新规则中的系数与过去梯度v t − 1 v_{t-1}v t −1 ​（一阶）+ 现在梯度g ( t ) 2 g(t)^2 g (t )2（二阶）成反比。作者提出是否可以考虑其他的P范数，也就是扩展到P阶动量，有方程式：

[En]

The final formula for parameter update is

; 9 如何选择优化器

10 番外篇

[En]

Business level: it has achieved a good start to the business, created a new business growth point, and produced significant business economic benefits.

Original: https://blog.csdn.net/qq_22054285/article/details/123316507
Author: 秃顶的码农
Title: 深度学习框架TensorFlow系列之（五）优化器3

(0)

### 大家都在看

• #### K_近邻算法_分类Ionosphere电离层数据【python机器学习系列（三）】

K_近邻算法_分类Ionosphere电离层数据【python机器学习系列（三）】 文章目录 摘要 1.数据获取 2.数据集分割与初步训练表现 3.测试不同近邻值 4.交叉检验 5…

人工智能 2023年7月3日
0186
• #### python利用opencv进行相机标定获取参数，并根据畸变参数修正图像附有全部代码（流畅无痛版）

python利用opencv进行相机标定获取参数，并根据畸变参数修正图像附有全部代码 一、前言 今天的低价单孔摄像机(照相机)会给图像带来很多畸变。畸变主要有两种:径向畸变和切想畸…

人工智能 2023年5月28日
0144
• #### 网球目标检测——基于Python-OpenCV

1.问题描述 本文章实现了通过读取摄像头所拍摄的图像， 实时检测图像中的网球并推算其距离、确定其方位。核心问题是如何从摄像头拍摄的画面中检测出网球，并排除干扰项。此外，为了将该方法…

人工智能 2023年7月10日
0139
• #### 深度学习相关阅读论文汇总（持续更新）

注意：按我文件夹的顺序更新的 77 A Ranking-Based Cross-Entropy Loss for Early Classification of Time Seri…

人工智能 2023年7月13日
0151
• #### 蓝牙耳机ENC通话降噪测试-自适应滤波技术

主动降噪和通话降噪是不一样的降噪技术，主动降噪是起到把环境噪声最大程度地抵消，让使用耳机的人享受安静的环境；而通话降噪则是另一个方向的应用，它可以让使用通话降噪耳机的人在嘈杂的马路…

人工智能 2023年6月20日
0145
• #### 论文《基于结构光和双目视觉的三维重建系统研究》摘要

《基于结构光和双目视觉的三维重建系统研究》-赵焕谦-哈工大 一、引言 1、结构光的原理和优点 结构光通过向待测物体表面投射光栅条纹图案来给物体增加特征信息，使得图像处理时，能够提取…

人工智能 2023年6月22日
0122
• #### Python3.9环境下的dlib安装流程与错误解决

环境：windows10、Python3.9（Anaconda3）、Pycharm2018.3、 1.尝试在Pycharm中直接安装dlib库，失败 2.尝试在Anaconda中安…

人工智能 2023年7月5日
0129
• #### 【(强推)李宏毅2021/2022春机器学习课程】2022-语音与影像上的神奇自监督学习模型【精】

文章目录 Review：Self-supervised Learning for Text Self-supervised Learning for Speech Self-sup…

人工智能 2023年5月25日
0145
• #### python练习7——PTA

小明在帮助老师统计成绩，老师给他的是一组数据。数据的第1行代表学生数n，后面的n行代表每个学生的成绩。成绩是整数类型。小明编写了一个程序，该程序可以批量处理数据，统计所有学生的平均…

人工智能 2023年7月6日
0143
• #### DeepLab系列: v1、v2、v3、v3+

DeepLab v1 paper: Semantic Image Segmentation with Deep Convolutional Nets and Fully Conne…

人工智能 2023年5月26日
0153
• #### 【目标检测】anchor基础知识整理

目标检测算法一般可分为anchor-based、anchor-free、两者融合类，区别就在于有没有利用anchor提取候选目标框。下面我们来具体介绍。 目标检测是”在…

人工智能 2023年7月9日
0161
• #### 还在为数学建模的事发愁？带你一起来看看数模竞赛中必备的经典算法

前言 数学建模比赛是本科生和研究生阶段最重要的比赛之一，包括全国大学生数学建模竞赛（俗称”国赛”）和美国大学生数学建模竞赛（俗称”美赛&#822…

人工智能 2023年7月13日
0164
• #### 视觉机械臂自主抓取全流程

目录 简介 相机标定 手眼标定 Eye-In-Hand Eye-To-Hand 求解（Eye-In-Hand） 求解AX=XB 手眼标定步骤 读取出摄像头信息并确定目标物体的位姿 …

人工智能 2023年6月26日
0250
• #### pandas算加权平均值_pandas和groupby：如何计算agg中的加权平均值

有可能，但真的很复杂： np.random.seed(234) df= pd.DataFrame(np.random.randint(5,8,(1000,4)), columns=…

人工智能 2023年7月8日
0199
• #### 那些离开大厂，回归学术界的科学家们

「离开大厂，回归学术界」在近两年似乎已经成为了一种趋势，尤其是对于 AI 产业界而言，更是如此。 产业界，留给”失败”的时间不多？ 近日，Google 公司…

人工智能 2023年7月17日
0132
• #### 行为型设计模式（上）

责任链模式： 下图为责任链 1、定义：为了避免请求发送者与多个请求处理者耦合在一起，将所有请求的处理者通过前一对象 记住其下一个对象的引用而 连成一条链；当有请求发生时，可将请求 …

人工智能 2023年6月6日
0178