博客已迁至知乎,本文链接:https://zhuanlan.zhihu.com/p/70821070
前言
这篇文章首先讲了神经网络中为什么要引入激活函数,以及一个激活函数应该具有哪些性质。最后详细地对比了几种常见的激活函数的优缺点,其中重点讲了sigmoid函数的非0均值问题和ReLU函数的Dead ReLU问题。
神经元
上图是一个神经元的设计,其传输模式类似于人类大脑神经元之间的信息传递。在一个神经元中,突触(synapse)接受其它神经元的轴突(axon)传来的信息,通过轴突将信息传递出去。
在这里,所有 x i x_i xi是其它神经元的轴突传来的信息,所有 w i w_i wi 是突触接收信息的程度,所有 w i x i w_ix_i wixi则是其它神经元轴突上传来的信息。这些信息经由神经元整合后, z = ∑ w i x i + b z=\sum w_ix_i+b z=∑wixi+b,再由激活函数 f ( z ) f(z) f(z)激活。
在这里,整合的过程是线性加权的过程,各输入特征 x i x_i xi之间没有相互作用。而激活函数都是非线性的,各输入特征 x i x_i xi在此处相互作用。
在神经网络中,为什么要引入激活函数呢?
简而言之,只有线性的模型表达能力不够,不能拟合非线性函数,激活函数(Activation Function)是非线性的,只要给予网络足够的隐藏单元,线性+激活函数可以无限逼近任意函数(万能近似定理)。
万能近似定理:Hornik et al. 1989; Cybenko, 1989
加与不加的区别:
线性函数 f ( x ) = W x + b f(x)= Wx+b f(x)=Wx+b 之后添加激活函数 g ( a ) g(a) g(a),变成
a ( x ) = g ( f ( x ) ) = g ( W x + b ) a(x)=g(f(x))=g(Wx+b) a(x)=g(f(x))=g(Wx+b)
神经网络一般都是多层的,所以拿出前三层(包括输入层)来看:有
a 2 ( x ) = g 2 ( f 2 ( g 1 ( f 1 ( x ) ) ) a_2(x) = g_2(f_2(g_1(f_1(x))) a2(x)=g2(f2(g1(f1(x)))
而如果不加激活函数,这三层是这样的:
y ( x ) = f 2 ( f 1 ( x ) ) y(x)=f_2(f_1(x)) y(x)=f2(f1(x))
将 f ( x ) f(x) f(x)带入上一个表达式:
y ( x ) = f 2 ( f 1 ( x ) ) = W 2 ( W 1 x + b 1 ) + b 2 = W 2 W 1 x + ( W 2 b 1 + b 2 ) y(x)=f_2(f_1(x))=W_2(W_1x+b_1)+b_2=W_2W_1x+(W_2b_1+b_2) y(x)=f2(f1(x)