深度学习梯度下降和反向传播原理
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习梯度下降和反向传播原理相关的知识,希望对你有一定的参考价值。
梯度下降和反向传播
1. 梯度是什么?
梯度:是一个向量,导数+变化最快的方向(学习的前进方向)
回顾机器学习
收集数据 x x x ,构建机器学习模型 f f f,得到 f ( x , w ) = Y p r e d i c t f(x,w) = Y_{predict} f(x,w)=Ypredict
判断模型好坏的方法:
目标:通过调整(学习)参数 w w w,尽可能的降低 l o s s loss loss,那么我们该如何调整 w w w呢?
随机选择一个起始点 w 0 w_0 w0,通过调整 w 0 w_0 w0,让loss函数取到最小值
w w w的更新方法:
- 计算 w w w的梯度(导数)
- 更新
w
w
w
w = w − α ∇ w w = w - \\alpha \\nabla w w=w−α∇w
其中:
- ∇ w < 0 \\nabla w <0 ∇w<0 ,意味着w将增大
- ∇ w > 0 \\nabla w >0 ∇w>0 ,意味着w将减小
总结:梯度就是多元函数参数的变化趋势(参数学习的方向),只有一个自变量时称为导数
2. 偏导的计算
2.1 常见的导数计算
-
多项式求导数: f ( x ) = x 5 f(x) = x^5 f(x)=x5 , f ′ ( x ) = 5 x ( 5 − 1 ) f^{'}(x) = 5x^{(5-1)} f′(x)=5x(5−1)
-
基本运算求导: f ( x ) = x y f(x) = xy f(x)=xy , f ′ ( x ) = y f^{'}(x) = y f′(x)=y
-
指数求导: f ( x ) = 5 e x f(x) = 5e^x f(x)=5ex , f ′ ( x ) = 5 e x f^{'}(x) = 5e^x f′(x)=5ex
-
对数求导: f ( x ) = 5 l n x f(x) = 5lnx f(x)=5lnx , f ′ ( x ) = 5 x f^{'}(x) = \\frac{5}{x} f′(x)=x5,ln 表示log以e为底的对数
-
导数的微分形式:
那么:如何求 f ( x ) = ( 1 + e − x ) − 1 f(x) = (1+e^{-x})^{-1} f(x)=(1+e−x)−1 的导数呢?那就可以使用
f ( x ) = ( 1 + e − x ) − 1 f(x) = (1+e^{-x})^{-1} f(x)=(1+e−x)−1 ==> f ( a ) = a − 1 , a ( b ) = ( 1 + b ) , b ( c ) = e c , c ( x ) = − x f(a) = a^{-1},a(b) = (1+b),b(c) = e^c,c(x) = -x f(a)=a−1,a(b)=(1+b),b(c)=ec,c(x)=−x
则有:
2.2 多元函数求偏导
一元函数,即有一个自变量。类似 f ( x ) f(x) f(x)
多元函数,即有多个自变量。类似 f ( x , y , z ) , 三 个 自 变 量 x , y , z f(x,y,z),三个自变量x,y,z f(x,y,z),三个自变量x,y,z
多元函数求偏导过程中:对某一个自变量求导,其他自变量当做常量即可
例1:
例2:
例3:
练习:
已知
J
(
a
,
b
,
c
)
=
3
(
a
+
b
c
)
,
令
u
=
a
+
v
,
v
=
b
c
J(a,b,c) = 3(a+bc),令u=a+v,v = bc
J(a,b,c)=3(a+bc),令u=a+v,v=bc,求a,b,c各自的偏导数。
3. 反向传播算法
3.1 计算图和反向传播
计算图:通过图的方式来描述函数的图形
在上面的练习中, J ( a , b , c ) = 3 ( a + b c ) , 令 u = a + v , v = b c J(a,b,c) = 3(a+bc),令u=a+v,v = bc J(a,b,c)=3(a+bc),令u=a+v,v=bc,把它绘制成计算图可以表示为:
绘制成为计算图之后,可以清楚的看到向前计算的过程
之后,对每个节点求偏导可有:
那么反向传播的过程就是一个上图的从右往左的过程,自变量 a , b , c a,b,c a,b,c各自的偏导就是连线上的梯度的乘积:
3.2 神经网络中的反向传播
3.2.1 神经网络的示意图
w 1 , w 2 , . . . . w n w1,w2,....wn w1,w2,....wn表示网络第n层权重
w n [ i , j ] w_n[i,j] wn[i,j]表示第n层第i个神经元,连接到第n+1层第j个神经元的权重。
3.2.2 神经网络的计算图
其中:
- ∇ o u t \\nabla out ∇out是根据损失函数对预测值进行求导得到的结果
- f函数可以理解为激活函数
问题: 那么此时 w 1 [ 1 , 2 ] w_1[1,2] w1[1,2]的偏导该如何求解呢?
通过观察,发现从 o u t out out 到 w 1 [ 1 , 2 ] w_1[1,2] w1[1,2]的来连接线有两条
结果如下:
公式分为两部分:
- 括号外:左边红线部分
- 括号内
- 加号左边:右边红线部分
- 加号右边:蓝线部分
但是这样做,当模型很大的时候,计算量非常大
所以反向传播的思想就是对其中的某一个参数单独求梯度,之后更新,如下图所示:
计算过程如下
更新参数之后,继续反向传播
计算过程如下:
继续反向传播
计算过程如下:
通用的描述如下
∇
w
i
,
j
l
=
f
(
a
i
l
)
∗
∇
a
j
i
+
1
∇
a
i
l
=
f
′
(
a
i
l
)
∗
(
∑
j
=
1
m
w
i
,
j
∗
∇
a
j
l
+
1
)
\\nabla w^{l}_{i,j} = f(a^l_i)* \\nabla a^{i+1}_{j}\\\\ \\nabla a^{l}_i = f'(a^l_i)*(\\sum_{j=1}^{m}w_{i,j}*\\nabla a_j^{l+1})
∇w[人工智能-深度学习-7]:数据流图正向传播导数梯度梯度下降法反向链式求导,非常非常重要!!!