Neural Nets 1

内容列表

  • 单个神经元建模
    • 生物动机和连接
    • 作为线性分类器的单个神经元
    • 常用的激活函数
  • 神经网络结构
    • 层组织
    • 前向传播计算
    • 表达能力
    • 设置层的数量和尺寸
  • 参考文献

Modeling one neuron

Biological motivation and connections

大脑的基本计算单位是神经元(neuron)。人类的神经系统中大约有860亿个神经元,它们被大约$10^{14}-10^{15}$个突触(synapses)连接起来。下面图表的左边展示了一个生物学的神经元,右边展示了一个常用的数学模型。每个神经元都从它的树突获得输入信号,然后沿着它唯一的轴突(axon)产生输出信号。轴突在末端会逐渐分枝,通过突触和其他神经元的树突相连。

在神经元的计算模型中,沿着轴突传播的信号(比如$x_0$)将基于突触的突触强度(比如$w_0$),与其他神经元的树突进行乘法交互(比如$w_0x_0$)。其观点是,突触的强度(也就是权重$w$),是可学习的且可以控制一个神经元对于另一个神经元的影响强度(还可以控制影响方向:使其兴奋(正权重)或使其抑制(负权重))。在基本模型中,树突将信号传递到细胞体,信号在细胞体中相加。如果最终之和高于某个阈值,那么神经元将会激活,向其轴突输出一个峰值信号。在计算模型中,我们假设峰值信号的准确时间点不重要,是激活信号的频率在交流信息。基于这个速率编码的观点,将神经元的激活率建模为激活函数(activation function)$f$,它表达了轴突上激活信号的频率。

换句话说,每个神经元都对它的输入和权重进行点积,然后加上偏差,最后使用非线性函数(或称为激活函数)。

Single neuron as a linear classifier

只要在神经元的输出端有一个合适的损失函数,就能让单个神经元变成一个线性分类器。

二分类Softmax分类器:可以把$\displaystyle\sigma(\Sigma_iw_ix_i+b)$看做其中一个分类的概率$P(y_i=1|x_i;w)$,其他分类的概率为$P(y_i=0|x_i;w)=1-P(y_i=1|x_i;w)$,因为它们加起来必须为1。根据这种理解,可以得到交叉熵损失,然后将它最优化为二分类的Softmax分类器(也就是逻辑回归)。因为sigmoid函数输出限定在0-1之间,所以分类器做出预测的基准是神经元的输出是否大于0.5。

二分类SVM分类器:或者可以在神经元的输出外增加一个最大边界折叶损失(max-margin hinge loss)函数,将其训练成一个二分类的支持向量机。

Commonly used activation functions

Sigmoid:$$\sigma(x) = 1 / (1 + e^{-x})$$

将实数集映射到$(0,1)$范围内。其具有两个主要的缺点:

  • Sigmoid函数饱和使梯度消失,导致网络不再更新
  • Sigmoid函数的输出不是零中心的

Tanh

它将实数值压缩到[-1,1]之间。和sigmoid神经元一样,它也存在饱和问题,但是和sigmoid神经元不同的是,它的输出是零中心的。

其实tanh神经元是一个简单放大的sigmoid神经元,具体说来就是:$tanh(x)=2\sigma(2x)-1$。

Rectified Linear Unit(ReLU):$$f(x) = \max(0, x)$$

ReLU函数即为一个关于0的阈值函数。它具有以下的一些优缺点:

  • 优点:相较于Sigmoid和Tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用(如下图右侧所示,有将近6倍的差距)。这是由于它的线性和非饱和的特性导致的
  • 优点:Sigmoid和Tanh神经元含有指数运算等耗费计算资源的操作,而ReLU可以简单地通过对一个矩阵进行阈值计算得到
  • 缺点:训练时ReLU单元比较脆弱且可能“死掉”。比如,当一个很大的梯度流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。通过合理设置学习率,这种情况的发生概率会降低

