机器学习-常用八大神经网络框架

为什么需要机器学习 机器学习对于那些我们直接编程太多复杂的任务来说是必须的。有些任务很复杂,以至于无法解决任务中的所有细节并精确编程。所以我们通过向机器学习算法提供大量的数据,让算法通过探索数据找到一个可以实现程序员目的的模型来解决问题。
例如下面的两个例子:
1.写一个程序去识别复杂场景下三维物体是很困难的,我们不知道编写什么样的程序,因为我们不了解它在我们大脑中的运作机制,即使知道如何实现,写出来的程序也可能非常复杂。
2.写一个程序计算信用卡诈骗概率是很困难的,因为没有任何既简单又可靠的规则,我们需要结合大量弱规则去判别。
接着出现了机器学习方法,我们不需要为每个特定的任务手动编程,只要收集大量的样本,为给定的输入指定正确的输出。机器学习算法利用这些样本去生成完成指定工作的程序。学习算法产生的程序与典型的手写程序非常不同,如果我们做的正确,这个程序将像处理训练集上的样本一样来处理新样本。如果数据改变,程序也可以通过训练新数据改变。
鉴于此,机器学习较为适用的任务包括:
1.模式识别:真实场景中的问题,面部识别或面部表情
2.异常识别:不寻常的信用卡交易序列
3.预测:未来股票价格或一个人喜欢什么电影
什么是神经网络 神经网络受到生物神经网络的启发,目前深度神经网络已被证实效果很好,神经网络本身是一般的函数逼近,神经网络的架构可分为如下三类:
1.前馈神经网络
这是最常见的神经网络类型,第一层是输入,最后一层是输出,如果有多个隐藏层,我们称之为深度神经网络,它们计算出一系列改变样本相似性的变换,各层神经元的活动是前一层活动的非线性函数。
2.循环网络
循环网络咋连接图中定向循环,这意味着你可以按照箭头回到你开始的地方,它们可以有复杂的动态,更具生物真实性,但很难训练。目前如何高效的训练循环网络正在受到广泛关注,循环神经网络是模拟连续数据的一种非常自然的方式,它相当于每个时间片段有一个隐藏层的深度网络,除此之外,它们在每个时间片段上用相同的权重并且在每个时间片段上输入。它可以长时间记住隐藏状态信息。
3.对称连接网络
对称连接网络有点像循环网络,但是单元之间的连接是对称的(在两个方向权重相同),比起循环网络,对称网络更容易分析,这个网络有很多限制,它们遵循能量函数定律,没有隐藏单元的对称连接网络被称为Hopfield网络,有隐藏单元的对称连接网络被称为玻尔兹曼机。
下面介绍八大常用的神经网络
1.感知机 在统计模式识别的标准范例中,首先将原始输入向量转换为特征激活向量,然后基于大家的共识手动编程来定义特征,接下来学习如何对特征激活加权获得单一标量,如果标量超出了某个阈值则认为输入向量是目标集中的一个正样本。
标准的感知机架构遵循前馈模型,输入被发送到神经元中,经处理后输出,下图表示网络自下而上读取:底部输入 顶部输出
机器学习-常用八大神经网络框架
文章图片

