IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习算法笔记(1)--优化器相关 -> 正文阅读

[人工智能]深度学习算法笔记(1)--优化器相关

深度学习算法笔记(1)–优化器相关

个人笔记,记录思考过程,已注明参考文献。

一、优化器

1. 梯度下降相关

1.1 梯度下降法(Gradient Descent Algorithm,GD)

一层感知机的正向传递过程
在这里插入图片描述
在这里插入图片描述

a 1 [ l ? 1 ] a_{1}^{[l-1]} a1[l?1]?:表示第 [ l ? 1 ] [l-1] [l?1]层中第 1 1 1个感知机的输出。那么第 [ l ? 1 ] [l-1] [l?1]层的总输出为 a [ l ? 1 ] a^{[l-1]} a[l?1]
W i , 1 [ l ] W_{i,1}^{[l]} Wi,1[l]?:”表示第 [ l ] [l] [l]层的第 i i i个感知机上的对应上一层第 1 1 1个输入的权重信息。而 b i [ l ] b_{i}^{[l]} bi[l]?表示偏置。
那么第 [ l ] [l] [l]层将所有输入整合过后的结果为 z i [ l ] z_{i}^{[l]} zi[l]?,计算过程为:

在这里插入图片描述

最后通过激活函数(sigmoid)得到该感知机的输出
σ ( z i [ l ] ) = a i [ l ] \sigma(z_{i}^{[l]})=a_{i}^{[l]} σ(zi[l]?)=ai[l]?
多个感知机的正向传递过程
在这里插入图片描述
在这里插入图片描述

那么,隐藏层的输出结果可以假设为 a [ l ] a^{[l]} a[l](二分类任务中)或者是 a i [ l ] a_{i}^{[l]} ai[l]?(多分类任务中)
引入损失函数

