神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。
1. 神经元
神经元是神经网络的最基本单元。首先,我们先复习一下在生物学中什么是神经元。
神经元大致可以分为树突、突触、细胞体和轴突。树突为神经元的输入通道,其功能是将其他神经元的动作电位传递至细胞体。其他神经元的动作电位借由位于树突分支上的多个突触传递至树突上。神经细胞可以视为有两种状态的机器,激活时为“是”,不激活时为“否”。神经细胞的状态取决于从其他神经细胞接收到的信号量,以及突触的性质(抑制或加强)。当信号量超过某个阈值时,细胞体就会被激活,产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。
人工神经网络模拟这种机制,神经元由输入,输出和计算功能三部分组成。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞体。
下图是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能。注意中间的箭头线,这些线称为“连接”。每个上有一个“权值”。连接是神经元中最重要的东西。每一个连接上都有一个权重。
如上图我们使用a1,a2,a3来表示三个输入,用w1,w2,w3来表示权值。一个表示连接的有向箭头可以这样理解:在初端,传递的信号大小仍然是a,端中间有加权参数w,经过这个加权后的信号会变成a*w因此在连接的末端,信号的大小就变成了a*w。在神经元模型里,每个有向箭头表示的是值的加权传递。所有输入经过连接加权后,就会做一个求和,即得到a1*w1+a2*w2+a3*w3的信号。这个过程类似于细胞体处理汇总来自树突传进来的信息。所以,神经元要形成输出信号还需要一个“突触”来激活信号。我们称这个“突触”为激活函数,用g表示。g可以由我们人为设置,这里的sgn表示一个符号函数,即如果属于大于0时输出1,否则输出0。所以最后的输出z可表示为z=g(a1*w1+a2*w2+a3*w3)。
2. 神经网络结构
神经网络就是由很多神经元组成,让我们来看一个经典的神经网络。这是一个包含三个层次的神经网络,红色的是输入层,绿色的是输出层,紫色的是中间层(也叫隐藏层)。下图中输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。
神经网络的一些特点我们是需要记住的:
1. 设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定;
2. 神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;
3. 结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。
除了从左到右的形式表达的结构图,还有一种常见的表达形式是从下到上来表示一个神经网络。这时候,输入层在图的最下方。输出层则在图的最上方,如下图:
3. BP神经网络
BP神经网络(Backpropagation Neural Network)指的是基于反向传播的神经网络。
在这之前先跟大家解释一下什么是前向传播。前向传播其实就是上文提到的神经网络按连接线方向传播信号的过程。我们从输入层接收信号,再传播信号到隐藏层,再从隐藏层传输到输出层,得到最终结果,就是一个前向传播的过程。
显然,反向传播就是逆着连接线方向传导信号的过程。那么问题来了,反向传播的传导的是什么信号呢?这个信号其实就是对神经网络的结果的一个反馈。为了便于大家理解,下面将举一个简单的例子。
假设我们构建出了一个可以计算加法的神经网络。这时有这么一个过程:
前向传播-----------------------------------反向传播
1+1是多少?是10!----------------------应该是2,多了8,需要修正!
1+2是多少?是37!----------------------应该是3,多了34,需要修正!
1+3是多少?是-5!-----------------------应该是4,少了9,需要修正!
…
1+1是多少?是5!------------------------应该是2,多了3,需要继续修正!
1+2是多少?是10!-----------------------应该是3,多了7,需要继续修正!
1+3是多少?是1!------------------------应该是4,少了3,需要继续修正!
…
1+1是多少?是2!------------------------对了,是2,不需要修正了!
1+2是多少?是4!------------------------应该是3,多了1,需要继续修正!
1+3是多少?是4!------------------------对了,是4,不需要修正了!
…
1+1是多少?是2!------------------------对了,是2,不需要修正了!
1+2是多少?是3!------------------------对了,是3,不需要修正了!
1+3是多少?是4!------------------------对了,是4,不需要修正了!
我们可以看到,这个神经网络一开始的预测差了十万八千里,通过反向传播不停地给它反馈预测结果跟正确结果的差距,让它去修正错误,最后它也能准确地预测出结果。这其实就是一个训练的过程,通过反向传播让神经网络不停地调整权值,最终能够预测出正确的结果。至于如何调整权值,我们日后再说。
至此,我们可以总结一下BP神经网络的特点:通过前向传播预测传输信号,得到预测结果,通过反向传播反馈预测误差,修正神经网络的权值,得到更好的预测效果。
4. 实例
在互联网金融领域,反欺诈预测是极其重要的一环,神经网络是常用的算法之一。假设我们需要预测一个新用户以后是否会违约欠款,若违约则输出1,否则为0。
我们可以构建如下图的BP神经网络模型,该神经网络的输入层有5个神经元,隐藏层有3个神经元(分别为h1,h2,h3),输出层有1个神经元。
假设有两个用户A和B,目前有他们的年龄,学历,月薪,房子数,当前已贷款总额等作为他们的特征数据,如下表:
用户 |
年龄 |
学历 |
月薪 |
房子数 |
已贷款总额 |
A |
30 |
5 |
25000 |
2 |
0 |
B |
18 |
1 |
3000 |
0 |
2500 |
则他们的输入向量分别为xA =[30, 5, 25000, 1, 0],xB=[18,1,3000,0,2500]。
我们分别输入他们的特征向量到神经网络中,假设输入层神经元到隐藏层第一个神经元h1的权值为w1=[1, -5,-4,3,10],第二个神经元h2的权值为w2=[-1, -10,0,0,0.04]。
对A:
Z1=sgn[30*1+5*(-5)+25000*(-4)+1*3+0*10] = sgn(-99992)=0
Z2=sgn[30*(-1)+5*(-10)+25000*0+1*1+1*0+0*0.04] = sgn(-79)=0
对B:
Z1=sgn[18*1+1*(-5)+3000*(-4) +0*3+2500*10] = sgn(13013)=1
Z2=sgn[18*(-1)+1*(-10)+3000*0+0*0+2500*0.04] = sgn(72)=1
在这里我们会看到隐藏层中不同的神经元的权值不一样,代表他们的侧重点不一样,比如第一个神经元h1对月薪和已贷款总额的权值较大,代表他们更侧重用户的收支状况,而第二个神经元h2对年龄和学历的权值较大,代表他们更侧重用户的个人属性。
同理可得h3的输出。假设A的隐藏层输出为[0,0,1],B的隐藏层输出为[1,1,1],这两个向量再作为输入,隐藏层与输出层之间的权值w=[1,2,-1],由此可得最终输出:
yA = sgn[0*1+0*2+1*(-1)] = sgn(-1) = 0
yB = sgn[1*1+1*2+1*(-1)] = sgn(2) = 1
所以我们可以预测A不会违约,而B会违约。
参考文献
1.《统计学习方法》李航
2.《神经网络浅讲:从神经元到深度学习》http://www.cnblogs.com/subconscious/p/5058741.html