西瓜书/南瓜书_学习笔记_5

5.1 神经元模型

神经网络(neural networks):“神经网络是由具有适应性的 简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实 世界物体所作出的交互反应”

神经元(neuron)模型:即上述定义中的简单单元。生物上的神经元,每个都与其他相连,神经元兴奋时,会向周围的神经元发送化学物质,改变其他神经元的电位,在接收化学物质超过某个阈值时,原本不兴奋的神经元也会兴奋,向其他神经元发送物质。

M-P神经元模型:

可以看出,在这种抽象出的模型中,中心的神经元接收周遭其他n个神经元的输入,输入值与链接的权重有关,总输入值和阈值进行比较,判断是否兴奋,然后通过“激活函数”(activation function)处理输出值。

理想中的激活函数会是阶跃函数,如图:

输入值对应1和0,即兴奋和不兴奋,但是阶跃函数不光滑不连续,会有以下缺点:

激活函数阶跃函数的缺陷是,它不连续不光滑,也就是说,在某些点上,它的函数值或者导数会发生突变。这样的缺陷会导致以下几个问题:

  • 不连续的激活函数会使得神经网络的输出对于输入非常敏感,一点点的输入变化可能会导致输出的巨大变化,这样会影响网络的稳定性和泛化能力。
  • 不光滑的激活函数会使得神经网络的优化变得困难,因为在训练过程中,我们需要计算激活函数的导数来更新权重,而在不光滑的点上,导数是不存在或者无穷大的,这样会导致梯度消失或者爆炸,从而无法完成深层网络的训练。
  • 不可导的激活函数会使得神经网络无法使用基于梯度的优化算法,如随机梯度下降(SGD),因为这些算法都需要计算激活函数的导数来更新权重,而在不可导的点上,导数是没有意义的。

因此,我们通常会使用Sigmoid函数作为激活函数,即我们在逻辑回归那里用于处理分类问题的函数。当时我们也是把好瓜坏瓜在某个阈值处直接分开,所以会出现阶跃函数。所以我们这里也是用当时的Sigmoid函数解决。

5.2 感知机与多层网络

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

y=f(\sum_{i}^{}w_{i}x_{i}-\Theta )假定f是阶跃函数

(1)“与”:(x_{1}\wedge x_{2})令w_{1}=w_{2}=1,\Theta=2,则y=f(1*x_{1}+1*x_{2}-2),仅在x_{1}=1x_{2}=1时,y=1

(2)“或”:(x_{1}\vee x_{2})令w_{1}=w_{2}=1,θ=0.5,则y=f(1*x_{1}+1*x_{2}-0.5),在x_{1}=1x_{2}=1时,y=1

(3)“非”:()令w_{1}=-0.6,w_{2}=0,θ=-0.5,则y=f(-0.6*x_{1}+0*x_{2}+0.5),当x_{1}=1时,y=0;当x_{1}=0时,y=1。

其实我们可以把y=f(\sum_{i}^{}w_{i}x_{i}-\Theta )化为我们更熟悉的形式y=w^{T}x+b,那么我们就可以把θ融入w的训练中了,可以把θ看作一个固定输入为-0.1的结点,对应于权重w_{n+1},意思相当于,w和x各加一维。

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

其中\eta\in(0,1)称为学习率(learning rate)若感知机对训练样例(x,y)预测正确,即\widehat{y}=y,则感知机不发生变化,否则将根据错误的程度进行权重调整。

感知机只有输出层神经元进行激活函数处理,即只有一层功能神经元(functional neuron),学习能力相当有限,一些问题是解决不了的。

事实上,上述“与”“或”“非”都是线性可分问题(linearly separable)。若两类模式是线性可分的,即存在一个线性超平面能将两类分开(超平面是指自由度比坐标轴少一的形状,二维平面内的超平面就是一条线),则感知机的学习过程一定会收敛(converge)而求得适当的权向量w=(w_{1},w_{2},...,w_{n+1});否则将会发生震荡(fluctuation),w难以稳定下来,不能求得合适解,例如这种方法就无法解决异或这种非线性问题

要解决非线性可分问题,需考虑使用多层功能神经元。例如图5.5中这个简单的两层感知机就能解决异或问题。在图5.5(a)中,输出层与输入层之间的一 层神经元,被称为隐居或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。

更一般的,常见的神经网络都是形如5.6的层级结构,每层神经元与下层全互联,不存在同层链接,也不存在跨层链接,这样的结构被称为多层前馈神经网络(multi-layer feedforward neutral networks),其中输入层神经接收外界输入,隐层与输出层对信号加工,最终由输出层输出。也就是说,隐层和输出层包含功能神经元。图5.6(a)通常被称为两层网络,或是单隐层网络。只需包含隐层就是多层网络。神经网络的学习过程就是根据训练数据来调整神经元之间的连接权(connection weight)以及每个功能神经元的阈值。

5.3 误差逆传播算法

        误差逆传播算法(error BackPropagation,简称BP):给定训练集D={(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m})},x_{i}\in \mathbb{R}^{d}y_{i}\in \mathbb{R}^{l},即输入示例由d个属性描述,输出l维实值变量。

上图,有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构,其中输出层第j个神经元的阈值用\Theta _{j}表示,隐层第h个神经元的阈值用\gamma _{h}表示,输入层第I个神经元与隐层第h个神经元之间的连接权为w_{hj}。记隐层第h个神经元接收到的输入为\alpha _{h}=\sum_{i=1}^{d}v_{ih}xi,输出层第j个神经元接收到的输入为\beta _{j}=\sum_{h=1}^{q}w_{hj}b_{h},其中b_{h}为隐层第h个神经元的输出,假设隐层和输出层神经元都使用Sigmoid函数。

对训练样例(x_{k},y_{k}),假定神经网络的输出为\widehat{y}_{k}=(\widehat{y}_{1}^{k},\widehat{y}_{2}^{k},...,\widehat{y}_{l}^{k}),即:

其实就是把k个y=w^{T}x+b函数写成一个了

则网络在(x_{k},y_{k})上的均方误差为:

5.7的网络中有(d+l+1)q+l个参数需要确定:输入层到隐层的d×q个权值、隐层到输出层的q×l个权值、q个隐层神经元的阈值、l个输出层神经元的阈值。

BP是迭代学习算法,在迭代的每一轮中采用广义的感知学习规则对参数进行更新估计,即与式5.1类似,任意参数v的更新估计式为:

BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。对式(5.4)的误差E_{k},给定学习率\eta,有:

我们把E_{k}的式子拆开看,E_{k}=\frac{1}{2}\sum_{j=1}^{l}(f(\sum_{h=1}^{q}w_{hj}b_{h}-\Theta _{j})-y_{j}^{k})^{2},对权重求偏导后,剩下的参数处理一下就是学习率。

注意到w_{hj}先影响到第j个输出层神经元的输入值\beta _{j},再影响到输出值\widehat{y}_{j}^{k},然后影响到E_{k},得到:

根据\beta _{j}的定义,显然有

因为Sigmoid函数有性质:

所以由5.3和5.4可得:

直接带入5.7和5.6可得关于w_{hj}的更新公式:

BP神经网络权值、阈值更新公式推导_阈值更新率_pcb931126的博客-CSDN博客

5.13和5.14中的

       

提醒一下,反正我是忘了这个是啥了。是第h个隐性神经元的输入。

先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差(第4-5行),再将误差逆向传播至隐层神经元(第6行),最后根据隐层神经元的误差来对连接权和阈值进行调整(第7行)。 该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差己达到一个很小的值。图5.9给出了在2个属性、5个样本的西瓜数据上,随着训练轮数的增加,网络参数和分类边界的变化情况。

这个图的看法是,比如“好”一类下的一个⚪,指向它的两条箭头上的值,代表了参数这样时,是个好瓜。可以看出来,随着迭代次数的提高,边界逐渐准确

需要注意的是,BP追求的是最小化训练集D上的累计误差:

上面的算法是针对单个的Ek推导来的,按照相同的思想可以推导出全体的E的算法,就得到了累积误差逆传播(accumulated error backpropagation)算法,之前的则被称为标准BP算法。

都很常用,累积法参数更新的少,标准迭代的多,D小时累积法更有效率,D大时标准法更有效。

我们可以看出,只要设置包括足够多的神经元的隐层,多层神经网络就可以逼近任意连续函数。现实中常靠试错法(trial-by-error)调整。

(证明问了一下AI:
 

这是一个很好的问题,关于神经网络的万能逼近定理。简单地说,这个定理告诉我们,一个具有单个隐层的前馈神经网络,只要使用足够多的神经元,就可以以任意精度逼近任何连续函数。这意味着,无论我们想要用神经网络来拟合什么样的函数,只要我们有足够的计算资源和数据,我们总是可以找到一个合适的网络结构和参数来实现我们的目标。

那么,为什么这个定理是成立的呢?其实,这个定理的证明是基于一些数学上的技巧和假设,比如傅里叶级数、泰勒展开、矩阵分解等。这些技巧和假设都可以帮助我们将任意连续函数分解为一些基本函数的线性组合,而这些基本函数就可以由神经元来实现。例如,如果我们使用sigmoid函数作为激活函数,那么我们可以证明,任意连续函数都可以用一些sigmoid函数的线性组合来逼近。具体的证明过程比较复杂,你可以参考这篇文章来了解更多细节。

那么,如果一个隐层就足够了,为什么我们还要使用多层神经网络呢?其实,这个问题没有一个确定的答案,因为不同的问题可能需要不同的网络结构来解决。但是,一般来说,多层神经网络有以下几个优势:

  • 多层神经网络可以表达更复杂的非线性关系。对于一些简单的数据集,一两层隐藏层通常就足够了。但是对于一些复杂的问题,比如图像识别、自然语言处理等,单层隐藏层可能无法捕捉到数据中的高级特征和抽象概念。多层神经网络可以通过多个计算层次、非线性的变换将输入信号逐步转化成更加高级、抽象和有效的特征。
  • 多层神经网络可以提高模型的泛化能力。泛化能力指的是模型在未知数据上的表现。如果模型过于简单,可能会导致欠拟合(underfitting),即模型无法学习到数据中的规律;如果模型过于复杂,可能会导致过拟合(overfitting),即模型学习到了数据中的噪声和细节。多层神经网络可以通过增加模型的深度来增加模型的复杂度和容量,从而提高模型在训练集和测试集上的表现。
  • 多层神经网络可以降低计算成本。虽然多层神经网络需要更多的参数和计算量,但是它们也可以更有效地利用数据和资源。根据万能逼近定理,一个单隐层的神经网络虽然可以逼近任意函数,但是它可能需要非常多的神经元才能达到理想的精度。而一个多隐层的神经网络可能只需要相对较少的神经元就能达到同样或者更好的效果。这是因为多隐层的神经网络可以利用层次性和分布式表示来提高信息压缩和抽象能力。

总之,多层神经网络是一种强大而灵活的模型,它可以逼近任意连续函数,并且具有很多优势。当然,多层神经网络也有一些挑战和局限,比如梯度消失或爆炸、优化困难、解释性差等。这些问题需要我们不断地探索和改进,以提高神经网络的性能和可靠性。

神经网络为什么能够无限逼近任意连续函数? - 知乎 (zhihu.com)

为了应对BP的过拟合问题,有两种策略:

(1)早停法(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

(2)正则化:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。仍令Ek表示第k个训练样例上的误差,w_{i}表示连接权和阈值,则误差目标函数(5.16)改变为

其中λε(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。

5.4 全局最小与局部最小

E可看作w和θ的函数,那么使E最小的过程可看作参数寻优过程。

我们通常会谈到两种最优:局部最小(local minimum)和全局最小(global minimum),对w^{*}\theta ^{*},若存在\epsilon >0使得都有E(w;\theta )\geqslant E(w^{*};\theta ^{*})成立,则(w^{*};\theta ^{*})为局部最小值;若对参数空间的任意(w;\theta )都有E(w;\theta )\geqslant E(w^{*};\theta ^{*}),则(w^{*};\theta ^{*})为全局最小值。

局部极小解是参数空间中的某个点,其邻域点的误差函数值均不小于该点的函数值;全局最小解则是指参数空间中所有点的误差函数值均不小于该点的误差函数值。两者对应的E(ω*;0*)分别称为误差函数的局部极小值和全局最小值。

从图中我们可以看出,只要梯度为0的、周围函数值都小于的一个点,就是局部最小值,也就是会有很多;但是全局最小值是只有一个的,可以说是局部最小值中最小的。

为了解决陷入局部最小,提供了几种可能的策略:

(1)以多组不同的参数初始化不同的神经网络,在得到最小值后,相互比较,这样就相当于从不同的起点进行搜索,比较可能避免局部最小的情况。

(2)模拟退火(simulated annealing)技术,这种技术在每一步都有一定概率接受比当前更差的结果。

(3)使用随机梯度下降,不同于标准梯度下降,它加入了随机因素,即使陷入局部最小点,它计算出的梯度仍可能不等于0。

(4)遗传算法

5.5 其他常见的神经网络

5.5.1 RBF网络

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

其中q是隐层神经元个数,c_{i}w_{i}分别是第i个隐层神经元所对应的中心和权重,\rho (x,c_{i})是径向基函数,这是某种沿径向对称的标量函数,通常定义为样本x到数据中心c_{i}之间的欧氏距离的单调函数,常用的高斯径向函数:

高斯径向基函数(RBF)神经网络_Y_hero的博客-CSDN博客

RBF神经网络详解_GallopZhang的博客-CSDN博客

通常通过两步来训练RBF网络:第一步,确定神经元中心c_{i},常用的方式包括随机采样,聚类等;第二步,利用BP算法来确定w_{i}\beta _{}i

5.5.2 ART网络

竞争型学习(competitive learnning)是一种常用的无监督学习策略。网络的输出神经元相互竞争,每一刻仅有一个竞争获胜的神经元被激活,其他神经元被抑制。这种机制亦称“胜者通吃(winner-take-all)

ART(Adaptive Resonance Theory ,自适应谐振理论)网络是竞争型神经网络的重要代表。该网络由比较层,识别层、识别阈值和重置模块组成。其中,比较层负责接收输入样本,并将其 传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增加新的模式类。

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

识别阈值较高时,输入样本将会被分成比较多,比较精细的模式类,而如果识别阈值较低,则会产生比较少、比较粗略的模式类。

可塑性-稳定性窘境(stability-plasticity dilemma):可塑性是指神经网络要有学习新知识的能力,而稳定性是指神经网络在学习新知识时要保持对旧知识的记忆。ART比较好的缓解了竞争性学习的这种窘境,这就使其具有一个很重要的优点:可进行增量学习(incremental learning)在线学习(online learning)

增量学习(Incremental Learning)小综述_文文学霸的博客-CSDN博客

在线学习_在线学习博客_曾悦的博客-CSDN博客

5.5.3 SOM网络

SOM(Self-Organizing Map,自组织映射)是一种竞争学习型的无监督神经网络,能将高维输入的数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。

计算机网络拓扑结构详解_实泽有之,无泽虚之的博客-CSDN博客

如图,输入层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接受输入量后,将会确定输出层的获胜神经元,它决定了该输入向量在低维空间中的位置。SOM的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的

5.5.4 级联相关网络

一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、阈值等参数。而结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构。级联相关(Cascade-Correlation)网络是其重要代表。

神经网络的分类和粗略讲解-附思维导图 - 知乎 (zhihu.com)  实在没找到讲结构自适应网络的)

级联:指建立层次连接的层级结构。在开始训练的时候,网络只有输入层和输出层,处于最小拓扑结构;随着训练的进行,新的隐层神经元逐渐加入,从而创建起层级结构。当新的隐层神经元加入时,其输入端连接权值是冻结固定的。

相关:相关是指通过最大化新神经元输出与网络误差之间的相关性(correlation)来训练相关参数。

级联相关神经网络_级联神经网络_杲昃的博客-CSDN博客

与一般的前馈神经网络相比,级联相关网络无需设置网络层数、隐层神经 元数目,且训练速度较快,但其在数据较小时易陷入过拟合

5.5.5 Elman

        与前馈神经网络(前馈神经网络_星星点灯er的博客-CSDN博客)不同,“递归神经网络”(recurrent neural networks)允许网络中出现环形结构,从而可以让一些输出值回来作为输入信号。这样的结构和与信息反馈过程,使得网络在t时刻的输出状态不仅与t时刻的输入有关,还与t-1时刻的网络状态有关,从而能处理与时间有关的动态变化。

        Elman网络是最常用的递归神经网络之一,其结构如圈5.13 所示,它的结构与多层前馈网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。隐层神经元通常采用Sigmoid激活函数,而网络的训练则常通过推广的BP算法进行。

                         

5.5.6 Boltzmann机

神经网络中有一类模型是为网络状态定义一个"能量"(energy)能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。

Boltzmann机就是基于能量的模型(energy-based model)

如图,这种网络分为两层:显层和隐层。显层用于表示数据的输入和输出,隐层则被理解为数据的内在表达。

Boltzmann机中的神经元只有1和0的取值。令向量s\in\left \{ 0,1 \right \}^{n}表示n个神经元的状态,w_{ij}表示神经元i与j之间的连接权,\theta _{i}表示神经元i的阈值,则状态向量s所对应的Boltzmann机能量定义为:

Boltzmann机本质上是一个引入了隐变量的无向图模型,其能量可理解为

                                 E_{graph}=E_{edges}+E_{nodes}   

其中E_{graph}表示图的能量,E_{edges}表示图中边的能量,E_{nodes}表示图中结点的能量。

边能量由两连接点的值及其权重的乘积确定,即E_{edge_{ij}}=-w_{ij}s_{i}s_{j};结点能量由节点的值及其阈值的乘积确定,即E_{node_{i}}=-\theta _{i}s_{i}。图中边的能量为所有边能量之和为:

                E_{edges}=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}E_{edge_{ij}}=-\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}w_{ij}s_{i}s_{j}

