NLP

第五章-神经网络学习

神经网络

5.1 神经元模型

M-P神经元模型$y=f(\sum_{i=1}^{n}w_i x_i - \theta)$

最后还需要一个激活函数来处理并产生神经元的输出。因为以阶跃函数作为激活函数的话,其具有不连续、不光滑等不太好的性质,因此通常使用Sigmoid函数作为激活函数。它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为挤压函数(squashing function)

把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。

5.2 感知机与多层网络

感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称阈值逻辑单元(thresholod logic unit)

感知机能容易地实现与、或、非运算。这个可以通过手工设定参数$w$和$\theta$。更一般的应该是能够给定数据集,然后权重$w_i$以及阈值$\theta$可以通过学习得到。阈值$\theta$可以看作一个规定输入为-1.0哑节点(dummy node)所对应的连接权重$w_{n+1}$

学习规则

对于训练样例$({\bf x},y)$,若当前感知机的输出为$\hat{y}$,则感知机权重将这样调整:


$w_i \leftarrow w_i+\Delta w_i$
$\Delta w_i = \eta (y-\hat(y))x_i$

$y=\hat{y}$的时候,感知机的学习结束,权重不再调整。只有当两类模式是线性可分的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛(converge),但是如果不是线性可分的,例如要模拟一个异或的话,因为其线性不可分,所以无法模拟。因为感知机只有输出层神经元进行激活函数处理。

要解决非线性可分的问题,就需要使用多层功能神经网络。比如一个简单的两层感知机就能解决异或问题。输入层和输出层之间加入一层神经元,这一层被称为是阴层(隐含层 hidden layer),隐含层和输出层神经元都是拥有激活函数的功能呢神经元。

每层神经网络与下一层神经网络全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络通常称为多层前馈神经网络(multi-layer feedforward neural networks),其中输入层神经元仅接收外界输入。前馈并不意味着网络中的信号不能向后传,而是指网络拓扑结构上不存在环或回路。

5.3 误差逆传播算法

误差逆传播算法(error BackPropagation)简称BP算法可以用来学习一个神经网络模型。其不仅可以用于多层前馈神经网络,还可以用于其他类型,例如训练递归神经网络,但通常说的BP网络指的是用BP算法训练的多层前馈神经网络

两层神经网络

对训练样例$(x_k,y_k)$来说,假定神经网络的输出为${\bf {\hat{y_j^k}}}=(\hat{y}_1^k,\hat{y}_2^k,...,\hat{y}_l^k$


${\bf {\hat{y_j^k}}}=f(\beta_j-\theta_j)$

则网络在$(x_k,y_k)$上的均方误差为


$E_k =\frac{1}{2} \sum_{j=1}^{l} (\hat{y_j^k}-y_j^k)^2$

这里的$\frac{1}{2}$是为了后续求导方便。

网络中的参数个数,从输入层到隐层,因为只有权值,所以有$d \times q$个权值,从隐层到输出的权值也有$q \times l$个,然后还有 $q$个隐层的阈值,$l$个输出层的阈值。

任意参数$v$的更新估计公式为


$v \leftarrow v + \Delta v$

BP算法基于梯度下降策略,以目标的负剃度方向对参数进行调整。


$\Delta w_h^j =-\eta \frac{\partial E_k}{\partial w_h^j}$

简单推导一下


$\Delta w_h^j =-\eta \frac{\partial E_k}{\partial w_h^j}=\frac{\partial E_k}{\partial \hat{y_j^k}} \cdot \frac{\partial \hat{y_j^k}}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_h^j}$

再根据$\beta_j$的定义(看图),显然有


$\frac{\partial \beta_j}{\partial w_h^j}=b_h$

下面要解决前面两个偏导。我们知道理想的激活函数是Sigmoid函数


$sigmoid=\frac{1}{1+e^{-x}}$

这个函数有一个很好的特性


$f\prime (x)=f(x)(1-f(x))$

利用Sigmoid函数的特性,以及前面求得的


$$\hat{y_j^k}=f(\beta_j-\theta_j) \\ E_k=\frac{1}{2} \sum_{j=1} (\hat{y_j^k} - y_j^k)$$

可以得到


$$g_j=- \frac{\partial E_k}{\partial \hat{y_j^k}} \cdot \frac{\partial \hat{y_j^k}}{\partial \beta_j} \\ =-(\hat{y_j^k}-y_j^k)f\prime(\beta_j-\theta_j) \\ =\hat{y_j^k}(1-\hat{y_j^k})(y_j^k-\hat{y_j^k})$$

这里我们得到了隐含层到输出层的权值的更新公式


$\Delta w_h^j=\eta g_j b_h$

除此之外我们还有三种参数需要更新,分别是$\theta v \gamma$

书中没有给出具体的推导,但是我们可以来自己算一下。首先是$\theta$


$$\begin{align} \theta_j&=\theta_j - \frac{\partial E_k}{\partial \theta_j} \\ \frac{\partial E_k}{\partial \theta_j}&= \frac{\partial E_k}{\partial \theta_j} \cdot \frac{\partial \hat{y_j^k}}{\partial \theta_j} \\ &=-(\hat{y_j^k} - y_j^k) \cdot -f\prime(\beta_j-\theta_j) \\ &=(\hat{y_j^k} - y_j^k)\hat{y_j^k}(1-\hat{y_j^k}) \\ &=g_j \end{align}$$

所以呢


$\Delta \theta_j=-\eta g_j$

下面再说$v_ih$$\gamma_h$


