李宏毅《机器学习》笔记:7.反向传播

本文详细介绍了反向传播在神经网络中的作用,包括前向传播和反向传播的概念,解释了为何需要反向传播算法以及其高效性的原因。通过实例展示了反向传播的计算过程,包括链式法则、损失函数和梯度下降的应用,帮助理解反向传播在参数优化中的关键作用。
摘要由CSDN通过智能技术生成
2021.09.25
LeeML-Notes:P14
【主要参考】
https://www.jianshu.com/p/765d603c76a0
https://blog.csdn.net/weixin_38347387/article/details/82936585
https://www.bilibili.com/video/BV1Zg411T71b
https://zhuanlan.zhihu.com/p/28821475

7.1 反向传播是做啥的?

  • 前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵。
  • 反向传播一般包括两部分:前向传播反向传播
  • 前向传播,是指数据从X从输入层传入到神经网络,经过各个隐藏层得到最终损失的过程
  • 反向传播,主要是针对神经网络优化的过程中进行,在最终系统损失端计算总的损失函数,然后根据梯度递减公式,逐层的向前反馈,找到每层每个参数对损失的影响权重,进行调整,形成反向传播机制。
  • 反向传播是个什么想法呢?

    【杨鸽理解】

    • 就是我们通过正向传播找到了总的交叉熵(误差量多大),我们想减少误差,那么我们需要知道这些误差是哪里产生的(调哪个参数)?应该调整参数的权重是多少(调多少)?
    • 反向传播就是从总误差入手(输出端),开始逆向分配误差的量,来进行参数修改。

7.2 为什么会提出反向传播?

*回答不一定对,我还无法判断正误

  • 提问:

通常在神经网络中用反向传播进行参数优化,我不太明白的地方是,是因为隐藏层存在,正向传播没办法直接用梯度下降达到优化效果,才不得不通过反向优化? 还是正向传播也是可以通过一遍遍学习进行梯度下降优化参数,只是效率没有反向传播高效,被弃用?如果第二种情况 反向传播高效,高效在哪里?

  • 回答1:为什么会提出反向传播算法,我直接应用梯度下降(Gradient Descent)不行吗?

答案肯定是不行的,纵然梯度下降神通广大,但却不是万能的。梯度下降可以应对带有明确求导函数的情况,或者说可以应对那些可以求出误差的情况,比如逻辑回归(Logistic Regression),我们可以把它看做没有隐层的网络;但对于多隐层的神经网络,输出层可以直接求出误差来更新参数,但其中隐层的误差是不存在的,因此不能对它直接应用梯度下降 而是先将误差反向传播至隐层,然后再应用梯度下降,其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助.
.
转自:https://zhuanlan.zhihu.com/p/28821475

  • 回答2:反向传播高效,高效在哪里?

用反向传播算法求梯度这个过程,类似动态规划求解多阶段决策优化问题。BP算法自底向上逐步得到误差函数相对所有变量的偏导数,消除了节点重复计算的问题,因而其求解效率非常高。
.
转自:https://www.zhihu.com/question/373841162/answer/1088443414

7.3 反向传播计算过程

7.3.1 预备知识

  • 链式法则(Chain Rule)

在这里插入图片描述

  • 损失函数(Loss function)

定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的,用L表示

  • 代价函数(Cost function)

定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。

  • 总体损失函数(Total loss function)

总体损失函数(Total loss function)是定义在整个训练集上面的,也就是所有样本的误差的总和。也就是平时我们反向传播需要最小化的值。

7.3.2 第一步:Forward pass部分 算总体损失函数

详见第六章:《6.深度学习简介》

7.3.3 符号体系

符号系统每本教材用的都不太一样,我们用王老师的符号系统大致了解一下神经网络符号书写基本习惯

如何理解“梯度下降法”?什么是“反向传播”?通过一个视频,一步一步全部搞明白

王老师这段视频讲的很好,从29分钟开始看