Leaky ReLU:$$f(x) = \mathbb{1}(x < 0) (\alpha x) + \mathbb{1}(x>=0) (x)$$

为了解决“ReLU死亡”的问题,Leaky ReLU在$x<0$时给出了一个很小的负数梯度值,即式中的$\alpha$。这个激活函数的表现很好,但是效果并不是很稳定。

Kaiming He在2015年发布的论文Delving Deep into Rectifiers中提出了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数。

Maxout:$$f(x)=\max(w_1^Tx+b_1, w_2^Tx + b_2)$$

该方法由Goodfellow等提出,ReLU和Leaky ReLU都是这个公式的特殊情况。

Maxout神经元拥有ReLU单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的ReLU单元)。然而和ReLU对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。

TLDR: “What neuron type should I use?” Use the ReLU non-linearity, be careful with your learning rates and possibly monitor the fraction of “dead” units in a network. If this concerns you, give Leaky ReLU or Maxout a try. Never use sigmoid. Try tanh, but expect it to work worse than ReLU/Maxout.

Neural Network architectures

Layer-wise organization

将神经网络算法以神经元的形式图形化:神经网络被建模成神经元的集合,神经元之间以无环图的形式进行连接。也就是说,一些神经元的输出是另一些神经元的输入。

通常神经网络模型中神经元是分层的。

对于普通神经网络,最普通的层的类型是全连接层(fully-connected layer)。全连接层中的神经元与其前后两层的神经元是完全成对连接的,但是在同一个全连接层内的神经元之间没有连接。

命名规则:输入层并不被计算在神经网络的层数内,故N层神经网络即具有N-1个隐藏层和输出层,另外还有一个输入层。研究者们也会使用人工神经网络(Artificial Neural Networks 缩写ANN)或者多层感知器(Multi-Layer Perceptrons 缩写MLP)来指代神经网络。

输出层:输出层的神经元一般不具有激活函数。因为输出层大多用于表示分类评分值,因此是任意值的实数,或者某种实数值的目标数。

确定网络尺寸:用来度量神经网络的尺寸的标准主要有两个:一个是神经元的个数,另一个是参数的个数,用下示的两个网络为例:

  • $1^{th}$ NN:4+2=6个神经元,$[3\times4]+[4\times2]=20$个权重,4+2=6个偏置,共26个可学习的参数
  • $2^{rd}$ NN:4+4+1=9个神经元,$[3\times4]+[4\times4]+[4\times2]=32$个权重,4+4+1=9个偏置,共41个可学习的参数

Feed-forward computation

不断重复的矩阵乘法与激活函数交织。将神经网络组织成层状的一个主要原因,就是这个结构让神经网络算法使用矩阵向量操作变得简单和高效。

全连接层的前向传播一般就是先进行一个矩阵乘法,然后加上偏置并运用激活函数。

Representational power

理解具有全连接层的神经网络的一个方式是:可以认为它们定义了一个由一系列函数组成的函数族,网络的权重就是每个函数的参数

拥有至少一个隐层的神经网络是一个通用的近似器。神经网络可以近似任何连续函数

虽然在理论上深层网络(使用了多个隐层)和单层网络的表达能力是一样的,但是就实践经验而言,深度网络效果比单层网络好

Setting number of layers and their sizes

看起来如果数据不是足够复杂,则似乎小一点的网络更好,因为可以防止过拟合。然而并非如此,防止神经网络的过拟合有很多方法(L2正则化,dropout和输入噪音等)。在实践中,使用这些方法来控制过拟合比减少网络神经元数目要好得多

不要减少网络神经元数目的主要原因在于小网络更难使用梯度下降等局部方法来进行训练:虽然小型网络的损失函数的局部极小值更少,也比较容易收敛到这些局部极小值,但是这些最小值一般都很差,损失值很高。相反,大网络拥有更多的局部极小值,但就实际损失值来看,这些局部极小值表现更好,损失更小。

正则化强度是控制神经网络过拟合的好方法

Further Readings