前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络算法

神经网络算法

作者头像
狼啸风云
修改2022-09-03 19:42:50
1.5K0
修改2022-09-03 19:42:50
举报

目录

1、神经元模型

2、感知机与多层网络

3、误差逆传播算法

4、全局最小与局部最小

5、其他神经网络

1、RBF网络

2、ART网络

3、SOM网络

4、级联相关

5、Elman网络

6、Boltzmann机

6、深度学习


1、神经元模型

神经网络(neural network)方面的研究很在就已出现,今天“神经网络”已是一个相当大的、多学科交叉的学科领域。各相关学科对神经网络的定义多种多样,神经网络的定义为具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经网络对真实物体所作出的交互反应。我们在机器学习中谈论神经网络时指的是“神经网络学习”,或者说,是机器学习与神经网络这两个学科领域的交叉部分。

神经网络中最基本的成分是神经元(neuron)模型,即上述定义中的“简单单元”。在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向连接的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”(threshold),那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。

1943年这个概念被抽象为“MP-神经元模型”。在这个模型中,神经元接受来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的中输入值与神经元的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。

理想中的激活函数将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制。然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用SIgmoid函数作为激活函数。典型的Sigmiod把在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”(squashing function)。

把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。事实上,从计算机科学的角度看,我们可以先不考虑神经网络是否真的模拟了生物神经网络,只需将一个神经网络视为包含了许多参数的数学模型,这个模型是若干个函数,例如y_{j}=f\left(\sum_{i} w_{i} x_{i}-\theta_{i}\right) 相互(嵌套)代入而得,有效的神经网络学习算法大多以数学证明为支撑。

2、感知机与多层网络

感知机(Perceptron)由两层神经元组成,输入层接受外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)。感知机能容易地实现逻辑与、或、非运算。注意到y_{j}=f\left(\sum_{i} w_{i} x_{i}-\theta_{i}\right) ,假定f是阶跃函数,有

  • “与”\left(x_{1} \wedge x_{2}\right) : 令 w_{1}=w_{2}=1, \theta=2 ,则y=f\left(1 \cdot x_{1} \cdot x_{2}-2\right) ,仅在x_{1}=x_{2}=1 时,y=1。;
  • “或” \left(x_{1} \vee x_{2}\right) :令 w_{1}=w_{2}=1, \theta=-0.5 ,则y=f\left(-0.6 \cdot x_{1}+0 \cdot x_{2}+0.5\right) ,当x_{1}=1 时,y=1或x_{2}=1 时y=1。
  • “非” \left(-x_{1}\right) :令 w_{1}=-0.6w_{2}=0\theta=-0.5 ,则y=f\left(-0.6 \cdot x_{1}+0 \cdot x_{2}+0.5\right) ,当x_{1}=1 时,y=0或x_{1}=1 时y=0。

更一般地,给定训练数据集,权重w_{i}(i=1,2, \ldots, n) 以及阈值\theta 可通过学习得到,阈值\theta 可看作一个固定输入为-1,0的“哑结点”所对应的权重w_{n+1} 。这样,权重和阈值的学习就可统一为权重的学习。感知机学习规则非常简单,对训练样例(x,y),若当前感知机的输出为\hat{y} ,则感知机权重将这样调整:

w_{i} \leftarrow w_{i}+\Delta w_{i}
\Delta w_{i}=\eta(y-\hat{y}) x_{i}

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

需注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限。事实上,上述与、或、非问题都是线性可分的问题,可以证明,若两类模式是线性可分的,即存在一个线性超平面将它们分开,则感知机的学习过程一定会收敛(coverge)而求得的权重向量w=\left(w_{1} ; w_{2} ; w_{3} ; \ldots ; w_{n+1}\right) ;否则感知机学习过程将会发生震荡(fluctuation),w难以稳定下来,不能求得合适解,例如感知机甚至不能解决异或这样简单的线性可分问题。

