深度神经网络之损失函数和激活函数

1.损失函数和激活函数简介

通过前面深度神经网络之前向传播算法深度神经网络之反向传播算法的学习,我们能够了解到损失函数是用来评估模型的预测值与真实值之间的差异程度。另外损失函数也是神经网络中优化的目标函数,神经网络训练或者优化的过程就是最小化损失函数的过程,损失函数越小,说明模型的预测值就越接近真实值,模型的准确性也就越好。前面我们已经学习过平方损失函数对数损失函数交叉熵损失函数等不同形式的损失函数,这里也就不做太多介绍。

那么在深度神经网络之中,激活函数的作用又是什么呢?首先我们来看单层感知机模型,如下图所示,感知机可以利用分割线将平面分割开来。
01

现在我们利用多个感知机进行组合,获得更强的分类能力,模型分类效果如下图所示。
02

但无论怎样组合,模型输出的时候都只是线性模型,如何解决非线性分类呢?好吧,上面是我们没有增加激活函数的情况。那么现在我们在每一层迭代完之后,增加一个激活函数,如下图的y=σ(a)所示,这样模型的输出便能解决非线性情况。将多个有激活函数的神经元组合起来,我们就可以得到一个相当复杂的函数。
03

引入非线性激活函数之中,模型的表达能力增强,能够有效解决非线性情况。通过不同形式的激活函数,模型也就能够学习到不同形式的分类方式,比如平滑分类平面,方面我们解决各种问题。
04

通过上面的介绍,我们能够了解到神经网络之中损失函数和激活函数的作用,但实际上DNN可以使用的损失函数和激活函数有不少,这时我们应该如何去做选择呢?下面我们介绍一些DNN之中常见的损失函数和激活函数。

2.交叉熵损失函数和Sigmoid激活函数

深度神经网络之反向传播算法之中,我们用的是均方差损失函数和Sigmoid激活函数,首先我们看看均方差损失函数和Sigmoid激活函数有什么问题。如下所示,是我们已经非常熟悉的Sigmoid激活函数表达式
σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+ez1
其中σ(z)的图像如下图所示,从图中可以看出,当z越来越大时,函数曲线也就变得越平缓,意味着此时导数σ′(z)也越小。同样,当z越来越小时,也会出现σ′(z)也越小。仅仅当z取值为0的附近时,导数σ′(z)取值较大。
05

深度神经网络之反向传播算法之中,我们了解到每次反向迭代递推时,都要乘以σ′(z)得到梯度变化值。而Sigmoid的曲线意味着在大多数时候,DNN的梯度变化值较小,则会导致W,b更新到极值的速度很慢。那么有什么办法可以改变这种情况呢?

常见的方法是选用交叉熵损失函数来代替均方差损失函数,首先来看看交叉熵损失函数的形式。其中 为向量内积,我们在机器学习之Logistic回归中便用到类似的交叉熵损失函数形式。
J ( W , b , a , y ) = − y ⋅ l n a − ( 1 − y ) ⋅ l n ( 1 − a ) J(W,b,a,y)=-y \cdot lna-(1-y)\cdot ln(1-a) J(W,b,a,y)=ylna(1y)ln(1a)
然后应用交叉熵损失函数之后,输出层 δ L \delta ^L δL的梯度变化情况如下所示。
δ L = J ( W , b , a L , y ) ∂ z L = − y 1 a L ( 1 − a L ) + ( 1 − y ) 1 1 − a L a L ( 1 − a L ) \delta^L=\frac{J(W,b,a^L,y)}{\partial z^L}=-y\frac{1}{a^L}(1-a^L)+(1-y)\frac{1}{1-a^L}a^L(1-a^L) δL=zLJ(W,b,aL,y)=yaL1(1aL)+(1y)1aL1aL(1aL)

= − y ( 1 − a L ) + ( 1 − y ) a L = a L − y =-y(1-a^L)+(1-y)a^L=a^L-y =y(1aL)+(1y)aL=aLy

使用交叉熵损失函数与深度神经网络之反向传播算法中使用均方差损失函数的 δ L \delta^L δL有什么区别呢?我们发现使用均方差损失函数时 δ L = ( a L − y ) ⊙ σ ′ ( z ) \delta^L=(a^L-y)\odot {\sigma}'(z) δL=(aLy)σ(z),对比发现使用交叉熵损失函数没有 σ ′ ( z ) {\sigma}'(z) σ(

  • 11
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度神经网络中常用的激活函数包括sigmoid函数、ReLU函数、tanh函数、Leaky ReLU函数、ELU函数等。以下是它们的具体介绍: 1. Sigmoid函数:sigmoid函数常用于二分类问题,它将输入值映射到(0,1)之间,具有S形曲线,可以用来输出概率值。但是sigmoid函数在输入较大或较小的情况下,导数接近于0,容易出现梯度消失的问题,影响神经网络训练效果。 2. ReLU函数:ReLU函数常用于卷积神经网络中,它将输入值进行截断,大于0的部分不变,小于等于0的部分变为0。ReLU函数计算简单,能够有效地缓解梯度消失的问题,但是可能会出现神经元死亡的问题,即某些神经元永远不会被激活,导致输出为0。 3. Tanh函数:tanh函数与sigmoid函数类似,但是将输入值映射到(-1,1)之间,具有S形曲线。tanh函数比sigmoid函数更加对称,能够更好地处理负数的输入值,但是也存在梯度消失的问题。 4. Leaky ReLU函数:Leaky ReLU函数是对ReLU函数的改进,它在小于0的部分不再是严格等于0,而是乘以一个小的斜率。这样可以避免ReLU函数中出现的神经元死亡问题,同时也能够缓解梯度消失的问题。 5. ELU函数:ELU函数是对Leaky ReLU函数的改进,它在小于0的部分不再是线性函数,而是指数函数。这样可以更好地处理负数的输入值,同时也能够缓解梯度消失的问题。 除了以上常见的激活函数,还有一些其他的激活函数,如Maxout函数、Swish函数等。在选择激活函数时,需要根据具体的场景和问题进行选择,以达到更好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值