反向传播和梯度下降法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
梯度下降和反向传播算法
•引言 ————— 感知机与Delta法则•梯度下降算法
•梯度下降概述
•为什么梯度方向是上升最快的方向
•梯度下降图解
•梯度下降的一些问题
•链式求导法则
•反向传播算法
•单个逻辑神经元的反向传播
•多层全连接神经网络的反向传播
•卷积神经网络的反向传播
•梯度下降的优化算法
引言 ————— 感知机与Delta
法则
•阈值与感知机法则:
i
i i i i x o t w w w w )(-=∆∆+←η t 是当前样例的目标输出,o 是感知机的输出, 是学习率.η•数据必须线性可分,特征选取是关键•
收敛快,不容易推广为大型网络
•线性单元与Delta
法则
∑-=→
d
d d o t w E 2
)(21
)(⎥
⎦⎤
⎢⎣
⎡∂∂∂∂∂∂=∇-→
110,,,)(n w E w E w E w E 损失函数的梯度:
)
(- ,→
→→→→∇=∆∆+←w E w w w w η其中,∑
∑∈∈-=∆--=∂∂D
d id
d
d i
D
d d d d i x o
t w
x o t w E
)())((η
•
收敛慢,容易推广为大型网络
梯度下降概述
极值问题:
• D 是domain, 函数的定义域, 是实数域.
• D 是一维或者是高维的,
.•每个维度的取值是离散的,或者连续的.•我们这里限制D 的每个维度都是连续的.•求解:
ℜ
→D f :)
(argmin
x f x
D
x ∈*
=n
ℜ⊆D 1. 随机搜索法
尽量多的去尝试,从里面选择使得目标函数取值最小的参数.2. 随机局部搜索
在现有的参数的基础上,搜寻一下周边临近的参数,若有更好的就更新参数,如此不断迭代. 3. 根据梯度选择方向搜索
在现有的参数的基础上,计算函数梯度,按照
梯度进行调参,如此不断迭代.
ℜ
为什么梯度方向上升最快?
θ
θθθθθθθsin )
,(cos ),( )
,()sin ,()sin ,()sin ,cos (),()sin ,cos (0t ⋅∂∂+⋅∂∂=-+++-++=
-++→y
y x f x y x f t
y x f t y x f t y x f t y t x f t y x f t y t x f •
上升最快的方向即为方向导数最大的方向:
上式即为向量
在 上的投影.) )
,( ,),( (y
y x f x y x f ∂∂∂∂)sin ,(cos θθ2
2
2
2
),(),(),(sin
,),(),(),(cos y
y x f x
y x f y
y x f y y x f x y x f x
y x f ∂∂+∂∂∂∂=
∂∂+∂∂∂∂=
θθ总之,
)
()
()
()
1(i x i i x f x
x
∇-←+η•
梯度下降算法核心迭代公式:
走一步,看一步
跑下去?(momentum)
梯度下降图解
梯度下降的一些问题
•梯度为 0 的点成为 critical point
•梯度下降迭代在梯度为0的点会终止运行,但是critical point 不一定是极值点•局部极小与全局极小
•梯度下降不断逼近局部极小
链式求导法则
•粗略的讲,若 x 是实数,, )())((),(y f x g f z x g y
===则
dx
dy dy
dz dx
dz
⋅=
•粗略的讲,一般地,若)
( ),( ,: ,: , ,y f z x g y f g y x n
n
m
n m ==ℜ→ℜℜ→ℜℜ∈ℜ∈则
i
j
j
j i
x y y z x z
∂∂⋅∂∂=∂∂∑
向量表达式为:
z
x y z y T
x ∇*⎪
⎭
⎫
⎝⎛∂∂=∇其中,
x
y ∂∂m n ⨯是函数 的 Jacobian 矩阵.
g
单个逻辑神经元的反向传播
)
(),,(∑+==i
i i b w x a x b W f σ)
1( )(11
)('σσσσ-⋅=+=-x e x x
)
1()
()
()
(a a z
a a J z J a J a z a -=∂∂∂∂=∂∂=∂∂=δδ
δ•训练的最终目的是求 对参数 的偏导数
•反向传播是从后往前一步步求偏导数J b W ,)
()
(z b T
z W b
z
z J b J J x W z
z J W J J δδ
=∂∂∂∂=∂∂=∇=∂∂∂∂=∂∂=∇①
②
③
J
b b J W W b k k W k k ∇⋅-=∇⋅-=++ηη11
激活函数表
多层全连接网络的前向传播
•
神经网络实际上就是一个输入向量 到输出向量
的函数,即:
→
x →
y )
(→
→
=x f y network 矩阵表示线
性部分激活部分
全
部过程
)
,( ) ( ) () (---11223112y a J a W a a W a a W a L L L L →
--→
→
→
→
→⋅=⋅=⋅=σσσ
456
⎥⎥
⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥
⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=→→→→→166362611553525114434241654165423211,,,,,,,,, , , 1 b b b w w w w w w w w w w w w w w w W z z z a x x x a )
()(1122→
→
→
⋅==a W z a σσ
多层全连接神经网络的反向传播
•第一层的
是整个网络的输入,最后一层是损失函数的输入.
1a L a •假设第
层的输入和输出分别为:1+l 11,++l l a z )
(111+++=+=l l l
T
l
l l z a b x W z σL
a L
a J ∂∂=
)
(δ
)1(111
1
++++-=∂∂l l l l a a z a I b z a W z W a z l
l l l l l l l =∂∂=∂∂=∂∂+++1
11 , ,)
1( )()()
(11
1)(l l a l l
l
l l z l
z l T l l
l l l a l a a z a a J z J W a z z J a J -=∂∂∂∂=∂∂==∂∂∂∂=∂∂=+++δδ
δδ)(1
1
1)
(111z l l
l l l b T
l z l l l l l W b z z J b J J a W z z J W J J l
l
++++++=∂∂∂∂=∂∂=
∇
=∂∂∂∂=∂∂=∇δδ
卷积神经网络(Convolutional Neural Network -- CNN)
•CNN的特征提取层参数是通过训练数据学习得到的,
避免了人工特征抽取;
•同一特征图的神经元共享权值,减少网络参数,
这是卷积神经网络相对于全连接网络的一大优势.
•CNN 基本层包括卷积层和池化层,二者通常一起使用,一个池化层紧跟在一个卷积层之后。
•这两层包括三个级联函数:卷积,激活函数函数,池化。
•
其前向传播和后向传播的示意图如下:
卷积神经网络的训练
卷积层的训练——
简单情形
•卷积层前向传播公式:
第 层第 j 行 第 j 列的误差项 filter 第 m 行 第 n 列权重 filter 的偏置项 第 层第 i 行 第 j 列神经元的输出 第
层第 i 行 第 j 列神经元的加权输入
第 层第 i 行 第 j 列的误差项 第 层的激活函数 1,-l j i δ1-l 1-l 1-l n m w ,l W l W b
w 1
,-l j i a 1,-l j i net l 1-l l
j
i ,δ
1-l f •先来考虑最简单的情况:
步长为1,深度为1,filter 个数为1的情况.
•根据链式求导法则,
层神经元的误差为:1
,1,1
,1,1
,-----∂∂⋅∂∂=∂∂=l j i l j i l j i l j i l j i net a a E
net E δ1-l
1,12,22,11,21,22,12,21,11
2
,11,12,12,11,11
2,12
,12,112,11
,11,112,11,11,11
1
,11
,11,111,1w w w w a E w w a net net E a net net E a E w a net net E a E l
l l l l l
l l l l l l l l l
l l l l ⋅+⋅+⋅+⋅=∂∂⋅+⋅=∂∂⋅∂∂+∂∂⋅∂∂=∂∂⋅=∂∂⋅∂∂=∂∂------δδδδδδδ•先来看乘积的第一项:
•上一页的计算,相当于把
层的误差项矩阵周围补一圈0,再与旋转180度后的filter 进行卷积操作,简记此操作为 •其实,旋转180度之后进行现在的卷积,才是卷积的本来的含义:
•写为求和的形式如下:
l ∑∑++-=∂∂m
n
l
n
j m i l n
m l j
i w
a E
,,1
,δ
flip
conv =**
•接着来看乘积的第2项:
•根据链式求导法则,
层神经元的误差为:1
,1
,1
,1
,1
,
-----∂∂⋅∂∂=∂∂=l j i l j i l j i l j i l j
i net a a E net E δ1-l •第1项和第2项结合:
•或写为如下表达式:
卷积层神经元误差的训练——多步长
•上面是步长为1时的卷积结果, 下面是步长为2时的卷积结果
•当我们反向计算误差项时,
先对第
层的误差项相应的填充0, 再按照步长为的情形处理即可.
l
卷积层神经元误差的训练——输入层多深度
•filter的深度和输入层的深度相同
•各算各的,用filter的第d通道权重
对第层误差项矩阵进行操作即可.
卷积层神经元误差的训练——多 filter
•filter 数量为 N 时,输出层即第
层的深度也为 N •由于第 层的每个加权输入 都同时影响着第
层所有 feature map 的输出,因此要用全导数反向计算误差;
•我们使用每个filter 对第
层相应的误差项矩阵进行 * 操作(翻转,卷积), 最后将所有结果按元素相加
.
l l 1-l 1, l j i net l
卷积层 filter 权重的训练
12,22,211,21,212,12,111,11,11
,12
,22,21,11,21,21,12,12,11,11,11,11,1----⋅+⋅+⋅+⋅=∂∂⋅∂∂+∂∂⋅∂∂+∂∂⋅∂∂+∂∂⋅∂∂=∂∂l l l l l l l l l
l
l
l l l l l a a a a w net net E
w net net E w net net E w net net E w E δδδδ 1
3,22,212,21,213,12,112,11,12
,1----⋅+⋅+⋅+⋅=∂∂l l l l l l l l a a a a w E δδδδ通式为:
∑∑-++=∂∂m
n
l n
j m i n
m j
i a
w E
1
,,,δ
卷积层 filter 权重的训练
•filter 权重的更新操作即用第层的误差项矩阵作为卷积核,对第层的输出进行卷积.
l
1-l
∑∑
=
+
+
+
=
∂
∂
i j
l
j i
l
l
l
l
b
w
E
,
2,2
1,2
2,1
1,1
δ
δ
δ
δ
δ
•偏置项的梯度是第层误差项矩阵的逐项相加的结果:
l
•池化函数是一个下采样函数,对于大小为m 的池化区域,池化函数及其导数可以定义为:•均值池化: 导数:
•最大值池化:
导数:
∑==
m
k k
x
m
x g 1
1
)(m
x g i 1
=∂∂i
i
x x g max )(=
Max Pooling Mean Pooling
MaxPooling :
•下一层的误差项的值原封不动的传递到上一层对应区块中最大值对应的神经元,
•其他神经元的误差项的值都是0.MeanPooling :
•下一层的误差项的值平均分配给上一层对应区块的每一个神经元
梯度下降的优化算法
随机梯度下降法(SGD )
•每次只用一个样本进行前向传播,得到损失函数进行反向传播。
•
迭代格式:
•
优点: 计算量小;
如果目标函数有多个局部极小值,SGD 避免陷入局部极小值。
•
缺点:
每次迭代的方向只依赖当前样本的梯度,
不稳定,容易发生震荡
mini-batch 梯度下降法
•每次选取 n 个样本进行前向传播,得到损失函数进行反向传播。
•迭代格式:
•SGD 和全局梯度下降法的折中
•针对SGD的震荡的缺点,人们提出了带有Momentum的SGD方法。
•在一定程度上保留上一步更新的方向,同时利用当前的梯度确定最终的更新方向。
•当前迭代方向跟上一步的迭代方向相关,所以两次迭代沿着大致相同的方向前进,不会发生大的跳跃,这既增加了稳定性,还在一定程度上防止陷入局部最优.
1
11)(++++=⋅-⋅=∇=t t t t t t t x t m x x g m m x f g ημ其中 是动量影子,表示上一个迭代步所占的比重,一般取值0.9
μ梯度下降的优化算法 —— Momentum
梯度下降的优化算法 ——Momentum
•形象化解释:从碗边开始下滚的球,或者从山上往下跑
•momentum能够加速SGD,抑制震荡。
梯度下降的优化算法 —— Nesterov's Accelerated Gradient (NAG)
•Momentum方法的缺陷是当函数到达最小值附近时,进一步的迭代会走过最小值继续变大,之后再变小,出现震荡;
•利用形象化的例子来解释,从碗边滚下的球有点盲目,应该让它能够根据前方的情形,调整自己的行为;
•在你预测到自己要犯错误之前就改正自己的行为.
1
11
)
(++++=⋅-⋅=⋅+∇=t t t t
t t t t x
t m x x g m m
m x f g ημμ
梯度下降的优化算法 ——自适应学习率
•添加momentum项和Nesterov项使梯度更新更加灵活,使SGD沿着梯度方向加速前进,抑制震荡.
•前面的方法对于所有参数都使用了同一个更新速率。
但是同一个更新速率不一定适合所有参数.
比如有的参数可能已经到了仅需要微调的阶段,但有些参数由于对应样本少等原因,还需要较大幅度的调动。
•接下来介绍几种自适应学习率的方法 ,自动地为各个参数分配不同的学习率.
•主要思路将参数的历史梯度作为系数有效调整每个参数的学习率.
•在第 t 步迭代更新某个参数 时,计算前面所有迭代中关于该参数的梯度的平方和,记为 .
i w t i G ,•SGD的更新公式为:
)
(i w i i w J w w i ∇⋅-←η•AdaGrad的更新公式为:
)
(,i w t i i i w J G w w i ∇⋅+-←εη
是防止分母为 0 的光滑化因子,一般取值为 , 大多取值为0.018-10ε
优点:不断的减小学习率,避免最后由于步长过大导致问题发散.
缺点:训练的中后期,梯度平方和越来越大,学习率逼近 0 ,使得训练提前结束
η
•RMSProp 类似于Adagrad, 但是针对AdaGrad 步长到后期接近于0的缺点,RMSProp 分母不再对梯度的平方累加求和.
)
()
()1(1,2
,1,i w t i i i i w t i t i w J G w w w J G G i i ∇⋅+-←∇⋅-+⋅=++ε
η
μμ一般取为0.9μ
梯度下降的优化算法 ——Adaptive Moment Estimation (Adam )8-21212
21211110
~ ,999.0~ ,9.0~11)1()1(εββεη
ββββββ∧∧∧∧--⋅+-←-=-=
-+=-+=t
t i i t t
t t
t t t t t t
t t m v w w v v m m g v v g m m •利用参数梯度的一阶和二阶矩(moment ),为所有不同的参数选择合适的学习率.
• 初值为0,在初始迭代中,如果 接近1,那么, 接近于0,所以通过校正避免
这个问题
t t n m ,21ββ,11,++t t n m
Thank you !。