Feed-Forward Neural Networks

本文介绍用于分类的前馈神经网络和神经语言模型。


Mind Map

Differences from LR

神经网络是比逻辑回归更强大的分类器,实际上一个最小神经网络(带有一层隐藏层的神经网络)可以学习任何函数。
对于逻辑回归,我们基于领域知识开发各种特征模板来将逻辑回归应用在各任务上。
对于神经网络,将原始单词作为输入,在学习的过程中学习推理特征从而进行分类,而很少直接使用手动生成的特征。

1. Intorduction

  • 1.1 Single neural unit
    nn1.PNG
    一个神经元的输入是加权和一个偏量(bias term),即

    常常用向量的点积形式表示,即

    输出是对$z$应用非线性的激活函数,即

    注:$a$是单个神经元的激活值,$y$为整个神经网络的输出值,这里$y=a$。
    下面介绍三种常见的非线性函数$f()$。
    ♦ sigmoid

    实际上,sigmoid并不常用作激活函数。下面的tanh函数和sigmoid相似却表现更好。
    ♦ tanh

    最简单或许也是最常用的是修正线性函数(rectified linear unit)。
    ♦ ReLU

    注:不同的激活函数在不用的语言应用或网络架构中有不同的用处。比如ReLU的结果非常接近线性。sigmoid和tanh函数中非常高的$z$值使得输出$a$趋于饱和,即接近于1,但存在梯度消失的问题。ReLu则不存在这个问题。tanh也有平滑可微和将异常值趋于平均值的特性。

  • 1.2 XOR problem
    Minsky和Papert(1969)证明了单个神经元不能计算所有简单的函数,这是证明多层网络的必要性的最聪明的例子之一。考虑到计算简单的逻辑函数像AND,OR,XOR。
    nn2.PNG
    感知器(perceptron)是一个有二值输出、没有非线性激活函数的简单神经元。这里,我们将其定义如下:

    实验证明通过单个感知器来计算逻辑与、非是很简单的,下图显示了所需参数:
    nn3.PNG
    但是,计算XOR是不可能的。因为XOR不是一个线性可分(linearly separable)问题!而感知器是一个线性分类器。
    nn4.PNG
    Goodfellow等人(2016)用基于ReLU的两层神经网络计算XOR问题,将此问题转化成线性可分的问题。
    nn5.PNG
    可见,网络的隐藏层是对输入的重新表示。
    nn6.PNG
    注:实际的神经网络权重是使用错误反向传播(error backpropagation)算法自动学习的。神经网络的关键优势就是可以自动学习输入的有用的表示。

    2. Feed-Forward Neural Networks

  • 2.1 Definition
    一个前馈神经网络是单元间无环连接的一个多层神经网络。也就是每一层单元的输出会传给更高层,而不会反传给更低层。后面会介绍有环的神经网络,叫循环神经网络(recurrent neural networks)。
    注:这里值得一提的是,由于历史原因,多层网络尤其是前馈网络有时被称作多层感知器(multi-layer perceptron或MLPs),其实这是误称,因为现代多层网络的神经单元不是感知器,感知器是完全线性的,而现代网络是由像sigmoid这种非线性的神经单元组成的,但是在某种场合上是保留的。
  • 2.2 Composition
    简单的前馈神经网络是由三种节点组成的:输入单元、隐藏单元和输出单元。神经网络的核心就是由隐藏单元组成的隐藏层(hidden layer)。在标准架构中,每一层都是全连接的(fully-connected),也就是每层的每个单元都是以上一层所有单元的输出作为输入,也就是两个相邻层的每对单元都有一个连接(link)。
  • 2.3 Mathematical form
    nn7.PNG
    之前的单个隐藏单元的参数表示是权重向量$w$和标量偏量$b$。所以现在权重矩阵$W$和偏量向量$b$来表示整个隐藏层的参数
    使用矩阵$W$表示整层的权重可以方便地使用简单的矩阵运算。其中三步计算过程:输入向量$x$乘以向量矩阵,加上偏量向量,最后应用激活函数(比如上面定义过的sigmoid,tanh或relu函数)。用公式表示上图(假如这里采用sigmoid函数):然而$z$并不是分类器的输出结果,因为这是一个实值向量,但是分类器的结果应该是个概率值的向量(就是向量中所有数字都在0到1之间且加和为1)。对于$d$维的变量$z$,softmax函数定义如下,用来将实值数字转化为概率分布。所以,上述的2层神经网络的输出应为:
  • 2.4 Training Neural Nets
    前馈神经网络其实是监督机器学习的一个例子,因为对于每个观测值x我们都事先知道真值$y$。系统生成的值$\hat{y}$,就是真值$y$的估计。训练过程的目标就是针对每一层$i$学习参数$W^{[i]}$和$b^{[i]}$使得最后的输出值$\hat{y}$逼近$y$。
    ♦ cross entropy
    这里先介绍
    ♦ error back-propagation
    ♦ details on learning
    神经网络中的优化是一个非凸优化问题,比逻辑回归更复杂。
    对于逻辑回归,我们可以使用所有权重和偏量为0的值来初始化梯度下降。
    相反在神经网络中,我们需要使用较小的随机数来初始化权重。此外将输入值标准化为均值和单位方差为0也是很有帮助的。
    这里说明两个很重要的防止过拟合的正则化方法:
    1.dropout:在训练过程中随机丢弃一些神经元包括与其他神经元之间的连接,参见paper
    2.hyperparameter tuning:超参数是由算法的设计者设置的,而不同于由梯度下降算法学习到的神经网络的参数$W$和$b$。超参数包括学习率$\eta$,minibacth的大小,模型架构(层数,每层隐藏层的节点数,激活函数的选择),如何正则化等等。梯度下降本身也有好多可设置的变量如Adam,参见paper
    另外,目前的神经网络通过computation graph使得梯度计算和并行计算于基于向量的GPU上,如Pytorch(Paszke等,2017)和Tensorflow(Abadi等,2015)。

3.Neural Language Models