神经网络

神经元模型

神经网络相关的研究很早就开始了,在今天成为了广泛的跨学科的研究。尽管不同的学科对神经网络有不同的定义,这本书使用了广泛被采用的定义:“网络是由简单(通常是自适应)元素组成的大规模并行互联网络,他们的组织架构旨在于真实世界互动,就像生物神经系统一样”。在这个上下文中,神经网络是指神经网络学习,或者换句话说,这是机器学习研究和神经网络研究的交集。

神经网络的基础元素是神经元,他是我们上述定义中最简单的元素。在生物神经网络中的神经元,当受到刺激发送神经介质到联通的神经元,去改变这些神经元的电位。当这些电位超过阈值(threshold),神经元将会被激活,他会发送神经传到物到其他神经元。

1943年将上述的过程抽象为一个简单的模型叫做McCullochPitts,M-P神经元模型一直沿用至今。如图5.1所示,

每个在M-P神经网络中的神经元通过加权链接从n个神经元接收输入信号。将接受信号的加权和与阈值进行比较,输出信号由激活函数产生。理想的激活函数是一个阶跃函数如图5.2所示,他映射了输入到输出为0神经元抑制和1神经元兴奋。

然而阶跃函数有一些不理想的特性,比如非连续可不光滑,我们通常使用sigmoid函数进行替代。如图5.2b所示,他是一个典型的sogmoid函数,他挤压输入值从大的区间到(0-1)单位区间中,因此也被称为挤压函数(squashing function.)

神经网络是通过链接神经元到一个分层结构而得到的。从计算机的视角来看,我们可以简单地把神经网络是一个多参数的数学模型,不管他是否模仿神经网络,这个模型由多个函数组成,比如$y_j = f(\sum_i w_i x_i - \theta_j)$相互嵌套带入得。有效的神经网络通常需要数学的证明。

感知机与多层网络

感知机是由俩层神经网络组成的二分类器。如图5.3所示,输入层接受外部信号广播到其他层,这就是NP神经元也叫阈值逻辑单元(threshold logic unit.)

感知机可以简单的视线逻辑操作 与非或。假设函数f是$y=f\left( \sum_{i}^{ }{w_{i}x_{i}}-\theta \right)$,是如图5.2所示的阶跃函数,逻辑操作可以实现如下。

在数学上,感知机是一个线性分类器,它接收一组输入特征向量,并通过加权求和这些输入以及一个阈值(或称为偏差项),然后通过一个激活函数(通常是阶跃函数或符号函数)来产生一个输出。如果加权输入的总和超过阈值,则输出为+1,否则为-1,这样就可以对输入进行分类。

  • $与 (x_1 \land x_2): 令w_1 = w_2 = 1, \theta = 2, 则 y = f(1 \cdot x_1 + 1 \cdot x_2 - 2),仅 x_1 = x_2 = 1;时 y = 1 $
  • $或(x_1 \lor x_2): 令w_1 = w_2 = 1, \theta = 0.5, 则y = f(1 \cdot x_1 + 1 \cdot x_2 - 0.5), 当 x_1 = 1 或 x_2 = 1时 y = 1$
  • $非 (\neg x_1):令 w_1 = -0.6, w_2 = 0, \theta = -0.5, 则 y = f(-0.6 \cdot x_1 + 0 \cdot x_2 + 0.5),当x_1=1时,y=0;当x_1=0时,y=1$

一般来说,权重wi(i=1,2,3,....,n)和阈值θ可以从训练即中学到,如果我们把θ当做哑巴节点与权重$w_{n+1}$相连接,固定输入为-1,然后将阈值统一为权重学习。感知机的学习很简单:对于训练样本(x,y),如果感知机的输出为$\hat y$,那么将权重更新为

$\Delta$一般代表差值,

$$ w_i \leftarrow w_i + \Delta w_i,(5.1) $$

$$ \Delta w_i = \eta(y - \hat{y})x_i,(5.2) $$

