卷积神经网络—激活函数与损失函数

一、激活函数

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

1.1 Sigmoid函数

Sigmoid函数的计算公式
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+ex1
在这里插入图片描述
sigmiod 便于求导的平滑函数,其导数为 σ ( x ) ( 1 − σ ( x ) ) \sigma(x)(1-\sigma(x)) σ(x)(1σ(x))

缺点

  1. sigmoid作为激活函数时包含指数运算,计算量大,反向传播求导误差梯度时,求导涉及除法,计算量相对较大。
  2. 对于深层网络,Sigmoid函数,反向传播时,很容易出现 梯度消失(gradient vanishing) 的情况(在Sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,从而无法完成深层网络的训练)
  3. 函数输出不是zero-centered,Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢。
    这就带来一个约束性捆绑问题,也就是说,在更新gradient的过程中,如果我要求的理想过程是 w 1 w_1 w1 不断increase,而 w 2 w_2 w2 不断的decrease,而当输入的x永远是大于0,或者x永远小于0的时候,对于这种收敛将会是非常慢的。这种情况下,函数的输出不满足zero-centered条件。(产生了通常所说的 zig-zagging dynamics)但是,如果我们采用mini-batch的方法后,这样在更新gradient的时候,有正有负,就会加速到达optim的过程。从另一种方面满足了zero-centered的条件。
    在这里插入图片描述
1.2 tanh

tanh函数的计算公式
tanh ⁡ x = e x − e − x e x + e − x \tanh x = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanhx=ex+exexex

函数及其导数图如下:
在这里插入图片描述
tanh函数虽然解决了zero-centered的输出问题,然而,梯度消失和幂运算的问题依然存在。

1.3 ReLU

。下面我们简单聊一下各类函数的特点以及为什么现在优先推荐ReLU函数。

ReLU函数的计算公式 ϕ ( x ) = max ⁡ ( 0 , x ) \phi(x) = \max(0,x) ϕ(x)=max(0,x)

在这里插入图片描述

激活函数在增加神经网络模型的非线性,在函数定义域中该点连续,左右两侧倒数都存在并且相等。

ReLU 优点

  1. 解决了梯度消失的(gradient vanishing)问题 (在正区间)
  2. 收敛速度远快于sigmoid和tanh
  3. ReLU会导致一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存的关系,缓解了过拟合的发生。
  4. 计算速度非常快,只需要判断输入是否大于0。不像Sigmoid 、tanh函数等函数,计算激活函数时包含指数运算,计算量大,反向传播求导误差梯度时,求导涉及除法,计算量相对较大。

ReLU 几个需要特别注意的问题:

  1. ReLU的输出不是zero-centered
  2. 对于层数较多的深度学习网络,某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。原因有二:1,非常不幸的参数初始化,这种情况比较少见。2,学习率塔高导致在训练过程中参数更新太大,不幸使得网络进入这种状态。解决方法有:采用Xavier初始化方法,以及避免将learning rate设置太大或者使用adagrad等自动调节learning rate的方法 。
1.4 Leaky ReLU - - ELU

Leaky ReLU函数的计算公式 ϕ ( x ) = max ⁡ ( 0.01 x , x ) \phi(x) = \max(0.01x,x) ϕ(x)=max(0.01x,x)

在这里插入图片描述

为了解决Dead ReLU Problem,提出了将ReLU的前半段设为 0.01 x 0.01x 0.01x 而非0。另外一种直观的想法是基于参数的方法,即Parametric ReLU: max ⁡ ( α x , x ) \max(\alpha x,x) max(αx,x),其中 α \alpha α 可由back propagation学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

