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