? 这里使用交叉熵损失函数(PS:详见第二章第一节交叉熵损失函数),简单定义为:
J ( y ( k ) , a [ l ] ( k ) ) J(y^{(k)},a^{[l](k)}) J(y(k),a[l](k))
其中, y ( k ) y^{(k)} y(k)表示标签,来源于人工标注,可以是分类任务的 l a b e l {label} label,亦或是分割任务中的 m a s k {mask} mask
具体的,输入数据定义为: x = ( x ( 1 ) , x ( 2 ) , . . , x ( k ) , . . . , x ( m ) {x=(x^{(1)},x^{(2)},..,x^{(k)},...,x^{(m)}} x=(x(1),x(2),..,x(k),...,x(m), m {m} m表示一个batch的大小, k {k} k为一个 b a t c h {batch} batch中的第 k {k} k个数据。
对于像素级的分割任务来说,每个像素点都是有具体划分的,因此,
在这里插入图片描述
x 1 ( k ) {x_{1}^{(k)}} x1(k)?表述第 k {k} k个数据中的第一个像素点的值。而 a 1 ( 0 ) {a_{1}^{(0)}} a1(0)?则为第0层中第1个像素点的输出。
那么综上,损失已经得到,下面开始反向传播。
反向传播
在这里插入图片描述
以上过程为反向传播的具体公式表示。 η \eta η 表示学习率 l r lr lr
可以看到,梯度下降法是基于输入数据量大小进行计算的。

1.2 批量梯度下降法(Batch Gradient Descent, BGD)

批量梯度下降法是最原始的形式,相对于 1.1 {1.1} 1.1中所描述的一样,这里是指所有的样本(整个数据集)。
优点:
?(1)一次迭代是对所有样本进行计算,此时利用矩阵进行运算,实现了并行。
?(2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,批量梯度下降一定能够得到全局最优解。
缺点:
?(1)有时我们会遇到样本数目 m 很大的训练集合,如果有几十上百万,甚至上亿的训练样本。这意味着我们每执行一次批梯度下降算法,都要对m个样本进行求和。我们的程序也就需要检测这上百万的样本,甚至我们完成值下降的第一步都十分困难。这样会导致,训练过程很慢,花费很长的时间。

1.3 随机梯度下降法(Stochastic Gradient Descent, SGD)

相比于批量梯度下降取全部样本的交叉熵之和后去平均的方法,随机梯度下降则将交叉熵平方后再除以2,意思是说每次迭代使用一个样本来对参数进行更新。这样能够使训练速度加快。(batch_size=1)
优点:
?(1)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
缺点:
?(1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
?(2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
?(3)不易于并行实现。

1.4 小批量梯度下降法(Mini-batch Gradient Descent, MBGD)

考虑到批梯度的方式在每次迭代时都要使用到所有的样本,这徒然增加了计算成本,因此,小批量梯度下降法(MBGD)利用了部分样本代替所有样本来参与计算的思想,引入了mini-batch的概念。
假定mini-batch为10个样本,总样本为100个,则每10个样本进行一次改变权值。可以认为mini-batch等于batch,所以,batch的大小直接影响了模型的训练速度与寻优能力。
batch的选择带来的影响:
?(1)在合理地范围内,增大batch的好处:
???a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
???b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
???c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
?(2)盲目增大batch的坏处:
???a. 内存利用率提高了,但是内存容量可能撑不住了。
???b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
???c. batch增大到一定程度,其确定的下降方向已经基本不再变化。
优点:
?(1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
?(2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次)
?(3)可实现并行化。
缺点:
?(1)batch_size的不当选择可能会带来一些问题。

2. 动量法相关

写在前面: θ \theta θ(参数)的移动基于动量 m t m_{t} mt?

2.1 动量法(Momentum)

在这里插入图片描述
动量法在实际梯度优化时表现方式如上图所示。其具体公式如下:
g t = ? J ( θ t ? 1 ) m t = β 1 ? m t ? 1 ? l r ? g t θ = θ t ? 1 + m t g_{t}=\nabla J(\theta_{t-1})\\ {m}_{t}=\beta_{1}*{m}_{t-1}-{lr} *{g}_{t} \\ \theta=\theta_{t-1}+{m}_{t} gt?=?J(θt?1?)mt?=β1??mt?1??lr?gt?θ=θt?1?+mt?
其中, m t {m}_{t} mt?一阶动量 β 1 \beta_{1} β1?是动量因子, t t t表示迭代的次数, l r {lr} lr表示学习率, J J J为模型目标函数, θ t \theta_{t} θt?表示当前迭代时需要更新的模型参数, g t g_{t} gt?是目标函数的梯度。

2.2 Nesterov Momentum

m t = β 1 ? m t ? 1 ? l r ? ? J ( θ t ? 1 + β 1 ? m t ? 1 ) θ t = θ t ? 1 + m t m_{t}=\beta_{1} * m_{t-1}-{lr}* \nabla J\left(\theta_{t-1}+\beta_{1} * m_{t-1}\right) \\ \theta_{t}=\theta_{t-1}+m_{t} mt?=β1??mt?1??lr??J(θt?1?+β1??mt?1?)θt?=θt?1?+mt?

5. Adagrad

针对于学习率,对学习率进行自适应约束,间接影响参数。
n t = n t ? 1 + g t 2 Δ θ t = ? l r n t + ε ? g t θ t = θ t ? 1 + Δ θ t n_{t}=n_{t-1}+g_{t}^{2} \\ \Delta \theta_{t}=-\frac{lr}{\sqrt{n_{t}+\varepsilon}} * g_{t} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} nt?=nt?1?+gt2?Δθt?=?nt?+ε ?lr??gt?θt?=θt?1?+Δθt?
其中 ε \varepsilon ε很小,为了保证分母不为0; n t n_{t} nt?是梯度平方的累积,为二阶动量,初始为0;
优点:不需要手工调节学习率,在稀疏数据场景下效果较好,对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。
缺点:随着时间的增长,单调增长,单调减少,有可能过早的变为0,训练过早的结束。而且依然依赖与人工设定的学习率。

6. RMSprop

由于AdaGrad单调递减的q学习率变化过于激进,RMSprop只关注过去一段时间的梯度平均值,离的时间越远越不重要。
n t = β 1 n t ? 1 + ( 1 ? β 1 ) g t 2 Δ θ t = ? l r n t + ε ? g t θ t = θ t ? 1 + Δ θ t n_{t}=\beta_{1} n_{t-1}+\left(1-\beta_{1}\right) g_{t}^{2} \\ \Delta \theta_{t}=-\frac{lr}{\sqrt{n_{t}+\varepsilon}} * g_{t} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} nt?=β1?nt?1?+(1?β1?)gt2?Δθt?=?nt?+ε ?lr??gt?θt?=θt?1?+Δθt?
n t n_{t} nt?是梯度平方的累积,为二阶动量,初始为0; β 1 {\beta}_{1} β1?为动量因子。

7. Adadelta

RMSprop依然需要自己设定全局学习率,因此Adadelta在RMSprop的基础上,用参数更新的平方来替代全局学习率的位置,这样就可以省略全局学习率了。
解决两个问题:
1.在整个训练过程中,学习率不断下降;
2.需要手动选择全局学习率。
n t = β 1 n t ? 1 + ( 1 ? β 1 ) g t 2 V t = γ V t ? 1 + ( 1 ? γ ) △ θ t 2 Δ θ t = ? V t + ε n t + ε ? g t θ t = θ t ? 1 + Δ θ t n_{t}=\beta_{1} n_{t-1}+\left(1-\beta_{1}\right) g_{t}^{2} \\ V_{t}=\gamma V_{t-1}+(1-\gamma) \triangle \theta_{t}^{2} \\ \Delta \theta_{t}=-\frac{\sqrt{V_{t}+\varepsilon}}{\sqrt{n_{t}+\varepsilon}} * g_{t} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} nt?=β1?nt?1?+(1?β1?)gt2?Vt?=γVt?1?+(1?γ)θt2?Δθt?=?nt?+ε ?Vt?+ε ???gt?θt?=θt?1?+Δθt?

8. 自适应矩估计(Adaptive moment estimation,Adam)

融合一阶动量和二阶动量。
m t = β 1 m t ? 1 + ( 1 ? β 1 ) g t n t = β 2 n t ? 1 + ( 1 ? β 2 ) g t 2 m_{t}=\beta_{1} m_{t-1}+\left(1-\beta_{1}\right) g_{t}\\ n_{t}=\beta_{2} n_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} mt?=β1?mt?1?+(1?β1?)gt?nt?=β2?nt?1?+(1?β2?)gt2?
因为当 m t m_{t} mt? n t n_{t} nt?一开始被初始化为 0 时,最初的几步通常会偏向0,表示参数更新太慢。
他们使用偏差纠正系数,来修正一阶矩和二阶矩的偏差:
m ^ t = m t 1 ? β 1 t n t ^ = n t 1 ? β 2 t Δ θ t = ? η ? m ^ t n ^ t + ε θ t = θ t ? 1 + Δ θ t \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} \\ \hat{n_{t}}=\frac{n_{t}}{1-\beta_{2}^{t}} \\ \Delta \theta_{t}=-\eta * \frac{\hat{m}_{t}}{\sqrt{\hat{n}_{t}+\varepsilon}} \\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} m^t?=1?β1t?mt??nt?^?=1?β2t?nt??Δθt?=?η?n^t?+ε ?m^t??θt?=θt?1?+Δθt?

9.AdamW

m ^ t = m t 1 ? β 1 t n t ^ = n t 1 ? β 2 t Δ θ t = ? η ? ( m ^ t n ^ t + ε + λ θ t ? 1 ) θ t = θ t ? 1 + Δ θ t \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} \\ \hat{n_{t}}=\frac{n_{t}}{1-\beta_{2}^{t}} \\ \Delta \theta_{t}=-\eta *( \frac{\hat{m}_{t}}{\sqrt{\hat{n}_{t}+\varepsilon}}+\lambda{\theta_{t-1}} )\\ \theta_{t}=\theta_{t-1}+\Delta \theta_{t} m^t?=1?β1t?mt??nt?^?=1?β2t?nt??Δθt?=?η?(n^t?+ε ?m^t??+λθt?1?)θt?=θt?1?+Δθt?