但是感知机确实存在局限性,如果使用手动设置特征并且使用了足够多的特征,那么你几乎可以做任何事情。对于二进制输入向量,我们可以为指数级多的二进制向量分别设置一个特征单元,因此我们可以对二进制输入向量进行任何可能的区分。但是一旦确定了手动编程的特征,感知机可以学习的东西就非常有限。
没有隐藏单元的网络在学习建模的输入输出映射是非常有限的,简单的增加一些线性单元无济于事,因为结果还是线性的,因此我们需要多层自适应非线性隐藏单元,问题是怎么对这样的网络进行训练,我们需要一种适应所有权重的有效方式,而不仅仅是最后一层,这是非常困难的,学习隐藏层的权重等同于学习特征,没有人直接告诉我们隐藏层该怎么做。
2.卷积神经网络 机器学习研究已经广泛的集中在物体检测问题上 ,复制特征方法是目前神经网络解决目标检测问题的主要方法。在不同的位置使用相同的特征提取器,它也可以在尺寸和方向上复制,复制大大减少了要学习的参数数量,它使用集中不同的特征类型,每种都有自己的复制检测器图像,允许以各种方式表示每个图像块。
复制特征检测器的实现:
1.激活值等变化量:复制特征的方法并不能使神经元激活值不变,但是能够使激活值改变量相同
2.知识不变量:如果在训练中一个特征在某些位置有效。则在测试过程中特征检测器在各个位置有效
1988年Yann LeCun和他的合作者开发了LeNet的手写数字识别器,它在前馈网络使用反向传播,这个前馈网络不仅仅是一个识别器,他有许多隐藏层,每个层有许多复制单元的映射,汇集附近复制单元的输出,有一个即使重叠也能够同时处理几个字符的宽网,后来正式命名为卷积神经网络。
机器学习-常用八大神经网络框架
文章图片

3.循环神经网络 为了理解循环神经网络,我们需要对序列建模进行简要概述。当机器学习应用于序列时,我们经常希望将输入序列转换成不同域的输出序列。当没有单独的目标序列时,我们可以通过尝试预测输入序列的下一项作为网络的学习目标,目标输出序列是输入序列的下一步。比起试图根据一个图片的其它像素来预测一个像素或依据图像的其余部分来预测一个部分,这样似乎更自然。预测序列中的下一项模糊了监督学习和无监督学习之间的区别。它使用为监督学习而设计的方法但不需要单独的目标数据。
无记忆模型是这个任务的标准方法,具体而言,自回归模型可以通过使用“延迟抽头”从固定数量的前几项预测下一项,而且前馈神经网络是使用一层或多层非线性隐藏单元的广义自回归模型。但是如果我们给生成模型一些隐藏的状态,使这个隐藏状态内部是动态的,我们就会得到一个更有趣的模型,它可以长时间的将信息存储在隐藏状态。
然而,RNN的计算能力使它们很难训练,由于梯度爆炸和梯度消失,训练一个RNN是相当困难的,当我们进行多层反向传播时,如果权重很小,则梯度将指数缩小,如果权重很大,梯度将指数增长。典型的前馈神经网络可以应付这些指数效应,因为它们仅有很少的隐藏层。
基本上有4种方法来学习RNN:
1.长短期记忆(LSTM):将RNN用于长期记忆值的小模块
2.Hessian Free优化:使用酷炫的优化器来处理梯度消失问题,该优化器可以检测更小曲率的微小梯度。
3.回声状态网络:通过谨慎的初始化各层之间的连接(输入->隐层 隐层->隐层 输出->隐层),确保隐藏状态有巨大的弱耦合震荡,可以通过输入选择性的驱动这些振荡器。
4.利用动量进行良好的初始化:像回声状态网络一样进行初始化,然后使用动量学习所有连接。
4.长短期记忆网络 机器学习-常用八大神经网络框架
文章图片

LSTM使用具有乘法作用的逻辑和线性单元来设计存储器单元,每当“写入”门打开时,信息就会进入单元,当“保持”门打开时,信息将在单元中保持,信息可以通过打开“读取”门而从单元中读取。
5.Hopfield网络 循环网络的非线性单元通常很难分析,它们可以表现为不同的方式:稳定到稳定的状态,振荡或者不可预测的轨迹。一个Hopfield网络由二元门限单元组成,它们之间有连续的连接。1982年John Hopfield认识到如果连接是对称的,就有一个全局能量函数。整个网络的每个二进制结构都有能量,而二进制的阈值决策规则使网络可以得到能量函数最小值。
机器学习-常用八大神经网络框架
文章图片