当$η\in(0,1)$被称为学习率。从5.1中我们可以看到如果正确预测了样本,(x,y)即$\hat y = y$感知机保持不变,基于误差程度更新权重.

感知机的学习能力是相当弱的,因为只有输出层有激活函数,即只有一层功能的神经元。事实上,与或非问题是一个线性可分问题。

线性可分问题是指在机器学习和模式识别领域中,数据集可以通过一个或多个线性决策边界完美地分成两个或多个类别,而不产生任何分类错误。在二维空间中,这样的决策边界是一条直线;在三维空间中,它是一个平面;而在更高维度的空间中,决策边界被称为超平面。

Minsky和Papert证明了,如果俩各类是线性可分的,一定存在一个线性超平面,这就意味着感知机的学习过程是确保收敛到一个合适的权重向量$\mathbf w=(w_1;w_2;w_3;w_{n+1})$如图5.4的A和C,否则在学习过程中将会出现波动(fluctuation),由于w不能稳定所以找不到合适的解,例如,感知机甚至不能解决简单的异或问题,(xor问题)

为了解决非线性可分问题,我们可以用多层功能神经元。例如,俩层感知器如图5.5所示,就可以解决亦或问题

神经元层在输入和输出层之间,也叫做隐藏层,他和输出层应用有激活函数。如图5.6展示了俩个特别的多层神经网络结构,每一层的神经元与和下一层的神经元全连接。然而同一层或者不相邻的神经元是没有连接的。

神经网络遵循这样的结构也叫做多层前馈神经网络(multi-layer feedforward neural networks,)输入层接收外部信号,隐藏层和输出层输出信号,输出层输出处理后的信号。换句话说,输入层不进行架构只接受收入,而输出层和隐藏层有功能神经元,由于只有俩层是由功能的,在5.6中的神经网络通常被叫做俩层神经网络,为了避免歧义我们在书中叫做单隐藏层神经网络。对于至少有一个隐藏层的神经网络,我们叫做多层神经网络。神经网络的学习过程就是从训练数据中学习调节神经元之间的连接权重,和功能神经元的阈值。换句话说,知神经网络学习的“知识”是在连接权值和阈值中。

误差逆传播算法

也称反向传播。多层神经网络的学习能力相比于单层感知机强很多。然而,强大的学习能力需要更强大的学习算法,而不是5.1中最简单的方法。其中反向传播(errorBackpropagation)算法是大部分成功的神经网络学习算法的典型,在实际应用中训练了大量的数据,BP算法可以训练不只是前馈神经网络,还包括了其他类型的神经网络,比如循环神经网络。然而,bp神经网络通常指的是bp算法训练的前馈神经网络。

下面让我们来仔细看看BP算法。给定训练集D = {(x1, y1), (x2, y2), . . . , (xm, ym)},当$x_i \in \mathbb R^d,y_i \in \mathbb R^l$即输入样本由d个属性描述,输出是l个维度真值向量。为了简化讨论,图5.7展示了一个具有d个输入神经元、l个输出神经元和q个隐藏神经元的多层前馈神经网络

设θj代表输出层中第j个神经元的阈值,$\gamma h$代表隐藏层中第h个神经元,输入层第i个神经元与隐藏层第h个神经元之间的连接权为$v_{ih}$,隐藏层第h个神经元与输出层第j个神经元之间的连接权为$w_{hj}$,$\begin{align} \alpha_h &= \sum_{i=1}^{d} v_{ih}x_i \end{align}$代表第i个隐藏层的神经元接收到的输入,$\begin{align} \beta_j &= \sum_{h=1}^{q} w_{hj}b_h \end{align}$代表输出层中第j个神经元接收到的输入。其中$b_h$是隐藏层中第h个神经元的输出。假设隐藏层和输出层神经元均采用s型函数,该函数在图5.2b

对于训练样例($x_k,y_k$),假设神经网络输出$\hat y=(\hat y^k_1,\hat y^k_2,..,\hat y^k_l)$即

$$ \hat y ^k_j= f(\beta_j - \theta_j)(5.3) $$