常见的神经网络具有层级结构,每层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈网络”(multi-layer feedward neural network),其中输入层神经元接受外界输入,隐藏层与输出层神经元对信号进行加工,最终结果由输出层神经元输出;换言之,输入层神经元仅是接受输入,不进行函数处理隐层与输出层包含功能神经元。神经网络的学习过程就是,就是根据训练来调整神经元之间的“链接权”以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴藏在连接权与阈值中。

3、误差逆传播算法

多层网络的学习能力,比单层感知机强的多。欲训练多层网络,简单感知机学习规则显然不够了,需要更强大的学习算法,误差逆传播(error BackPropagation,简称BP)算法就是其中最杰出的代表,它是迄今为止最成功的神经网络算法。显示任务中使用神经网络时,大多是在使用BP算法进行训练。值得注意的是,BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络,例如训练递归神经网络,但通常说“BP网络”时,一般是指用BP算法训练的多层前馈神经网络。

下面我们来看BP算法究竟是什么样。给定训练集D=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots,\left(x_{m}, y_{m}\right)\right\}x_{i} \in R^{d}y_{i} \in R^{l} ,即输入示例由d个属性描述,输出l维实例向量。为便于讨论,给定一个拥有d个输入神经元、l个输出神经元、q个隐藏神经神经元的多层前馈神经网络,其中输出层第j个神经元的阈值用\theta_{j} 表示,隐层第h个神经元的阈值用\gamma_{h} 表示。输入层第i个神经元与隐藏第h个神经元之间的连接权威v_{i h} ,隐层第h个神经元与输出层第j个神经元之间的连接权为w_{h, j}

记隐层第h个神经元接收到的输入为\alpha_{h}=\sum_{i=1}^{d} v_{i h} x_{i} ,输出层第j个神经元接接收到的输入为\beta_{j}=\sum_{h=1}^{q} w_{h j} b_{h} ,其中bn为隐藏层第h个神经元输出。假设隐层和输出层神经元都使用Sigmoid函数。对训练例\left(x_{k}, y_{k}\right) ,假定神经网络的输出为\hat{y}_{j}^{k}=\left(\hat{y}_{1}^{k}, \hat{y}_{2}^{k}, \ldots, \hat{y}_{l}^{k}\right) ,即\hat{y}_{j}^{k}=f\left(\beta_{j}-\theta_{j}\right) ,则网络在\left(x_{k}, y_{k}\right) 上的均方误差为E_{k}=\frac{1}{2} \sum_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2} ,则神经网络中有(d+l+1)q+1个参数需要确定:输入层到隐层的d \times q个权值,隐层到输出层的q \times l个权值,q个隐层神经元的阈值、l个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,与(1)类似,任意参数v的更新估计式为v \leftarrow v+\Delta_{v}

BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整,对式(4)的误差E_k ,给定学习率\eta ,有\Delta w_{h j}=-\eta \frac{\partial E_{k}}{\partial w_{h j}}

注意到w_{h j} 先影响到j个输出层神经元的输入值b_j ,再影响到其他输出值\hat{y}_{j}^{k} ,然后影响到E_k ,有\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{\beta_{j}}{\partial w_{h j}}=b_{h}

由于Sigmoid函数有一个很好的性质:

f^{\prime}(x)=f(x)(1-f(x))

于是根据(4)和(3),有g_{j}=-\frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}} \frac{\partial \hat{y}_{j}^{k}}{\beta_{j}}=-\left(\hat{y}_{j}^{k}-y_{j}^{k}\right) f^{\prime}\left(\beta_{j}-\theta_{j}\right)=\hat{y}_{j}^{k}\left(1-\hat{y}_{j}^{k}\right)\left(y_{j}^{k}-\hat{y}_{j}^{k}\right)

将(10)和(8)代入(7),再代入(6)就可得BP算法中关于w_{hj} 的更新公式

