本文给出了一个非常小的神经网络。在这个网络上,把反向传播算法的核心逻辑给讲清楚(这是相当不得了的,是作者的得意之作)。
1,网络结构
整个网络结构只有两个神经元,一个是输入层的神经元,也就是输入层只有一个神经元,一个输出层的神经元,也就是输出层只有一个神经元。如图所示。
输入神经元记为i1,输出神经元记为o1,输出神经元的total net input记为net o1,它的输出记为out o1。
连接i1和o1的连接的权重为w,初始值为3。
O1的传导(激活)函数为f(x) = x。
为了尽快说明问题,我们没有使用非线性函数,而是使用一个线性函数。
2,训练数据
训练数据如下:
训练数据 | x | y |
0 | 0 | |
1 | 2 | |
2 | 4 | |
3 | 6 | |
4 | 8 | |
5 | 10 |
训练数据体现了数据的2倍数关系。即真实的数据体现的关系是f(x)=2x。
但是现在w=3,我们来看看,反向传播算法如何把3修正到2。
备注:实际训练的时候,我们只用了一个训练样本,即<1,2>。
3,前向传播
前向传播过程为:
(1)加权和:net o1 = w * i1;
(2)激活函数:out o1 = f(net o1) = net o1;
4,误差、反向传播、迭代
假设现在输出out o1,但是真实的输出是target o1,那么误差为Error= (target o1 – out o1)2。求Error对w的导数,它体现的是,w的变化如何引起Error的变化,这个变化量,将用来调整w。
备注:根据Error= (target o1 – out o1)2,out o1 = f(net o1) = net o1,net o1 = w * i1等三个式子、以及链式法则,求导数。
W的该变量w+ = 。
修改权重的公式,为 w = w – w+。为学习率,表现了学习的激进程度。
我们造一个excel表,进行多轮次迭代,每次都用input =1, output=2来进行训练,看看w权重的两次迭代的修正结果,发现它确实不断地逼近2。
请读者打开压缩包中的excel表格查看一下。
(提示:请读者注意excel表格中迭代表的编号为1的行对应的各个单元格的公式,就是对上述推导过程的具体实现,从w改变到w’后,继续进行后续的迭代,迭代20次,w已经非常接近2.0了)
迭代 | w | input(i1) | net o1 | out o1 | target o1 | Error | 导数 | 学习率 | w' |
1 | 3.0000 | 1.0000 | 3.0000 | 3.0000 | 2.0000 | 1.0000 | 2.0000 | 0.1000 | 2.8000 |
2 | 2.8000 | 1.0000 | 2.8000 | 2.8000 | 2.0000 | 0.6400 | 1.6000 | 0.1000 | 2.6400 |
3 | 2.6400 | 1.0000 | 2.6400 | 2.6400 | 2.0000 | 0.4096 | 1.2800 | 0.1000 | 2.5120 |
4 | 2.5120 | 1.0000 | 2.5120 | 2.5120 | 2.0000 | 0.2621 | 1.0240 | 0.1000 | 2.4096 |
5 | 2.4096 | 1.0000 | 2.4096 | 2.4096 | 2.0000 | 0.1678 | 0.8192 | 0.1000 | 2.3277 |
6 | 2.3277 | 1.0000 | 2.3277 | 2.3277 | 2.0000 | 0.1074 | 0.6554 | 0.1000 | 2.2621 |
7 | 2.2621 | 1.0000 | 2.2621 | 2.2621 | 2.0000 | 0.0687 | 0.5243 | 0.1000 | 2.2097 |
8 | 2.2097 | 1.0000 | 2.2097 | 2.2097 | 2.0000 | 0.0440 | 0.4194 | 0.1000 | 2.1678 |
9 | 2.1678 | 1.0000 | 2.1678 | 2.1678 | 2.0000 | 0.0281 | 0.3355 | 0.1000 | 2.1342 |
10 | 2.1342 | 1.0000 | 2.1342 | 2.1342 | 2.0000 | 0.0180 | 0.2684 | 0.1000 | 2.1074 |
11 | 2.1074 | 1.0000 | 2.1074 | 2.1074 | 2.0000 | 0.0115 | 0.2147 | 0.1000 | 2.0859 |
12 | 2.0859 | 1.0000 | 2.0859 | 2.0859 | 2.0000 | 0.0074 | 0.1718 | 0.1000 | 2.0687 |
13 | 2.0687 | 1.0000 | 2.0687 | 2.0687 | 2.0000 | 0.0047 | 0.1374 | 0.1000 | 2.0550 |
14 | 2.0550 | 1.0000 | 2.0550 | 2.0550 | 2.0000 | 0.0030 | 0.1100 | 0.1000 | 2.0440 |
15 | 2.0440 | 1.0000 | 2.0440 | 2.0440 | 2.0000 | 0.0019 | 0.0880 | 0.1000 | 2.0352 |
17 | 2.0352 | 1.0000 | 2.0352 | 2.0352 | 2.0000 | 0.0012 | 0.0704 | 0.1000 | 2.0281 |
18 | 2.0281 | 1.0000 | 2.0281 | 2.0281 | 2.0000 | 0.0008 | 0.0563 | 0.1000 | 2.0225 |
19 | 2.0225 | 1.0000 | 2.0225 | 2.0225 | 2.0000 | 0.0005 | 0.0450 | 0.1000 | 2.0180 |
20 | 2.0180 | 1.0000 | 2.0180 | 2.0180 | 2.0000 | 0.0003 | 0.0360 | 0.1000 | 2.0144 |
特别提示:如果初始化的w小于2,那么它将从另外一个方向逼近2.0。
本文和excel文件下载
数据科学概论网上资源