机器学习:神经网络中的激活函数

Posted Matrix_11

tags:

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

随着深度学习的兴起,神经网络也似乎成了所有计算机视觉任务的标配,大家除了研究各种各样的网络结构之外,还有研究优化方法的,以及激活函数的,这篇博客就对当前各种各样的激活函数做一个总结,分析其背后的性质。

到目前为止,激活函数的形式有很多种了,早期的激活函数主要是 sigmoid 以及 tanh 函数,这两种函数都能将输入限制在很小的范围内,算是一种非线性函数,后来又出现了 RELU 以及各种基于 RELU 的变体。

Tanh 函数

tanh 是一种双曲函数,称为双曲正切,其表达式如下:

t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \\frace^x - e^-xe^x + e^-x tanh(x)=ex+exexex

从上式可以看出,tanh 函数的取值范围是 [-1, 1],其导数为:

t a n h ′ ( x ) = ( ( e x − e − x ) ( e x + e − x ) − 1 ) ′ = ( e x + e − x ) ( e x + e − x ) − 1 − ( e x − e − x ) ( e x + e − x ) − 2 ( e x − e − x ) = 1 − ( e x − e − x e x + e − x ) 2 = 1 − t a n h 2 ( x ) \\beginaligned tanh'(x) &= ((e^x - e^-x)(e^x + e^-x)^-1)' \\\\ &= (e^x + e^-x)(e^x + e^-x)^-1 - (e^x - e^-x)(e^x + e^-x)^-2(e^x - e^-x) \\\\ &= 1 - \\left( \\frace^x - e^-xe^x + e^-x \\right)^2 \\\\ &= 1 - tanh^2(x) \\endaligned tanh(x)=((exex)(ex+ex)1)=(ex+ex)(ex+ex)1(exex)(ex+ex)2(exex)=1(ex+exexex)2=1tanh2(x)

其函数曲线及导数曲线如下所示:

  • tanh 函数曲线
Sigmoid 函数

sigmoid 函数也是非常常见的一种函数,其表达式如下:

s i g m o i d ( x ) = σ ( x ) = 1 1 + e − x sigmoid(x) = \\sigma(x) = \\frac11 + e^-x sigmoid(x)=σ(x)=1+ex1

sigmoid 函数的取值范围是 [0, 1],其导数为:

σ ′ ( x ) = 1 ( 1 + e − x ) 2 e − x = 1 + e − x − 1 ( 1 + e − x ) 2 = σ ( x ) − σ 2 x = σ ( x ) ( 1 − σ ( x ) ) \\beginaligned \\sigma'(x) &= \\frac1(1+e^-x)^2 e^-x \\\\ &= \\frac1 + e^-x - 1(1+e^-x)^2 \\\\ &= \\sigma(x) - \\sigma^2x \\\\ &= \\sigma(x)(1 - \\sigma(x)) \\endaligned σ(x)=(1+ex)21ex=(1+ex)21+ex1=σ(x)σ2x=σ(x)(1σ(x))

其函数曲线及导数曲线如下:

  • sigmoid 函数曲线
RELU 函数

relu 函数在如今的深度神经网络里面,应该是非常主流的一种函数了,上面介绍的两种激活函数,我们可以看到其导数的取值范围很小,在深度神经网络里,这种导数在链式传导的时候,有可能出现梯度消失的问题,所以为了解决这个问题,relu 这种函数获得了推广和关注,relu 函数的形式非常简单:

r e l u ( x ) = max ⁡ ( 0 , x ) relu(x) = \\max(0, x) relu(x)=max(0,x)

r e l u ( x ) = x  if  x > 0 0  if  x < 0 relu(x) = \\begincases x & \\text if x > 0 \\\\ 0 & \\text if x < 0 \\endcases relu(x)=x0 if x>0 if x<0

可以看出,就是把小于 0 的输出都给截断了,而大于 0 的输出都保留,其导数也很简单,不过 relu 函数的导数不连续,在 0 这个地方出现断裂:

r e l u ′ ( x ) = 1  if  x > 0 0  if  x < 0 relu'(x) = \\begincases 1 & \\text if x > 0 \\\\ 0 & \\text if x < 0 \\endcases relu(x)=10 if x>0 if x<0

  • relu 函数曲线

RELU6 函数

Relu6 属于 Relu 函数的一种变体,将大于 0 的输出在某个地方做了一个截断,从函数名上可以看出,这个截断就是在 6 这个地方,其函数表达式为:

R e l u 6 ( x ) = 0  if  x < 0 6  if  x > 6 x otherwise Relu6(x) = \\begincases 0 & \\text if x < 0 \\\\ 6 & \\text if x > 6 \\\\ x & \\textotherwise \\endcases Relu6(x)=06x if x<机器学习笔记:形象的解释神经网络激活函数的作用是什么?

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

机器学习之激活函数

机器学习笔记:激活函数

干货 | 深入理解深度学习中的激活函数

机器学习——激活函数理解