您的位置:首页 > 理论基础 > 计算机网络

机器学习总结(七):基本神经网络、BP算法、常用激活函数对比

2017-03-31 09:45 871 查看
1.   神经网络
(1)为什么要用神经网络?

对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多学习参数过多,从而复杂度太高。

(2)常用的激活函数及其优缺点

阶跃函数sgn(x)(理想,但不连续,不光滑);

Sigmoid函数(下图左):



优点:能够把输入的连续实值压缩到0到1之间;

缺点:(1)容易饱和,当输入非常大或非常小的时候,神经元的梯度就接近0了,这使得在反向传播算法中反向传播接近于0的梯度,导致最终权重基本没什么更新;(2)Sigmoid的输出不是0均值的,这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响,假设后层神经元的输入都为正(e.g. x>0elementwise in f=wTx+b),那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。  

解决方法:注意参数的初始值设置来避免饱和情况。

Tanh函数(下图右):



 优点:0均值,能够压缩数据到-1到1之间;

 缺点:同Sigmoid缺点第二个,梯度饱和;



ReLU函数



优点:(1)因为是线性,而且梯度不会饱和,所以收敛速度会比Sigmoid/tanh快很多;(2)相比于Sigmoid/tanh需要计算指数等,计算复杂度高,ReLU只需要一个阈值就可以得到激活值;

缺点:训练的时候很脆弱,有可能导致神经元坏死。举个例子:由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都坏死了。

解决方法:设置合适的较小的learning rate.

Maxout函数:





优点:ReLU是Maxout的变形,具有ReLU的优点,同时没有它的缺点,可以拟合任意的凸函数

缺点:把参数double了,造成参数增多。

(3)误差逆传播算法(BP)

数据预处理:归一化

如何训练数据:增量学习:一个样本一个样本的输入,调整权重阈值,要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训练效果比较差,适合在线处理。批量学习:全部样本一次性输入调整,不存在输入模式次序问题,稳定性好,但是只适合离线处理。

基本思想:输出层的预测值与目标值的误差往回传播。

两个过程:(1)工作信号正向传递;(2)误差信号反向传递。

隐含层节点个数选取经验:

,m为输入层节点数,n为输出层,a为1~10之间的调节常数。

反向传递过程:(1)在(0,1)范围内随即初始化网络中所有连接权和阈值;(2)对所有的样本(x,y),计算当前样本输出,根据误差平方和的最速下降方向,连续调整网络的权值和阈值。(这个规则叫 学习规则或Hoff学习规则)。

优点:很强的非线性映射能力,一个3层的BP神经网络能够实现对任意非线性函数进行逼近。

缺点:(1)容易陷入局部极小,可以多次随即初始化;(2)训练时学习新样本有遗忘旧样本的趋势;(3)训练次数多使得学习效率低,收敛速度慢。

改进:(1)增加动量项,加快收敛。



(2)“模拟退火”:在每一步都以一定的概率接受比当前解更差的结果,接受次优解;

(3)使用随机梯度下降,加入随机因素,有机会跳出局部极小;

(4)遗传算法,逼近全局最小。

如何防止过拟合:1)早停:将数据集分为训练集和验证集,若训练集误差降低但验证集误差升高,则停止训练,同时返回最小验证集误差的连接权和阈值;(2)正则化:在误差目标函数后加一个用于描述网络复杂度的部分,L1,L2正则化;(3)Dropout:开始,删除掉隐藏层随机选取的一半神经元,然后在这个更改的神经元网络上正向和反向更新,然后再恢复之前删除过的神经元,重新选取一般神经元删除,正向反向,更新w,b.重复此过程,最后学习出来的神经网络中的每个神经元都是在一半神经元的基础上学习的,当所有神经元被恢复后,为了补偿,我们把隐藏层的所有权重减半。

L1正则化和L2的区别:

L1范数:向量中各个元素的绝对值和,可以把特征拉稀疏。L0(向量中非0元素个数)也可实现稀疏,但是难以优化求解,而且L1范数是L0的最优凸近似。

L2范数:向量中各个元素平方和再开方,会把各个维度的权重拉平均一些,抑制住各个维度权重幅度的方差。

为什么Dropout可以减少overfitting?

每次扔掉了一般隐藏层的神经元,相当于在不同的神经网络训练了,减少了神经元的依赖性,迫使神经网络去学习更加健硕的特征。

(4)常用的cost function

均方误差函数(MSE)(激活函数选择sigmoid):



   比如一个神经元,单输入单输出,计算代价函数对w和b的导数:



   这样在更新w和b时,由于sigmoid函数两边趋于平缓,导致更新非常慢;

交叉熵代价函数(cross-entropy):



为什么可以作为代价函数?(1)非负性;(2)当真实输出a和期望输出y接近的时候,接近于0;

对w和b求偏导:

优点:误差大,更新多,误差小,学习慢

(5)多分类问题softmax

与sigmoid不同的是输出层函数不同:



特点:每个输出值都大于等于0,而且总和为1,有概率分布的特点。

是否有学习慢的问题(取决于对w和b的偏导):

代价函数:



求导:



与误差有关,不存在

(6)初始化权重

随机初始化:容易梯度饱和,sigmoid函数特点;

正态分布初始化:均值为0,标准差为1/sqrt(输入层节点个数),可以把数据压缩在-1~1之间,学习过程不会被减慢。

(7)学习率和正则化参数如何设置?

学习率:可以从0.001,0.01,0.1,1,10开始尝试,如果发现cost开始增大,停止,实验更小的微调;

正则化参数:先不设定正则项,把学习率调好,然后再实验1,10,100.找到大致合适的再微调。

其他几种常见网络:

RBF网络:

基本思想:一种单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,输出层是对隐层神经元输出的线性组合。

函数模型:





隐层的功能:将低维空间通过非线性函数映射到一个高维空间,然后在这个高维空间进行曲线的拟合。

径向基函数中心如何确定:随机选择h个样本,通过聚类得到h个聚类汇中心;

方差如何确定(cmax为中心之间最大距离,h为隐层节点个数):



 隐含层到输出层权值如何确定:梯度下降,代价函数为均方误差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: