最近正在看吴军博士的一本书《数学之美》,受到了不少启发,恶补了几天线性代数和高等数学,趁着本身思路清晰,把本身对人工神经网络的想法记录下来,顺便推导一下公式。网络
一场人工智能狂潮正在悄悄的到来,也许要不了多久,各类智能产品将会环绕再咱们的周围,坐在智能汽车里,告诉它要去的地方,自动驾驶技术就能够把你带到目的地,电视机也有智能芯片,它能懂你的爱好和习惯,自动播放你想要看的节目,诸如此类的场景,正在慢慢的到来。促使这场革命的偏偏是深度学习的发展和计算机硬件水平的提高。函数
深度学习本质上就是多层人工神经网络,废话很少说,咱们来看看人工神经网络。学习
“人工神经网络”这个名字充满了科技感,那么它是用来作什么的呢?定义出这样一个网络是为了解决什么问题?其实它就是来解决分类问题的。人天天都在作分类问题,如红绿灯路口,走仍是不走;今天下雨了,上班是骑车仍是坐公交;晚上是吃火锅仍是吃面条……这样一看,分类问题构成了咱们平常生活的所有。计算机学会作分类问题,就能拥有一些智能了。人工智能
看下面一张图片,我随便手写了几个数字。图片
人识别这些数字一眼看过去就知道了,计算机怎么识别这些数字呢?把每一个数字的图切块,转化为一个个N维向量,能够看作是N维空间中的点,这些点就散落在其中。咱们用三维空间来模拟一下:深度学习
咱们在须要在这个立方体上画出一个特殊的“分界线”就能区分这些数字了,为了说明这个问题,咱们简化一下,区分两个数字0和1,这时候就说到神经网络了,神经网络本质上是一个带权重的有向图。咱们来怎么解决这个问题。博客
假设图片0被向量化成二维向量,用(x1,x2)表示,咱们用AC、AD、BC、BD、CE、CF、DE、DF表示链接节点间的权重。数学
加权计算以后:产品
C点的值Yc=x1*AC+x2*BC原理
D点的值Yd=x1*AD+x2*BD
E的值Ye=Yc*CE+Yd*DE
F的值Yf=Yc*CF+Yd*DF
若是Ye和0的偏差比Yf和1的偏差小,那么图片就被识别为了0,识别正确,实际上,不可能权重不可能一次就准确,那么这时候就须要偏差反向传播,来调整权重了。
在调整权重以前,咱们仍是看看上面的权重计算都是线性的,在空间中画的分界线都是线性的,那么要分类复杂的模型,咱们须要非线性的运算,这时候咱们须要激活函数了。经常使用的激活函数有sigmoid 和tanh
一、sigmoid :
二、tanh
加上了激活函数后,E、F的输出值分别就变成了:
Ye=f[ f(Yc)*CE+f(Yd)*DE]
Yf=f[ f(Yc)*CF+f(Yd)*DF]
Ye和0、Yf和1须要有计算偏差的方法,咱们定义它损失函数,一般用平方差函数做为损失函数,平方差函数以下:
公式中a表示Ye或者Yf,y表示0或者1
好了,如今咱们知道计算值Ye、Yf和目标值0、1之间的偏差了,咱们怎么能最快减少这个偏差呢?这个偏差咱们能够想象成山脚到山顶的距离,咱们走上山顶须要一个步长,这个步长能够起个名字,叫学习速率,learning rate。
那么问题来了,怎么快速走到山顶,用梯度降低法,走最陡的地方。怎么找最陡的地方,把山当成一个曲面,求曲率最大的点。
接下来,求出几个偏导数,就找到了曲率了。
偏差C对CE求偏导数,咱们记为:
那么C点和E点的权重应该更新为:
类推:C对CF、C对DE、C对DF、C对AC、C对AD、C对BC、C对BD求偏导数,就能够更新全部权重了,这里会有复合函数,那么须要用到链式法则了。
好了,这就是整个BP神经网络的构建和训练过程,有足够的训练数据,就能够训练一个能够分类的神经网络了,语音识别、图像识别、天然语言处理中的文本分类等等都是这个原理。
快乐源于分享。
此博客乃做者原创, 转载请注明出处