Deep Learning 激活函数
常用:Sigmoid,tanh,Relu
神经网络中,运算特征是不断进行循环计算,所以在每代循环过程中,每个神经元的值也是在不断变化的。tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来。
但有时候,特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就好了。
数据有很多的冗余,而*似程度的最大保留数据特征,可以用大多数元素为0的稀疏矩阵来实现。而Relu,它就是取的max(0,x),因为神经网络是不断反复计算,实际上变成了它在尝试不断试探如何用一个大多数为0的矩阵来尝试表达数据特征,结果因为稀疏特性的存在,反而这种方法变得运算得又快效果又好了。ReLU在0点不可微,大部分情况下由于导数清晰,比sigmoid的边界导数要清晰很多,所以学习效率会高很多。
(1)Sigmoid函数
sigmoid及其梯度(红色曲线为梯度)
sigmoid将输入挤压进0到1区间(这和概率的取值范围一致),这正是分类任务中sigmoid很受欢迎的原因
(2)Tanh函数
tanh就是乔装打扮的sigmoid。tanh的形状和sigmoid类似,只不过tanh将“挤压”输入至区间(-1, 1)。因此,中心为零,(某种程度上)激活值已经是下一层的正态分布输入了
tanh及其梯度(红色曲线为梯度)
tanh的形状和sigmoid类似,只不过tanh将“挤压”输入至区间(-1, 1)。因此,中心为零,激活值已经类似下一层的正态分布输入了。
至于梯度,它有一个大得多的峰值1.0(同样位于z = 0处),但它下降得更快,当|z|的值到达3时就已经接*零了。这是所谓梯度消失(vanishing gradients),会导致网络的训练进展变慢。
(3)ReLU
只保留正值,并将所有负值转化为零。
ReLU及其梯度(红色折线为梯度)
不存在梯度消失,收敛极快,但是,持续输入为负就会造成“死亡神经元”。
3.损失函数
损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数可以大致分为两类:分类损失(Classification Loss)和回归损失(Regression Loss)
(1)回归模型的损失函数
回归模型是预测连续因变量的
①L1正则损失函数(即绝对值损失函数):
L1正则损失函数是对预测值与目标值的差值求绝对值,函数在目标值附*不*滑,会导致模型不能很好地收敛。
②L2正则损失函数(即欧拉损失函数):
L2正则损失函数是预测值与目标值差值的*方和
当对L2取*均值,就变成均方误差(MSE, mean squared error)
L2正则损失函数在目标值附*有很好的曲度,离目标越*收敛越慢
③Pseudo-Huber 损失函数
Huber损失函数经常用于回归问题,它是分段函数
当残差(预测值与目标值的差值,即y-f(x) )很小的时候,损失函数为L2范数,残差大的时候,为L1范数的线性函数。
Peseudo-Huber损失函数是Huber损失函数的连续、*滑估计,在目标附*连续
该公式依赖于参数delta,delta越大,则两边的线性部分越陡峭。
(2)分类模型的损失函数
分类损失函数主要用于评估预测分类结果,重新定义预测值(-3至5的等差序列)和目标值(目标值为1)
①Hinge损失函数
Hinge损失常用于二分类问题,主要用来评估向量机算法,但有时也用来评估神经网络算法。当预测值离越*,则损失函数越小
②两类交叉熵(Cross-entropy)损失函数
交叉熵来自于信息论,是分类问题中使用广泛的损失函数。交叉熵刻画了两个概率分布之间的距离,当两个概率分布越接*时,它们的交叉熵也就越小,给定两个概率分布p和q,则距离如下
对于两类问题,当一个概率p=y,则另一个概率q=1-y,因此代入化简后
Cross-entropy损失函数主要应用在二分类问题上,预测值为概率值,取值范围为[0,1]
③Sigmoid交叉熵损失函数
将预测值y_pred值通过sigmoid函数进行转换,再计算交叉熵损失。在TensorFlow中有内置了该函数。
由于sigmoid函数会将输入值变小很多,从而*滑了预测值,使得sigmoid交叉熵在预测值离目标值比较远时,其损失的增长没有那么的陡峭
④加权交叉熵损失函数
加权交叉熵损失函数是Sigmoid交叉熵损失函数的加权,是对正目标的加权
⑤Softmax交叉熵损失函数
Softmax交叉熵损失函数是作用于非归一化的输出结果,只针对单个目标分类计算损失。
通过softmax函数将输出结果转化成概率分布,从而便于输入到交叉熵里面进行计算(交叉熵要求输入为概率)
结合前面的交叉熵定义公式,则Softmax交叉熵损失函数公式
实际使用中,对于回归问题经常会使用MSE均方误差(L2取*均)计算损失,对于分类问题经常会使用Sigmoid交叉熵损失函数