第四周【任务2】前向后向算法(打卡)

任务标题:花书6.4-6.6章 (前向后向算法)

任务简介:前馈神经网络架构设计,反向传播算法 (视频:前向后向算法,前馈神经网络技巧)

详细说明:

6.4 架构设计

  • 神经网络设计的一个关键点是确定它的架构:网络的深度,每一层的宽度。更深层的网络每层可使用更少的单元数(更少的参数),通常更容易泛化到测试集,但更难优化。必须通过实验来确定理想的架构。

6.5 反向传播和其他的微分算法

  • 在基于梯度的学习中,我们需要计算代价函数关于参数的梯度。反向传播算法基于微积分中的链式法则,简单高效地计算梯度。
  • 6.5.9,6.5.10不重要

6.6 历史小记

学习目标:

a.前向传播与反向传播算法,以及参数更新

b.掌握并推导激活函数导数表达式,了解不同激活函数的优缺点

c.了解如何初步进行网络架构设计,一般通过实验进行验证

d.掌握计算图和链式法则,能够推导MLP反向传播公式

e.了解神经网络的历史

打卡要求(不少于2张图):

a.推导损失函数对线性层的梯度

b.推导损失函数对非线性层的梯度

c.思考一般反向传播的复杂度大概是前向传播的多少倍

d.掌握前向后向的整个计算过程(不需要提交)

思考一般反向传播的复杂度大概是前向传播的多少倍

我们假设前向传播 y = W x y=Wx y=Wx。对于反向传播,我们分别要求y对x和对w的导数。 也就是先获得J对输出y, 输出x的梯度,不断往前传
∂ J ∂ x = ∂ J ∂ y W ← ∂ J ∂ x ← ∂ J ∂ y \frac{\partial J}{\partial x}=\frac{\partial J}{\partial y} W\\ \leftarrow \frac{\partial J}{\partial x} \leftarrow \frac{\partial J}{\partial y} xJ=yJWxJyJ
然后再获得J对w的梯度去更新参数.
∂ J ∂ W = ∂ J ∂ y ⋅ x W t + 1 = W t − λ ∂ J ∂ W t \begin{array}{r} \dfrac{\partial J}{\partial W}=\dfrac{\partial J}{\partial y} \cdot x \\ W_{t+1}=W_{t}-\lambda \dfrac{\partial J}{\partial W_{t}} \end{array} WJ=yJxWt+1=WtλWtJ
可见,反向传播我们就是要计算三个式子
∂ J ∂ x = ∂ J ∂ y W ∂ J ∂ W = ∂ J ∂ y ⋅ x W t + 1 = W t − λ ∂ J ∂ W t \frac{\partial J}{\partial x}=\frac{\partial J}{\partial y} W\\ \dfrac{\partial J}{\partial W}=\dfrac{\partial J}{\partial y} \cdot x \\ W_{t+1}=W_{t}-\lambda \dfrac{\partial J}{\partial W_{t}} xJ=yJWWJ=yJxWt+1=WtλWtJ
假设 W , x W, x W,x都是矩阵,那么前向传播只用算一次矩阵乘法,但是反向传播就要算两次矩阵乘法【梯度更新不涉及矩阵乘法】。因此复杂度就是2倍!

你可能感兴趣的:(深度学习花书第7期)