【DL基础】激活函数总结
前言
本文主要总结深度学习中激活函数的来龙去脉,理解激活函数的定义,掌握常见激活函数的特性,能够灵活使用激活函数解决实际项目中的问题。
一、激活函数的基本理解
1. 什么是激活函数
所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到网络中。如图1,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
激活函数可以使得神经网络从线性进化为到非线性,意思就是说。原本只能线性可分,现在可以分类非线性分布的数据了。
2. 为什么要使用激活函数
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
因为深度学习模型中其它的层都是线性的函数拟合,即便是用很深的网络去拟合,其还是避免不了线性的特性,无法进行非线性建模,而加入非线性激活函数单元,当线性函数的输出层经过非线性激活单元的时候,其输出呈现一种非线性的变化,这样经过多层的拟合,就可以完成对输入的非线性建模操作。同时还可以起到一种特征组合的作用。
好的激活函数的特征一般应当是平滑的,而且对于负值有较好的处理。
3. 激活函数的非线性与线性
线性的激活函数所做的工作仅仅是将输入数据进行线性组合后再输出,如果只使用现行的激活函数,那么即便神经网络的层数再多、隐藏单元的个数再多也没啥卵用,最终还是将数据进行线性组合后就输出了,而且很多时候数据的复杂程度是线性函数根本无法学习的!
其实实际运用中,隐藏层使用线性激活函数的场景非常非常非常少,可能除了与压缩有关的一些非常特殊的情况才会在隐藏层使用线性激活函数,否则大部分都是在隐藏层使用非线性的激活函数。
只有一个地方可以使用线性的激活函数,就是针对回归问题,比如房价预测,但是也仅仅限制在输出单元,也就是输出层使用线性激活函数,隐藏单元还是别用线性激活函数了,你可以使用ReLU、tanh、leaky ReLU都可以。
4.1 定义理解
右饱和:当 x 趋向于正无穷大时,导数值趋近于 0
左饱和:当 x 趋向于负无穷大,导数值趋近于 0
饱和激活函数:当满足右饱和和左饱和时,称作饱和激活函数,分别有 Sigmoid 和 tanh
非饱和激活函数:只满足右饱和或左饱和中的一个,或都不满足,则称作非饱和激活函数,有 ReLU 及其他的变种
4.2 非饱和激活函数的优点
1)解决梯度消失的问题,以 ReLU 为例,当 x 小于等于 0 时,ReLU 的梯度为 0,但是当 x 大于 0 时,ReLU 的梯度恒为 1,这样即使是 N 层的梯度相乘,也还是 1,即不会产生梯度消失问题
2)加快收敛速度,同样以 ReLU 为例,由于在训练的过程中 ReLU 产生的梯度不会越来越小,因此有利于网络更快地收敛;
4.3 什么是梯度消失?为什么可以解决梯度消失问题?
4.4 什么是梯度爆炸?怎么解决梯度爆炸问题?
观察Sigmoid函数曲线,可以知道其输出分布在【0,1】区间,而且在输入值较大和较小的情况,其输出值变化都会比较小,仅仅当输入值接近为0时,它们才对输入强烈敏感。Sigmod单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在已经不鼓励将它们作为前馈网络的隐藏单元。
观察Simod导数曲线,呈现一个类似高斯分布的驼峰装,其取值范围在【0,0.25】之间,而我们初始化后的网络权值通常小于1,因此当层数增多时,小于1的值不断相乘,最后就会导致梯度消失的情况出现。而梯度爆炸则是当权值过大,导致其导数大于1,大于1的数不断相乘,发生梯度爆炸。
同时Sigmoid还有其他缺点,如输出不是以0为中心,而是0.5,这样在求解权重的梯度时,梯度总是正或负的,指数计算耗时。
总之不推荐使用sigmoid饱和激活函数。
3. ReLU函数
ReLU(Rectified Linear Unit),即修正线性单元,是一种线性不饱和激活函数。
1.1 定义
1.1 定义
参考
1. 深度学习—激活函数详解;
2. 为什么需要非线性激活函数;
3. 线性与非线性激活函数的作用(以一个2层的神经网络为例);
5. 饱和及非饱和激活函数的特点;
6. Visualising Activation Functions in Neural Networks;
完
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2021-07-07 【linux基础 】批量处理labelme的json数据
2021-07-07 【软硬件环境安装】openMMLab的软件环境搭建