每当记忆一次配置,我们希望创造一个新的能量最小值,但如果中间位置有两个最小值就会限制Hopfield的网络容量。
6.玻尔兹曼机网络 玻尔兹曼机是一种随机递归神经网络,它可以被看做是Hopfield网络随机生成的对应物。它是第一个能学习内部表示的神经网络之一,能够表示并解决难的组合问题。玻尔兹曼机学习算法的目标是最大化玻尔兹曼机分配给训练集中二进制向量概率的乘积,这等同于最大化玻尔兹曼分配给训练向量的对数概率之和。
玻尔兹曼机高效小批量学习程序:
1.对于正相位,首先将隐藏概率初始化为0.5,将可见单元上的数据向量进行钳位,然后并行更新所有隐藏单元,使用平均场方法并行更新隐藏单元直到收敛。在网络收敛之后,记录每个连接的单元对Pi Pj,并在最小批量中对所有数据取平均。
2.对于负相位,首先保留一组“幻想粒子”(即一对Si Sj形成的系统),每个粒子都有全局配置中的一个值,然后串行更新几次每个幻想粒子中所有单元,对于每一个连接的单元,对所有的幻想粒子的Si Sj取平均。
在普通玻尔兹曼机中,单元的随机更新需要连续,有一个特殊的体系结构允许更有效的交替并行更新(层内没有连接,没有跳层连接),这个小批量程序使玻尔兹曼机的更新更加并行,这就是深度玻尔兹曼机(DBM),一个缺失很多连接的普通玻尔兹曼机。
机器学习-常用八大神经网络框架
文章图片

7.深度信念网络 反向传播被认为是人工神经网络的标准方法,用于批量处理一批数据之后计算每个神经元的误差贡献。但是,使用反向传播存在一些重要问题,首先,它需要有标签的训练数据,而几乎所有的数据都没有标签。其次,学习时间不够理想,这意味着隐藏层数多的网络很慢。第三,它可能会陷入局部最小的局面,所以对深度网络来说,它们还差的很远。为了克服反向传播的限制,研究人员已经考虑使用无监督的学习方法,这有助于保持梯度来调整权重的效率,还可以用它对传感输入的结构进行建模。
8.深度自动编码器 最后我们来讨论深度自动编码器,深度自动编码器是非线性降维的非常好的方法,原因如下:它提供了两种灵活的映射方式,训练事例的学习时间是线性的,最终的编码模型相当紧凑和快速。然而使用反向传播来优化深度自动编码器很难。在初始权重较小的情况下反向传播梯度消失。现在我们有了更好的方法来优化它们,要么使用无监督的逐层训练,要么像回声状态网络那样谨慎的初始化权重。
对于预训练任务,实际有三种不同类型的浅自动编码器:
1.受限玻尔兹曼机作为自动编码器:当我们用一步对比散度训练受限玻尔兹曼机时,它就像一个自动编码器,但是通过使用隐藏层中的二进制活动来强化正则化。经过最大可能性训练后,受限玻尔兹曼机不像自动编码器。我们可以用浅自动编码器堆栈来代替用于预训练的受限玻尔兹曼机,如果浅自动编码器通过惩罚平方权重而被正则化,那么预训练就不是有效的。
2.去噪自动编码器:通过将其许多分量设置为0(例如输入数据丢失的情况),将噪声添加到输入向量。它们仍然需要重建这些分量,因此必须提取捕获输入之间的相关性特征。
3.压缩自动编码器:使自动编码器正规化的另一种方法是尽可能使隐藏单元的活动对输入不敏感,但不能忽视这些输入。我们通过惩罚每个隐藏活动相对于输入平方梯度来达到这个目的。
【机器学习-常用八大神经网络框架】简而言之,现在有很多不同的方法来进行逐层预训练,对于没有大量标签化的事例数据集来说,预训练有助于后续的判别学习。对于非常大的有标签的数据集,使用无监督预训练初始化监督学习中的权重并不必要,对于深度网络也是如此。预训练是初始化深度网络权重的一个不错方法。

    推荐阅读