$$\begin{align} e_h & =-\frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h} \\ & =- \sum_{j=1}^{l} \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h} f^{\prime}(\alpha_h-\gamma_h) \\ & = \sum_{j=1}^{l} w_h^j g_j f^{\prime}(\alpha_h-\gamma_h) \\ & = b_h(1-b_h)\sum_{j=1}^{l} w_h^j g_j \end{align}$$

$g_j$一样,它们是输出层和隐含层的梯度。


$$\begin{align} \Delta v_ih&=\eta e_h x_i \\ \Delta \gamma_h&=-\eta e_h \end{align}$$

以上就是标准BP算法。这个算法的目标是最小化当前的样例的误差,很可能出现上一个样例的更新被下一个样例所产生的更新给抵消了。

累积BP算法的目的在于最小数据集D的累积误差。具体计算方法就是把所有的$E_k$的偏导都加起来,在更新权值的时候也是。有空的时候我再做推导。现在要回宿舍睡觉了~

在很多人任务里,会先使用累积BP算法先训练,当总体误差降得很低了之后,再使用标准BP算法进行训练,尤其是在训练集D特别大的时候效果特别好。

缓解BP网络的过拟合

  • 早停:将数据分成训练集和验证集,但训练集误差降低,但是验证集误差上升时停止训练,返回具有最小验证集误差的参数。
  • 正则化:将目标公式变为$E=\lambda \frac{1}{m} \sum_{k=1}^{m} E_k +(1-\lambda) \sum_i w_i^2$

5.4 全局最小与局部最小

使用方法有:

  • 以多组不同的参数值初始化多个神经网络,按标准方法训练后,取其重误差最小的作为最终参数。
  • 使用模拟退火
  • 使用随机梯度下降
  • 遗传算法

这些方法大多都是启发式的,缺乏理论保障,不保证效果。

5.5 其他常见神经网络

5.5.1 RBF网络

RBF(Radial Basis Function)径向基函数`网络是一种单隐层前馈神经网络,它使用径向基函数作为激活函数,输出层则是对隐层神经元输出的线性组合。假定输入为d维向量x,输出为实值,则RBF网络`可以表示成


$$\begin{align} \varphi(x) = \sum_{i=1}^{q} w_i \rho(x,c_i) \end{align}$$

其中q为隐层神经元个数,$c_i$和$w_\i$分别是第i个隐层神经元所对应的中心和权重。


$$\begin{align} \rho(x,c_i)=e^{-\beta_i||x-c_i||^2} \end{align}$$

训练步骤:

  • 确定神经元中心$c_i$,通常使用随机采样、聚类
  • 利用BP算法来确定参数$w_i$和$\beta_i$

5.5.2 ART网络

竞争型学习是神经网络中一种常用的无监督学习策略,各个输出层神经元互相竞争,每一时刻仅有一个竞争获胜的神经元被激活。这种机制叫做胜者通吃(winner-take-all)原则

ART(Adaptive Resonance Theory,自适应谐振理论)网络是竞争学习的重要代表。由比较层 识别层 识别阈值 重置模块构成。其中比较层负责接收输入的向量,然后将其传递给识别层,识别层的每个神经元代表一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。

竞争最简单的方式是计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜。获胜神经元将向其他识别层神经元发送抑制激活信号。若相似度大于阈值,则当前输入样本将被归为该代表向量所属类别,同时网络的连接权将更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度。若相似度不大于阈值,则在识别层增加一个新的神经元,其代表向量就是当前向量。

最早的ART网络只能处理布尔型输入数据,后来发展出了能处理实值输入的ART2网络,结合模糊处理的FuzzyART网络,以及可进行监督学习的ARTMAP网络

5.5.3 SOM网络

SOM(Self-Organizing Map),自组织映射也是一种竞争学习型的无监督神经网络。

它能将高维输入数据映射到低维空间,通常是二维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。

输出神经元以矩阵的形式排布在二维空间上,同时每个神经元都有一个代表自己的权向量,同样是距离最近的神经元成为竞争获胜者。然后最佳匹配单元及其邻近神经元的权向量将被调整,以使得这些全向量与当前输入样本的距离缩小。

5.5.4 级联相关网络

这个网络多了一个学习目标,就是网络的结构。与前馈神经网络相比,级联相关网络无需设置网络层数、隐层神经元数目,且训练速度较快,但其在数据较小时易陷入过拟合。

5.5.5 Elman 网络

这是一个递归神经网络(recurrent neural network),它允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。这样的结构与信息反馈过程,使得网络在t时刻的输出状态不仅与t时刻的输入相关,还和t-1时刻的网络状态相关,从而能处理与时间有关的动态变化

网络的训练需要通过推广的BP算法进行

5.5.6 Boltzmann机

能量最小化时网络达到理想状态。它也是一种递归神经网络,其神经元分为两层显层隐层显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达。并且神经元都是布尔型的。

令向量$\bf s$是一个n维的0、1向量,表示n个神经元的状态,$w_ij$ 表示神经元i与j之间的连接权,$\theta_i$表示神经元i的阈值。状态向量$\bf s$的Boltzmann机的能量定义为


$$\begin{align} E(s)=-\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} w_{ij}s_i s_j- \sum_{i=1}^{n} \theta_i s_i \end{align}$$

其出现的概率则是有下面的式子决定


$$\begin{align} P(s)=\frac{e^{-E(s)}}{\sum_t e^{-E(t)}} \end{align}$$
分享到