神经网络

 本文尽量用最最简单的语言来解释,目标是让一个人从什么都不懂进阶到能实际运用神经网络解决问题。因此本文包括了最基本的定义解释以及后续的代码解释运用。

学习前所需要的知识:Logistic regression

 

1.神经网络的定义

在生物神经网络中,每个神经元与其他的神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位,如果某神经元的电位超过了一个阙值(threshold),那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。而神经网络的基本原理就是通过输入的训练数据,反复修改这个阙值,从而建立一个适用于这个数据集的神经网络,不同的是,这个输入的电位也有着权重,同样需要训练,见下图:

 

在这幅图中,单个的神经元被若干个神经元连接,收到来及n个其他神经元传递过来的信息,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阙值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出,即图中的y=f()。而对于这个激活函数我们通常选择的是Sigmoid函数

 

 

把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。

简单的应用:

感知机(Perception)由两层神经元组成:

当我们令w1=w2=1,θ=2,则y=f(1*x1+1*x2-2)(公式参见上面神经元输出的图),即可表示与运算x1∧x2

对于给定训练数据集,权重w以及阙值θ可通过学习得到,对于训练样例(x,y),若当前感知机的输出为 Ý,则感知机的权重将这样调整

其中η∈(0,1)称为学习率,另外感知机只适用于解决简单的线性问题:

而对于异或这样的非线性问题,则需要考虑使用多层功能神经元

2.误差逆传播算法

更一般的,常见的神经网络是形如图所示:

 

每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”,欲训练多层网络,简单感知机的学习规则显然不够,需要更强大的学习算法。误差逆传播(error BackPropagation,简称BP)算法就是其中最杰出的代表,下面介绍一下BP算法是怎么样的

对于给定的训练集D={(x1,y1),(x2,y2),....,(xm,ym)},输入属性有d个描述,输出l维实值向量,各层间的权重、神经元的输入如图所示

对于5.6,通过对误差求偏导,可以确定权重正确的梯度下降方向和大小,从而使得误差收敛,具体可参见Logistic regression

高数中的链式求导法则

5.10这一步比较复杂,建议亲自动手算一下

 

在实际运用中,BP神经网络常常遭遇过拟合,有两种策略可以缓解这个问题

(1)早停 将数据分为训练误差和验证集,训练集用来计算梯度、更新连接权和阙值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,通知返回具有最小验证集误差的连接权和阙值

(2)正则化,其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阙值的平方和。

在这过程中有一个问题需要注意,由于BP神经网络是基于梯度下降的思想,因此可能得到的只是局部最优解,因此

 

posted @ 2017-03-08 14:57  miao_a_miao  阅读(352)  评论(0编辑  收藏  举报