Task 04深度学习介绍和反向传播


前言

本文对深度学习的步骤做了一个简单的介绍,以及一个很重要的机制—反向传播。

一、深度学习的三个步骤

前面我们已经知道了机器学习的三个步骤,深度学习同样具有相似的三个步骤。
在这里插入图片描述
Step1:神经网络
Step2:模型评估
Step3:选择最优函数

Step1:神经网络

神经网络中的节点类似我们人类的神经元,不同的连接方式会产生不同的网络结构,连接方式是可以自己手动设置的。
以全连接前馈神经网络为例:前馈也称前向,即信号是单向流动的,输入信号后,信号从前一层流向后一层,直到输出层,任意两层间的连接是没有反馈的。
在这里插入图片描述
当已知权重和偏差时,输入 ( 1 , − 1 ) ​ (1,−1)​ (1,1)的结果:
在这里插入图片描述
当已知权重和偏差时,输入 ( − 1 , 0 ) (−1,0) (1,0)的结果:

在这里插入图片描述
我们可以看出,当权重和偏差确定的时候,就可以看做一个函数,它的输入为一个向量,输出也是一个向量。当我们设置不同的权重和偏差时,就会有一个很大的函数集合,是之前学过的模型不能表达的情况,这就是深度学习。
在这里插入图片描述
神经网络的组成:输入层(1层)、隐含层(N层)、输出层(1层)

那么为什么叫深度学习呢?因为deep = many hidden layers,随着层数的增加,错误率在降低,但计算的复杂度也随之上升。为了解决这个问题,我们引入矩阵运算来提升计算效率。
在这里插入图片描述
拿这个简单的例子来说,把输入的 1 1 1, − 1 -1 1 当做一个向量,把权重值也看成一个向量,通过矩阵乘法再加上偏差(也是向量),经过激活函数,得到最终结果。神经网络的做法也是如此:
在这里插入图片描述
那么我们需要多少层,每一层又有多少个神经元呢?这个问题需要反复试错,得出一些经验,再加上自己的直觉来解决。对于网络结构,可以自行设计。

Step2: 模型评估

在这里插入图片描述
对于模型的评估,我们一般采用损失函数来评价模型的好坏,对于神经网络来说,我们采用交叉熵函数来对 y y y y ^ \hat y y^的损失进行计算,最后就是调整参数,让交叉熵越小越好。
在这里插入图片描述
对于损失,我们不单单要计算一笔数据的,而是要计算所有训练数据的损失,然后把所有训练数据的损失相加,得到一个总体损失 L L L。接下来就是在function set里面找到一组函数能使 L L L最小,或者是找一组神经网络的参数\thetaθ,来最小化总体损失 L L L

Step3:选择最优函数

我们依然选用梯度下降的方法进行求解。
在这里插入图片描述
在这里插入图片描述
具体流程: θ \theta θ是一组包含权重和偏差的参数集合,随机初始化一个初值,接下来计算每个参数对应的偏微分,得到的一个偏微分集合 ∇ L \nabla{L} L即梯度,有了这些偏微分,就可以不断更新梯度,得到新的参数,不断重复这个过程,就能得到一组最好的参数使得损失函数的值最小。

二、反向传播机制

损失函数是定义在单个训练样本上的,即一个样本的误差,例如分类时预测的类别和实际类别的区别,是一个样本的,用 L L L表示。
代价函数是定义在整个训练集上的,也就是所有样本的误差总和的平均,即损失函数总和的平均。
总体损失函数是定义在整个训练集上的,也就是所有样本的误差的总和,即平时我们反向传播需要最小化的值。
在这里插入图片描述

链式法则

在这里插入图片描述

前向传播

在介绍反向传播之前,我们先来看一下前向传播。

在这里插入图片描述
取出神经网络的一个神经元来看(红色三角区域):

在这里插入图片描述
z = x 1 w 1 + x 2 w 2 + b z=x_1w_1+x_2w_2+b z=x1w1+x2w2+b
根据求微分的原理,前向传播的运算规律为:
∂ z ∂ w 1 = x 1 \frac{\partial z}{\partial w_1} = x_1 w1z=x1
∂ z ∂ w 2 = x 2 \frac{\partial z}{\partial w_2} = x_2 w2z=x2
这里得到的 x 1 x_1 x1 x 2 x_2 x2就是我们刚刚的输入值。

反向传播

在这里插入图片描述
由于 l l l是最后一层,所以 ∂ l ∂ z \frac{\partial l}{\partial z} zl计算起来就相对困难。
在这里插入图片描述
利用链式法则我们依然可以来做这件事,但是 ∂ l ∂ z ′ \frac{\partial l}{\partial z \prime} zl ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z \prime \prime} zl是我们无法得知的。但我们可以换个角度来看这个问题,现在有另外一个神经元,把前向的过程逆过来,其中 σ ′ ( z ) {\sigma}'(z) σ(z)是常数,它在向前传播的时候就已经确定了。
在这里插入图片描述
Case 1:输出层
假设 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ ​ \frac{\partial l}{\partial z''}​ zl是最后一层的隐藏层, 也就是 y 1 y_1 y1 y 2 y_2 y2是输出值,那么可以直接计算结果,如下图所示。
在这里插入图片描述
Case 2:不是输出层

但是如果不是最后一层,计算 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z''} zl​ ​的话就需要通过链式法则继续计算了。
在这里插入图片描述
对于这个问题,我们要继续计算后面的 ∂ l ∂ z a \frac{\partial l}{\partial z_a} zal ∂ l ∂ z b \frac{\partial l}{\partial z_b} zbl,然后通过乘 w 5 w_5 w5 w 6 w_6 w6得到 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl,但是要是 ∂ l ∂ z a \frac{\partial l}{\partial z_a} zal ∂ l ∂ z b \frac{\partial l}{\partial z_b} zbl也不知道,那么我们就继续往后面层计算,一直到碰到输出值,得到输出值之后再反向往输入方向计算下去。
在这里插入图片描述
我们可以从最后一个 ∂ l ∂ z 5 \frac{\partial l}{\partial z_5} z5l ∂ l ∂ z 6 \frac{\partial l}{\partial z_6} z6l 看,因为 ∂ l ∂ z 5 \frac{\partial l}{\partial z_5} z5l ∂ l ∂ z 6 \frac{\partial l}{\partial z_6} z6l 比较容易通过output求出来,然后继续往前求 ∂ l ∂ z 3 \frac{\partial l}{\partial z_3} z3l ∂ l ∂ z 4 \frac{\partial l}{\partial z_4} z4l ,再继续求 ∂ l ∂ z 1 \frac{\partial l}{\partial z_1} z1l ∂ l ∂ z 2 \frac{\partial l}{\partial z_2} z2l, 最后我们就得到下图的结果:
在这里插入图片描述
我们的目标是:求 ∂ z ∂ w \frac{\partial z}{\partial w} wz(前向部分)和 ∂ l ∂ z \frac{\partial l}{\partial z} zl ( 反向部分 ),然后把 ∂ z ∂ w \frac{\partial z}{\partial w} wz ∂ l ∂ z \frac{\partial l}{\partial z} zl相乘,我们就可以得到 ∂ l ∂ w \frac{\partial l}{\partial w} wl ,进而所有神经网络的参数我们就都可以得到了,然后再用梯度下降就可以不断更新,得到损失最小的函数了。
在这里插入图片描述

总结

本文主要讲解了深度学习的三个步骤,以及链式法则、前向传播,反向传播机制,需要有一些微积分的简单基础就可以明白整个过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Never give up

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

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

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

打赏作者

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

抵扣说明:

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

余额充值