神经网络基础

Author Avatar
cooscao 5月 12, 2018

神经网络

神经元

如图,一个神经元通常有如下的结构Snipaste_2018-05-08_14-41-31

对于一组输入${a_{1}, a_{2}….,a_{k}}$,分别施于不同的权重(weight),再通过加上一个偏置(bias),得到神经元的线性模型,也就是之前学过的线性规划:

用向量化表示为:

由于线性变化所能解决的问题并不多,所以在输出施加一个激活函数(activate function), 以在方程模型中引入非线性,同时另外的作用是可对输出进行限制:

  • 实例

Snipaste_2018-05-08_14-59-43

对于上方的神经元实例,输入$a=[2, -1, 1]^{T}$,对于其三个输入分别施加的权重为$w=[1,-2, -1]^{T}$,将偏置bias设置为$1$,激活函数选择Sigmoid函数$\delta(z)=\frac{1}{1+e^{-z}}$,所以计算结果可以得到:

全连接神经网络

对于许多神经元,将其组合起来,对于网络每一层,设置不同数量的神经元,即可得到一个全连接前馈神经网络

Snipaste_2018-05-08_15-11-01

全连接神经网络通过输入的特征向量$x$,得到输出$y$,而网络层中的权重$w$和偏置$b$即是,网络中的参数。在训练过程中,可通过反向传播梯度下降算法进行更新。

激活函数

这里介绍三种常见激活函数:

  • Sigmoid:

    其图像可表示为:

很明显,可以看出经过Sigmoid函数作用后,输出响应的值域被压缩到了[0,1]之间,这也是逻辑回归中用到它的原因。对Sigmoid函数求导:

对梯度画出图可见:

sigmoid_梯度

不足之处

  1. 当$z$大于5或者小于-5时,部分的梯度接近于0,这会导致在误差反向传播中,导数处于该区域内的误差很难传播到前层,进而影响整个网络导致其无法训练。
  2. Sigmoid函数中可以看出其值域的均值都大于0,而并非等于0,这也不满足神经网络内对数值的期望。
  • Tanh:

tanh

Tanh函数在Sigmoid函数的基础上解决了均值问题

Tanh函数又称作双曲正切函数,其函数范围为$(-1,1)$,输出的响应均值为0。Tanh函数与Sigmoid函数的关系为:

所以,求Tanh的导数:

具体地:

由于Tanh函数仍基于Sigmoid函数,所以使用它仍依然会有“梯度饱和”现象。

  • ReLU

为了避免梯度饱和现象的发生,在神经网络中引入了修正线性单元(Rectified Linear Unit)。

relu

ReLU的导数:

与前两个激活函数相比,ReLU的梯度在$x\ge0$时为$1$,反之为$0$,对$x\ge0$部分完全消除了之前的梯度饱和效应。计算复杂度上,ReLU函数也相比之前的两种指数函数简单,实验中还发现其有助于随机梯度下降方法收敛。ReLU函数已是目前深层卷积神经网络中最为常用的激活函数。