梯度下降和反向传播算法

梯度下降和反向传播

目标

  1. 知道什么是梯度下降
  2. 知道什么是反向传播

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呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQcG4R1Z-1630153639198)(../images/1.2/梯度1.png)]

随机选择一个起始点 w 0 w_0 w0,通过调整 w 0 w_0 w0,让loss函数取到最小值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1l7CGIRw-1630153639200)(../images/1.2/梯度2.png)]

w w w的更新方法

  1. 计算 w w w的梯度(导数)

在这里插入图片描述

  1. 更新 w w w
    w = w − α ∇ w w = w - \alpha \nabla w w=wαw

其中:

  1. $\nabla w <0 $ ,意味着w将增大
  2. $\nabla 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(51)

  • 基本运算求导: 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+ex)1 的导数呢?那就可以使用

f ( x ) = ( 1 + e − x ) − 1 f(x) = (1+e^{-x})^{-1} f(x)=(1+ex)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)=a1,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

多元函数求偏导过程中:对某一个自变量求导,其他自变量当做常量即可

在这里插入图片描述

$$
练习:

已知 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,把它绘制成计算图可以表示为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GffYaFU5-1630153639201)(../images/1.2/计算图.png)]

绘制成为计算图之后,可以清楚的看到向前计算的过程

之后,对每个节点求偏导可有:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oo8YoeTw-1630153639203)(../images/1.2/计算梯度.png)]

那么反向传播的过程就是一个上图的从右往左的过程,自变量 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个神经元的权重。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNtxKH2F-1630153639204)(../images/1.2/神经网络计算图.png)]

3.2.2 神经网络的计算图

在这里插入图片描述

其中:

  1. ∇ o u t \nabla out out是根据损失函数对预测值进行求导得到的结果
  2. 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]的来连接线有两条

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrO4mmDl-1630153639206)(../images/1.2/偏导的计算2.png)]

结果如下:
d o u t d W 1 [ 1 , 2 ] = x 1 ∗ f ′ ( a 2 ) ∗ ( W 2 [ 2 , 1 ] ∗ f ′ ( b 1 ) ∗ W 3 [ 1 , 1 ] ∗ ∇ o u t + W 2 [ 2 , 2 ] ∗ f ′ ( b 2 ) ∗ W 3 [ 2 , 1 ] ∗ ∇ o u t ) \frac{dout}{dW_1[1,2]} = x1*f^{'}(a2)*(W_2[2,1]*f^{'}(b1)*W_3[1,1]*\nabla out +W_2[2,2]*f^{'}(b2)*W_3[2,1]*\nabla out) dW1[1,2]dout=x1f(a2)(W2[2,1]f(b1)W3[1,1]out+W2[2,2]f(b2)W3[2,1]out)
公式分为两部分:

  1. 括号外:左边红线部分
  2. 括号内
    1. 加号左边:右边红线部分
    2. 加号右边:蓝线部分

但是这样做,当模型很大的时候,计算量非常大

所以反向传播的思想就是对其中的某一个参数单独求梯度,之后更新,如下图所示:

在这里插入图片描述

计算过程如下
在这里插入图片描述

更新参数之后,继续反向传播

在这里插入图片描述

计算过程如下:
在这里插入图片描述

继续反向传播

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tPjVNP18-1630153639207)(../images/1.2/偏导的计算4.png)]

计算过程如下:
在这里插入图片描述

通用的描述如下
∇ 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}) wi,jl=f(ail)aji+1ail=f(ail)(j=1mwi,jajl+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值