[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 正向计算的实例 假设我 ...
随机推荐
- 150行代码搭建异步非阻塞Web框架
最近看Tornado源码给了我不少启发,心血来潮决定自己试着只用python标准库来实现一个异步非阻塞web框架.花了点时间感觉还可以,一百多行的代码已经可以撑起一个极简框架了. 一.准备工作 需要的 ...
- Leetcode Tags(6)Math
一.204. Count Primes Count the number of prime numbers less than a non-negative number, n. Input: 10 ...
- 11 一步一步Zabbix4.4.0系统教你实现sendEmail邮件报警
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 一步一步Zabbix4.4.0系统教你实现sendEmail邮件报警 sendEmail是一个轻量 ...
- SpringBoot整合Redis在可视化工具乱码问题,以及常用的api
pom依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
- 泛微OA系统多版本存在命令执行漏洞
0x01漏洞描述 泛微OA办公系统是一款协调办公软件. 泛微协同商务软件系统存在命令执行漏洞,攻击者可利用该漏洞获取服务器权限. 0x02漏洞危害 攻击者可以通过精心构造的请求包在受影响版本的泛微OA ...
- Charles抓取HTTPS数据包方法
设置代理端口8888 ssl代理设置 允许所有地址连接 手机获取证书之前,先在电脑安装证书,需要信任.help-->ssl-proxying-->Install Charles Root ...
- LNMP下zabbix_server安装部署一
server:192.168.112.6 agent:192.168.112.7 安装nginx编译依赖包 gcc.pcre-devel.zlib-devel 如果需要https则加上openssl- ...
- Java学习总结之基本数据类型
Java的数据类型分为基本数据类型和引用数据类型, 今天总结的是基本数据类型.在Java中,一共有八种基本数据类型,分别为整数类型(byte,short,int,long).浮点类型(float,do ...
- 0911作业-if while循环小练习
输入姑娘的年龄后,进行以下判断: 如果姑娘小于18岁,打印"不接受未成年" 如果姑娘大于18岁小于25岁,打印"心动表白" 如果姑娘大于25岁小于45岁,打印& ...
- JVM 中你不得不知的一些参数
有的同学虽然写了一段时间 Java 了,但是对于 JVM 却不太关注.有的同学说,参数都是团队规定好的,部署的时候也不用我动手,关注它有什么用,而且,JVM 这东西,听上去就感觉很神秘很高深的样子,还 ...