在这里插入图片描述

  • l层的输入是l-1层输出的 a [ l − 1 ] a^{[l-1]} a[l1]一共有n个感知机;还有l层的 w [ l ] , b [ l ] w^{[l]},b^{[l]} w[l],b[l],他们都是向量。
  • 其中l层有i个感知机, w i w_i wi说的就是第i个感知机的w,每个感知机w有n维,如图i=2 他的激活函数可能是 Z 2 [ l ] = w 2 , 1 [ l ] x + w 2 , 2 [ l ] x + . . . w 2 , n [ l ] x + b Z_2^{[l]}=w_{2,1}^{[l]}x+w_{2,2}^{[l]}x+...w_{2,n}^{[l]}x+b Z2[l]=w2,1[l]x+w2,2[l]x+...w2,n[l]x+b

在这里插入图片描述

  • 【注意】注意w的形式是谁乘谁 要结合着图看,容易没有转置搞错。
  • 只有头标的表示这一层,如 a [ l − 1 ] a^{[l-1]} a[l1],表示l-1层感知机输出的结果

在这里插入图片描述

  • 圆括号代表训练集的个数,方括号代表第几层. 比如我们现在有1w笔数据,那么这里面m=1w
  • 我们把l层作为输出层,那么如图这就是个多分类问题
  • 单看一笔数据k, x ( k ) x^{(k)} x(k)就是我们第k笔数据,其中x是个向量,有j维。如 Z [ 1 ] = w 1 [ 1 ] x + w 2 [ 1 ] x + b Z^{[1]}=w_{1}^{[1]}x+w_{2}^{[1]}x+b Z[1]=w1[1]x+w2[1]x+b;那么这是j=2,x就是个二维数据
  • 图中用J来代表总损失,也就是损失函数

7.3.4 第二步:Backward pass部分

输出层

在这里插入图片描述
在这里插入图片描述

  • 这里面把输出成看成了l+1层
  • 也就是l+1层的梯度方向是对参数 w i , b i w_i,b_i wibi下降最快的方向,也是l-1层的输出 a [ l − 1 ] a^{[l-1]} a[l1]下降最快方向
  • 这里需要用到莲师求导法则

    在这里插入图片描述

  • J ( a i [ l ] ) J(a_i^{[l]}) J(ai[l])是第l层第i个感知机的总误差

中间层
把l-1层看成新的l层 方法一样,重复操作

在这里插入图片描述

在这里插入图片描述

【输入层】

在这里插入图片描述

  • 直到到 a [ 0 ] a^{[0]} a[0],这个是输入值,是常数,这个分量就不存在了,
    在这里插入图片描述
    到这,所有的系数全部修改完成,整个神经网络第一轮学习,所有系数的更新迭代完成一遍。

7.4 实例展示过程

在这里插入图片描述
实例来源:https://blog.csdn.net/weixin_38347387/article/details/82936585,
*计算值有些有点出入,但数据是都以原博客为主,重在会意

  • 输入数据 i1=0.05,i2=0.10;

  • 输出数据 o1=0.01,o2=0.99;

  • 初始权重 w1=0.15,w2=0.20,w3=0.25,w4=0.30; w5=0.40,w6=0.45,w7=0.50,w8=0.55

  • 目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

7.4.1 Step 1: Forward pass

  • z = w 1 x + w 2 x + b z=w_1x+w_2x+b z=w1x+w2x+b
  • a = σ ( z ) = 1 1 + e − z a=\sigma(z)=\cfrac{1}{1+e^{-z}} a=σ(z)=1+ez1

【1层】

在这里插入图片描述

  • z h 1 = 0.15 ∗ 0.05 + 0.2 ∗ 0.1 + 0.35 = 0.3775 z_{h1}=0.15*0.05+0.2*0.1+0.35=0.3775 zh1=0.150.05+0.20.1+0.35=0.3775
  • a h 1 = 1 1 + e − 0.3775 = 0.593269992 a_{h1}=\cfrac{1}{1+e^-0.3775}=0.593269992 ah1=1+e0.37751=0.593269992

在这里插入图片描述

  • z h 2 = 0.25 ∗ 0.05 + 0.3 ∗ 0.1 + 0.35 = 0.3925 z_{h2}=0.25*0.05+0.3*0.1+0.35=0.3925 zh2=0.250.05+0.30.1+0.35=0.3925
  • a h 2 = 1 1 + e − 0.3925 = 0.596884378 a_{h2}=\cfrac{1}{1+e^-0.3925}=0.596884378 ah2=1+e0.39251=0.596884378

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

羊老羊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值