2019首发推文
BP神经网络原理
2019年到来,让我们满怀信心和期待.....
不说了,先看篇推文先。
这次给大家介绍的是一种比较传统而又重要的神经网络,即BP(back propagation)神经网络,也就是我们平时说的反向传播神经网络,包含前向传播和反向传播两个过程。
先来谈个轻松的话题
假如你在学习做红烧肉,第一次做时可能很咸,或者火太大烧焦了,没法吃;
第二次时,你有了经验,会少放一点盐,把火调小点,无奈还是有点焦,有点咸,很难吃;
第三次时,你根据以往两次经验,会把盐再放少点,火再小点,炒出来勉强能吃了。
当你做了几年的红烧肉,在一次次不断重复的过程中,你的经验会越来越丰富,经过不断调节,成为一名资深的红烧肉吃货。
![0b35b96c3e9027a8a3322010aa227562.png](https://i-blog.csdnimg.cn/blog_migrate/a4e3b7ccaa40d34987998f81c78050b3.jpeg)
其实,上面的过程,就类似于一个BP神经网络的运作过程。“做红烧肉”是前向传播;“做出来难吃”是输出结果;在下一次改进”是反向传播;而“盐太多、火太大”是误差。你在做红烧肉的循环中,根据结果,会不断收集“盐太多”、“火太大”这些误差信息,返回到下一次做红烧肉,通过这些误差来调整,学习出最优做红烧肉的方法,从而做一手美味的红烧肉。
所以,反向传播传回来的是什么呢?其实就是误差
下图为BP神经网络的模型
![782e7af4df47bb686c08f1a2d5ed10c7.png](https://i-blog.csdnimg.cn/blog_migrate/94e05279a92796cb52b4d0044efbd456.png)
圆圈代表神经元,箭头表示传播的方向,相邻层的神经元之间互相连接,每根线可以给不同的权重。说白了就是三大件:输入层、隐含层、输出层。
首先讲下激活函数,即activation function,我们一般用sigmoid函数:
我们可以用matlab把sigmoid图像画出来,z表示的是输入
syms z
z=-10:10
f=1./(1+exp(-z))
plot(net,f);
![ebd49ce19fe189029e10760eb1b667cd.png](https://i-blog.csdnimg.cn/blog_migrate/ba356ae1cf0c6024491b6f60af573e9b.png)
可以看到,它的形状很像“S”,我们又称之为“S”型函数,它能把函数值的值域限制在[0,1]。
下面讲述BP神经网络的运作原理,我们的目标很清晰——做最美味的红烧肉,学习出最优模型。
一、前向传播
(1)我们先定义一些参数和符号
我们假设输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元
![dfe605467eb9fc5d03300ac8a3896eab.png](https://i-blog.csdnimg.cn/blog_migrate/a5cb5adfedd182dd1399bdafa51c7216.jpeg)
输入层与中间层、隐含层与输出层的连接权值分别为,
隐含层、输出层各神经元的偏置分别为,
首先,初始化权重。各连接的权重要初始化,一般用正态分布(-1,1)的随机数,若在MATLAB上直接用rand()函数即可
(2)计算出实际的输入和输出
![a9132a2dd991b9159e6cae10a843d79b.png](https://i-blog.csdnimg.cn/blog_migrate/0354302c011907ed91d6151945ca3c10.png)
二、反向传播
(1)引入误差函数,求偏导
这个时候,我们已经求出了实际的输出,这个时候我们要引用一种较常用的一种误差函数——均方误差:,通过真实值和实际输出值的数据,算出误差。前面我们提到了,反向传播传的是误差,那么,我们如何通过计算出的这个误差,去调整参数呢?
这个时候就要用到求偏导的知识了。
例如函数。对x求偏导时,把y看作常数,所以结果是2x;同理,对y求偏导时,结果为2y。
在这里再说明一下各符号的含义:e是误差函数,是隐含层的权重,
是输出层的输出,
是隐含层的输出,b是偏置,
是真实值
![1e7cef7b3f757b26188e61e49132a2c3.png](https://i-blog.csdnimg.cn/blog_migrate/c2ea26c1befe55315094f14277906976.png)
![2ef8a15fd90faf04d76a6d5b0f3da733.png](https://i-blog.csdnimg.cn/blog_migrate/533ba9b501b9b8f92735eb4fbf31a02f.png)
![442f0a358ecf462b02e8af42a07697bb.png](https://i-blog.csdnimg.cn/blog_migrate/2d5add73aed3fa79beb0d2c824e495fd.png)
(2)根据算出的、
,修正隐含层、输入层连接的权重
![d3c4d8b975497473322170a92233449f.png](https://i-blog.csdnimg.cn/blog_migrate/4ce421a8bbcada04ae2704578d4ec2c1.png)
![90d5c9ba18a2d3bac14815a119169c12.png](https://i-blog.csdnimg.cn/blog_migrate/bf10872d300e663ca7c26be0e9d7d492.png)
(3)计算全局误差
![4d65f51bf6f5bdfbf6ccbe11f4fad86a.png](https://i-blog.csdnimg.cn/blog_migrate/40061a7d58fe86d5c785606bd7564ce8.png)
全局误差最大值我们可以提前设定好,在没有达到设定条件之前或者最大迭代学习次数之前,继续循环,得出最优模型。
这里,你可以当做是有评委品尝你的红烧肉,循环到直到评委对你做的红烧肉满意(假设评委对满意有个清晰的数值);当你学习最大次数达到,还是做不出评委满意的红烧肉,这时候是你的技术上限了,也会得出相对于你最好的做红烧肉模型。
看到这里,相信你对BP神经网络有一定的理解了,小编最近考试繁忙,可能有些地方写的不是很好,敬请指出,我们下次再见。
供稿:叶昌鑫 排版:大靖
![cfebf99bb8955246d26b864091b70647.png](https://i-blog.csdnimg.cn/blog_migrate/3cfd910f5749627eae118fa69d1bfdc1.jpeg)
关于图灵
我们是图灵智能创新团队,同时也是广东海洋大学第一个人工智能创新团队,我们的方向有:计算机视觉、自然语言处理、前端&后台。本公众号主要面向对人工智能感兴趣的读者,如果想了解更多,欢迎关注我们