CS231n-2017 第4讲 反向传播算法与神经网络

21 篇文章 1 订阅
16 篇文章 4 订阅

一. 反向传播算法

计算图模型

设有算式

f(W,x)=11+e(ω0x0+ω1x1+ω2) f ( W , x ) = 1 1 + e − ( ω 0 x 0 + ω 1 x 1 + ω 2 )

使用计算图模型展示其前向计算过程,以及梯度的后向传播过程如下图所示:

图 1. 计算图模型展示前向与后向传播

在反向传播过程中,加法门像一个分发器,将传过来的梯度值分发给加法门的输入;最大操作门像一个路由器,将传过来的梯度值导向最大值;乘法门像一个交换器,将传过来的梯度值分别乘上各自的乘数。

:个人认为计算图适合可视化地展示前向计算和后向传播过程,但不适合指导编程。(虽然在编程时,可以把各个运算操作抽象为对象,然后对每一类门规定其前向与后向算法。)后面将针对神经网络给出基于代数表达的后向传播算法。

二. 神经网络

网络结构

考虑线性多分类器中的系数 ω ω ,其可以视为一个模板向量,最终输出的是每幅图像在各个类别的模板向量上的得分。这个模型的一个不足之处是各个类别仅有一个模板向量。比如现在要匹配一匹马,马可能头朝右,可能头朝左,还可能头朝下在吃草。那么一个模板向量就不够用了。那么考虑一个类别对应多个模板向量,然后再添加一层,将一幅图在多个模板向量上的得分综合一下,得到在输出类别上的得分,这样就构成了一个二维神经网络的雏形。但又考虑到线性函数的复合仍为线性函数,因此,在两个线性函数之间添加一个非线性激活函数。两层神经网络的结果图示如下:

图 2. 两层神经网络结构图

其数学表达为:

f=W2max(0,W1x) f = W 2 max ( 0 , W 1 x )

反向传播算法——基于代数的表达

由于神经网络由一层一层的类似结构堆叠而成,因此可以考虑对某一层进行偏导计算。设该层结构如下图示,则其输入输出关系可表达为

z⃗ =h(a⃗ )=h(Wx⃗ ) z → = h ( a → ) = h ( W ⋅ x → )

图 3. 某神经网络层输入输出图示

注意,上述表达中已经将偏置项吸收进了 W W 。则有

[z1zP]=[h(row1Wx)h(rowPWx)]ziW=h(ai)[0xT0]ithrow

设损失函数关于 z⃗  z → 的偏导已求出,记为 L/z⃗  ∂ L / ∂ z → ,则

LW=iLziziW=[Lz⃗ h(a⃗ )]x⃗ T ∂ L ∂ W = ∑ i ∂ L ∂ z i ∂ z i ∂ W = [ ∂ L ∂ z → ⊙ h ′ ( a → ) ] ⋅ x → T

其中 表示Hadamard积,即两个同维向量对应元素相乘。

现考虑 L/z⃗  ∂ L / ∂ z → 。事实上,对下一层求 L/z⃗  ∂ L / ∂ z → ,即对上一层求 L/x⃗  ∂ L / ∂ x →

zix⃗ =h(ai)[rowiW]TLx⃗ =iLzizix⃗ =WT[Lz⃗ h(a⃗ )] ∂ z i ∂ x → = h ′ ( a i ) ⋅ [ r o w i W ] T ⇒ ∂ L ∂ x → = ∑ i ∂ L ∂ z i ∂ z i ∂ x → = W T ⋅ [ ∂ L ∂ z → ⊙ h ′ ( a → ) ]

:

  • 若要获得偏置项 b⃗  b → 的梯度,仅需从 W W 的梯度表达中将最后一列单独拆出。
  • 对于输出层,L/z单独计算。

一些有用的链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值