图中结点的能量为所有结点能量的和:
                                E_{nodes}=\sum_{i=1}^{n}E_{node_{i}}=-\sum_{i=1}^{n}\theta_{i}s_{i}

故状态向量s所对应的Boltzmann机能量:

                        E_{graph}=E_{edges}+E_{nodes}=-\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}w_{ij}s_{i}s_{j}-\sum_{i=1}^{n}\theta_{i}s_{i}

若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到Boltzmann分布,此时状态向量s出现的概率将仅由其能量与所有可能状态向量的能量确定:Boltzmann机的训练过程就是将每一个训练样本视为一个状态向量,使其出现的概率尽可能大。标准的Boltzmann机是一个全连接图,训练网络的复杂度很高,这使其难以用于解决现实任务。现实中常采用受限Boltzmann机(RestrictedBoltzmann Machine,简称RBM)。如图5.14(b)所示,受限Boltzmann机仅保留显层与隐层之间的连接,从而将Boltzmann机结构由完全图简化为二部图.受限Boltzmann机常用"对比散度"(Contrastive Dìvergence,简称 CD)算法来进行训练。假定网络中有d个显层神经元和q个隐层神经元,令v和h分别表示显层与隐层的状态向量,则由于同一层内不存在连接,有CD算法对每个训练样本v,先根据式(5.23)计算出隐层神经元状态的概率分布, 然后根据这个概率分布采样得到h;此后,类似地根据式(5.22)从h产生v',再 从v'产生h';连接权的更新公式为

