深度学习中的函数类型

大多数神经网络都包含四类函数:组合函数、激活函数、误差函数和目标函数。

1)组合函数:在神经网络中,在输入层之后的网络里,每个神经元的功能都是把上一层产生的向量通过自身的函数生成一个标量值,这个标量值就被称为下一层神经元的网络输入变量。这种在网络中间将向量映射为标量的函数就被称为组合函数。常见的组合函数包括线性组合函数和基于欧式空间距离的函数,比如在RBF网络中常用的函数。

2)激活函数:大多数神经元都将一维向量的网络输入变量通过一个函数映射为另外一个一维向量的数值,这个函数称为激活函数,其产生的值就被称为激活状态。除输出层之外,激活状态的值通过神经网络的链接输入到下一层的一个或者多个神经元里面。这些激活函数通常是将一个实数域上的值映射到一个有限域中,因此也被称为坍缩函数。比如常见的tanh或者logistic函数,都是将无限的实数域上的数值压缩到(-1,1)或者(0,1)之间的有限域中。如果这个激活函数不做任何变换,则被称为线性激活函数。

激活函数的主要作用是为隐含层引入非线性。一个只有线性关系隐含层的多层神经网络不会比一般的只包含输入层和输出层的两层神经网络更加强大,因为线性函数的函数仍然是一个线性函数。但是加入非线性之后,多层神经网络的预测能力就得到了显著提高。对于后向传播算法、激活函数就必须可微,而且如果这个函数是在有限域中的话,则效果更好,因此像logistic、tanh、高斯函数等都是比较常见的选择,这类函数也被统称为sigmoid函数。类似于tanh或者arctan这样的包含正和负的值域的函数通常收敛速度较快,因为数值条件数更好。

对于隐藏层而言,流行的激活函数经历了从sigmoid激活函数到threshold激活函数的转变,这反映了深度学习技术和理论的发展。

早期的理论认为sigmoid激活函数通常比threshold激活函数(比如Relu等激活函数)好。理由是因为采用threshold激活函数后误差函数是逐级常数。因此一阶导数要么不存在要么为0,从而不能使用高效的后向传播算法来计算一阶导数。即使使用那些不采用梯度的算法,比如Simulated Annealing或者基因算法,采用sigmoid激活函数在传统上仍然被认为是一个较好的选择,因为这种函数是连续可微的,参数的一点变化就会带来输出的变化,这有助于判断参数的变动是否有利于最终目标函数的优化。如果采用threshold激活函数,参数的微小变化并不能在输出中产生变动,因此算法收敛会慢很多。

但是近期深度学习模型的发展改变了这些观点。sigmoid函数存在梯度消亡的问题。梯度消亡指的是梯度(误差的信号)随着隐藏层数的增加成指数减少。这是因为在后向传播算法中,对梯度的计算使用链式法则,因此在第n层时需要将前面各层的梯度都相乘,但是由于sigmoid函数的值域在(-1,1)或者(0,1)之间,因此多个很小的数相乘以后第n层的梯度就会接近于0,造成模型训练的困难。而threshold激活函数因为值域不在(-1,1)之间,比如Relu的取值范围是[0,+inf).因此没有这个问题。

另外一些threshold函数,比如Hard Max激活函数:max(0,x),可以在隐藏层中引入稀疏性,也有助于模型的训练。

对于输出层,读者应该尽量选择适合因变量分布的激活函数。

a.对于只有0,1取值的双值因变量,logistic函数是一个较好的选择

b.对于有多个取值的离散因变量,比如0到9数字的识别,softmax激活函数是logistic激活函数的自然衍生。

c.对于有有限值域的连续因变量,logistic或者tanh激活函数都可以用,但是需要将因变量的值域伸缩到logistic或者tanh对应的值域中。

d.如果因变量取值为正,但是没有上限,那么指数函数就是一个较好的选择。

e.如果因变量没有有限值域,或者虽然是有限值域但是边界未知,那么最好采用线性函数作为激活函数。


3)误差函数

监督学习的神经网络都需要一个函数来测度模型输出值p和真实的因变量值y之间的差异,甚至有些无监督学习的神经网络也需要类似的函数。模型输出值p和真实值y之间的差异一般被称为残差或者误差,但是这个值并不能直接用来衡量模型的质量。当一个模型完美的时候,其误差为0,而当一个模型不够完美的时候,其误差不论为负值还是正值,都偏离0;因此衡量模型质量的是误差偏离0的相对值,即误差函数的值越接近于0,模型的性能越好,反之则模型的性能越差。误差函数也被称为损失函数。常见的误差函数如下。

a、均方差(MSE):

这种损失函数通常用在实数值域连续变量的回归问题上,并且对残差较大的情况给予更多的权重。

b、平均绝对差(MAE):

,这种损失函数也通常用在上面提到的那类回归问题上,在时间序列预测问题中也常用。在这个误差函数中,每个误差点对总体的误差的贡献与其误差绝对值成线性比例关系,而上面介绍的MSE没有这个特性

c、交叉熵损失:

这种损失函数也叫做对数损失函数,是针对分类模型的性能比较设计的,按照分类模型是二分类还是多分类的区别,可以分为二分类交叉熵和多分类交叉熵两种。交叉熵的数学表达式很简单,可以写作。因此交叉熵可以被解释为映射到最可能的类别的概率的对数。因此,当预测值的分布和实际因变量的分布尽可能一致时,交叉熵最小。

4)目标函数:
    目标函数是需要在训练阶段直接最小化的那个函数。神经网络的训练表现为在最小化训练集上估计值和真实值之间的误差。其结果很可能出现过度拟合的现象,即模型在训练集上表现较好,但是在测试集上和其他真是应用中表现不好,即所谓的模型普适化不好。一般这是会采用正则化来规范模型,减少过度拟合情况的出现。这个时候目标函数为误差函数和正则函数之和。比如使用了权重衰减的方法,正则函数为权重的平方和,这和一般的岭回归使用的技巧一样。如果运用贝叶斯的思路,也可以将权重的先验分布的对数作为正则项。当然如果不采用正则项,那么目标函数就和总的或者平均误差函数一样了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值