机器学习

机器学习中常用的激活函数

本文主要是介绍机器学习中常用的激活函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

常见的激活函数总结

  • 一.什么是激活函数?
    • 度娘定义:
    • 狐仙定义:
  • 二.为什么要用激活函数?
  • 三.激活函数应该具有的性质
  • 四.常见的激活函数
    • 1.Sigmoid函数
    • 2.Tanh函数
    • 3.ReLU函数
    • 4.小结

一.什么是激活函数?

度娘定义:

激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

狐仙定义:

激活函数又称非线性映射,顾名思义,激活函数的引入为的是增加整个网络的表达能力 (即非线性),否则,若干线性操作层的堆叠仍然只能起到线性映射的作用,无法形成复杂的函数。

二.为什么要用激活函数?

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。至于感知机,大家知道其连最基本的异或问题都无法解决,更别提更复杂的非线性问题。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

三.激活函数应该具有的性质

1.非线性:线性激活对于深层神经网络没有作用,因为其作用以后仍然是输入的各种线性变换。

2.连续可微:梯度下降法的要求。

3.范围最好不饱和,当有饱和的区间段时,若系统优化进入到该段,梯度近似为 0,网络的学习就会停止。

4.单调性:当激活函数是单调时,单层神经网络的误差函数是凸的,好优化。

5.在原点处近似线性,这样当权值初始化为接近 0 的随机值时,网络可以学习得较快,不用调节网络的初始值。

四.常见的激活函数

前言:
激活函数有许多,但本文我们只讲三巨头:

1.Sigmoid函数

它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

作为激活函数,其缺点如下:
1.容易出现梯度消失(gradient vanishing),也有小概率发生梯度爆炸
2.函数的输出不是以0为中心对称(zero-centered)
3.幂运算相对耗时
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1​

2.Tanh函数

它比Sigmoid函数收敛更快,而且解决了zero-centered的输出问题,但是,gradient vanishing的问题和幂运算的问题仍然存在。
f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+e−xex−e−x​

3.ReLU函数

优点:
1.解决了gradient vanishing问题 (在正区间)
2.计算速度非常快,只需要判断输入是否大于0
3.收敛速度远快于sigmoid和tanh

缺点:
1.ReLU的输出不是zero-centered
2.Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
有两个主要原因可能导致这种情况产生:
(1) 非常不幸的参数初始化,这种情况比较少见
(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)

4.小结

这篇关于机器学习中常用的激活函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!