ELU 函数的计算公式
f ( x ) = { x i f   x > 0 α ( e x − 1 ) o t h s e r w i s e f(x) = \left\{\begin{matrix} x &\mathrm{if} ~x>0\\ \alpha (e^x-1)& \mathrm{othserwise} \end{matrix}\right. f(x)={xα(ex1)if x>0othserwise

其函数图与求导图:
在这里插入图片描述

ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:

  • 不会有Dead ReLU问题
  • 输出的均值接近0,zero-centered

它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。

1.5 softmax

softmax 回归(softmax regression)其实是 logistic 回归的一般形式,logistic 回归用于二分类,而 softmax 回归用于多分类。

对于输入数据 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } \{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} {(x1,y1),(x2,y2),...,(xm,ym)} k k k 个类别,即 y i ∈ { 1 , 2 , . . . , k } y_i \in \{ 1,2,...,k\} yi{1,2,...,k},那么 softmax 回归主要估算输入数据 x i x_i xi 归属于每一类的概率,即

在这里插入图片描述
其中, θ 1 , θ 2 , . . . , θ k ∈ θ \theta_1,\theta_2,...,\theta_k \in \theta θ1,θ2,...,θkθ 是模型的参数,乘以 1 ∑ j = 1 k e θ j T s i \frac{1}{\sum_{j=1}^ke^{\theta_j^Ts_i}} j=1keθjTsi1 是为了让概率位于 [0,1] 并且概率之和为 1,softmax 回归将输入数据 x i x_i xi 归属于类别 j j j 的概率为:

在这里插入图片描述
代码计算公式:yi = math.exp(xi)/math.exp(x1+x2+...+xm)

二、损失函数

损失函数(loss function)是用来估量模型的预测值 f ( x ) f(x) f(x) 与真实值 y y y 的不一致程度,损失函数越小,一般就代表模型的鲁棒性越好,正是损失函数指导了模型的学习。
在这里插入图片描述

2.1 分类损失函数
0-1 loss

此损失函数,它直接比较输出值与输入值是否相等,对于样本 i i i,它的 loss:

当标签与预测类别相等时,loss为0,否则为1。可以看出,0-1 loss无法对 x x x 进行求导,这在依赖于反向传播的深度学习任务中,无法被使用。

熵与交叉熵loss

在物理学有一个概念,就是熵,它表示一个热力学系统的无序程度。为了解决对信息的量化度量问题,香农在1948年提出了“信息熵”的概念,它使用对数函数表示对不确定性的测量。熵越高,表示能传输的信息越多,熵越少,表示传输的信息越少,我们可以直接将熵理解为信息量

按照香农的理论,熵背后的原理是任何信息都存在冗余,并且冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关。概率大,出现机会多,则不确定性小,这个关系就用对数函数来表征。

为什么选择对数函数而不是其他函数呢?首先,不确定性必须是概率 P P P 的单调递降函数:
假设一个系统中各个离散事件互不相关,要求其总的不确定性等于各自不确定性之和,对数函数是满足这个要求的。将不确定性 f f f 定义为 log ⁡ ( 1 / p ) = − log ⁡ ( p ) \log(1/p)=-\log(p) log(1/p)=log(p),其中 p p p是概率。

假设有两个概率分布 p ( x ) p(x) p(x) q ( x ) q(x) q(x),其中p是已知的分布,q是未知的分布,则其交叉熵函数是两个分布的互信息,可以反应其相关程度。

从这里,就引出了分类任务中最常用的loss,即log loss,又名交叉熵loss,后面我们统一称为交叉熵: n n n 对应于样本数量, m m m 是类别数量, y i j y_{ij} yij 表示第 i i i 个样本属于分类 j j j 的标签,它是0或者1。对于单分类任务,只有一个分类的标签非零。 f ( x i j ) f(x_{ij}) f(xij) 表示的是样本 i i i预测为 j j j分类的概率。loss的大小完全取决于分类为正确标签那一类的概率,当所有的样本都分类正确时,loss=0,否则大于0。

softmax loss

如log loss中的 f ( x i j ) f(x_{ij}) f(xij) 的表现形式是softmax概率的形式,那么交叉熵 loss就是我们熟知的softmax with cross-entropy loss,简称softmax loss,所以说softmax loss只是交叉熵的一个特例。

softmax loss被广泛用于分类分割等任务,而且发展出了很多的变种,有针对不平衡样本问题的weighted softmax loss, focal loss,针对蒸馏学习的soft softmax loss,促进类内更加紧凑的L-softmax Loss等一系列改进,

以下讲解以神经网络的训练作为背景。讲解softmax funtion 、交叉熵、softmax loss 三者之间的关系。

softmax funtion:

z i = e p i ∑ j = 1 C e p i z_i = \frac{e^{p_i}}{\sum_{j=1}^Ce^{p_i}} zi=j=1Cepiepi

p i p_i pi为类 i i i 的预测得分,C为类的数目

交叉熵

L = 1 n ∑ i = 1 n ( − ∑ j = 1 C y i log ⁡ p i ) L = \frac{1}{n}\sum_{i=1}^n(-\sum_{j=1}^Cy_i\log p_i) L=n1i=1n(j=1Cyilogpi)

n n n 为batch size,
C 为类的数目,
y y y 为真实分布(也就是样本标签分布),
p p p 为预测分布(也就是神经网络的预测得分,最后一层的logit)

推导过程:
先看单一个样本的情况:
L 1 = − ∑ j = 1 C y i log ⁡ p i L_1 = -\sum_{j=1}^Cy_i\log p_i L1=j=1Cyilogpi

对于一个二分类任务来说,C=2,设当前样本 x 1 x_1 x1属于类A, 则 y=(1,0),设p=(0.9,0.1),则交叉熵为: L = − ( 1 ∗ log ⁡ p 1 + 0 ∗ log ⁡ p 2 ) = − log ⁡ p 1 = − log ⁡ 0.9 L = -(1*\log p_1 + 0*\log p_2) = -\log p_1 = -\log 0.9 L=(1logp1+0logp2)=logp1=log0.9
这里可以看到,实际上只有当前样本x1对应的类计算出来是有值的(1*logp1),其他项都是0,扩展到多分类任务也是一样的。所以,公式可以简化为:
L = − log ⁡ p i L = -\log p_i L=logpi
p i p_i pi 直接作为样本 x 1 x_1 x1对 应类A的预测值(0.9)。因为对我们神经网络的训练来说,一个样本只属于一类,所以直接取 p=(p1,p1)=(0.9,0.1) 中对应样本 x1 所属类A的那一个预测得分进行计算。
上面的公式是针对一个样本而言的,对一个批次的样本,交叉熵就是它们的求和平均:
L = 1 n ∑ i = 1 n ( − log ⁡ p i ) L = \frac{1}{n}\sum_{i=1}^n(-\log p_i) L=n1i=1n(logpi)
n为batch size。注意此处 i 为样本的下标(p1为第一个样本对应的预测值(0.9),p2为第二个样本对应的预测值(一个其他的什么值)),不再是预测分布的下标(像p=(p1,p2)=(0.9,0.1))。

softmax loss
L = 1 n ∑ i = 1 n ( − log ⁡ e p i ∑ j = 1 C e p i ) L = \frac{1}{n}\sum_{i=1}^n(-\log \frac{e^{p_i}}{\sum_{j=1}^Ce^{p_i}}) L=n1i=1n(logj=1Cepiepi)
非常简单,实际上就是把预测得分pi用softmax包裹成 e p i ∑ j = 1 C e p i \frac{e^{p_i}}{\sum_{j=1}^Ce^{p_i}} j=1Cepiepi

这里需要特别注意的是,pi的i对应的是样本xi的下标,pj的j对应的是样本xi对每一个类j的预测得分。举一个简单的例子,现在一个批次有两个样本,第一个样本属于类A,第二个样本属于类B,神经网络对两个样本的输出分别为(0.9,0.1),(0.2,0.8)。则softmax loss为:
L = 1 2 ( log ⁡ e 0.9 e 0.9 + e 0.1 + log ⁡ e 0.8 e 0.2 + e 0.8 ) L = \frac{1}{2}(\log \frac{e^{0.9}}{e^{0.9}+e^{0.1}} + \log \frac{e^{0.8}}{e^{0.2}+e^{0.8}}) L=21(loge0.9+e0.1e0.9+loge0.2+e0.8e0.8)

上面我们说到过,交叉熵只用到了对应类的预测得分,而softmax loss可以用到在所有类上的预测得分。

在实际操作中,会在神经网络的最后一层再加一个softmax层,论文会将softmax loss写成如下形式:

softmax loss形式:
L = − 1 n ∑ i = 1 n log ⁡ e W y i T x i + b y i ∑ j = 1 C e W j T x i + b j L = -\frac{1}{n}\sum_{i=1}^n \log \frac{e^{W_{y_i}^Tx_i + b_{y_i}}}{\sum_{j=1}^Ce^{W_{j}^Tx_i + b_{j}}} L=n1i=1nlogj=1CeWjTxi+bjeWyiTxi+byi
n 为batch size,
C 为类的数目,
x i x_i xi 为第 i i i 个样本的特征,
y i y_i yi x i x_i xi 对应的类标签,
W j W_j Wj b j b_j bj为类j的权重及偏置。

softmax loss简单来说,就是将神经网络的logit用softmax包裹起来,再丢到交叉熵里面去。大佬们都是用softmax loss作为softmax function+cross entropy loss的简称。总结一下,softmax是激活函数,交叉熵是损失函数,softmax loss是使用了softmax funciton的交叉熵损失。

2.2 回归损失函数
回归任务损失

【所有损失函数代码】

L1 Loss

Mean absolute loss(MAE)是以绝对误差作为距离,由于L1 loss具有稀疏性,为了惩罚较大的值,因此常常将其作为正则项添加到其他loss中作为约束。L1 loss的最大问题是梯度在零点不平滑,导致会跳过极小值。
在这里插入图片描述

L2 loss

Mean Squared Loss/ Quadratic Loss(MSE loss), 均方误差或欧氏距离作为距离,是最常用的回归损失函数,它是我们的目标变量和预测值的差值平方和。
在这里插入图片描述
上图是均方误差函数图,其中目标真值为100,预测值范围在-10000到10000之间。均方误差损失(Y轴)在预测值(X轴)=100处达到最小值。范围为0到∞。

MSE vs MAE (L2损失 vs L1损失)
简而言之:
使用L1损失对于异常值更鲁棒,导数是不连续的,从而让它无法有效的求解。
L2损失对异常值很敏感,但会求出更稳定和更接近的解。

使用MAE损失(特别是对于神经网络来说)的一个大问题就是,其梯度始终一样,这意味着梯度即便是对于很小的损失值来说,也还会非常大。这对于机器学习可不是件好事。为了修正这一点,我们可以使用动态学习率,它会随着我们越来越接近最小值而逐渐变小。在这种情况下,MSE会表现的很好,即便学习率固定,也会收敛。
MSE损失的梯度对于更大的损失值来说非常高,当损失值趋向于0时会逐渐降低,从而让它在模型训练收尾时更加准确(见下图)。
在这里插入图片描述

回归模型-评估指标

参考
softmax:https://zhuanlan.zhihu.com/p/98061179
回归损失函数:https://www.zhihu.com/search?type=content&q=%E5%9B%9E%E5%BD%92%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值