\Delta w_{h j}=\eta g_{j} b_{h}

类似可得

\Delta \theta_{j}=-\eta g_{j}

\Delta v_{i h}=\eta e_{h} x_{i}

\Delta \gamma_{h}=-\eta e_{h}

式(13)和(14)中

\begin{array}{c} e_{h}=-\frac{\partial E_{k}}{\partial b_{h}} \frac{\partial b_{h}}{\partial \alpha_{h}}=-\sum_{j=1}^{l} \frac{\partial E_{k}}{\partial \beta_{j}} \frac{\partial \beta_{j}}{\partial b_{h}} f^{\prime}\left(\alpha_{h}-\gamma_{h}\right)=\sum_{j=1}^{l} w_{h j} g_{j} f^{\prime}\left(\alpha_{h}-\gamma_{h}\right)= \\ b_{h}\left(1-b_{h}\right) \sum_{j=1}^{l} w_{h j} g_{j} \end{array}

学习率\eta \in(0,1) 控制着算法每一轮迭代中的更新步长,若太大则容易震荡,太小则收敛速度又会过慢。有时为了做精细调节,可令(11)与(12)使用\eta_1 ,(13)和(14)使用\eta_2 ,两者未必相等。

下面给出了BP算法的工作流程,对每个训练样例,BP算法执行以下操作:先将输入示例提供给神经元,然后逐层将信号先传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐藏层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件位置,例如训练误差已达到一个很小的值。

输入:训练集D=\left\{\left(x_{k}, y_{k}\right)\right\}_{k=1}^{m} ,学习率\eta 。 过程: 在(0,1)范围内随机初始化网络中所有链接权和阈值 repeat for all \left(x_{k}, y_{k}\right) \in D

do 根据当前参数和(3)计算当前样本的输出\hat{y}_k ; 根据(10)计算处处层神经元的梯度项g_j ; 根据(15)计算隐藏神经元的梯度项e_h ; 根据(11)-(14)更新连接权w_{hj}w_{ih} 与阈值\theta_j\gamma_h

end for until 达到停止条件 输出:连接权与阈确定的多层前馈神经网络

需注意的是,BP算法的目标是要最小化训练集D上的累积误差

E=\frac{1}{m} \sum_{k=1}^{m} E_{k}

但我们上面介绍的“标准BP算法”每次仅针对一个训练样例更新连接权和阈值,也就是说上述算法的更新规则是基于单个的E_k 推导而得。如果类似地推导出基于累积误差最小化的更新规则,就得到了累积误差的逆传播算法。累积BP算法与标准BP算法都很常用。一般来说,标准BP算法每次更新只针对单个样例,参数更新得到非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。因此,为了达到同样的累积误差极小点标准BP算法往往需进行多次数的迭代。累积BP算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得多。但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更明显。

只需一个包含足够多神经元的隐层,多层前馈神经网络就能以任意精度逼近任意复杂的连续函数。然而,如何设置隐藏层神经元的个数仍然是未决问题,实际应用中通常靠“试错法”调整。

正是由于其强大的表示能力,BP神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合,第一种策略是“早停”:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来评估误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连续权和阈值。第二种是“正则化”,其基本思想是在误差目标函数中添加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。仍令E_k 表示第k个训练样例上的误差,w_i 表示连接权和阈值,则误差目标函数改变为

E=\lambda \frac{1}{m} \sum_{k=1}^{m} E_{k}+(1-\lambda) \sum_{i} w_{i}^{2}

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

4、全局最小与局部最小

若用E表示神经网络在训练训练集上的误差,则它显然是关于连接权w和阈值\theta 的函数。此时,神经网络的训练可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使得E最小。

我们常会谈到两种“最优”:“局部极小”和“全局最小”。对w^*\theta^* ,若存在\epsilon>0 使得\forall(w ; \theta) \in\left\{(w ; \theta) \mid\left\|(w ; \theta)-\left(w^{*} ; \theta^{*}\right)\right\| \leqslant \epsilon\right\} 都有E(w ; \theta) \geqslant E\left(w^{*} ; \theta^{*}\right) 成立,则\left(w^{*}, \theta^{*}\right) 为局部极小解;若对参数空间中的任意(w ; \theta) 都有E(w ; \theta) \geqslant E\left(w^{*} ; \theta^{*}\right) ,则\left(w^{*}, \theta^{*}\right) 为全局最小解。直观的看,局部极小解是参数空间中的某个点,其邻域点的误差函数值均不小于该点的函数值;全局最小解则是指参数空间中所有点的误差函数均小于该点的误差函数值。两者对应的E\left(w^{*}, \theta^{*}\right) 分别称为误差函数的局部极小值和全局最小值。

显然,参数空间内梯度为零的点,只要器误差函数值小于邻点的误差函数值,就是全局极小点;可能存在多个局部极小值,但却只会有一个全局最小值。也就是说,“全局最小”一定是“局部极小”,反之则不成立。

基于梯度的搜索是使用最为广泛的参数寻优方法。在此类方法中,我们从某些初始解出发,迭代寻找最优参数解。每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。例如,由于负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为零,则已达到局部极小,更新量为零,这意味着参数的迭代更新将在此停止。显然,如果误差函数仅有一个局部极小,那么此时找到的局部极小即使全局最小;然而,如果误差函数具有多个局部极小,则不能保证找到的解是全局最小。对后一种情形,我们称参数寻优陷入了局部极小,这显然不是我们所希望的。

在现实任务中,人们常采用以下策略来试图“跳出”局部极小,从而进一步接近全局最小:

  • 以多组不同参数初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。
  • 使用“模拟退火”技术。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,就受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
  • 使用随机梯度下降,与标准下降法精确计算梯度不同,就随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。

此外,遗产算法也常用来训练神经网络以更好地逼近全局最小。需注意的是,上述用于跳出局部极小的技术大多是启发式,理论上缺乏保障。

5、其他神经网络

1、RBF网络

RBF(Radial Basis Function,径向基函数)网络是一种单一层前馈网络,它使用径向基作为隐层神经元激活函数,而输出层则是对隐藏层神经元输出的线性组合。假定输入为d维向量x,输出为实值,则RBF网络可表示为\varphi(x)=\sum_{i=1}^{q} w_{i} \rho\left(x, c_{i}\right)q为隐藏层神经元个数,c_iw_i 分别是第i个隐藏层神经元所对应的中心和权重,\rho\left(x, c_{i}\right) 是径向基函数,这是某种沿径向对称的标量函数,通常定义为样本x到数据中心c_i 之间欧式距离。常用的高斯径向基函数形如

\rho\left(x, c_{i}\right)=e^{-\beta_{i}\left\|x-c_{i}\right\|^{2}}

具有足够多隐藏神经元的RBF网络能以任意精度逼近任意连续函数。通常采用两步过程来训练RBF网络:第一步,确定神经元中心c_i ,常用的方式包括随机采样、聚类等;第二步,利用BP算法等来确定参数w_i\beta_i

2、ART网络

竞争性学习是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制。这种机制亦称为“胜者通吃”原则。ART(Adaptive Resonance Theory,自适应谐振理论)网络时竞争型学习的重要代表。该网络由比较层、识别层、识别阈值和重置模块构成。其中,比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。

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

显然,识别阈值对ART网络的性能有重要的影响。当识别阈值较高时,输入样本将会被分成比较多、比较精细的模式类,而如果识别阈值较低,则会产生比较少、比较粗略的模式类。ART比较好地缓解了竞争性学习中的“可塑性-稳定性窘境”,可塑性是指神经网络要有学习新知识的能力,而稳定性则是指神经网络在学习新知识时要保持对旧知识的记忆。这就使得ART网络具有一个很重要的优点:可以进行增量学习或在线学习。早期的ART网络只能处理布尔型输入数据,此后ART发展成了一个算法族,包括呢个处理实值输入的ART2网络、集合模糊处理Fuzzy ART网络,以及可以进行监督学习的ARTMAP网络。