二、损失函数

1.交叉熵损失函数

什么是交叉熵损失函数?

二分类

在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为p和 1-p ,此时表达式为:
L = 1 N ∑ i L i = 1 N ∑ i ? [ y i ? log ? ( p i ) + ( 1 ? y i ) ? log ? ( 1 ? p i ) ] L=\frac{1}{N} \sum_{i} L_{i}=\frac{1}{N} \sum_{i}-\left[y_{i} \cdot \log \left(p_{i}\right)+\left(1-y_{i}\right) \cdot \log \left(1-p_{i}\right)\right] L=N1?i?Li?=N1?i??[yi??log(pi?)+(1?yi?)?log(1?pi?)]
其中:
y i ? 表 示 样 本 i 的 l a b e l , 正 类 为 1 , 负 类 为 0 p i ? 表 示 样 本 i 预 测 为 正 类 的 概 率 {y}_{i}-表示样本i的label,正类为1,负类为0 \\ {p}_{i}-表示样本i预测为正类的概率 yi??ilabel10pi??i

三、功能函数

1.均值函数(mean function)—>可以用期望表示 E ( X ) E(X) E(X)

1) 标题算术平均数(Arithmetic Mean)
在这里插入图片描述

优点:相比于中位数、众数,更少收到随机因素的影响
缺点:更容易收到极端值(biased value)的影响
2) 几何平均数(Geometric Mean)
在这里插入图片描述
优点:适用于对比率数据的平均,主要用于计算数据平均增长率
3) 调和平均数(Harmonic Mean)
在这里插入图片描述
优点:计算平均速率,感觉很多paper都在用,用于计算平均速率
4) 平方平均数(Quadratic Mean)
在这里插入图片描述
优点:是2次方的广义平均数的表达式。可以定义在连续区间。常用来计算一组数据与某个数据之间的平均差。

