神经网络
2016-06-22 10:02
393 查看
神经元模型
一个神经元要接受多个输入,每个输入都带有一个权值,来调整该输入对结果影响程度。输入到一个神经元后,每个神经元又有一个阈值。只有输入该神经元的信息之和大于该阈值,才会激活该神经元,和脑神经元一样,激活后,才会继续往后传播。每个神经元(不包括输入层)都符合M-P模型。理想的f函数是阶跃函数,
,
。但是由于该函数具有不连续,不光滑等性质,常用Sigmoid函数替代。
,
。因为该函数可以保证输出值在(0,1)之间,所以也叫“挤压函数”。
感知机与多层网络
具有2层网络的神经网络叫做“感知机”。包括输入层和输出层。其中只有输出层具有M-P模型。感知机权重的调整方式:,
。其中y为训练样例(x,y)中的y,yhat为输出值。直到输出值与真实值相等,权重才不会调整。但由于感知机只有1层M-P(即输出层),学习能力有限,只能处理2分问题(线性分类问题)。对于非线性划分,应用感知机,不会收敛。加入一个隐层,即可进行非线性划分。这种神经网络也称为“多层前馈神经网络”。
神经网络的学习过程是通过训练数据来调整神经元之间的权重以及每个神经元的阈值。
反向传播算法(BP)
在(0,1)范围内初始化神经网络的权值和阈值。根据M-P模型计算出输出值,之后,和真实值计算出差值。对差值求权值和阈值的偏导,根据偏导来更新权值和阈值。要进行n次迭代,知道满足一定条件才停止。(条件为人为定义的)如果使用标准BP算法,则和随机梯度下降类似,用每条数据进行权值和阈值的更新。更新的非常频繁,对不同样例的更新可能会出现“抵消”现象。因此,为达到误差极小值,需要进行多次迭代。
如果使用累积BP算法,则和标准梯度下降类似,用全部数据进行权值和阈值的更新。更新不是非常频繁。在很多任务中,一般先应用累积BP算法,累计误差降到一定程度后,进一步下降非常慢后,再应用标准BP,可以得到更好的解。尤其数据集D非常大时更明显。
如何设置隐藏层神经元的数目?试错法。
BP神经网络容易导致过拟合,纠正方法有2种:1)早停:将数据集分为训练集和测试集。用训练集进行训练,求权值和阈值,用测试集进行预测,如果训练集误差降低同时测试集误差升高,则停止训练。返回具有最小验证误差的权值和阈值。 2)增加惩罚项:
。其中E为累计误差,m为数据条数,w为权重和阈值,
为折中项。
在(0,1)间取值。常通过交叉验证来估计。
全局最小和局部最小
神经网络有可能会处于局部最小。避免局部最小方法:1)以多种不同参数初始化,取最小解作为最终参数。2)模拟退火算法:在每一步都以一定概率接受比当前解更差的结果,从而有助于跳出局部最小值。在每步迭代过程中,接受“次优解”的概率随着时间的推移而逐渐降低。从而保证算法稳定。3)随机梯度下降,因为加入随机因素,可以跳出局部最小。4)遗传算法以上这些算法大多数是启发式的,理论上目前都缺乏保证。
相关文章推荐
- Android OkHttp完全解析 是时候来了解OkHttp了
- Socket Server-基于NIO的TCP服务器
- uri中为什么本地文件file后面跟三个斜杠, http等协议跟两个斜杠?
- HTTP协议详解
- 常见http状态
- html标记语言的标准写法-参考自http://www.zhihu.com/question/20797118/answer/16212312
- Android Studio 编译不通过,报错“找不到org.apache.http.HttpEntity”
- iOS的HTTP请求和请求回执类用法小结
- Neural Networks and Deep Learning 学习笔记(五)
- 计算机网络学习笔记一
- Linux打印出netstat -anp 里的Send_Q发送堵的TCP连接
- HTTP 301跳转与302跳转的区别
- TCP服务器端和客户端程序设计
- xUtils之网络请求
- [<_NSURLHTTPProtocol 0x105bc2880> valueForUndefinedKey:]: this class is not key value coding-complia
- http://www.360doc.com/content/12/1014/00/7471983_241330790.shtml
- http://my.oschina.net/u/2007041/blog/508520
- iOS 使用第三方库CocoaAsyncSocket进行Tcp通讯
- LAMP——httpd 2.4.20 + mysql-5.6.26 + php-5.6.22编译安装过程
- win10 导航已取消 解决 亲身验证 !