3、SOM网络

SOM(Self_Organizing Map,自组织映射)网络是一种竞争性学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。SOM网络中的输出层神经元以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络在接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在欧式空间中的位置。SOM的训练目标就是为了输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。SOM的训练过程很简单:在接收到一个训练样本后,每个输出层神经元会计算该样本与自身携带的权向量之间的距离,距离最近的神经元成为竞争获胜者,称为最佳匹配单元(best matching unit)。然后,最佳匹配单元及其邻近神经元的权向量与当前输入样本的距离缩小。这个过程不断迭代,知道收敛。

4、级联相关

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

级联相关网络有两个主要成分:“级联”和“相关”。级联是指建立层次连接的层级结构。在开始训练时,网络只有输入层和输出层,处于最小拓扑结构;随着训练的进行,新的隐藏层神经元逐渐加入,从而创建起层级结构。当新的隐藏层神经元加入时,其输入端连接权值是冻结固定的。相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。与一般的前馈神经网路相比,级联相关网络无需设置网络层数、隐层神经元数目,且训练速度较快,但其在数据较小时易陷入过拟合。

5、Elman网络

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

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

6、Boltzmann机

神经网络中有一类模型是为网络状态定义一个“能量” ,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。Bolzmann机就是一种“基于能量的模型”,其神经元分为两层:显层与隐层。显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达。Boltzmann机中的神经元都是布尔型的,即只能取0、1两种状态,状态1表示激活,状态0表示抑制。令向量s \in\{0,1\}^{n} 表示n个神经元的状态,w_{ij} 表示神经元i与j之间的连接权,\theta_i 表示神经元i的阈值,则状态向量s所对应的Boltzmann机能量定义为

E(s)=-\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} w_{i j} s_{i} s_{j}-\sum_{i=1}^{s} \theta_{i} s_{i}

若网络中的神经元以任意不依赖于输入值的顺序进行更新,则网络最终将达到Boltzmann分布,此时状态向量s出现的概率将仅由其能量与所有可能状态向量的能量确定:

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

Boltzmann机的训练过程就是将每个训练样本视为一个状态向量,使其出现的概率尽可能大。标准的Boltzmann是一个全链接图,训练网络的复杂度很高,这使其难以用于解决现实任务。现实中常采用受限Bolzmann机(Restricted Botzmann Machine,简称RBM),受限Boltzmann机仅仅保留显层与隐层之间的练级,从而将Boltzmann机结构完全图简化为二部图。受限Boltzmann机常采用“对比散度”(Contrastive Divergence,简称CD)算法来进行训练。假定网络中有d个显层神经元和q个隐层神经元,令v和h分别表示显层与隐层的状态网络,则由于同一层内不存在连接,有

P(v \mid h)=\prod_{i=1}^{d} P\left(v_{i} \mid h\right)

P(h \mid v)=\prod P\left(h_{j} \mid v\right)

CD算法对每个训练样本v,先根据(23)计算出隐层神经元状态的概率分布,然后根据这个概率分布采样得到h;此后,类似地根据式(22)从h产生v',再从v'产生h' ;连接权的更新公式为

\Delta_{w}=\eta\left(v h^{T}-v^{\prime} h^{\prime T}\right)

6、深度学习

理论上来说,参数越多的模型复杂度越高,“容量”越大,这意味着它能完成更复杂的学习任务,但一般情形下,复杂模型的训练效率低,易陷入过拟合,因此难以受到人们青睐,随着云计算、大数据时代的到来,计算能力的大幅提高可缓解巡训练低效性,训练数据的大幅增加可降低过拟合风险,因此,以“深度学习”为代表的复杂模型开始受到人们的关注。