2.协方差函数(covariance function)

1)协方差
对于单一的随机变量,我们考虑其期望 E ( X ) {E(X)} E(X)与方差 D ( X ) {D(X)} D(X)
当想比较两个随机变量,我们引入了协方差(两个随机变量可以对应数据分析中的两个字段,即可以不属于同一定义域)。协方差,看名字就知道,其定义来源于方差。对两个随机变量X和Y,其协方差就是:
在这里插入图片描述
2)协方差函数
设随机过程为 X ( t ) {X(t)} X(t),定义域为 D D D t 1 t_{1} t1?, t 2 t_{2} t2? ? \epsilon ? D D D,定义协方差函数 C X ( t 1 , t 2 ) {C_{X}(t_{1},t_{2})} CX?(t1?,t2?) t 1 t_{1} t1? t 2 t_{2} t2?的协方差,形成的函数。
C X ( t 1 , t 2 ) = E { [ X ( t 1 ) ? μ X ( t 1 ) ] [ X ( t 2 ) ? μ X ( t 2 ) ] } C_{X}\left(t_{1}, t_{2}\right)=E\left\{\left[X\left(t_{1}\right)-\mu_{X}\left(t_{1}\right)\right]\left[X\left(t_{2}\right)-\mu_{X}\left(t_{2}\right)\right]\right\} CX?(t1?,t2?)=E{[X(t1?)?μX?(t1?)][X(t2?)?μX?(t2?)]}

References

[1] 十三、梯度下降方法对比
[2] 机器学习方法(一)——梯度下降法
[3] 机器学习(四):批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
[4] 如何理解“梯度下降法”?什么是“反向传播”?通过一个视频,一步一步全部搞明白
[5]期望、方差、协方差、协方差函数、期望函数、方差函数
[6]协方差与相关系数
[7]高斯过程-百度百科
[8]箱型图
[9]深度学习优化函数详解(4)-- momentum 动量法
[10]深度学习最优化(四)—— 动量法/Nesterov/Adagrad/Adadelta/RMSprop/Adam/Nadam
[11]adam和adamW

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:11:49  更:2021-11-18 11:12:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:24:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码