[Deeplearning]对比散度算法(CD算法)_风澈云间的博客-CSDN博客

尽管利用Gibbs采样,我们可以得到对数似然函数关于未知参数梯度的近似,但是通常情况下,需要使用较大的采样步数,这使得RBM的训练效率仍然不高,尤其当观测数据的特征维数较高时。2002年Hinton提出了RBM的一个快速学习算法,对比散度算法(Contrastive Divergence)。与Gibbs采样不同,Hinton指出,当使用训练数据初始化v_{0}时,我们仅需要使用k(通常k=1)步Gibbs采样就可以得到足够好的近似。在CD算法一开始,可见单元的状态被设置成一个训练样本,并利用以下公式计算隐藏层单元的二值状态,在所有隐藏单元状态确定了之后,根据下面公式2来确定每个可见单元取值为1的概率。进而得到可见层的一个重构。然后将重构的可见层作为真实的模型带入RBM的\Delta中,就可以进行梯度下降算法了。

#输入:一个训练样本x0;隐藏层单元个数m,学习速率alpha,最大训练周期T
#输出:链接权重矩阵W,可见层的偏置向量a,隐藏层的偏置向量b
#训练阶段:初始化可见层单元的状态为v1 = x0;W,a,b为随机的较小的数值
for t = 1:T
    for j = 1:m #对所有隐藏单元
        P(h1j=1|v1)=sigmoid(bj + sum_i(v1i * Wij));
    for i = 1:n#对于所有可见单元
        p(v2i=1|h1)=sigmoid(ai + sum_j(Wij * h1j)
    for j = 1:m #对所有隐藏单元
        P(h2j=1|v2)=sigmoid(bj+sum_j(v2i*Wij))
    W = W + alpha * (P(h1=1|v1)*v1 - P(h2=1|v2)*v2)
    a = a + alpha * (v1 - v2)
    b = b + alpha*(P(h1=1|v1) - P(h2=1|v2))

5.6 深度学习

典型的深度学习模型就是很深层的神经网络。对神经网络模型,提高容量的一个简单办法是增加隐层的数目。隐层多了,相应的神经元连接权、阈值等参数就会更多。模型复杂度也可通过单纯增加隐层神经元的数目来实现。

从增加模型复杂度的角度来看,增加隐层的数目显然比增加隐层神经元的数目更有效。因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。

然而,多隐层神经网络难以直接用经典算法(例如标准BP算法)进行训练,因为误差在多隐层内逆传播时,往往会"发散"(diverge)而不能收敛到稳定状态。

无监督逐层训练(unsupervised layer-wise training)是多隐层网络训练的有效手段,其基本思想是每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,向本层隐结点的输出作为下一层隐结点的输入,这称为"预训练"(pre-training);在预训练全部完成后,再对整个网络进行"微调"(fine tuning)训练。

无监督逐层训练方法是一种深度学习的技术,它可以用来初始化深层神经网络的参数,从而提高训练效率和性能。无监督逐层训练方法的基本思想是,将深层神经网络分解为多个单层模型,如限制玻尔兹曼机(RBM)或自动编码器(AE),然后逐层地用无监督的方式训练这些单层模型,最后将训练好的单层模型堆叠起来,形成一个初始化好的深层神经网络。这样做的好处是,可以利用大量的无标签数据来学习数据的内在结构和特征,从而避免了随机初始化参数可能导致的梯度消失或爆炸、局部最优等问题。无监督逐层训练方法只是一种预训练的手段,它并不直接涉及到具体的任务目标,如分类或回归。因此,在预训练之后,还需要用有监督的方式对深层神经网络进行微调,以达到最佳的判别性能。

如果你想了解更多关于无监督逐层训练方法的内容,你可以参考以下的一些网页:

  • 1 是一篇介绍无监督学习基本概念和应用场景的文章,其中也提到了无监督逐层训练方法。
  • 2 是一篇介绍深度信念网络(DBN)的文章,DBN是一种使用RBM作为单层模型进行无监督逐层训练的典型例子。
  • 3 是一篇介绍堆栈自动编码器(SAE)的文章,SAE是一种使用AE作为单层模型进行无监督逐层训练的典型例子。
  • 4 是一篇介绍卷积深度信念网络(CDBN)的文章,CDBN是一种考虑了图像空间结构信息的无监督逐层训练方法。

例如,在深度信念网络(deepbelief network,筒称DBN)中,每层都是一个受限Boltzmann机,即整个网络可视为若干个 RBM堆叠而得。在使用无监督逐层训练时,首先训练第一层,这是关于训练样本的RBM模型,可按标准的RBM训练;然后,将第一层预训练好的隐结点视为第二层的输入结点,对第二层进行预训练,各层预训练完成后,再利用BP 算法等对整个网络进行训练。

"预训练+微调"的做法可视为将大量参数分组,对每组先找到局部看来比较好的设置,然后再基于这些局部较优的结果联合起来远行全局寻优。

另一种节省训练开销的策略是"权共享"(weight share),即让一组神经元使用相同的连接权。这个策略在卷积神经网络(ConvolutionalNeural Network,简称CNN)中发挥了重要作用。以CNN进行手写数字识别任务为例,如图5.15:

网络输入是一个32x32的手写数字图像,输出是其识别结果,CNN复合多个"卷积层"和"采样层"对输入信号进行加工,然后在连接层实现与输出目标之间的映射。

每个卷积层都包含多个特征映射(feature map),每个特征映射是一个由多个神经元构成的"平面",通过一种卷积滤波器提取输入的一种特征。

例如图5.15中,第一个卷积层由6个特征映射构成,每个特征映射是一 个28x28的神经元阵列,其中每个神经元负责从5x5的区域通过卷积滤波器提取局部特征。

采样层亦称为"汇合"(pooling)层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息。

例如图5.15中第一个采样层有6个14x14的特征映射,其中每个神经元与上一层中对应特征映射的2x2邻域相连,并据此计算输出通过复合卷积层和采样层,图5.15中的CNN将原始图像映射成120维特征向量,最后通过一个由84个神经元构成的连接层和输出层连接完成识别任务。

CNN可用BP算法进行训练,但在训练中?,无论是卷积层还是采样层,其每一组神经元(即图5,15中的每个"平面")都是 用相同的连接权,从而大幅减少了需要训练的参数数目。

无论是DBN还是CNN,其多隐层堆叠、每层对上一层的输出进行处理的机制,可看作是在对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。

换言之,通过多层处理,逐渐将初始的"低层"特征表示,转化为"高层"特征。表示后,用"简单模型"即可完成复杂的分类等学习任务,由此可将深度学习理解为进行"特征学习"(feature learning)或"表示学习"(representation learning).

(表示学习的基本思路,是找到对于原始数据更好的表达,以方便后续任务(比如分类)。机器学习中,同样的数据的不同表达,会直接决定后续任务的难易程度(换言之,表示方法的选择通常依赖于后续任务的需求),因此找到好的数据表示往往是机器学习的核心任务。)表示学习(特征学习)_zlinzju的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值