[ch02-02] 非线性反向传播
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI,
点击star加星不要吝啬,星越多笔者越努力。
2.2 非线性反向传播
2.2.1 提出问题
在上面的线性例子中,我们可以发现,误差一次性地传递给了初始值w和b,即,只经过一步,直接修改w和b的值,就能做到误差校正。因为从它的计算图看,无论中间计算过程有多么复杂,它都是线性的,所以可以一次传到底。缺点是这种线性的组合最多只能解决线性问题,不能解决更复杂的问题。这个我们在神经网络基本原理中已经阐述过了,需要有激活函数连接两个线性单元。
下面我们看一个非线性的例子,如图2-8所示。
图2-8 非线性的反向传播
其中\(1<x<=10,0<y<2.15\)。假设有5个人分别代表x、a、b、c、y:
正向过程
- 第1个人,输入层,随机输入第一个x值,x取值范围(1,10],假设第一个数是2
- 第2个人,第一层网络计算,接收第1个人传入x的值,计算:\(a=x^2\)
- 第3个人,第二层网络计算,接收第2个人传入a的值,计算b:\(b=\ln (a)\)
- 第4个人,第三层网络计算,接收第3个人传入b的值,计算c:\(c=\sqrt{b}\)
- 第5个人,输出层,接收第4个人传入c的值
反向过程
- 第5个人,计算y与c的差值:\(\Delta c = c - y\),传回给第4个人
- 第4个人,接收第5个人传回\(\Delta c,计算\Delta b:\Delta b = \Delta c \cdot 2\sqrt{b}\)
- 第3个人,接收第4个人传回\(\Delta b,计算\Delta a:\Delta a = \Delta b \cdot a\)
- 第2个人,接收第3个人传回\(\Delta a,计算\Delta x:\Delta x = \Delta a / 2x\)
- 第1个人,接收第2个人传回\(\Delta x,更新x:x = x - \Delta x\),回到第1步
提出问题:假设我们想最后得到c=2.13的值,x应该是多少?(误差小于0.001即可)
2.2.2 数学解析解
\[c=\sqrt{b}=\sqrt{\ln(a)}=\sqrt{\ln(x^2)}=2.13\]
\[x = 9.6653\]
2.2.3 梯度迭代解
\[
\frac{da}{dx}=\frac{d(x^2)}{dx}=2x=\frac{\Delta a}{\Delta x} \tag{1}
\]
\[
\frac{db}{da} =\frac{d(\ln{a})}{da} =\frac{1}{a} = \frac{\Delta b}{\Delta a} \tag{2}
\]
\[
\frac{dc}{db}=\frac{d(\sqrt{b})}{db}=\frac{1}{2\sqrt{b}}=\frac{\Delta c}{\Delta b} \tag{3}
\]
因此得到如下一组公式,可以把最后一层\(\Delta c\)的误差一直反向传播给最前面的\(\Delta x\),从而更新x值:
\[
\Delta c = c - y \tag{4}
\]
\[
\Delta b = \Delta c \cdot 2\sqrt{b} \tag{根据式3}
\]
\[
\Delta a = \Delta b \cdot a \tag{根据式2}
\]
\[
\Delta x = \Delta a / 2x \tag{根据式1}
\]
我们给定初始值\(x=2,\Delta x=0\),依次计算结果如表2-2。
表2-2 正向与反向的迭代计算
方向 | 公式 | 迭代1 | 迭代2 | 迭代3 | 迭代4 | 迭代5 |
---|---|---|---|---|---|---|
正向 | \(x=x-\Delta x\) | 2 | 4.243 | 7.344 | 9.295 | 9.665 |
正向 | \(a=x^2\) | 4 | 18.005 | 53.934 | 86.404 | 93.233 |
正向 | \(b=\ln(a)\) | 1.386 | 2.891 | 3.988 | 4.459 | 4.535 |
正向 | \(c=\sqrt{b}\) | 1.177 | 1.700 | 1.997 | 2.112 | 2.129 |
标签值y | 2.13 | 2.13 | 2.13 | 2.13 | 2.13 | |
反向 | \(\Delta c = c - y\) | -0.953 | -0.430 | -0.133 | -0.018 | |
反向 | \(\Delta b = \Delta c \cdot 2\sqrt{b}\) | -2.243 | -1.462 | -0.531 | -0.078 | |
反向 | \(\Delta a = \Delta b \cdot a\) | -8.973 | -26.317 | -28.662 | -6.698 | |
反向 | \(\Delta x = \Delta a / 2x\) | -2.243 | -3.101 | -1.951 | -0.360 |
表2-2,先看“迭代-1”列,从上到下是一个完整的正向+反向的过程,最后一行是-2.243,回到“迭代-2”列的第一行,2-(-2.243)=4.243,然后继续向下。到第5轮时,正向计算得到的c=2.129,非常接近2.13了,迭代结束。
运行示例代码的话,可以得到如下结果:
how to play: 1) input x, 2) calculate c, 3) input target number but not faraway from c
input x as initial number(1.2,10), you can try 1.3:
2
c=1.177410
input y as target number(0.5,2), you can try 1.8:
2.13
forward...
x=2.000000,a=4.000000,b=1.386294,c=1.177410
backward...
delta_c=-0.952590, delta_b=-2.243178, delta_a=-8.972712, delta_x=-2.243178
......
forward...
x=9.655706,a=93.232666,b=4.535098,c=2.129577
backward...
done!
为节省篇幅只列出了第一步和最后一步(第5步)的结果,第一步时c=1.177410,最后一步时c=2.129577,停止迭代。
代码位置
ch02, Level2
[ch02-02] 非线性反向传播的更多相关文章
- 神经网络训练中的Tricks之高效BP(反向传播算法)
神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 ...
- 前馈神经网络-反向传播(Back Propagation)公式推导走读
构造:输入神经元个数等于输入向量维度,输出神经元个数等于输出向量维度.(x1=(1,2,3),则需要三个输入神经元) 一 前向后传播 隐层:
- (3)Deep Learning之神经网络和反向传播算法
往期回顾 在上一篇文章中,我们已经掌握了机器学习的基本套路,对模型.目标函数.优化算法这些概念有了一定程度的理解,而且已经会训练单个的感知器或者线性单元了.在这篇文章中,我们将把这些单独的单元按照一定 ...
- 前向传播算法(Forward propagation)与反向传播算法(Back propagation)
虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解.因此特意先对深度学习中的相关基础概念做一下总结.先看看前向传播算法(Forward propagation)与 ...
- Cs231n课堂内容记录-Lecture 4-Part1 反向传播及神经网络
反向传播 课程内容记录:https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit 雅克比矩阵(Jacobian matrix) 参见ht ...
- tensorflow进阶篇-5(反向传播1)
这里将讲解tensorflow是如何通过计算图来更新变量和最小化损失函数来反向传播误差的:这步将通过声明优化函数来实现.一旦声明好优化函数,tensorflow将通过它在所有的计算图中解决反向传播的项 ...
- [NN] 对于BackPropagation(BP, 误差反向传播)的一些理解
本文大量参照 David E. Rumelhart, Geoffrey E. Hinton and Ronald J. Williams, Learning representation by bac ...
- [DeeplearningAI笔记]序列模型1.3-1.4循环神经网络原理与反向传播公式
5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.3循环神经网络模型 为什么不使用标准的神经网络 假如将九个单词组成的序列作为输入,通过普通的神经网网络输出输出序列, 在 ...
- [ch02-01] 线性反向传播
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 2.1 线性反向传播 2.1.1 正向计算的实例 假设我 ...
随机推荐
- 斯坦福机器学习课程 Exercise 习题二
Exercise 2: Linear Regression 话说LaTex用起来好爽 Matlab代码 迭代并且画出拟合曲线 Linear regression 公式如下 hθ(x)=θTx=∑i=0 ...
- SteamVR Plugin
使用HTC vive基于unity做虚拟现实,需要用到steamVR插件,最近查找了很多资料,稍微做一下总结. 做虚拟现实无非是头显在场景中的camera功能以及手柄的操作功能. (一)camera以 ...
- SpringBoot整合Mybatisplus3.x之CRUD(一)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- 使用MySQL,SQL_MODE有哪些坑,你知道么?
SQL_MODE是MySQL中的一个系统变量(variable),可由多个MODE组成,每个MODE控制一种行为,如是否允许除数为0,日期中是否允许'0000-00-00'值. 为什么需要关注SQL_ ...
- K近邻(k-Nearest Neighbor,KNN)算法,一种基于实例的学习方法
1. 基于实例的学习算法 0x1:数据挖掘的一些相关知识脉络 本文是一篇介绍K近邻数据挖掘算法的文章,而所谓数据挖掘,就是讨论如何在数据中寻找模式的一门学科. 其实人类的科学技术发展的历史,就一直伴随 ...
- Vue.js应用基础
声明 这篇博文是我的Vue学习记录,其中参杂了不少我个人的理解,由于我并没有继续学习Vue的源码,所以不能保证这些理解都是正确的.如果这篇博文有幸被你读到,请带着批判的心情去审视它. 如果你发现了其中 ...
- Opencv python(3)| cv. VideoCapture.get() 参数介绍
cv2.VideoCapture.get () 的 (0-18)参数 cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位 cv2.Video ...
- RouterOS安装以及搭建DHCP PPPoE PPTP L2TP服务
1.安装routeros https://mikrotik.com/download 网站下载routeros镜像 vdi格式 :VirtualBox默认创建的硬盘文件格式 vmdk格式:VMware ...
- 小白学 Python(22):time 和 calendar 模块简单使用
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- MySQL每个分类的前几条记录
MySQL 获取所有分类和每个分类的前几条记录 比如有文章表 Article(Id,Category,InsertDate) 现在要用SQL找出每种类型中时间最新的前N个数据组成的集合 SELECT ...