样例($x_k,y_k$)上神经网络的均方误差为

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

图5.7中的神经网络有s (d + l + 1)q +l个参数需要确定,包括dxq个从输入层到隐藏层的连接权重,从隐藏层到输出层有qxl个连接权重,q个隐藏层神经元阈值,l个输出层神经元阈值。BP是一个迭代学习算法,采用一般形式的感知机学习规则去估计和更新参数,即,类似5.1的式子,多个参数v的更新规则是

$$ v \leftarrow v + \Delta v $$

然后我们让链接权重$w_{h j}$演示推导过程。

BP算法使用了梯度下降的方式,调整参数的方向为对象目标的负梯度。对于5.4中的$E_k$和学习率η我们有

$$ \Delta w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}}(5.6) $$

注意到$w_{h j}$先影响到底j个输出层的神经元的输入值$\beta_j$,再一下

$$ \begin{equation} \label{eq:5-7} \frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat{y}^k_j} \cdot \frac{\partial \hat{y}^k_j}{\partial\beta_j} \cdot \frac{\partial\beta_j}{\partial w_{hj}}.(5.7) \end{equation} $$

根据$\beta_j$的定义,显然有

$$ \frac{\partial\beta_j}{\partial w_{hj}} = b_h.(5.8) $$

图5.2中的sigmoid函数有一个很好的性质

$$ f'(x)=f(x)(1-f(x)).(5.9) $$

于是根据5.4和5.3有

$$ g_j = - \frac{\partial E_k}{\partial \hat{y}^k_j} \cdot \frac{\partial \hat{y}^k_j}{\partial\beta_j} = - (\hat{y}^k_j - y^k_j) f'(\beta_j - \theta_j) = \hat{y}^k_j(1 - \hat{y}^k_j)(y^k_j - \hat{y}^k_j) \\ $$

将式(5.10)和5.8带入5.7,再带入5.6就得到了BP算法中关于$w_{hj}$的更新公式

$$ \Delta w_{hj} = \eta g_j b_h.(5.11) $$

类似可得

$$ \Delta \theta_j = - \eta g_j,(5.12) $$

$$ \Delta v_{ih} = - \eta e_h x_i,(5.13) $$

$$ \Delta \gamma_h = - \eta e_h,(5.14) $$

式子5.13和5.14中

$$ 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'(\alpha_h - \gamma_h)(5.15)\\ = \mathop{\sum }\limits_{{j = 1}}^{l}{w}_{hj}{g}_{j}{f}^{\prime }\left( {{\alpha }_{h} - {\gamma }_{h}}\right)\\ = {b}_{h}\left( {1 - {b}_{h}}\right) \mathop{\sum }\limits_{{j = 1}}^{l}{w}_{hj}{g}_{j} $$

学习率$η \in (1,0)$控制了每一轮更新的步长。过大的学习率可能会导致波动,然而较小的步长可能会导致收敛过慢。为了微调的目的,我们可以使用让式子5.11与5.12使用η1,5.13与5.14使用η2,俩者未必相等。

BP算法的工作流如图5.8所示,每个输入样本输入到输入神经元,逐层转发信号,直到输出层产生结果;计算了输出层的误差(4-5行),传播回隐藏层神经元(6行)以调节权重和阈值(7行)。BP算法重复上述步骤直到达到终止条件,即最小化训练偏差。

图5.9展示了BP算法运行在西瓜数据集的五个样本和俩个特性上。他展示了参数和决策边界在不同的训练轮下是怎么变换的。

BP算法的目标是最小化在训练集D上的累计误差

$$ E=\frac{1}{m}\sum^{m}_{k=1}E_k(5.16) $$

然而上面介绍的标准BP算法只使用一个训练样本来更新链接权重的阈值。换句话说,更新规则是式子5.1,是由单个样本的误差推导而来。如果我们用相同的方法推导出最小化累计误差的更新规则,那么我们有累计误差(accumulated error backpropagation)逆传播算法。在实践中标准BP和累计BP算法都被广泛使用。一般的说,标准BP算法的参数更新频繁,因为每个更新使用一个样例,因此不同样本的更新可能会抵消。作为结果,标准的BP算法通常需要更多的贴袋才能达到累计BP算法相同小的误差。相比这下,累计BP算法直接最小化累计误差,他调整参数的频率更低,因为对训练集D进行完全扫描一次才进行一次调整。然而在一些任务中,特别是当训练集D很大,在累积误差降低到一定水平后,累计BP算法将会变得很慢。相反,标准BP算法可以更快得到更好的解。

Hornik等人证明了具有足够神经元的前馈神经网络,可以逼近任意复杂的连续函数,精度可以达到任意精度。然而,目前没有确定隐藏层神经元数量的原则方法,实际中一般使用试错法。

因为强大的表达能力,BP神经网络存在过拟合问题,即,训练时误差减小,测试时误差增大的现象。有俩个通用的方法以缓和过拟合问题在BP神经网络中出现。第一个方法是早停(early stopping):划分数据到训练集和测试集,训练集负责计算梯度更新链接权重和阈值,验证集来评估误差。一旦训练误差减少的同时验证误差增加,训练过程停止返回链接权重和阈值对应的是最小化验证误差。另一策略是正则化(regularization),主要的思想是在目标函数中加入一个正则化项,描述神经网络的复杂性。(即连接权重和阈值的平方和),设$E_k$代表第k个训练样本的偏差,$w_i$代表链接权重和阈值,那么目标偏差函数5.16变为

正则化通过在模型的损失函数中添加一个惩罚项来实现其功能,这个惩罚项是基于模型参数的大小。这样做的目的是为了限制模型参数的大小,从而降低模型的复杂度。

$$ \begin{equation} E = \frac{\lambda}{m} \sum_{k=1}^{m} E_k + (1-\lambda) \sum_{i} w_i^2,(5.17) \end{equation} $$

其中$\lambda \in (0,1)$是经验误差与神经网络的权衡。λ的值通常通过交叉验证来估计。

全局最小与局部极小

因为E代表了神经网络的训练误差,他是连接权重w和阈值θ的函数。从这个角度,神经网络的训练过程是参数优化的过程,即,再参数空间中查找参数及D可以最小化E

我们通常谈论俩个类型的最优性,局部极小和全局最小(local minimum and the global minimum),我们说如果$\epsilon > 0$,$\left( {{\mathbf{w}}^{ * };{\mathbf{\theta }}^{ * }}\right)$是局部极小方案.

$$ E\left( {\mathbf{w};\mathbf{\theta }}\right) \geq E\left( {{\mathbf{w}}^{ * };{\mathbf{\theta }}^{ * }}\right) ,\forall \left( {\mathbf{w};\mathbf{\theta }}\right) \in \left\{ {\left( {\mathbf{w};\mathbf{\theta }}\right) \mid \begin{Vmatrix}{\left( {\mathbf{w};\mathbf{\theta }}\right) - \left( {{\mathbf{w}}^{ * };{\mathbf{\theta }}^{ * }}\right) }\end{Vmatrix} \leq \epsilon }\right\} . $$

另一方面,如果$E\left( {\mathbf{w};\mathbf{\theta }}\right) \geq E\left( {{\mathbf{w}}^{ * };{\mathbf{\theta }}^{ * }}\right)$适用于任何在参数空间中的$(\mathbf w;\mathbf \theta)$,那么$(\mathbf w^*;\mathbf \theta^*)$是全局最小解。直觉上,局部极小解,是指参数空间中误差小于其余邻域内点误差的点。相比之下,全局最小点代表错误小于其他任何其余参数空间中点的点。俩者对应的$(\mathbf w^*;\mathbf \theta^*)$分别称为误差函数的局部极小值,和全局极小值。

在参数空间中,如果误差要小于邻域内的任何点误差,这些梯度为0的点就是局部极小。虽然可能存在多个局部极小,全局最小值通常只有一个。换句话说,全局最小值必须是局部极小值,但是反过来则不是。例如图5.10所示,来个局部极小,但是其中一个是全局最小,参数的优化目标是找到全局最小值

最广泛使用的参数优化方法是基于梯度的搜索方式。这个方法从最开始的解反复搜索最佳参数的解。在每一轮中,当前点的搜索方向是根据误差函数的梯度来决定的。例如,梯度下降函数在付梯度的方向采取行动,因为这个方向能让函数值最大程度的减小。当梯度为0时,搜索到了局部极小,并停止因为更新项为0 。如果误差函数只有一个局部极小,那么这个局部极小就是全局最小。另一方面,如果有超过1个的局部极小,我们找到的姐可能不是全局最小,参数优化在局部极小停止了,这是不可取的。

在真实应用,我们通常下面的策略来跳出局部极小,去接近全局最小:

  • 我们可以使用不同的参数集初始化多个神经网络,取误差最小的哪个。由于搜索使与不同的初始点,我们获得多个局部极小,它们中间最小的一个是更接近全局最小的估计。
  • 我们可以使用模拟退火技术,他有一定概率接收更坏的方案因此他可以跳出局部极小值。为了保持算法的稳定性,我们逐渐减小在搜索中接收次优解的概率。
  • 我们可以使用随机梯度下降方法,他在斜率计算中引入了随机元素,而不是在标准梯度下降中使用的精确计算。因为随机因素,梯度在遇到局部 极小值的时候可能不为0,即,它们有机会跳出局部极小值。

此外,遗传算法(genetic algorithm)也经常被用来训练神经网络以更好的比较全局最小值。注意上述的技术

其他常见的神经网络

由于篇幅限制,我们不能涵盖众多的神经网络模型和算法,所以本节的其他部分只介绍几种常用的神经网络。

RBP网络

在神经网络中,如径向基函数(RBF)网络,径向基函数的“径向”是指函数的输出依赖于输入与某个中心点之间的距离,这种距离是沿径向测量的。RBF函数会根据输入点与中心点之间的径向距离产生一个输出值。

径向基函数(Radial Basis Function)网络是只有一个隐藏层的全盔神经网络。他使用基于径向的函数作为隐藏层神经元的激活函数。假设输入是d个维度的项链x,输出是真值,那么RBF神经网络可以表达为

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

其中隐藏层有q个神经元,ci和wi分别代表第i个隐藏层神经元的中心和权重$\rho \left( {\mathbf{x},{\mathbf{c}}_{i}}\right)$是径向基函数,他是一个径向对称的标量函数,通常定义为基于欧式距离的单调函数,于样本x和数据质心ci之间。通常使用高斯镜像偏置函数形式为

$$ \rho \left( {\mathbf{x},{\mathbf{c}}_{i}}\right) = {e}^{-{\beta }_{i}{\begin{Vmatrix}\mathbf{x} - {\mathbf{c}}_{i}\end{Vmatrix}}^{2}}. $$

Park 和 Sandberg 证明了RBF神经网络足够的隐藏神经元可以逼近任意复杂度的连续函数精确到任意精度。

RBF网络通常有俩个典型的步骤。第一步是确定神经元的中心ci,使用类似的随机采样和聚类等方法,第二部是使用BP算法去确定wi和${\beta }_{i}$

ART网络

竞争型学习(Competitive learning)是神经网络中常用的无监督学习。在这个策略下,神经网络之间相互竞争,它们之中的赢家将被激活,其他的将会被灭活。就像一个机械装置也被称为赢者通吃策略。

自适应谐振理论(Adaptive Resonance Theory)网络是竞争学习中重要的代表。ART网络包括了四个主要的部分,名字叫做比较层,识别层,识别阈值和重构模块。其中, 比较层接收信息样本到识别层神经元。每个在识别层的神经元对应一个模式类,神经元的数量可以在训练过程中动态增加以增加新的模式类。

在接收到信号之后,识别层的神经元之间互相竞争成为胜利的神经元。最简单的方式是计算输入向量之间的距离,获胜的神经元是最短距离的神经元,它通过发送信号来抑制识别层中其他神经元。当输入样本和获胜神经元之间的差异超过了识别阈值,将输入的样本分别表示向量的类别。同时,连接权重被更新,这样获胜的神经元更有可能在赢过与当前样本相似的未来样本。然而相似性如果没有超过识别阈值,那么重置模块将会在认知层创建新的神经元,将它的表示向量初始化为输入向量。

认知阈值对于ART网络的性能有显著的影响,当认知阈值过大,输入样例被划分到更细的模式类。另一方面,小的认知阈值会导致粗粒度的模式类。

ART网络提供了可塑性稳定性窘境的解(stability-plasticity dilemma)这里的可塑性表示学习新知识的能力,稳定性表示保留已学习到只是的能力。这个特性给了ART网络重要的优势能够去使用增量学习或者在线学习(incremental learning and online learning.)

ART网络在早些时候只能处理输入为布尔类型,之后,ART网络警花成了一系列算法,比如ART2网络他可以处理真实值的输入,FuzzyART网络包括了冻结处理。ARTMAP网络可以执行有监督学习。

SOM网络

自组织映射(Self-Organizing Map)网络是无监督神经网络是一种竞争学习。SOM神经网络可以映射高维空间的数据到低维空间中(特别是二位的),同时保留数据在高维空间中的拓扑学结构,将高位空间中相似的样本映射到输出的输出层中的邻近神经元。

如图5.10,神经元在输入层再防止再类似举证的二维空间中。每个神经元有权重向量,这是用来确定基于输入向量的获胜神经元,即,相似度最高的神经元获胜。SOM的训练目标是给每个输出层神经元找到合适的权重向量,使得拓扑结构得以保存。

训练SOM的过程很简单的,一旦新样品到达,每个在输出层中的神经元计算从权重向量到样例向量的距离,距离最短的神经元(即最佳匹配单元)获胜。最好的学习单元的权重向量和他的周围的神经元将会更新像当前的样例,这个过程重复直到收敛。

级联相关网络

典型的神经网络有固定的网络构造,训练的目的是选择合适的参数比如连接权重和阈值。然而建设性的神经网络将网络结构建设视为学习目标之一,即,确认最好的网络结构拟合训练数据。典型的建设性的网络是级联相关(Cascade-Correlation)网络

级联相关网络由俩个主要的组成部分,名为级联(Cascading)和相关(Correlation)。级联代表了建立一个具有层次连接的层次结构。在训练开始时,网络只有最小的拓扑结构,即只有一个输入层和输出层。随着训练的开始,如图5.12所示

新的隐藏神经元逐渐增加,形成一个层次结构。当新的隐藏层神经元加入,他的输入连接权重是固定的。相关指的是根据最大化新神经元与与网络无擦擦之间的相关性来训练关联的参数。

由于没有配置层数与隐藏层的神经元,级联相关网络训练起来快鱼典型的前馈神经网络。然而,级联相关网络在小数据集上容易过拟合

Elman网络

不同于前馈神经网络,循环神经网络Recurrent Neural Net works (RNN)允许环形结构,在他的神经元中可以让输入返回到输入信号中。因此,网络的输出不仅依赖于在时间t时的输入,还依赖于网络在t-1时刻的状态。由于这种行为有能力建模时间动态魔化。

最广泛使用的循环神经网络是Elman 网络,如5.13所示具有多层前馈神经网络相似的架构。

然而不同之处在于,隐藏神经元的输出在下一次迭代中被重用为隐藏神经元的输入(和输入神经元的信号一起)。典型的 Elman 网路中的隐藏神经元使用sigmoid激活函数,而网络的训练则常通过推广的BP算法进行。

Boltzmann感知机

神经网络中有一类模型是为网络状态定义成一个能量。当能量最低时,网络到达理想的状态,训练这样的网络就是最小化能量函数。一个典型的基于能量的模型就是Boltzmann感知机。如图5.14a所示典型的Boltzmann感知机结构有俩层:显层与隐层。

显层代表数据输入和输出,隐层被理解为内在的数据表示。Boltzmann感知机中的神经元是布尔类型的,即0是灭活1是激活,设$s \in \{ 0,1{\} }^{n}$代表n个神经元的状态,${w}_{ij}$代表神经元i和j的连接权重,${\theta }_{i}$代表神经元i的阈值。那么,Boltzmann感知机的能量Boltzmann对应的是向量s的状态,定义为

$$ E\left( \mathbf{s}\right) = - \mathop{\sum }\limits_{{i = 1}}^{{n - 1}}\mathop{\sum }\limits_{{j = i + 1}}^{n}{w}_{ij}{s}_{i}{s}_{j} - \mathop{\sum }\limits_{{i = 1}}^{n}{\theta }_{i}{s}_{i}.(5.20) $$

如果神经元独立于输入以任意顺序更新,那么网络将最终到达Boltzmann分布,其中状态向量s的概率是完全根据他的能量和所有可能的状态向量。

Boltzmann分布,也称为Boltzmann-Gibbs分布,是统计力学中的一个核心概念,它描述了在热力学平衡状态下,系统中粒子按照不同能量状态分布的概率。

$$ P(s) = \frac{e^{-E(s)}}{\sum_{t}^{ } e^{-E(t)}}(5.12) $$

那么,Boltzmann感知机中的训练是把每个训练样本看做状态向量并最大化他们的概率。由于标注的Boltzmann感知机是高复杂度的全连通图,在真实程序中使用他们是不明智的。在实践中,我们通常使用有限的Boltzmann感知机作为替代。如图5.13b所示有些的Boltzmann感知机保持了只有在显层与隐层的的连接,并简化了网络结构成一个二分图。

首先的Boltzmann感知机通常是使用对比散度(Contrastive Divergence CD)算法训练的,设d代表显层神经元的数量,q代表隐层神经元的数量,v和h分别代表显层和隐层向量状态。所以在同一层中没有连接,我们有

$$ P\left( {\mathbf{v} \mid \mathbf{h}}\right) = \mathop{\prod }\limits_{{i = 1}}^{d}P\left( {{v}_{i} \mid \mathbf{h}}\right)(5.22) $$

$$ P\left( {\mathbf{h} \mid \mathbf{v}}\right) = \mathop{\prod }\limits_{{j = 1}}^{q}P\left( {{h}_{j} \mid \mathbf{v}}\right) .(5.23) $$

对于每个训练样例v,CD算法首先计算隐层神经元的可能性分布。使用5.23和从分布中采样获取到的h。之后,同样的,根据h生成v',而h'进一步由v'产生。然而连接权重根据如下进行更新

$$ {\Delta w} = \eta \left( {\mathbf{v}{\mathbf{h}}^{\top } - {\mathbf{v}}^{\prime }{\mathbf{h}}^{\prime \top }}\right)(5.24) $$

深度学习

在理论上模型有越大的参数就有越强的能力,因此,有更多的能力处理复杂的学习任务。然而事实上,复杂的模型不受欢迎,因为他们通常训练较慢,容易过拟合。幸运的是,因为我们进入了云计算和大数据的年代。显著提高了计算能力进行有效的训练,而大量的书记减少了过拟合的风险。因为复杂模型的重要障碍得到了缓解,以深度学习为代表的复杂模型开始受到关注。

典型的深度学习模型是有多层的神经网络。对于神经网络,有一个简单的方法增加模型的能力就是增加隐藏层,他代表了更多的参数如连接权重和阈值。模型的复杂度也会随着隐藏层神经元的增加而增加,正如我们之前看到的,多层前馈网络用单个隐藏层就可以实现强大的学习能力。然而,为了增加模型的复杂度,添加多个隐藏层是比添加隐藏层的神经元更有效的,因为更多的层不仅包含了更多隐藏的神经元,还嵌入了激活函数,多隐藏层神经网络难以直接通过经典算法训练。(比如标准BP算法),因为错误率在隐藏层中逆传播时,倾向于发散而不能收敛到稳定状态。

无监督逐层训练(unsupervised layer-wise training)一个有效的方法是训练神经元工作在多个隐藏层,其中的隐藏层被一个一个的训练,即先前隐藏层的输出被用作训练当前隐藏层的输入,这个过程被称为预训练(pre-training)。在预训练完成后会对整个网络执行微调。例如,深度信念网络 Deep Belief Network (DBN) ,每一层都是受限的Boltzmann感知机(RBM),即网络就是多个RBM模型的栈。在无监督的分层训练中,第一个隐藏层以与标准RBM训练相同的方式进行训练。然后,将第一隐层的预训练神经元作为第二隐层的输入神经元,以此类推。一旦每一层的预训练完成,整个网络就开始使用BP算法训练。

这里的预训练与我们现在的预训练不太一样,先用无监督学习学到样本的基础特征,然后之后在正常BP学习

我们可以将预训练+微调看做是将参数分成组,然后对每组参数进行局部优化。将局部优化参数联合起来搜索全局最优解,利用模型大量参数锁提供的自由度的同时,这种方法减少训练代价。

另一个节省训练代价的策略是,权共享(权共享")其中一组神经元共享相同的权重。这个策略在卷积神经网络(Convolutional Neural Networks CNN)中起着重要的作用。为了证明这个想法,让我们来看看,CNN如何应用于手写数字识别。

如图5.15所示,输入32x32的手写数字图片,输出的是识别结果。CNN结合了多个卷积层和池化层(convolutional layers and pooling layers)去处理输入信号,然后在连接层实现与输出目标之间的映射。每一个卷积层包含了多个特征映射(feature maps)其中每个特征是多个神经元组成的平面。我们可以将特征映射看做卷积滤波器,对输矩阵进行卷积运算以提取卷积特征。例如,图5.15第一个卷积层包含了留个特征映射,每个映射是神经元28x28的矩阵,每个神经元通过卷积滤波器提取5x5区域的局部特征。

在图像处理和计算机视觉中,卷积滤波器可以看作是一个小的二维矩阵,这个矩阵会在输入图像上滑动,与图像的局部区域进行卷积运算。卷积运算本质上是对滤波器矩阵和图像局部区域的元素进行逐个乘法运算,然后求和,得到一个输出值。这个过程会重复进行,直到滤波器覆盖了整个输入图像。

采样层的功能是使用局部相关的性能采样,使得数据体积减小,同时保留有用的信息。例如图5.15中的第一个采样层,包括了6个特征映射大小为14x14,其中特征映射上的每个神经元使用先前的卷积层的特征图上的2x2区域计算其输出。原图通过卷积层和采样层联合映射了120维的特征矩阵。最终,链接层由48个神经元组成,连接池和输出层连接完成识别任务。CNN可以使用BP算法的训练。然而,在卷积层和采样层中的每组神经元(5.15中的每个平面),共享相同的连接权重,所以参数的数量会显著的减少。

还有另一个角度来理解深度学习,不管是DBN还是CNN,构造都是相同的,那就是使用多个隐藏层逐层处理信息。这些机制可以看做逐步转化原始输入,将那与目标产出不密切相关,变为接近相关目标输出的表示形式。如此依赖,映射任务到最后的输出层,这在过去是困难的,现在变得可行了。换句话说,通过多层处理,那些低级的特征表示将转换为高级特征表示,可以使用简单的模型进行复杂的分类。因此深度学习也可以被视为特征学习或者表示学习(feature learning orrepresentationlearning*)

过去,实际应用通常需要人类专家来设计这被称为特征工程(feature engineering),尽管特征的好坏至关重要,但即使对于人类专家来说,设计出好的特征也是不容易的。特认学习可以通过机器学习产生好的特征,我们又向全自动数据分析迈了一步。

Last modification:July 17, 2024
如果觉得我的文章对你有用,请随意赞赏