为什么引入非线性**函数

如果不使用非线性的**函数,无论叠加多少层,最终的输出依然只是输入的线性组合。
引入非线性的**函数,使得神经网络可以逼近任意函数。

常用**函数

深度学习中**函数的选择

sigmoid函数

深度学习中**函数的选择
σ(z)=11+ez
σ(z)=σ(z)(1σ(z))
sigmoid函数是最常见的**函数,常用于输出层。其值域为0到1。

tanh双曲正切函数

深度学习中**函数的选择
g(z)=ezezez+ez
g(z)=1g(z)2
tanh函数的值域位于-1和1之间。
可以看作是sigmoid函数向下平移和伸缩的结果。
经验表明,在隐藏层中使用tanh函数的效果是优于sigmoid函数的,因为其输出更接近零均值。这会使得下一层的学习更加简单。

sigmoid函数和tanh函数共同的缺点是,在z特别大或者特别小的情况下,函数的梯度会变得特别小,接近0,这会使得梯度下降的速度变慢。
一般在二分类问题的输出层使用,不在隐藏层使用。

ReLU修正线性单元

深度学习中**函数的选择
relu(z)=max(0,z)
当z为正的时候,导数恒为1,当z为负的时候,导数恒为0。
在零点的导数不存在,在实际使用中,z不会恰好为0,一般为一个很小的浮点数,这时导数取0或1都可以。

ReLU易于优化。只要出与**状态,导数都能保持较大。梯度不仅大而且一致。二阶导数几乎处处为0,并且在ReLU处于**状态时,一阶导数处处为1。

通常将偏置b设置成一个小的正值,如0.1。使得其对训练集中大多数输入呈现**状态,并且允许导数通过。

ReLU是最常用的**函数。

Leaky ReLU

深度学习中**函数的选择
leakyrelu(z)=max(0.01z,z)
relu和leakyrelu的优点

  • 相比于sigmoid等,计算量小,
  • 相比于sigmoid,不容易出现梯度消失情况,能加速网络训练速度
  • 使得一些神经元输出为0,增加稀疏性,防止过拟合。

PReLU

g(z)=max(az,z)
a作为学习的参数。

maxout 单元

maxout单元进一步扩展了relu。maxout将z划分为每组具有k各值的组,而不是使用作用于每个元素的函数g(z)。每个maxout单元则输出每组中的最大元素
g(z)i=maxjG(i)zj
这提供了一种方法来学习对输入x空间中多个方向响应的分段线性函数。
maxout单元可以学习具有多达k段的分段线性的凸函数

maxout单元因此可以视为学习**函数本身而不仅仅是单元之间的关系。使用足够大的k,maxout可以以任意的精确度来近似任何凸函数。特别地,具有两块的maxout层可以学习实现和传统层相同的输入x的函数,这些传统层可以使用relu,prelu等。

每个maxout单元现在由k个权重向量来参数化,而不仅仅是一个,所以maxout单元通常比relu需要更多的正则化。

参考资料

DeepLearning deeplearning.ai
《深度学习》第6章
Introduction to Deep Learning HEC

相关文章:

  • 2021-04-24
  • 2021-11-28
  • 2021-05-05
  • 2021-11-12
  • 2021-12-11
  • 2021-10-18
  • 2021-09-17
猜你喜欢
  • 2021-05-21
  • 2021-05-23
  • 2021-05-12
  • 2021-11-22
  • 2021-08-14
  • 2021-06-29
相关资源
相似解决方案