典型的深度学习模型就是很深层的神经网络。显然,对神经网络模型,提高容量的一个简单办法是增加隐藏层的数目,隐藏层多了,相应的神经元连接权、阈值等参数就会更多。模型复杂度也可通过单纯增加隐藏层神经元数目来实现,前面我们谈到过,单隐层的多层前馈网络已具有很强大的学习能力;但从增加模型复杂度的角度来看,增加隐藏层的数目显然比增加隐藏层神经元的数目更有效,因为增加隐藏层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。然而,多隐层神经网络难以直接用经典算法(例如标准BP算法)进行训练,因为误差在多隐层内逆传播,往往会“发散”而不能有效收敛到稳定状态。

无监督逐层训练时多隐层网络训练的有效手段,其基本思想是每次训练一层隐节点,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为“预训练”;在训练全部完成后,再对整个网络进行“微调”训练。例如,在深度信念网络中,每层都是一个受限玻尔兹曼机,即整个网络可视为若干个RBM堆叠而成。在使用无监督逐层训练时,受限训练第一层,这是关于训练样本的RBM模型,可按标准的RBM训练,然后,将第一层预训练好的隐结点视为第二层的输入结点,对第二层进行预训练,......各层预训练完成后,再利用BP算法等对整个网络进行训练。

事实上,“预训练+微调”的做法可视为将大量参数分组,对每组先找到局部来看比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优。这样就在利用了模型大量参数所提供的自由度的同时,有效地节省了训练开销。

另一种节省训练开销的策略是“权重共享”。这个策略在卷积神经网络中发挥了中要作用,以CNN进行手写数字识别任务为例,网络输入是一个32x32的手写数字图像,输出是其识别结果,CNN复合多个“卷积层”和“采样层”对输入信号进行加工,然后在连接层实现输出与目标之间的映射。每个卷积层都包含多个特征映射, 每个特征映射是一个由多个神经元构成的“平面”,通过一种卷积滤波器提取输入的一种特征。第一个卷积层由6个特征映射构成,每个特征映射是一个28x28的神经元序列,其中灭个神经元负责从5x5的区域通过卷积滤波器提取局部特征。采样层亦称为“汇合”层,其作用是基于局部相关性原理进行亚采样,从而在减少数据量的同时保留有用信息。。第一层有6个14x14的特征映射,其中每个神经元与上一层中对应特征映射的2x2的邻域相连,并据此计算输出。通过复合卷积层和采样层,CNN将原始图像映射成120维特征向量,最后通过一个由84个神经元构成的连接层和输出层完成识别任务。CNN可用BP算法来进行训练,但在训练中,无论是卷积层还是采样层,其每一组神经元都是用相同的连接权,从而大幅度减少了需要训练的参数数目。

我们可以从另一个角度来理解深度学习,无论是DBN还是CNN,其多隐藏层堆叠、每层对上一层的输出进行处理的机制,可看作是对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示,转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。换言之,通过多层处理,逐层将初始的“底层”特征表示转化成“高层”特征表示后,用“简单模型”即可完成复杂度的分类等学习任务。由此可将深度学习理解为进行“特征学习”或“表示学习”。

已往机器学习用于现实任务时,描述样本的特征通常需由人类专家来设计,这称为“特征工程”。众所周知,特征的好坏对泛化性能有直观重要饿影响,人类专家设计出的特征也并非易事;特征学习则通过机器学习技术自身来产生好特征,这使机器学习的“全自动数据分析“又前进了一步。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、神经元模型
  • 2、感知机与多层网络
  • 3、误差逆传播算法
  • 4、全局最小与局部最小
  • 5、其他神经网络
    • 1、RBF网络
      • 2、ART网络
        • 3、SOM网络
          • 4、级联相关
            • 5、Elman网络
              • 6、Boltzmann机
              • 6、深度学习
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档