激活函数与损失函数
激活函数
1、作用:
线性模型的表达能力不够,激活函数增加神经网络模型的非线性,提升神经网络模型表达能力(数据往往线性不可分 )。
2、几种激活函数
(1)sigmoid函数:
sigmoid函数(Logistic 函数),隐层神经元输出,取值范围(0,1),可以将一个实数映射到(0,1)的区间,可以做二分类。

缺点:
1、Sigmoids saturate and kill gradients:梯度消失,无法深层网络训练。当输入非常大或者非常小时(saturation),神经元梯度接近于0。需要注意参数初始值避免saturation情况。初始值很大,大部分神经元可能都处在saturation状态而把gradient kill,导致网络很难学习。
2、Sigmoid 的 output 不是0均值:导致后一层神经元得到上层输出的非0均值信号作为输入。 结果:如数据进入神经元时是正的(e.g.x>0 elementwise in f=wTx+b),w 计算出梯度也始终都是正的。 如按batch训练,batch可能得到不同的信号,问题可以缓解。
3、激活函数指数运算,计算量大,反向传播求误差梯度时,求导涉及除法。![]()

(2)tanh函数:
双曲正切函数,与sigmod函数曲线相近。两个函数输入很大或是很小时,输出几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,函数以0为中心。比sigmoid 好。
一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。

(2)ReLU函数:
ReLU(Rectified Linear Unit):


优点:
1、输入为正数,不存在梯度饱和问题。
2、计算速度快。ReLU函数只有线性关系,前向传播和反向传播,都比sigmod和tanh快。(sigmod和tanh计算指数)。
3、Relu使一部分神经元输出0,网络稀疏,减少参数相互依存,缓解过拟合发生。
缺点:
1、 输入是负数,ReLU完全不被激活,ReLU会死掉。反向传播中,输入负数,梯度0,和sigmod函数、tanh函数有一样的问题。learning rate 很大,可能网络中40%的神经元都”dead”了。较小的learning rate,问题不会太频繁。
2、ReLU函数的输出是0或正数,ReLU函数也不是以0为中心的函数。
(3)softmax函数:
多分类神经网络输出:

指数:模拟 max 行为,让大的更大。需要一个可导的函数。
(4)Leaky ReLU函数(PReLU):


a是一个很小的常数,取0~1。α=0.01时,PReLU为Leaky ReLU。修正数据分布,保留负轴的值,使负轴信息不全部丢失。
PReLU是ReLU的改进型,负数区域,PReLU有很小的斜率,避免ReLU死掉问题。相比于ELU,PReLU在负数区域内是线性运算,斜率虽然小,但不会趋于0。
(4)ELU函数:


ELU函数是ReLU函数的改进型,相比于ReLU函数,在输入为负数时,有的输出,输出有一定抗干扰能力。消除ReLU死掉的问题,还是有梯度饱和和指数运算的问题。
(4)MaxOut函数:
Maxout是深度学习网络中一层网络,同池化层、卷积层,可以把maxout 看成网络的激活函数层,假设网络某一层的输入特征向量为:X=(x1,x2,……xd),输入是d个神经元。Maxout隐藏层每个神经元的计算公式如下:

maxout隐藏层神经元i的计算公式。其中,k是maxout层所需要的参数,由人为设定大小。如dropout,有参数p(每个神经元dropout概率),maxout的参数是k。公式中Z的计算公式为:
权重w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,这两个是需要学习的参数。如果k=1,网络就类似普通的MLP网络。
传统的MLP算法在第i层到第i+1层,参数只有一组,现在在这一层同时训练n组的w、b参数,选择激活值Z最大的作为下一层神经元的激活值,这个max(z)函数即激活函数。
Maxout拟合能力非常强,可以拟合任意凸函数。只需2个maxout节点就可以拟合任意的凸函数(相减),前提是”隐隐含层”节点的个数可以任意多。
Maxout 具有 ReLU 的优点(如:计算简单,不会 saturation),同时没有 ReLU 缺点 (如:容易 go die)。缺点:参数double。
损失函数:


二次代价函数:

其中,C表示代价,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。
一个样本为例:

梯度下降算法:

z表示神经元的输入。w和b的梯度跟激活函数的梯度成正比,激活函数梯度越大,w和b的大小调整越快,训练收敛就越快。神经网络常用的激活函数为sigmoid函数,曲线如下:

实验2初始输出值(0.98)对应的梯度小于实验1的输出值(0.82),实验2的参数梯度下降得比实验1慢。因此初始代价(误差)越大,导致训练越慢(不合理)。
交叉熵代价函数:
不改变激活函数,二次代价函数改为交叉熵代价函数:

x表示样本,n表示样本的总数。计算参数w的梯度:


误差越大,梯度就越大,参数w调整得越快,训练速度也越快。
b的梯度:
