引言

求导法则

回顾一下之前学习过的,在求解神经网络时,我们通常使用梯度下降算法进行求解。首先,先自定义一组参数作为我们的起始值,之后计算我们需要使用的梯度,有了梯度之后就可以利用它进行迭代求解了

显而易见的是,在一个神经网络中,可能参数数目成千上万,远超过我们的想象,那么这么庞大的计算量,我们就需要一些可以辅助我们的工具。backpropagation(反向传播)可以帮助我们有效的进行渐变迭代计算(帮助计算梯度)。

求导法则

第一种情况下,一元复合函数求导,内部求导与外部求导的乘积。

第二种情况下,多元复合函数求导,划分求导路径,不同路径求导后加和就行了。

backpropagation(反向传播)

在计算损失函数函数的时候,总的损失函数可以写成每一个训练样本所构成的损失函数之和。而每一个样本所构成的损失函数为这个样本经模型输出后,模型的预测值与样本实际值之间的差距。不管是交叉熵还是均方误差都是在衡量这个差距。

那么为了分析总的损失函数,对总的损失函数求导,我们可以对每个样本的损失函数进行求导进行分析,之后进行求和分析就行了。先对上图中红色三角形的一个小的逻辑回归进行分析。

对一个逻辑回归进行分析,每个逻辑回归先进行一个线性的运算过程,在进行一个sigmoid函数处理过程,当然激活函数也是可以选择其他激活函数的。

那么对损失函数求导就可以拆成两项分布求导的积,如上图,一项是损失函数对z求导(z为逻辑回归中的线性方程),一项是z对我们需要梯度下降的参数w的求导。

z对w求导称为前向传播,损失函数对z求导称为反向传播。

 ​​

那么我们就能够很容易理解前向传播了,对于前向传播中的偏微分,这个值应该是上一级的输出值,这也代表了前向传播中某一个参数的权重。

接下来对反向传播进行求解分析,如图2-4。从这一节神经元向之后的神经元看过去,对z需要进行一个激活函数的运算(这个例子假设是sigmoid函数),后作为下一级的输入。那我们的反向传播的偏微分就可以写成图2-4中的相乘的形式,由损失函数对激活函数偏导乘激活函数对z偏导。

那么另一部分怎么求解呢?假设我们这个模型是下一级只连接了两个神经元(更多神经元如果理解这个后也就明白了),那么我们的输出结果就会对之后的两个神经元产生影响,那么我们可以用求导的链式法则去表示出上一步我们需要求解的部分,如上图。我们发现图中的两个部分还是没有求解出来,这个下文会接着说。

换一种思路去更好的理解反向传播,如上图。可以看成是一个新的网络,这个网络是和我们刚才的网络输入输出是相反的。这个网络输入了下图中的偏导数,经过上文中介绍的处理方式,得到了之前一级的偏导数,这就是一种反向传播。

而对于σ(z)函数的偏导,z在输入的时候就已经确定了具体的大小,所以σ(z)函数的偏导也就是确定的常数了。

如上图,当下一层为输出层的时候,由于我们在输入样本时是可以计算出输出值y1y2,所以这部分的偏导数也是可以很容易做出来的。

这种情况下,我们很容易想到,如果知道下一层的微分值,那么不是可以很容易求解出这一层的微分值嘛?

这时大家肯定想到了递归的思想,不断的递归就可以推到输出层从而计算出我们想要的结果。

从后往前比从前往后更加有效率

总结

最后在这个部分总结下bp,bp是为了简化对神经网络做梯度下降时带来的运算量巨大的问题。bp主要分为反向传播和前向传播。

前向传播很容易,主要传播的就是神经网络的输入。这个每一级的输入都会作为我们的偏导数来供我们去做梯度下降。

反向传播传播的是损失函数对z的偏导(z是每一级线性方程的输出),这个偏导数可以通过,从输出层到输入层的反向求解,使得运算达到进一步的简化。

