如何选择激活函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何选择激活函数相关的知识,希望对你有一定的参考价值。

参考技术A 激活函数在设计神经网络上很关键。隐藏层的激活函数影响的是学习,输出层影响的是输出。

概述:
1.激活函数
2.隐藏层的激活函数
3.输出层的激活函数

激活函数定义了输入的加权和是如何被转化成输出的。

一个神经网络通常有三个部分:输入层,隐藏层,输出层。
所有隐藏层的激活函数一般相同,输出层一般不同。激活函数一般可微。

Rectified Linear Activation (ReLU)
Logistic (Sigmoid)
Hyperbolic Tangent (Tanh)

ReLU:max(0.0, x)

Sigmoid:1.0 / (1.0 + e^-x)

tanh:

如何选择一个隐藏层激活函数:

Linear
Logistic (Sigmoid)
Softmax

线形的并不改变什么,而是直接返回值。

softmax和概率相关
sigmoid

如何选择:
回归问题用线性,
Binary Classification: One node, sigmoid activation.
Multiclass Classification: One node per class, softmax activation.

深度学习笔记:激活函数常见问题总结


理论系列:

    深度学习笔记(一):卷积层+激活函数+池化层+全连接层

    深度学习笔记(二):激活函数的前世今生

    深度学习笔记(三):BatchNorm(BN)层

    深度学习笔记(四):梯度下降法与局部最优解

    深度学习笔记(五):欠拟合、过拟合

    防止过拟合(5.1):正则化

    防止过拟合(5.2):Dropout

    防止过拟合(5.3):数据增强

实战系列:

    《TensorFlow2 入门指南》专栏

    《CV实战项目:图像分类+目标检测+语义分割》专栏


1、为什么需要激活函数

深度学习中,通常使用的激活函数是非线性的,比如Sigmoid、Tanh、ReLU等。引入激活函数,主要有以下几个作用:

  • 可以引入非线性因素,对于理解复杂和非线性的函数具有重要作用。如果不使用激活函数,则输出信号只是一个简单的线性函数,神经网络就无法学习和模拟其他复杂类型的数据,比如图像、视频、语音等;
  • 使用非线性激活函数,可以使网络更加强大,增强它的能力,使它可以学习到复杂的任务,能够在输入和输出之间生成复杂的非线性映射;
  • 可以把当前特征空间通过一定的线性映射转换到另一个空间。

2、激活函数有哪些性质

激活函数一般具有以下性质:

  • 非线性:当激活函数是非线性的,一个两层的神经网络就基本上可以逼近所有的函数。
  • 可微性:处处可导,可以继续反向传播训练
  • 单调性:当激活函数是单调的时候,单层网络能够保证是凸函数
  • f’(x)=x:当满足此条件,如果参数的初始化是随机的较小值,网络的训练将会很高效
  • 当输出值有限制时:比如Sigmoid、Tanh,基于梯度的优化方法会更加稳定
  • 当输出值无限制时:比如ReLU、Leaky ReLU、Softplus等,模型的训练会更加高效,不过在这种情况下,一般需要更小的学习率

3、如何选择激活函数

选择一个合适的激活函数需要考虑很多因素。通常的做法是,如果不确定哪一个激活函数效果会更好,可以逐一尝试,然后在验证集或测试集上进行评价。

以下是常见的选择建议:

  • 对于二分类问题(输出值是0、1),则输出层选择sigmoid激活函数,其他的所有层选择relu
  • 对于多分类问题,一般输出层选择softmax激活函数
  • Tanh:它非常优秀,几乎适合所有场合
  • ReLU:最常用的激活函数,如果不确定用哪个激活函数,就先使用ReLU或者Leaky ReLU,再尝试其他激活函数

4、ReLU激活函数的优缺点

relu函数的优点如下:

  • 训练更快:使用ReLU或者Leaky ReLU的神经网络通常会比使用sigmoid或tanh的神经网络学习得更快
  • 避免了梯度弥散:当输入无穷大或无穷小时,sigmoid或tanh的梯度接近0,这会造成梯度弥散现象。而ReLU或者Leaky ReLU在输入大于0的部分,导数均为一个常数,避免了梯度弥散。
  • 单侧抑制,稀疏性:当输入小于0时,ReLU的梯度为0,神经元不会训练。模拟神经元的激活率是很低的这一特性,对输入信号的少部分进行选择性相应,正是这样的稀疏性提高了网络的性能。

relu函数的缺点如下:

  • 在输入小于0的时候,即使有很大的梯度传播过来也会戛然而止。

5、为什么tanh收敛速度比sigmoid快

这与激活函数的求导有关:

t a n h ′ ( x ) = 1 − t a n h ( x ) 2 tanh'(x)=1-tanh(x)^2 tanh(x)=1tanh(x)2,导数范围在(0,1)

s i g m o i d ′ ( x ) = s ( x ) ( 1 − s ( x ) ) sigmoid '(x)=s(x)(1-s(x)) sigmoid(x)=s(x)(1s(x)),导数范围在(0,1/4)

由此可见,tanh(x)梯度消失的问题比sigmoid(x)轻,所以tanh收敛速度比较快。


最好的关系是互相成就,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!

在这里插入图片描述

以上是关于如何选择激活函数的主要内容,如果未能解决你的问题,请参考以下文章

常用激活函数(激励函数)理解与总结

神经网络激活函数的选择

机器学习基础常用激活函数(激励函数)理解与总结

常用激活函数比较

机器学习之激活函数

深度学习笔记:激活函数常见问题总结