关于激活函数和损失函数的调研

  • 1) 激活函数(Activation Function)
  • 背景
  • Sigmoid函数
  • tanh函数
  • Relu函数
  • Leaky Relu函数(PReLu)
  • ELU(Exponential Linear Units)函数
  • MaxOut函数
  • 2) 损失函数(Loss Function)
  • 0-1损失函数(zero-one loss)
  • 绝对值损失函数
  • log损失函数
  • 平方损失函数
  • 指数损失(exponential loss)函数
  • Hinge损失函数
  • 感知损失(perceptron loss)函数
  • 交叉熵损失 (Cross-entropy loss)函数
  • 参考文献:


1) 激活函数(Activation Function)

背景

深度学习的基本原理是基于人工神经网络,信号从一个神经元进入,经过非线性的activation function,传入到下一层神经元;再经过该层神经元的activate,继续往下传递,如此循环往复,直到输出层。正是由于这些非线性函数的反复叠加,才使得神经网络有足够的capacity来抓取复杂的pattern,在各个领域取得state-of-the-art的结果。显而易见,activation function在深度学习中举足轻重,也是很活跃的研究领域之一。目前来讲,选择怎样的activation function不在于它能否模拟真正的神经元,而在于能否便于优化整个深度神经网络。下面我们简单聊一下各类函数的优缺点以及其适用场景。Pros表示优点,Cons表示缺点。

Sigmoid函数

swish 激活函数公式 svm激活函数_swish 激活函数公式

swish 激活函数公式 svm激活函数_损失函数_02


Sigmoid函数是深度学习领域开始时使用频率最高的activation function

Pros

  • 它是便于求导的平滑函数,其导数为swish 激活函数公式 svm激活函数_激活函数_03

Cons

  • 容易出现gradient vanishing
  • 函数输出并不是zero-centered
  • 幂运算相对来讲比较耗时

适用场景

  • 常用于输出层,多应用在二分类问题、逻辑回归任务及其他神经网络领域

tanh函数

swish 激活函数公式 svm激活函数_swish 激活函数公式_04

swish 激活函数公式 svm激活函数_损失函数_05


tanh读作Hyperbolic Tangent,双曲正切函数

Pros

  • 解决了Sigmoid函数的不是zero-centered输出问题
    Cons
  • 梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在

适用场景

  • 较多用在自然语言处理的递归神经网络和语音识别任务

Relu函数

swish 激活函数公式 svm激活函数_激活函数_06

swish 激活函数公式 svm激活函数_激活函数_07


ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient。

Pros

  • 解决了gradient vanishing问题 (在正区间)
  • 计算速度非常快,只需要判断输入是否大于0
  • 收敛速度远快于sigmoid和tanh

Cons

  • ReLU的输出不是zero-centered
  • Dead ReLU Problem

适用场景

  • 应用最广泛的激活函数,只在隐藏层中使用

Leaky Relu函数(PReLu)

swish 激活函数公式 svm激活函数_损失函数_08

swish 激活函数公式 svm激活函数_损失函数_09


人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为[公式]而非0。另外一种直观的想法是基于参数的方法,即Parametric ReLU:f(x)=max(ax,x),其中α可由back propagation学出来。

Pros

  • Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

Cons

  • 需要调参来找到一个好的缓慢下降的参数

适用场景

  • 跟ReLu函数应用相近

ELU(Exponential Linear Units)函数

swish 激活函数公式 svm激活函数_损失函数_10

swish 激活函数公式 svm激活函数_激活函数_11

ELU也是为解决ReLU存在的问题而提出的

Pros

  • ELU有ReLU的基本所有优点
  • 不会有Dead ReLU问题
  • 输出的均值接近0,zero-center

Cons

  • 计算量稍大

适用场景

  • 用于加速深层神经网络的训练

MaxOut函数

swish 激活函数公式 svm激活函数_损失函数_12

Maxout可以看做是在深度学习网络中加入一层激活函数层,包含一个参数k

Pros

  • 跳出了点乘的基本形式
  • 在所有输入范围上都没有神经元饱和问题
  • 拟合能力非常强

Cons

  • 使得神经元个数和参数加倍,导致优化困难

适用场景

  • 多用于隐藏层

2) 损失函数(Loss Function)

0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1,否则为0:
swish 激活函数公式 svm激活函数_深度学习_13
特点:
a.0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用
b.感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足swish 激活函数公式 svm激活函数_激活函数_14时认为相等,
swish 激活函数公式 svm激活函数_深度学习_15

绝对值损失函数

绝对值损失函数是计算预测值与目标值的差的绝对值:
swish 激活函数公式 svm激活函数_swish 激活函数公式_16

log损失函数

log对数损失函数的标准形式如下:
swish 激活函数公式 svm激活函数_swish 激活函数公式_17
特点:
a. log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
b. 鲁棒性不强,相比于hinge loss对噪声更敏感。
c. 逻辑回归的损失函数就是log对数损失函数。

平方损失函数

平方损失函数标准形式如下:
swish 激活函数公式 svm激活函数_swish 激活函数公式_18
特点:
经常应用于回归问题

指数损失(exponential loss)函数

指数损失函数标准形式如下:
swish 激活函数公式 svm激活函数_激活函数_19
特点:
对离群点、噪声非常敏感。经常用在AdaBoost算法中。

Hinge损失函数

Hinge损失函数标准形式如下:
swish 激活函数公式 svm激活函数_损失函数_20
特点:
a.hinge损失函数表示如果被分类正确,损失为0,否则损失就为1-yf(x)。SVM就是使用这个损失函数。
b.一般的f(x)是预测值,在-1到1之间, y是目标值(-1或1)。其含义是,f(x)的值在-1和+1之间就可以了,并不鼓励|f(x)|>1,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。
c.鲁棒性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

感知损失(perceptron loss)函数

感知损失函数的标准形式如下:
swish 激活函数公式 svm激活函数_swish 激活函数公式_21
特点:
是Hinge损失函数的一个变种,Hinge loss对判定边界附近的点(正确端)惩罚力度很高。而perceptron loss只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。它比Hinge loss简单,因为不是max-margin boundary,所以模型的泛化能力没 hinge loss强。

交叉熵损失 (Cross-entropy loss)函数

交叉熵损失函数的标准形式如下:
swish 激活函数公式 svm激活函数_swish 激活函数公式_22
其中,x表示样本, y表示预测的输出, a表示实际的输出,n表示样本总数量。
特点:
a.本质上也是一种对数似然函数,可用于二分类和多分类任务中。
二分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
swish 激活函数公式 svm激活函数_swish 激活函数公式_23
多分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出):
swish 激活函数公式 svm激活函数_swish 激活函数公式_24
b.当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。