神经网络----BP神经网络

一、应用情况
神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,特征提取、图像处理等方面。

二、原理
(1)神经元模型
神经元模型基本上包括多个输入(类似突触),这些输入分别被不同的权值相乘(收到的信号强度不同),然后被一个数学函数用来计算决定是否激发神经元。还有一个函数(也许是不变,就是复制)计算人工神经元的输出(有时依赖于某个门限)。
权值越大表示输入的信号对神经元影响越大。权值可以为负值,意味着输入信号收到了抑制。权值不同那么神经元的计算也不同。通过调整权值可以得到固定输入下需要的输出值。某个神经元过程如下图:
神经网络----BP神经网络_第1张图片
主要构成为:输入、权重(其实还有偏置)、激活函数、输出
(2)一般的神经网络结构
假设神经网络有L层,第一层为输入层,第2~L-层为隐层,第L层为输出层;第l层(2<=l<=L-1)的神经元个数为S(l),第一层维度为输入特征的维度(x的维度),第L层的维度为输出的维度(Y的维度)。基本框架为:
神经网络----BP神经网络_第2张图片
具体地,我以地L-3层到L-2层的传输作为例子,写出详细的过程(实在是作图麻烦,就手写了):
神经网络----BP神经网络_第3张图片
对上面的几个符号进行说明:
神经网络----BP神经网络_第4张图片
三、公式推导
神经网络----BP神经网络_第5张图片
神经网络----BP神经网络_第6张图片
神经网络----BP神经网络_第7张图片
神经网络----BP神经网络_第8张图片
神经网络----BP神经网络_第9张图片

四、优点与不足以及优化
BP神经网络一般用于分类或者逼近问题。如果用于分类,则激活函数一般选用Sigmoid函数或者硬极限函数,如果用于函数逼近,则输出层节点用线性函数f(x)=ax+b。
BP神经网络在训练数据时可以采用增量学习或者批量学习。增量学习要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训练效果比较差,适合在线处理。批量学习不存在输入模式次序问题,稳定性好,但是只适合离线处理。
标准BP神经网络的缺陷:
1.容易形成局部极小值而得不到全局最优值。BP神经网络中极小值比较多,所以很容易陷入局部极小值,这就要求对初始权值和阀值有要求,要使得初始权值和阀值随机性足够好,可以多次随机来实现,另外利用多元回归分析法对神经网络的输入参数进行处理,删除相关性强的输入参数,来减少输入节点数。
2.训练次数多使得学习效率低,收敛速度慢,。
3.隐含层的选取缺乏理论的指导,一般选择3层就行。
4.训练时学习新样本有遗忘旧样本的趋势。
5.隐含层的节点数不好确定,隐节点数的多少对网络性能的影响较大,当隐节点数太多时,会导致网络学习时间过长,甚至不能收敛;而当隐节点数过小时,网络的容错能力差。利用逐步回归分析法并进行参数的显著性检验来动态删除一些线形相关的隐节点,节点删除标准:当由该节点出发指向下一层节点的所有权值和阈值均落于死区(通常取±0.1、±0.05等区间)之中,则该节点可删除。最佳隐节点数L可参考下面公式计算:
节点数=(输入维度+输出维度)^(1/2)+C(1~10的常数)

五、算法收敛性的优化
(1).利用动量方法进行迭代更新
(2).根据误差大小更改为变学习因子,学习因子a=b+b*(error(t)-error(t-1))/error(t-1)(b为步长)
(3)由于BP算法采用的是剃度下降法,因而易陷于局部最小并且训练时间较长。用基于生物免疫机制地既能全局搜索又能避免未成熟收敛的免疫遗传算法IGA取代传统BP算法来克服此缺点。

六、编程实现
python实现:
包:sklearn.neural_network
自定义函数:
看链接:https://blog.csdn.net/Aaron23456/article/details/52144915
https://www.cnblogs.com/zhouxiaohui888/p/6092535.html

R语言实现:
包:nnet包中nnet函数、Amore包中netff函数、mlr包涵盖了机器学习在R语言中所有算法,很值得一学。

深度学习框架tensorflow实现:
看链接:http://www.cnblogs.com/Finley/p/5953122.html

你可能感兴趣的:(机器学习)