在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数就是激活函数.
如果不用激活函数,在这种情况下你每一层节点的输入都是上层输出的线性映射,那么无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,那么网络的逼近能力就相当有限。所以引入非线性函数作为激活函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。
$$sigmoid=\frac{1}{1+e^{-x}}$$
为了表述方便使用$\sigma$表示$sigmoid$函数,$sigmoid$函数的导数:
$$
\begin{aligned} \sigma^{\prime}(x) &=\left(\frac{1}{1+e^{-x}}\right)^{\prime} \ &=\frac{1}{\left(1+e^{-x}\right)^{2}} \cdot\left(e^{-x}\right) \ &=\frac{1}{1+e^{-x}} \cdot \frac{e^{-x}}{1+e^{-x}} ) \ &=\sigma(x)(1-\sigma(x)) \end{aligned}
$$
$$
\sigma(\mathbf{z}){j}=\frac{e^{\mathbf{z} {j}}}{\sum_{k=1}^{K} e^{\mathbf{z}_k}}
$$
$$
\begin{aligned}
\frac{\partial y_{i}}{\partial x_{j}}&=\frac{\partial y_{i}}{\partial x_{i}}\\
&=\frac{\partial}{\partial x_{i}}\left(\frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}}\right) \ &=\frac{\left(e^{x_{i}}\right)^{\prime}\left(\sum_{k} e^{x_{k}}\right)-e^{x_{i}}\left(\sum_{k} e^{x_{k}}\right)^{\prime}}{\left(\sum_{k} e^{x_{k}}\right)^{2}} \ &=\frac{e^{x_{i}} \cdot\left(\sum_{k} e^{x_{k}}\right)-e^{x_{i}} \cdot e^{x_{i}}}{(\sum_{k} e^{x_{k}} )^{2}} \\
&=\frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}}-\frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}} \cdot \frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}} \\
&=y_{i}-y_{i} \cdot y_{i} \\
&=y_{i}\left(1-y_{i}\right) \end{aligned}
$$
$$
\begin{aligned} \frac{\partial y_{i}}{\partial x_{j}} &=\frac{\partial}{\partial x_{j}}\left(\frac{e^{x_{i}}}{\sum_{k} e^{x_{k}}}\right) \ &=\frac{\left(e^{x_{i}}\right)^{\prime}\left(\sum_{k} e^{x_{k}}\right)-e^{x_{i}}\left(\sum_{k} e^{x_{k}}\right)^{\prime}}{\left(\sum_{k} e^{x_{k}}\right)^{2}} \ &=\frac{0 \cdot\left(\sum_{k} e^{x_{k}}\right)-e^{x_{i}} \cdot e^{x_{j}}}{\left(\sum_{k} e^{x_{k}}\right)^{2}} \ &=\frac{-e^{x_{i}}}{\sum_{k} e^{x_{k}}} \cdot \frac{e^{x_{j}}}{\sum_{k} e^{x_{k}}} \\
&=-y_{i} \cdot y_{j} \end{aligned}
$$
所以
$$
\frac{\partial y_{i}}{\partial x_{j}}=\left{\begin{array}{l}{y_{i}-y_{i} y_{i}},i=j
\ {0-y_{i} \cdot y_{j}, i\neq j}\end{array}\right.
$$
$softmax$ 函数$vs$ $sigmoid$ 函数
$sigmoid$ 函数的计算是独立的,可以全都是0.99或者全都是0.01,而$softmax$函数是相关联的,一个大了另一个就会小
$sigmoid$ 函数总和可能不为1,而$softmax$函数的总和肯定是为1的
如果是二分类,那么这两个函数基本等价
它能够把输入的连续实值变换为0和1之间的输出,特别适用于二分类任务
在饱和区梯度接近零,根据反向传播链式法则(越乘越小),会导致梯度消失
Sigmoid的输出不是以0为均值的。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如x>0, $f=w^Tx+b$,那么对$w$求局部梯度则都为正,这样在反向传播的过程中$w$要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。
含有幂运算,比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
$$
Tanh(x)\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
$$
$$
Tanh'(x)=1-Tanh^2(x)
$$
x
Tanh的输出是以0为均值的
在饱和区梯度接近零,根据反向传播链式法则(越乘越小),会导致梯度消失
含有幂运算,比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
$$Relu=max(0,x)$$
$$
Relu'=\left{
\begin{aligned}
0 \quad x\leq 0\\
1 \quad x> 0
\end{aligned}
\right.
$$
计算快,只需要判断输入是否大于0;收敛块
简单
Relu的输出不是以0为均值的。
Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
$$f(x)=max(\alpha x,x)$$
人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为$αx$而非0,通常$α=0.01$另外一种直观的想法是基于参数的方法,即$ParametricReLU:f(x)=max(αx,x)$其中$α$可由方向传播算法学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,
但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
ELU (Exponential Linear Units) 函数
$$
ELU'=\left{
\begin{aligned}
α(e^x-1) \quad x\leq 0\\
x \quad x> 0
\end{aligned}
\right.
$$
ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:
不会有Dead ReLU问题
输出的均值接近0,zero-centered
它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。
$$
\begin{aligned}
h_{i}(x)=\max {j \in[1, k]} z {i j}\
z_{ij}=W^T_{ij}x+b_{ij}
\end{aligned}
$$
$$
f(x)=xSigmoid(βx)=\frac x{1+e^{-x}}
$$
$$
f'(x)=\beta f(x)+\frac{(\beta x)}{1+e^{-\beta x}}(1-\beta f(x))
$$
$$\begin{aligned}
f(x)&=x \cdot \tanh \left(\ln \left(1+e^{x}\right)\right)\\
f'(x)&=\frac{e^{x} \omega}{\delta^{2}} 其中\\
\omega&=4(x+1)+4 e^{2 x}+e^{3 x}+e^{x}(4 x+6)\\
\delta&=2 e^{x}+e^{2 x}+2
\end{aligned}
$$
慢