我是靠谱客的博主 善良汉堡,最近开发中收集的这篇文章主要介绍聊一聊激活函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Why激活函数?

引入激活函数是为了引入非线性因素,以此解决线性模型所不能解决的问题,让神经网络更加powerful!

如果没有激活函数,那么神经网络将会是这样子



多个感知机的组合

深入了解后我们会神奇的发现,咦?这样一个神经网络组合起来,它的输出居然无论如何都还是一个线性方程哎!



纳尼?那也就是说,就算我组合了一万个神经元,构建了一个看起来相当了不起的神经网络,其效力还是等同于一个线性方程,其效力等同于输入的线性组合。

呃,这样的神经网络未免也太 powless 了。

这个时候就轮到拯救地球的激活函数上场了。

我们在每一个神经元后面加一个激活函数,如σ-函数,如下图所示,这样它就变成非线性的啦~



将多个像这样有激活函数的神经元组合起来,我们就可以得到一个相当复杂的函数,复杂到谁也不知道它是什么样的。



引入了非线性激活函数以后, 神经网络的表达能力更加强大了~

注:
一般来说,我们说的激活函数都是非线性激活函数,而不是线性激活函数(或称为恒等激活函数)g(z) = z

σ-函数



它把输入映射到0-1区间,一般用在输出结果为二分类的输出层。

tanh函数



tanh: a=ezezez+ez a = e z − e − z e z + e − z

tanh函数它是一个双曲正切函数,仔细一看,你会发现它其实是σ-函数的平移版。

tanh函数总是比σ-函数来得好。因为它介于-1到1之间,激活函数的平均值接近于0,这就有类似数据中心化的效果,使得数值均值为0,而不是0.5。因此,对于非输出层的隐藏层,一般都会选择用tanh函数而不是σ-函数。

ReLU

ReLU的全称是Rectified Linear Unit,修正线性单元。它是最受欢迎的一个激活函数,几乎已经成了隐藏层的默认选项。



ReLU: a=Max(0,z) a = M a x ( 0 , z )

比起σ-函数和tanh函数,ReLU的梯度下降速度快很多。因为它不存在斜率接近于0,学习效率减慢的情况。

Leaky ReLU

ReLU虽好,也存在一个小缺点:当z<0时,导数为0,虽然这在实践过程中并不会带来什么问题。

但也催生了另一个版本的ReLU,叫Leaky ReLU。当z<0时,斜率非常平缓,一般表达式为a=max(0.01z, z)



Leaky ReLU: a=Max(0.01z,z) a = M a x ( 0.01 z , z )

如何选择激活函数

  1. σ-函数一般用在输出结果为二分类的输出层。
  2. 一般隐藏层选用tanh函数或是ReLU,最常用的是ReLU,具有梯度下降速度快的优点
  3. ReLU虽好,但也存在当z为负时,导数为0的小缺点,虽然这在实践过程中并不会带来什么问题,但也可以用Leaky ReLU达到更好的效果,虽然目前Leaky ReLU还是比较少用。
  4. 凡事无绝对,具体选用什么激活函数还需看情况而定。

参考:
知乎 - 神经网络激励函数的作用是什么?有没有形象的解释?
吴恩达 - 神经网络和深度学习 - 激活函数

最后

以上就是善良汉堡为你收集整理的聊一聊激活函数的全部内容,希望文章能够帮你解决聊一聊激活函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部