深度学习概述
o 受限玻尔兹曼机和深度信念网络
o Dropout
o 处理不平衡的技巧
o SMOTE:合成少数过采样技术
o 神经网络中对成本敏感的学习
深度学习概述
在2006年之前,训练深度监督前馈神经网络总是失败的,其主要原因都是导致过度拟合,即训练错误减少,而验证错误增加。
深度网络通常意味着具有多于1个隐藏层的人工神经网络。训练深层隐藏层需要更多的计算能力,具有更深的深度似乎更好,因为直觉神经元可以使用下面图层中的神经元完成的工作,从而导致数据的分布式表示。
Bengio 认为隐藏层中的神经元可被看作是其下面的层中的神经元所学到的特征检测器(feature detector)。这个结果处于作为一个神经元子集的更好泛化(generalization)中,而这个神经元子集可从输入空间中的特定区域的数据上进行学习。
而且,由于相同功能所需的计算单元越少,效率就越高,所以更深的架构可以更高效。分布式背后的核心思想是共享统计优势,将不同架构的组件重用于不同的目的。
深度神经架构是由多个利用非线性操作的层组成的,例如在带有许多隐藏层的神经网络中。数据集中常常存在各种变化的因素,例如数据各自的性质经常可能独立地变化。
深度学习算法可以获取解释数据中的统计变化,以及它们如何相互作用以生成我们观察到的数据类型。较低层次的抽象更直接地与特定的观察联系在一起,另一方面,更高层次的更抽象,因为他们与感知数据的联系更加偏远。
深度架构学习的重点是自动发现从低级特征到更高级别概念的抽象。算法可以在不需要手动定义必要抽象的情况下启用发现这些定义。
数据集中的训练样本的多样性必须至少与测试集中的一样多,否则算法就不能一概而论。深度学习方法旨在学习特征层次结构,将更低层次的特征组合成更高层次的抽象。
具有大量参数的深度神经网络是非常强大的机器学习系统。但是,过度拟合在深度网络中是一个严重的问题。过度拟合是指当验证错误开始增加而训练错误下降时。Dropout是解决这个问题的正则化技术之一,这将在后面讨论。
今天,深度学习技术取得成功的最重要因素之一是计算能力的提高。图形处理单元(GPU)和云计算对于将深度学习应用于许多问题至关重要。
云计算允许计算机集群和按需处理,通过并行训练神经网络来帮助减少计算时间。另一方面,GPU是用于高性能数学计算的专用芯片,加速了矩阵的计算。
在06-07这一年,三篇论文彻底改变了深度学习的学科。他们工作中的关键原则是每层都可以通过无监督学习进行预先训练,一次完成一层。最后,通过误差反向传播的监督训练微调所有层,使得这种通过无监督学习进行的初始化比随机初始化更好。
受限玻尔兹曼机和深度信念网络
其中有一种无监督算法是受限玻尔兹曼机(RBM),可用于预训练深层信念网络。RBM是波尔兹曼机的简化版本,它的设计灵感来自于统计力学,它可以模拟给定数据集的基本分布的基于能量的概率,从中可以得出条件分布。
玻尔兹曼机是随机处理可见单元和隐藏单元的双向连接网络。原始数据对应于'可见'神经元和样本到观察状态,而特征检测器对应'隐藏'神经元。在波尔兹曼机中,可见神经元为网络和其运行环境提供输入。训练过程中,可见神经元被钳制(设置成定义值,由训练数据确定)。另一方面,隐藏的神经元可以自由操作。
然而,玻尔兹曼机因为其连通性而非常难以训练。一个 RBM 限制了连通性从而使得学习变得简单。在组成二分图(bipartite graph)的单层中,隐藏单元没有连接。它的优势是隐藏单位可以独立更新,并且与给定的可见状态平行。
这些网络由确定隐藏/可见状态概率的能量函数控制。隐藏/可见单位的每个可能的连接结构( joint configurations )都有一个由权重和偏差决定的 Hopfield 能量。连接结构的能量由吉布斯采样优化,它可通过最小化 RBM 的最低能量函数学习参数。
在上图中,左层代表可见层,右层代表隐藏层。
在深度信念网络(DBN)中,RBM由输入数据进行训练,输入数据具有隐藏层中随机神经元捕获的输入数据的重要特征。在第二层中,训练特征的激活被视为输入数据。第二个RBM层的学习过程可以看作是学习特征的特征。每次当一个新的层被添加到深度信念网络中时,原始训练数据的对数概率上的可变的更低的界限就会获得提升。
上图显示了RBM将其数据分布转换为隐藏单元的后验分布。
随机初始化RBM的权重,导致p(x)和q(x)的分布差异。学习期间,迭代调整权重以最小化p(x)和q(x)之间的误差。q(x)是原始数据的近似值,p(x)是原始数据。
调整来自神经元和另一神经元的突触权重的规则不依赖于神经元是可见的还是隐藏的。由RBM层更新的参数被用作DBN中的初始化,通过反向传播的监督训练来微调所有层。
对于KDD Cup 1999的IDS数据,使用多模态(Bernoulli-Gaussian)RBM是不错的选择,因为KDD Cup 1999由混合数据类型组成,特别是连续和分类。在多模RBM中是使用两个不同的通道输入层,一个是用于连续特征的高斯输入单元,另一个是使用二进制特征的伯努利输入单元层。今天我们就不进行详细讲解。
Dropout
最近的发展是想深度网络引入强大的正规化矩阵来减少过度拟合。在机器学习中,正则化是附加信息,通常是一种惩罚机制被引入,以惩罚导致过度拟合的模型的复杂性。
Dropout是由Hinton引入的深度神经网络的正则化技术,其包括通过在每一个训练迭代上随机关掉一部分神经元,而是在测试时间使用整个网络(权重按比例缩小),从而防止特征检测器的共适应。
Dropout 通过等同于训练一个共享权重的指数模型减少过拟合。对于给定的训练迭代,存在不同 dropout 配置的不同指数,所以几乎可以肯定每次训练出的模型都不一样。在测试阶段,使用了所有模型的平均值,作为强大的总体方法。
在上图中,dropout随机舍弃神经网络层之间的连接
在上图中,连接被丢弃的概率,同时在训练时间中权重按比例缩小到pw
在机器学习竞赛中,平均很多模型通常是许多机器学习竞赛获胜者的关键,使用许多不同类型的模型,然后在测试时间将其结合起来进行预测。
随机森林是一个非常强大的bagging算法,它是通过对许多决策树进行平均而创建的,给它们提供了不同的训练样本集和替换。众所周知,决策树很容易适应数据并且在测试时间快速,因此通过给予不同的训练集合来平均不同的单独树木是可以承受的。
然而,对深度神经网络使用相同的方法,在计算上是非常昂贵。训练单独的深度神经网络和训练多个深度神经网络计算成本已经很高了,然后平均似乎是不切实际的。此外,我们需要的是在测试有效的单个网络,而不是有大量的大型神经网络。
Dropout是平均许多大型神经网络的有效方法。每次训练模型时,隐藏单元都可以省略。因此,在测试时我们应该使用权重减半的“平均网络”模型。平均网络等同于将所有可能网络预测的标签上概率分布的几何平均值与单个隐藏的单位层和softmax输出层。
另一种看待Dropout的方法是,它能够防止特征检测器之间的共适应(co-adaption)。特征检测器的共适应意味着如果隐藏单元知道存在哪些其他隐藏单元,则可以在训练数据上与它们进行协调。但是,在测试数据集上,复合协调很可能无法一概而论。
Dropout也可以以一种较低的概率在输入层中使用,通常为20%的概率。这里的概念和降噪自动编码器发展出的概念相同。在此方法中,一些输入会被遗漏。这会对准确性造成伤害,但也能改善泛化能力,其方式类似于在训练时将噪声添加到数据集中。
在2013年出现了Dropout的一种变体,称为Drop connect。它不再是以特定的概率权重舍弃隐藏单位,而是以一定的概率随机舍弃。实验结果已经表明,在MNIST数据集上Drop connect网络比的dropout网络表现的更好。
处理类别失衡的技巧
当一个类别(少数类)相比于其他类别(多数类)明显代表性不足的时候就会产生类别失衡问题。这个难题有着现实意义,会对误分类少数类造成极高的代价,比如检测欺诈或入侵这样的异常活动。这里有多种技术可以处理类别失衡难题,如下面解释的这一种:
SMOTE:合成少数过采样技术
解决类失衡问题的一种广泛使用的方法是对数据集进行重采样。抽样方法涉及通过调整少数群体和多数群体的先验分布来预处理和平衡训练数据集。SMOTE是一种过抽样的方法,其中通过创建“合成”示例而不是通过对替换进过行采样来对少数类别进行过采样。
已经有人提出说通过替换进行的少数类过采样不能显著改进结果,不如说它趋于过拟合少数类的分类。相反,SMOTE算法在“特征空间”而不是“数据空间”中运行。它通过对少数类别进行过度抽样来创建合成样本,从而更好地推广。
这个想法的灵感来自于通过对真实数据进行操作来创建额外的训练数据,以便有更多数据有助于推广预测。
在此算法中第一个最近邻(neighbours)是为了少数类计算的。然后,就可以以下列方式计算少数类的合成特征:选择最邻近的一个随机数字,然后使用这一数字与原始少数类数据点的距离。
该距离乘以0和1之间的随机数,并将结果作为附加样本添加到原始少数类数据的特征向量,从而创建合成的少数类样本。
神经网络中成本敏感的学习
成本敏感性学习似乎是解决分类问题的类不均衡问题的一种非常有效的方法。接下来我们描述特定于神经网络的三种成本敏感的方法。
在测试未见过的示例时,将该类的先验概率合并到神经网络的输出层中:
根据成本调整学习率。应将更高的学习率分配给具有高误分类成本的样本,从而对这些例子的权重变化产生更大的影响:
修改均方误差函数。结果是,反向传播进行的学习将最小化误分类成本。新的误差函数是:
其成本因子是K[i,j]。
这个新的误差函数产生一个新的增量规则,用于更新网络的权重:
其中第一个方程表示输出神经元的误差函数,第二个方程表示隐层神经元的误差函数。
本文作者:方向
本文为云栖社区原创内容,未经允许不得转载。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。