M-P神经元模型正是从生物神经网络中抽象出来的。
在M-P神经元模型中,神经元接收到其他n个神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(active function)处理以产生神经元的输出。
把许多这样的神经元按一定的层次结构连接起来,就得到了神经网络。
神经网络可视为一个包含很多参数的数学模型,这个模型是若干个函数相互嵌套代入而得。有效的神经网络大多以数学证明为支撑。(函数正值就输出。)
感知机(Perceptron)由两层神经元组成,输入层接受外界输入信号后传递给输出层,输出层是M-P神经元亦称“阈值逻辑单元”(threshold logic unit)。最上面那层是输出层,下面那层是输入层。
注意到:
可以将阈值θ看作一个固定输入为 -1的"哑结点" (dummy node) 所对应的连接权重wn+1 ,这样,权重和阈值的学习就可统一为权重的学习。
感知机的学习规则(学习wi和阈值θ):对于训练样本(x,y),当该样本进入感知机学习后,会产生一个对应的输出值y’,若真实输出值y与其不一致,则感知机会对权重进行调整,若激活函数为阶跃函数,则调整方法为(梯度下降算法):
感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限,只能处理线性可分的问题。不能解决"非线性可分"如
异或这样简单的非线性可分问题。
对于线性可分的问题,感知机的学习过程总能收敛(converge)而求得适当的权向量w=(w1;w2;…;wn+1);否则感知机学习过程将会发生震荡(fluctuation)难以稳定下来,不能求得合适解(遇到"非线性可分"问题)。
对于线性不可分的问题(如异或问题),则需要用多层功能神经元。
输出层与输入层之间的一层神经元,被称为隐层或隐含层(hidden laye),隐含层和输出层神经元都是拥有激活函数的功能神经元.
更一般的,常见的神经网络是如下图所示的层级结构,每层神经元与下层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks)。前馈是指网络拓扑结构上不存在环或回路。
输出层:输出层神经元为功能神经元,进行函数处理
隐层(hidden layer):隐层神经元为功能神经元,进行函数处理
输入层:输入层神经元仅接收外界输入信息,不进行函数处理
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)和每个功能神经元的阈值。换言之,神经网络"学"到的东西,蕴涵在连接权与阙值中。
BP算法:
xi是输入,bh为隐层第h个神经元的输出。
图5.7的网络中有( d + 1 + l) ∗ q+ l 个参数需要确定:
BP是一个迭代学习算法,在迭代的每一轮采用广义的感知机学习规则对参数进行更新估计,与感知机的类似,对于任意参数v,更新估计式为:
BP基于梯度下降(gradient decent)策略寻找最小化均方误差,以目标的负的梯度方向对参数进行调整。
注意:BP算法的目标是要最小化训练集D上的累积误差E:
上图介绍的“标准BP算法”的更新规则是基于for循环下的单个Ek推导而得。(但最终效果依然是最小化累积误差),若类似地推导出基于累积误差最小化的更新规则(即每次都是基于累计误差而不再是单个误差进行调整),就得到了累积误差逆传播(accumulated error backpropagation)算法。
1.标准BP算法:
相对应的
2.累计BP算法:
但在很多任务中,累计误差下降到一定程度后,进一步下降会非常缓慢,这时标准 BP 往往会更快获得较好的解,尤其是在训练集D非常大时更明显.
注:标准BP算法和累积BP算法的区别类似于随机梯度下降与标准梯度下降之间的区别。
梯度下降和随机梯度下降之间的关键区别:
1、标准梯度下降是在权值更新前对所有样例汇总误差,而随机梯度下降的权值是通过考查某个训练样例来更新的。
2、在标准梯度下降中,权值更新的每一步对多个样例求和,需要更多的计算。
3、标准梯度下降,由于使用真正的梯度,标准梯度下降对于每一次权值更新经常使用比随机梯度下降大的步长。
4、如果标准误差曲面有多个局部极小值,随机梯度下降有时可能避免陷入这些局部极小值中。
多层前馈神经网络有强大的表示能力,只要隐层包含的神经元数量足够多,它就能以任意精度逼近任意复杂度的连续函数。然而,如何设置隐层神经元的个数仍是个未决问题,实际应用中通常靠“试错法”(trail-by-error)调整。
正是由于其强大表示能力,经常遇到这样的情况:训练误差持续降低,但测试误差却在上升,这就是BP神经网络经常遭遇的过拟合问题。
常用的两种缓解策略:
将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若出现过拟合现象,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和。
仍令Ek表示第k个训练样例上的误差,wi表示连接权和阈值,则误差目标函数(5.16)改变为:
若用E表示神经网络在训练集上的误差,则它是关于连接权ω和阈值θ的函数。此时,神经网络的训练过程可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使得E最小。我们在参数寻优过程中希望找到的就是全局最小值。
(就是极小值和最小值的区别。)
显然,参数空间内梯度为零的点,只要其误差函数值小于邻点的误差函数值,就是局部极小值。局部极小值可以有多个,全局最小值只有一个。我们在参数寻优过程中希望找到的就是全局最小值。
基于梯度的搜索是使用最广泛的参数寻优方法。在该类方法中,我们从某些初始解出发,然后根据梯度确定搜索方向。例如,由于负梯度是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。
若误差函数在当前点的梯度为0,则已经达到局部极小,之后不会再做更新,这就意味着参数的迭代更新就到此停止了。很明显这样做的一个问题是,若误差函数有多个局部极小,那么就不能保证当前找到的解是全局最小。
这种情况,我们称参数寻优陷入了局部极小。
人们常采用以下三种策略来试图“跳出”局部极小,从而进一步接近全局最小(不能保证得到的就是全局最小,只是更接近):
上述用于跳出局部极小的技术大多是启发式,理论上尚缺乏保障。
此外,遗传算法也常用来训练神经网络以更好地逼近全局最小。
RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合。假定输入为d维向量x,则输出为实值,则RBF网络可表示为:
通常采用两步过程训练RBF网络:
(1)确定神经元中心ci,常用的方式包括聚类、随机采样等;
(2)利用BP算法确定参数wi和βi。
一般的神经网络模型通常假定 网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、 阙值等参数.与此不同, 结构自适应网络则将网络络结构也当作学习的目 标之 一,并希望能在训练过程中找到最符合数据特点的网络结构。级联相关(Cascade-Correlation [Fahlman and Lcbiere, 1990] 是结构适应网络(亦称"构造性" (constructive) 神经网络)的重要代表。
级联相关网络包括两个主要部分:“级联”和“相关”。级联是指建立层次连接的层级结构,相关是指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。
当新的隐层神经元加入时,其输入端连接权值是冻结固定的。
级联相关网络不需要设置网络层数、隐层神经元数量,并且训练速度快,但在较小数据集中容易陷入过拟合。
与前馈神经网络不同==“递归神经网络” (recurrent neural networks) 允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号==.这样的结构与信息反馈过程,使得网络在 t 时刻的输出状态不仅与 t 时刻的输入有关,还与 t-1 时刻的网络状态有关,从而能处理与时间有关的动态变化.
Elman 网络 [Elman, 1990] 是最常用的递归神经网络之一,其结构如图所示,它的结构与多层前馈网络恨相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下 时刻的输入.隐层神经元通常采用 Sigmoid 激活函数,而网络的训练则常通过推广的 BP 算法进行 。
神经网络中有一类模型是为网络状态定义一个"能量" (energy) ,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数.Boltzmann 就是一种==“基于能量的模型” (energy-based model) ==,常见结构如图5.14(a) 所示,其神经元分为两层:显层与隐层.显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达.
Boltzmann机中的神经元都是布尔型的,若网络中的神经元以任意不依赖输入值的顺序进行更新,则网络最终将达到Boltzmann分布。
理论上来说,参数越多的模型复杂度越高、“容量”(capacity)越大,这意味着它能完成更复杂的学习任务。但一般情况下,复杂模型的训练效率低,易陷入过拟合。
训练效率低可由计算能力的提升缓解。
过拟合风险可由训练数据的大幅增加缓解。
因此,以“深度学习”(deep learning)为代表的复杂模型开始受到人们的关注。(大型深度学习模型中甚至有上百亿个参数。)
典型的深度学习模型就是很深层的神经网络。
对于神经网络模型,提高容量的一个简单方法就是增加隐层的数量。
从增加模型复杂度的角度看,增加隐层的数目显然比增加隐层神经元的数目更有效。因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。
多隐层神经网络难以直接用经典算法(如标准BP算法)进行训练,因为误差在多隐层内逆传播时,往往会“发散”(diverge)而不能收敛到稳定状态。
(这里所说的"多隐层"是指三个以上隐层;深度学习模型通常有八九层甚至更多隐层.)
是多隐层神经网的训练的有效手段。其基本思想是:
“预训练+微调”的做法可视为:将大量参数分组,对每组先找到局部看起来比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优。这样就在利用了模型大量参数所提供的自由度的同时,有效地节省了训练开销。(如深度信念网络(deep belief network,筒称DBN) )
另一种节省训练开销的策略是“权共享”(weight sharing),即让一组神经元使用相同的连接权。这种策略在卷积神经网络((Convolutional Neural Network,简称CNN)中发挥了重要作用。
若将网络中前若干层处理看作是在进行特征表示,只把最后一层处理看作是在进行“分类”,则分类使用的就是一个简单模型。
通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示后,用"简单模型"即可完成复杂的分类等学习任务,由此可将深度学习理解为进行"特征学习"(feature learning) 或"表示学习"(representation learning)。
思维导图:
参考链接:https://blog.csdn.net/qq_38962336/article/details/106397677?spm=1001.2014.3001.5502
参考链接:https://blog.csdn.net/shichensuyu/article/details/90907029