多层感知器——非参数估计器

介绍
第一部分 参数方法——类密度模型参数估计
第二部分 监督学习——分类(基于似然的方法)
第三部分 监督学习——分类(基于判别式的方法)(参数方法——判别式参数估计)
第四部分 监督学习——回归
第五部分 监督学习——关联规则
第六部分 维度规约(特征的提取和组合)
第七部分 半参数方法
第八部分 非监督学习——聚类
第九部分 非参数方法——密度估计
第十部分 非参数方法——决策树实现的判别式
第十一部分 多层感知器——非参数估计器
第十二部分 局部模型
第十三部分 支持向量机与核机器
第十四部分 隐马尔科夫模型
第十五部分 参数的贝叶斯估计
第十六部分 集成学习——组合多学习器
第十七部分 增强学习
第十八部分 机器学习实验
第十九部分 特征工程与数据预处理

多层感知器是一种人工神经网络结构,是非参数估计器,可以用于分类和回归。虽然感知器网络中有很多权重需要计算,但并没有对类密度或判别式进行模型假设。偏倚来自于所使用的网络结构和中间层中的非线性偏倚函数,而不来自于对问题的假设。所以不算做参数方法。

感知器是基本处理元件。具有输入,输入可能来自原始的环境输入,或是其他感知器的输出。于每个输入相关联的时一个链接权重。
最简单的情况下,输出y是输入的加权和(也就是输入到输出只有一 ·层):。
其中是截距,它使模型更通用。也可以将输出写成点积,其中,。
在检验时,对输入x,使用给定的权重计算输出y。这既需要对参数权重进行学习,使给定的输入可以得到正确输出。

加权和 y 在单输入和多输入下,分别实现了一元和多元线性拟合
同时y 定义了一个超平面,也可实现线性判别式。(假定类是线性可分时)。如果需要后验概率,根据逻辑斯蒂判别式的方法,在加权和 y 上使用Sigmoid函数可以得到相应的软最大函数


训练感知器

感知器定义了一个超平面,而神经网络感知器只不过是实现超平面的一种方法。给定训练样本,可以离线地计算权重。如果没有提供全部样本而是逐个提供实例,则需要使用在线学习,在每个实例到达后更新网络参数,让网络缓慢的调整,而不是一次性计算得到权重。
在线学习的方法有很多好处:不需要存放训练样本;可以随时更新网络,适应问题可能的变化。

对于在线学习不再需要全部样本上的误差函数,而是单个实例上的误差函数(在离线学习中, 每次迭代都减小全体样本误差,在线学习只减小当前样本实例的误差)。从随机初始权重开始,在每次迭代,对参数稍加调整,并不忘记之前所学习到的。
同时在线学习还保持了系统的灵活性,当输入空间发生变化时,能随着不断输入新的实例,调整系统来学习输入空间的变化

如果误差函数可微,则可以使用梯度下降,实现在线学习的参数更新。

如对于回归,在单个实例上的误差为

对,在线更新为

这称为随机梯度下降。


多层感知器

单层权重的感知器只能近似输入的线性函数,对于判别式是非线性的问题,则需要使用在输入和输出层之间存在中间层(隐藏层)的多层感知器来解决。
中间层将非线性函数作用于它的加权和,如使用Sigmoid函数:

通常多层感知器的输出层仍然取中间层的输出的加权和,不使用非线性函数:。这里是输出层的权重。

如果中间层的输出是线性的,则中间层就没有用。这是因为线性组合的线性组合还是线性组合。在实践中,除了Sigmoid函数,还常使用双曲正切函数tanh,它的值域是-1 ~ +1,而不是0 ~ +1。在实践中,Sigmoid函数和tanh函数并无区别。还有一种径向基函数——高斯函数(《局部模型》一节介绍),它使用欧氏距离而不是点积表达相似性

通常不会只限于一个中间层,多个隐藏层可以实现输入的更复杂的函数。但分析多个隐藏层的网络相当复杂,需消耗很大的计算能力,这也是为什么在硬件计算能力得到较大提高后,深度学习才逐渐受到大量关注。


多层感知器训练——向后传播算法

训练多层感知器和训练一个感知器一样。唯一的区别是多层感知器中间层的非线性偏倚函数,使得输出是输入的非线性函数。
考虑两层感知器,中间层的输出看做输出层的输入,两层间参数。输入层到中间层的权重为。由链式法则计算梯度:。这里,。
误差就像从输出y传回到输入一样,所以称作向后传播。

非线性回归

考虑只有一维输出的非线性回归:
两层感知器的中间层输出用sigmoid计算。在整个样本上的误差(离线的批量学习)为。
从中间层到输出的感知器,有最小二乘规则最小化E,更新中间层都输出层的权重:

输出层到中间层的权重,不能直接用最小二乘规则,因为对于中间节点,没有指定的期望输出。通过链式法则计算,有
\begin{align} \triangle \omega_{hj}=&-\eta\frac{\partial E}{\partial\omega_{hj}}\\ =&-\eta\sum_t\frac{\partial E}{\partial y^t}\frac{\partial y^t}{\partial z_h^t}\frac{\partial z_h^t}{\partial \omega_{hj}}\\ =&-\eta\sum_t -(r^t-y^t) v_h z_h^t(1-z_h^t)x_j^t\\ =&\eta\sum_t(r^t-y^t)v_h z_h^t(1-z_h^t)x_j^t \end{align}

注意权重和用小随机值初始化,避免Sigmoid函数饱和导致无法有效更新参数。

同样可以采用在线学习的方法。

在有多维输出的嘶吼,同时学习多个回归问题,有。而误差是。
更新规则为


是从所有输出单元累计的到中间单元 h 的向后传播误差。这种情况,是输出单元共享所有中间单元(全连接)的情况。
也可以对每个输出维度(每个回归问题)训练一个多层感知器,不再共享中间层。


分类判别式

1. 两类判别式
当有两个类时,只需要一个输出单元:
它近似,。
误差函数(同逻辑斯蒂判别一样)为。
实现梯度下降的更新方程是

可见回归和分类的更新方程是相同的。
2. 多类判别式
在K>2类分类问题中,有K个输出
使用软最大指示类之间的互斥性和穷举性:
其中近似。误差函数是
更新方程是


多隐藏层

对多隐藏层,每层都有自己的权重,并使用非线性基函数作用于它们的加权和作为输出。


训练过程的优化

对多层感知器的训练过程,有很多可以注意的地方,相应的做出适当的改进,可以提高训练效率或改善网络的泛化能力。

  1. 动量
    令为多层感知器任意层中的任意权重,包括偏倚权重。在第 t 次参数更新的时候,保留上一次的更新量,取移动平均,好像上次的更新存在动量:
    通常,在0.5~1.0之间,当使用在线学习时,这种方法很有用,能帮助得到平均和光滑的收敛轨迹。缺点是需要将过去的保存下来,占用存储。
  2. 自适应学习率
    在梯度下降中,学习因子决定了每次迭代参数的变化量。通常在0~1之间取值,大部分情况下小于等于0.2。为了更快收敛,可以让它自适应。当学习较快(误差减小)时,保持较高的学习率;相反,学习减慢(什么误差反而增大)时,减小学习率。
  3. 过度训练
    在多层感知器中,也存在偏倚方差的矛盾。当中间隐藏单元很大时(就像采用高阶复杂度模型,能更好拟合训练的基础数据),泛化精度恶化。
    当训练周期过长,训练集上的误差降低。但当超过某一个点时,验证集上的误差开始增加。
  4. 局部最小
    由于非线性,误差函数可能具有多个极小值,而梯度下降收敛于最近的极小值。为了能评估期望的误差,通常以不同的初始权重开始,对相同的网络训练多次,并计算验证误差的平均值。


网络结构、规模

网络构造

除了调整更新权重的方式,网络结构的不同,对解决问题同样有很大的影响。

对于具有局部结构的问题(如图像中相邻的像素构成几何元素具有相关性;音频中临近的时间上的数据构成基本语音单元具有相关新),设计MLP时,并不会将隐藏单元连接到所有的输入单元,因为并非所有的输入都是相关的
典型的例子就是CNN网络的滑动模块,在前一层的各个局部位置做卷积(每个隐藏层内共享权重,减少参数数目)。
如果可能,类似局部结构知识这样的与应用相关的任何类型的知识都应该构建在网络中。就像具有局部结构,那么构建网络只连接局部相邻输入节点,而不采用全连接的结构。

网络规模

而对于网络规模,当网络太大时,有太多自由参数,泛化能力往往不好,并且计算复杂度也会较高。当然并不是说简单的网络总是比复杂的网络好,知识对于具有相同训练误差的网络,较简单的一个更可能有好的泛化能力。

为了寻找最佳的网络规模,最常用的方法是尝试不同的结构,在训练集上训练它们,并选择在验证集上泛化最好的结构。
另一种方式是将结构自适应的能力结合到算法中。结构的自适应有两个方向,一个是从大网络中删减不必要的单元和连接,另一个就是由小网络逐步添加改善性能的单元和连接。

如一种删减的方法采用权重衰减的策略,给每一个连接一个衰减到0的趋势,这样只有那些为了降低误差很明显地增大的权重会留下。更新规则为。
等价于在具有一个附加项的误差函数

上做梯度下降。
反映了训练集上的误差 和由于非零参数导致的复杂性 的相对重要性,决定衰减的速度。


贝叶斯观点的参数学习

.
贝叶斯方法在训练神经网络时将权重看做取自先验分布的随机变量,并计算基于给定数据的后验概率。
用离线学习的方式,取最大后验作为权重的估计,直接得到权重(不像梯度下降的迭代计算)

如果权重是独立的,并且先验概率,
那么MAP估计最小化增广误差函数。其中E是通常的分类和回归误差。这与权重衰减(a)中正则化的误差函数一致。


隐藏层与维度规约

在多层感知器中,如果隐藏层单元数小于输入层,那么这一层隐藏层看起来相当于实现了维度规约。这种规约形式和隐藏单元生成的新空间依赖于MLP的训练目的。如对于分类,隐藏层在输入层和输出层中间,那么隐藏层定义了新修改控件并学习映射来降低分类误差。
但由于多层感知器的权重更新采用梯度下降的迭代方式,而非解析的,很难直接对黑箱权重进行解释。
而当隐藏层是非线性时,则实现非线性的维度规约。


深度学习网络

对于线性模型不充分时,一种解决的方法是用输入的非线性函数定义新的特征,然后在这些新特征的空间上建立线性模型。(如采用原输入的高阶项,建立高阶项的线性函数;或采用和式的基函数作用于输入上)。对输入进行组合。
另一种可能的方法是,使用《维度规约》一节中介绍的特征提取方法(如PCA、Isomap)来学习新空间。对输入进行分解,提取主要特征。

然而最好的方法可能是使用MLP。它在隐藏层实现维度规约,提取特征。而在之后对得到的特征作为输入进行组合。结合了上面两种思想。并且由于神经网络的偏倚来自于网络结构,不需要人工选择基函数,或特征提取的方法。尽可能减少了偏倚的来源。

当然具有一个隐藏层的MLP的能力有限,而使用具有多个隐藏层的MLP可以学习输入的更复杂的函数,这是深度神经网络的基本思想。从初始的输入开始,每一层都组合前一层的值,学习输入的更复杂的函数。
深度学习的另一个特点是,连续的隐藏层对应于更抽象的表示,直到输出层。而输出层使用这些最抽象的概念来学习输出。
深度学习的这种多层抽象思想是直观的。人对图像、对音频的理解,往往也是建立在对基本元素的抽象和组合的基础上。正如前面所提过的,也因为这种非解析的抽象,使得对网络结果及权重的解释变得很困难。


时间序列数据的学习

不同于前面的数据没有序列属性,某些应用中的数据,输入是时间的函数,需要学习时间序列。典型的例子就是语音数据。
用于学习自然语言的深度学习网络,常见的基本结构如时延网络和循环网络(LSTM/RNN等),都是处理这样问题的网络结构。

  1. 时间延迟网络
    识别时间最直接的方法就是把数据看做时间序列。在时间延迟网络中,前面的输入被延迟,与后面的输入同步提交网络。相当于在时间序列上使用指定大小的时间窗口,滑过序列数据,不断输入给网络。

  2. 递归网络
    在递归网络中,除了前馈连接外,单元具有自连接或像前面层的反馈连接。递归连接节点保存了之前一次学习的影响,和下一次输入一同参与学习,捕获了数据在时间上的先后顺序。
    大部分情况下,使用部分递归网络。有限多个递归连接加入到多层感知器中。这样结合了多层感知器的非线性拟合能力,以及递归反馈的时间表达能力

你可能感兴趣的:(多层感知器——非参数估计器)