李宏毅深度学习——Backpropagation相关推荐

  1. 李宏毅深度学习作业二

    任务说明 Binary classification is one of the most fundamental problem in machine learning. In this tutor ...

  2. [2022]李宏毅深度学习与机器学习课程内容总结

    [2022]李宏毅深度学习与机器学习课程内容总结 课程感受 第一讲必修 ML的三个步骤 第一讲选修 深度学习发展趋势 反向传播 从线性模型到神经网络 为什么要用正则化技术 为什么分类是用交叉熵损失函数 ...

  3. 2020李宏毅深度学习hw1

    2020李宏毅深度学习hw1 1.导入包 import sys import pandas as pd import numpy as np 2.加载数据 data = pd.read_csv('tr ...

  4. 李宏毅深度学习视频摘要

    视频地址 李宏毅深度学习(nlp)2017 视频摘要 P1 讲了RNN,LSTM ,GRU网络构造 P2 讲了卷积的原理,pooling的原理,已经不太常规的poolling方法.另外提到一种特殊的R ...

  5. 【李宏毅深度学习CP10】Self-attention(part1)

    学习心得 (1)传统的Attention是基于source端和target端的隐变量(hidden state)计算Attention的,得到的结果是源端的每个词与目标端每个词之间的依赖关系.但Sel ...

  6. [2022]李宏毅深度学习与机器学习第四讲(选修)-GNN

    [2022]李宏毅深度学习与机器学习第四讲(选修)-GNN 做笔记的目的 GNN NN4G DCNN MoNET GTA GIN 做笔记的目的 1.监督自己把50多个小时的视频看下去,所以每看一部分内 ...

  7. [2022]李宏毅深度学习与机器学习第十二讲(必修)-Reinforcement Learning RL

    [2022]李宏毅深度学习与机器学习第十二讲(必修)-Reinforcement Learning RL 做笔记的目的 What is RL Policy Gradient Version 1 Ver ...

  8. 李宏毅深度学习笔记——呕心整理版

    李宏毅深度学习笔记--呕心整理版 闲谈叨叨叨: 之前看过吴恩达的一部分课程,所以有一定理论基础,再看李宏毅的课程会有新的理解.我先以有基础的情况写完学习过程,后续再以零基础的角度补充细节概念(估计不会 ...

  9. [2022]李宏毅深度学习与机器学习第六讲(必修)-GAN

    [2022]李宏毅深度学习与机器学习第六讲(必修)-GAN 做笔记的目的 GAN generator Unconditional generator Theory Behind Tips for GA ...

最新文章

  1. Jquery DIV滚动至浏览器顶部后固定不动代码
  2. 如何加入LSGO软件技术团队?
  3. MySQL单机多实例-主主复制
  4. 阿里云云市场全新升级 瞄准需求拓生态
  5. 如何修改远程桌面连接3389端口
  6. php访问多重数组,PHP实现删除多重数组对象属性并重新赋值的方法
  7. OpenCV总结:图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
  8. java靜態常量_Java靜態變量、靜態常量、靜態方法
  9. TensorFlow使用--MNIST分类学习(BP神经网络)
  10. deepshare android,DeepShare Android 集成
  11. linux孟庆昌第六章课后题_周三多管理学第5版课后答案资料笔记和课后习题含考研真题详解...
  12. 数学建模算法与应用学习day4——综合评价与决策方法
  13. 全开源-微信小程序(附开源地址)
  14. 第三次作业——K米评测
  15. R语言--Apriori关联分析
  16. Flutter--高德地图使用指南
  17. 几块钱的超声波也能仿真?ROS2仿真之添加超声波传感器
  18. win10系统无法正常自动启动服务
  19. 微软“黑屏”被严重误读
  20. Android 模拟点击、滑动、返回

热门文章

  1. php之二叉树,PHP数据结构之实现链式二叉树与遍历
  2. linux mysql主主复制_MySQL主从复制与主主复制
  3. php统计日周月数据,PHP实现 今天、昨天、上周、本周、本月、本季度 、本年数据统计功能...
  4. uos系统断网怎么安装mysql_【学习笔记】 UOS安装MySQL
  5. flink入门_阿里巴巴为何选择Flink?20年大佬分11章讲解Flink从入门到实践!
  6. java 快排非递归_C++ 中快排的递归和非递归实现
  7. is属性用法 vue_Vue中is属性的用法 可以动态切换组件
  8. mysql.max links_Mysql的max_allowed_packet设定
  9. arduino向串口发送数据时掉包_[技术]清楚简单,一种串口触摸屏的开发流程和方法介绍...
  10. Java:异常的概念及分类、异常的处理、异常抛出及自定义异常