Deep Learning 学习笔记(下):常用模型

深度学习的常用模型和方法

Posted by Zouxy on August 5, 2017

本文转载自《Deep Learning(深度学习)学习笔记整理系列》,作者 Zouxy。版权归原作者所有,部分内容有修改。

1. 自动编码器

1.1 AutoEncoder 自动编码器

Deep Learning 最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入 $I$ 的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像 $\text{PCA}$ 那样,找到可以代表原信息的主要成分。

具体过程简单的说明如下:

  1. 给定无标签数据,用非监督学习学习特征:

    1

    在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即样本格式为 (input, target),这样我们根据当前输出和 target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?

    2

    如上图,我们将 input 输入一个 encoder 编码器,就会得到一个 code,这个 code 也就是输入的一个表示,那么我们怎么知道这个 code 表示的就是 input 呢?我们再加一个 decoder 解码器,这时候 decoder 就会输出一个信息,那么如果输出的这个信息和一开始的输入信号 input 是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个 code 是靠谱的。所以,我们就通过调整 encoder 和 decoder 的参数,使得重构误差最小,这时候我们就得到了输入 input 信号的第一个表示了,也就是编码 code。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。

    3

  2. 通过编码器产生特征,然后训练下一层。这样逐层训练:

    那上面我们就得到第一层的 code,我们的重构误差最小让我们相信这个 code 就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的是一个东西)。那第二层和第一层的训练方式就没有差别了,我们将第一层输出的 code 当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的 code,也就是原输入信息的第二个表达了。其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的 decoder 已经没用了,都不需要了)。

    4

  3. 有监督微调:

    经过上面的方法,我们就可以得到很多层了。至于需要多少层(或者深度需要多少,这个目前本身就没有一个科学的评价方法)需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。

    到这里,这个 AutoEncoder 还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。那么,为了实现分类,我们就可以在 AutoEncoder 的最顶的编码层添加一个分类器(例如 logistic 回归、SVM 等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)去训练。

    也就是说,这时候,我们需要将最后层的特征 code 输入到最后的分类器,通过有标签样本,通过监督学习进行微调,这也分两种,一个是只调整分类器(黑色部分):

    5

    另一种:通过有标签样本,微调整个系统:(如果有足够多的数据,这个是最好的。end-to-end learning 端对端学习)

    6

一旦监督训练完成,这个网络就可以用来分类了。神经网络的最顶层可以作为一个线性分类器,然后我们可以用一个更好性能的分类器去取代它。

在研究中可以发现,如果在原有的特征中加入这些自动学习得到的特征可以大大提高精确度,甚至在分类问题中比目前最好的分类算法效果还要好!

AutoEncoder 存在一些变体,下面要简要介绍下两个。

1.2 Sparse AutoEncoder 稀疏自动编码器

当然,我们还可以继续加上一些约束条件得到新的 Deep Learning 方法,如:如果在 AutoEncoder 的基础上加上 L1 的 Regularity 限制(L1 主要是约束每一层中的节点中大部分都要为 0,只有少数不为 0,这就是 Sparse 名字的来源),我们就可以得到 Sparse AutoEncoder 法。

7

如上图,其实就是限制每次得到的表达 code 尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的)。

1.3 Denoising AutoEncoders 降噪自动编码器

降噪自动编码器 DA 是在自动编码器的基础上,训练数据加入噪声,所以自动编码器必须学习去去除这种噪声而获得真正的没有被噪声污染过的输入。因此,这就迫使编码器去学习输入信号的更加鲁棒的表达,这也是它的泛化能力比一般编码器强的原因。DA 可以通过梯度下降算法去训练。

8

2. Sparse Coding 稀疏编码

2.1 原理

如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即:

$\phi_i$ 是基,$a_i$ 是系数,我们可以得到这样一个优化问题:

其中 $I$ 表示输入,$O$ 表示输出。

通过求解这个最优化式子,我们可以求得系数 $a_i$ 和基 $\phi_i$,这些系数和基就是输入的另外一种近似表达:

因此,它们可以用来表达输入 $I$,这个过程也是自动学习得到的。如果我们在上述式子上加上 L1 的 Regularity 限制,得到:

这种方法被称为 Sparse Coding。通俗的说,就是将一个信号表示为一组基的线性组合,而且要求只需要较少的几个基就可以将信号表示出来。“稀疏性”定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。要求系数 $a_i$ 是稀疏的意思就是说:对于一组输入向量,我们只想有尽可能少的几个系数远大于零。选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线。同时,比如与初级视觉皮层的类比过程也因此得到了提升(人脑有大量的神经元,但对于某些图像或者边缘只有很少的神经元兴奋,其他都处于抑制状态)。

稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使我们方便地找到一组“完备”基向量,但是这里我们想要做的是找到一组“超完备”基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来说,系数 $a_i$ 不再由输入向量唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。(详细过程请参考:UFLDL《Tutorial稀疏编码》

9

比如在图像的特征抽取的最底层要做边缘检测器的生成,那么这里的工作就是从自然图像中随机选取一些小碎片,通过这些碎片生成能够描述他们的“基”,也就是右边的 8 × 8 = 64 个 basis 组成的 basis,然后给定一个测试碎片,我们可以按照上面的式子通过 basis 的线性组合得到,而稀疏矩阵就是 $\boldsymbol{a}$,上图中的 $\boldsymbol{a}$ 中有 64 个维度,其中非零项只有 3 个,故称“稀疏”。

这里可能大家会有疑问,为什么把底层作为边缘检测器呢?上层又是什么呢?这里做个简单解释大家就会明白,之所以是边缘检测器是因为不同方向的边缘就能够描述出整幅图像,所以不同方向的边缘自然就是图像的“基”了……而上一层是“基”组合的结果,上上层又是上一层“基”的组合……

2.2 过程

Sparse coding 分为两个部分:

  1. Training 阶段:给定一系列的样本图片 $[x_1, x_2, …]$,我们需要学习得到一组基 $[\phi_1, \phi_2, …]$,也就是字典。

    稀疏编码是 k-means 算法的变体,其训练过程也差不多(EM 算法的思想:如果要优化的目标函数包含两个变量,如 $L(W, B)$,那么我们可以先固定 $W$,调整 $B$ 使得 $L$ 最小,然后再固定 $B$,调整 $W$ 使 $L$ 最小,这样迭代交替,不断将 $L$ 推向最小值。EM 算法可以见我的博客:“从最大似然到EM算法浅解”)。

    训练过程就是一个重复迭代的过程,按上面所说,我们交替的更改 $\boldsymbol{a}$ 和 $\boldsymbol{\phi}$ 使得下面这个目标函数最小。

    每次迭代分两步:

    a)固定字典 $\phi[k]$,然后调整 $a[k]$,使得上式,即目标函数最小(即解 LASSO 问题)。

    b)然后固定住 $a[k]$,调整 $\phi[k]$,使得上式,即目标函数最小(即解凸 QP 问题)。

    不断迭代,直至收敛。这样就可以得到一组可以良好表示这一系列 $x$ 的基,也就是字典。

  2. Coding 阶段:给定一个新的图片 $x$,由上面得到的字典,通过解一个 LASSO 问题得到稀疏向量 $\boldsymbol{a}$。这个稀疏向量就是这个输入向量 $x$ 的一个稀疏表达了。

    例如:

    10

3. Restricted Boltzmann Machine 限制波尔兹曼机

3.1 原理

假设有一个二部图,每一层的节点之间没有链接,一层是可视层,即输入数据层 $\mathbf{v}$,一层是隐藏层 $\mathbf{h}$,如果假设所有的节点都是随机二值变量节点(只能取 0 或者 1 值),同时假设全概率分布 $P(\mathbf{v},\mathbf{h})$ 满足 Boltzmann 分布,我们称这个模型是 Restricted BoltzmannMachine (RBM)。

11

下面我们来看看为什么它是 Deep Learning 方法。首先,这个模型因为是二部图,所以在已知 $\mathbf{v}$ 的情况下,所有的隐藏节点之间是条件独立的(因为节点之间不存在连接),即 $P(\mathbf{h}\mid \mathbf{v}) = P(h_1\mid \mathbf{v})…P(h_n\mid \mathbf{v})$。同理,在已知隐藏层 $\mathbf{h}$ 的情况下,所有的可视节点都是条件独立的。同时又由于所有的 $v$ 和 $h$ 满足 Boltzmann 分布,因此,当输入 $\mathbf{v}$ 的时候,通过 $P(\mathbf{h}\mid \mathbf{v})$ 可以得到隐藏层 $\mathbf{h}$,而得到隐藏层 $\mathbf{h}$ 之后,通过 $p(\mathbf{v}\mid \mathbf{h})$ 又能得到可视层,通过调整参数,我们就是要使得从隐藏层得到的可视层 $\mathbf{v}_1$ 与原来的可视层 $\mathbf{v}$ 一样,那么得到的隐藏层就是可视层另外一种表达,因此隐藏层可以作为可视层输入数据的特征,所以它就是一种 Deep Learning 方法。

12

如何训练呢?也就是可视层节点和隐节点间的权值怎么确定呢?我们需要做一些数学分析。也就是模型了。

3.2 训练

11

联合组态(jointconfiguration)的能量可以表示为:

其中,$\theta={W,a,b}$ 是模型的参数。而某个组态的联合概率分布可以通过 Boltzmann 分布(和这个组态的能量)来确定:

因为隐藏节点之间是条件独立的(因为节点之间不存在连接),即:

然后我们可以比较容易(对上式进行因子分解 Factorizes,具体可参见《受限玻尔兹曼机(RBM)学习笔记(三)能量函数和概率分布》)得到在给定可视层 $\mathbf{v}$ 的基础上,隐层第 $j$ 个节点为 1 或者为 0 的概率:

同理,在给定隐层 $\mathbf{h}$ 的基础上,可视层第 $i$ 个节点为 1 或者为 0 的概率也可以容易得到:

给定一个满足独立同分布的样本集:$D={\mathbf{v}^{(1)},\mathbf{v}^{(2)},…,\mathbf{v}^{(N)}}$,我们需要学习参数 $\theta={W,a,b}$。我们最大化以下对数似然函数(最大似然估计:对于某个概率模型,我们需要选择一个参数,让我们当前的观测样本的概率最大):

也就是对最大对数似然函数求导,就可以得到 $L$ 最大时对应的参数 $W$ 了。

如果,我们把隐藏层的层数增加,我们可以得到 Deep Boltzmann Machine(DBM);如果我们在靠近可视层的部分使用贝叶斯信念网络(即有向图模型,当然这里依然限制层中节点之间没有链接),而在最远离可视层的部分使用 Restricted Boltzmann Machine,我们可以得到 DeepBelief Net(DBN)。

13

4. Deep Belief Networks 深信度网络

4.1 原理

DBNs 是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对 $P(\text{Observation}\mid\text{Label})$ 和 $P(\text{Label}\mid\text{Observation})$ 都做了评估,而判别模型仅仅评估了后者,也就是 $P(\text{Label}\mid\text{Observation})$。对于在深度神经网络应用传统的 BP 算法的时候,DBNs遇到了以下问题:

  1. 需要为训练提供一个有标签的样本集;
  2. 学习过程较慢;
  3. 不适当的参数选择会导致学习收敛于局部最优解。

14

DBNs 由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,一个典型的神经网络类型如下图所示。这些网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。

15

首先,先不考虑最顶构成一个联想记忆(associative memory)的两层,一个 DBN 的连接是通过自顶向下的生成权值来指导确定的,RBMs 就像一个建筑块一样,相比传统和深度分层的 sigmoid 信念网络,它能易于连接权值的学习。

4.2 训练

预训练

最开始的时候,通过一个非监督贪婪逐层方法去预训练获得生成模型的权值,非监督贪婪逐层方法被 Hinton 证明是有效的,并被其称为对比分歧(contrastive divergence)。

在这个训练阶段,在可视层会产生一个向量 $\mathbf{v}$,通过它将值传递到隐层。然后可视单元由隐层单元重建(可视层的输入会被随机的选择,以尝试去重构原始的输入信号)。最后,这些新可视单元再次映射给隐单元,这样就获取新的隐单元 $\mathbf{h}$。执行这种反复步骤叫做 Gibbs 采样,而隐层激活单元和可视层输入之间的相关性差别就作为权值更新的主要依据。

训练时间会显著的减少,因为只需要单个步骤就可以接近最大似然学习。增加进网络的每一层都会改进训练数据的对数概率,我们可以理解为越来越接近能量的真实表达。这个有意义的拓展,和无标签数据的使用,是任何一个深度学习应用的决定性的因素。

在最高两层,权值被连接到一起,这样更低层的输出将会提供一个参考的线索或者关联给顶层,这样顶层就会将其联系到它的记忆内容。而我们最关心的,最后想得到的就是判别性能,例如分类任务里面。

微调

在预训练后,DBN 可以通过利用带标签数据用 BP 算法去对判别性能做调整。在这里,一个标签集将被附加到顶层(推广联想记忆),通过一个自下向上的,学习到的识别权值获得一个网络的分类面。这个性能会比单纯的 BP算法训练的网络好。这可以很直观的解释,DBNs 的 BP 算法只需要对权值参数空间进行一个局部的搜索,这相比前向神经网络来说,训练是要快的,而且收敛的时间也少。

DBNs 的灵活性使得它的拓展比较容易。一个拓展就是卷积 DBNs(Convolutional Deep Belief Networks, CDBNs)。DBNs 并没有考虑到图像的 2 维结构信息,因为输入是简单的从一个图像矩阵一维向量化的。而 CDBNs 就是考虑到了这个问题,它利用邻域像素的空域关系,通过一个称为卷积 RBMs 的模型区达到生成模型的变换不变性,而且可以容易得变换到高维图像。DBNs 并没有明确地处理对观察变量的时间联系的学习上,虽然目前已经有这方面的研究,例如堆叠时间 RBMs,以此为推广,有序列学习的 dubbed temporal convolutionmachines,这种序列学习的应用,给语音信号处理问题带来了一个让人激动的未来研究方向。

目前,和 DBNs 有关的研究包括堆叠自动编码器,它是通过用堆叠自动编码器来替换传统 DBNs 里面的 RBMs。这就使得可以通过同样的规则来训练产生深度多层神经网络架构,但它缺少层的参数化的严格要求。与 DBNs 不同,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。但是,降噪自动编码器却能很好的避免这个问题,并且比传统的 DBNs 更优。它通过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和 RBMs 训练生成模型的过程一样。

5. Convolutional Neural Networks 卷积神经网络

卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

CNNs 是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。

CNNs 是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向 BP 算法的训练性能。CNNs 作为一个深度学习架构提出是为了最小化数据的预处理要求。在 CNN 中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。

5.1 卷积神经网络的网络结构

卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。

16

上图是卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,卷积后在 C1 层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个 Sigmoid 函数得到三个 S2 层的特征映射图。这些映射图再进过滤波得到 C3 层。这个层级结构再和 S2 一样产生 S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。

一般地,C 层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S 层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的 sigmoid 函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

5.2 关于参数减少与权值共享

上面聊到,好像 CNN 一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。那究竟是啥的呢?

下图左:如果我们有 1000 × 1000 像素的图像,有 1 百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有 1000 × 1000 × 1000000 = 10^12 个连接,也就是 10^12 个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如下图右:假如局部感受野是10 × 10,隐层每个感受野只需要和这 10 × 10 的局部图像相连接,所以 1 百万个隐层神经元就只有一亿个连接,即 10^8 个参数。比原来减少了四个数量级,这样训练起来就没那么费力了,但还是感觉很多的啊,那还有啥办法没?

17

我们知道,隐含层的每一个神经元都连接 10 × 10 个图像区域,也就是说每一个神经元存在 100 个连接权值参数。那如果我们每个神经元这 100 个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数??只有 100 个参数啊!!!亲!不管你隐层的神经元个数有多少,两层间的连接我只有 100 个参数啊!亲!这就是权值共享啊!亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样做靠谱吗?为什么可行呢?这个……共同学习。

好了,你就会想,这样提取特征也忒不靠谱吧,这样你只提取了一种特征啊?对了,真聪明,我们需要提取多种特征对不?假如一种滤波器,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,加多几种滤波器不就行了吗?对了。所以假设我们加到 100 种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为 Feature Map。所以 100 种卷积核就有 100 个 Feature Map。这 100 个 Feature Map 就组成了一层神经元。到这个时候明了了吧。我们这一层有多少个参数了?100 种卷积核 × 每种卷积核共享 100 个参数 = 100 × 100 = 10K,也就是 1 万个参数。才 1 万个参数啊!亲!(又来了,受不了了!)见下图右:不同的颜色表达不同的滤波器。

18

嘿哟,遗漏一个问题了。刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么隐层的神经元个数怎么确定呢?它和原图像,也就是输入的大小、滤波器的大小和滤波器在图像中的滑动步长都有关!例如,我的图像是 1000 × 1000 像素,而滤波器大小是 10 × 10,假设滤波器没有重叠,也就是步长为 10,这样隐层的神经元个数就是 (1000 × 1000 ) / (10 × 10) = 100 × 100 个神经元了,假设步长是 8,也就是卷积核会重叠两个像素,那么……我就不算了,思想懂了就好。注意了,这只是一种滤波器,也就是一个 Feature Map 的神经元个数哦,如果 100 个 Feature Map 就是 100 倍了。由此可见,图像越大,神经元个数和需要训练的权值参数个数的贫富差距就越大。

19

需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加 1 。这个也是同一种滤波器共享的。

总之,卷积网络的核心思想是将:局部感受野、权值共享以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

5.3 训练过程

卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。卷积网络执行的是有导师训练,所以其样本集是由形如:(输入向量,理想输出向量)的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟的系统的实际“运行”结果。它们可以是从实际运行系统中采集来的。在开始训练前,所有的权都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无能力学习。

训练算法与传统的 BP 算法差不多。主要包括 4 步,这 4 步被分为两个阶段:

第一阶段,向前传播阶段:

  1. 从样本集中取一个样本 $(X,Y_p)$,将 $X$ 输入网络;
  2. 计算相应的实际输出 $O_p$。

在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):

第二阶段,向后传播阶段

  1. 算实际输出 $O_p$ 与相应的理想输出 $Y_p$ 的差;
  2. 按极小化误差的方法反向传播调整权矩阵。