李宏毅机器学习笔记——深度学习介绍及反向传播

深度学习的三个步骤

与之前的回归内容一样,可以概括为三个步骤。

第一步——定义模型(NN)

像神经元一样,设置输入层、隐藏层和输出层。层与层之间的权重我们用 θ \theta θ 表示。
“简单来说,深度学习就是有很多个隐藏层的神经网络。”

全连接是连接不同的神经元一种方式。当前层的任意神经元与下一层的每个神经元都有连接。
在这里插入图片描述
矩阵运算:
![在这里插入图片描述](https://img-blog.csdnimg.cn/eed908ada0444c47b5caa75fc6890469.pn
于是一个NN,就相当于函数内嵌函数(有几层隐藏层就内嵌几次)进行运算。这种运算用GPU速度会相对快些。

  • 一般需要多少层隐藏层和多少个神经元是由经验、实验与尝试确定的,没有绝对的方法。
  • 一些方法(Evolutionary Artificial Neural Netwo)可以自动确定神经网络的结构。

第二步——定义模型的好坏

假设我们做手写数字辨识。
在这里插入图片描述
这里我们用模型预测的结果和真实值之间的交叉熵之和 L ( θ ) = Σ i = 1 n C i L(\theta)=\Sigma^n_{i=1}C^i L(θ)=Σi=1nCi 作为Loss Function,来定义模型预测的准确与否。交叉熵越小越好。

第三步——找到较优模型

寻找参数 θ ∗ \theta^* θ使得Loss Function最小的方法就是运用梯度下降(Gradient Descent),方式与回归内容中的一样,不再赘述。

  • 深度学习中神经网络越深越好?
    通过实验可以观测到,神经网络越深表现越好。有一个通用的理论:”对于任何一个连续的函数,都可以用足够多的隐藏层来表示“。

反向传播

神经网络里有很多的参数(一些模型里甚至有百万个),为了使梯度下降能够更有效率,我们运用到反向传播。

链式法则

反向传播中运用到地数学基础是链式法则
在这里插入图片描述

具体细节

神经网络里的Loss Function是: L ( θ ) = Σ i = 1 n C i L(\theta)=\Sigma^n_{i=1}C^i L(θ)=Σi=1nCi
则Loss Function对某个参数 w w w的偏微分是: ∂ L ( θ ) ∂ w = Σ i = 1 n ∂ C i ( θ ) ∂ w \frac{\partial L(\theta)}{\partial w}=\Sigma^n_{i=1}\frac{\partial C^i(\theta)}{\partial w} wL(θ)=Σi=1nwCi(θ)
我们下面具体计算某一个data的 ∂ C i ( θ ) ∂ w \frac{\partial C^i(\theta)}{\partial w} wCi(θ),后续只需求和即可。

在这里插入图片描述
通过链式法则我们知道, ∂ C ∂ w \frac{\partial C}{\partial w} wC主要由 ∂ z ∂ w \frac{\partial z}{\partial w} wz ∂ C ∂ z \frac{\partial C}{\partial z} zC组合成。

我们先关注 ∂ z ∂ w \frac{\partial z}{\partial w} wz这一部分。
通过神经网络一层传导的式子: z = x 1 w 1 + x 2 w 2 + . . . + b z=x_1w_1+x_2w_2+...+b z=x1w1+x2w2+...+b,我们可以观察到 ∂ z ∂ w \frac{\partial z}{\partial w} wz就等于 x x x
x x x的计算就是神经网络由前往后一层层计算得到的,所以这个过程称为:Forward pass

再关注 ∂ C ∂ z \frac{\partial C}{\partial z} zC这一部分。我们分为两种情况。

  • Case 1. 输出层
    我们可以直接计算 ∂ C ∂ z = ∂ y ∂ z ∂ C ∂ y \frac{\partial C}{\partial z}=\frac{\partial y}{\partial z}\frac{\partial C}{\partial y} zC=zyyC
    其中 ∂ C ∂ y \frac{\partial C}{\partial y} yC我们是用交叉熵公式可以算得。
  • Case 2. 非输出层
    在非输出层,计算出 z z z后,还需要通过激活函数 a = σ ( z ) a=\sigma(z) a=σ(z)才传递到下一层,所以我们将 ∂ C ∂ z \frac{\partial C}{\partial z} zC进一步分解成 ∂ a ∂ z ∂ C ∂ a \frac{\partial a}{\partial z}\frac{\partial C}{\partial a} zaaC
    ∂ a ∂ z \frac{\partial a}{\partial z} za σ − 1 ( z ) \sigma^{-1}(z) σ1(z),它是激活函数的反函数的值。
    ∂ C ∂ a \frac{\partial C}{\partial a} aC这一项我们可以化成: ∂ z 1 ∂ a ∂ C ∂ z 1 + . . . + ∂ z k ∂ a ∂ C ∂ z k = w 1 ∂ C ∂ z 1 + . . . + w k ∂ C ∂ z k \frac{\partial z^{1}}{\partial a}\frac{\partial C}{\partial z^{1}}+...+\frac{\partial z^{k}}{\partial a}\frac{\partial C}{\partial z^{k}}=w_1\frac{\partial C}{\partial z^{1}}+...+w_k\frac{\partial C}{\partial z^{k}} az1z1C+...+azkzkC=w1z1C+...+wkzkC.
    其中 z i z^{i} zi是下一层第i个与当前神经元连接的神经元, w i w_i wi就是其权重。

那么我们在计算的时候,我们从后往前算,就能一步步得到每一层 ∂ C ∂ z \frac{\partial C}{\partial z} zC的值,这个过程就称为:Backward pass

通过Forward pass与Backward pass,我们便可以算出 ∂ C ∂ w \frac{\partial C}{\partial w} wC的值,进一步完成梯度下降的计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brandon1017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值