深度信念网络
深度信念网络是一种概率生成模型,能够建立输入数据和输出类别的联合概率分布。网络中包含多个隐藏层,隐藏层中的隐藏变量通常是二进制数,用来对输入信号进行特征提取。输入信号从深度信念网络的最底层输入,并自下而上有向地传递给隐藏层。而在网络最上面的两层中,神经元之间的连接是没有方向并且对称的,这两个层次共同构成了联想记忆。
从结构上看,复杂的深度信念网络可以看成由若干简单的学习单元构成的整体,而构成它的基本单元就是受限玻尔兹曼机(restricted boltzmann machine)。受限玻尔兹曼机的模型非常简单,就是一个两层的神经网络,包括一个可见层和一个隐藏层。可见层用来接收数据,隐藏层则用来处理数据。可见层和隐藏层以全连接的方式相连,也就是任意两个不同层次中的神经元都会两两相连。
在隐藏神经元得到输出后,受限玻尔兹曼机需要将输出结果反馈给可见层。具体的做法是保持所有连接的权重系数不变,但是将方向反转,这样一来,每个隐藏单元的输出就会按照已经确定的系数反馈给可见层,可见层的每个神经元接收到的反馈信息是不同隐藏单元输出的线性组合。
以上的学习算法就是由辛顿提出的对比散度(contrastive divergence)方法,它既能让隐藏层准确地提取可见层的特征,也能根据隐藏层的特征较好地还原出可见层。当隐藏层和可见层的神经元都使用 S 型函数作为传递函数时,神经元的输出就可以视为单个节点的激活概率。对比散度方法具体的训练过程包括以下几个步骤:
- 输入训练样本列向量 v,计算隐层节点的概率,在此基础上从这一概率分布中抽取一个隐层节点激活向量的样本列向量 h;
- 计算 v 和 h 的外积 vhT,结果记为“正梯度”;
- 利用 h 重构可见层节点的激活向量样本 v′,输入 v′ 再次获得一个隐层节点的激活向量样本 h′ ;
- 计算 v′ 和 h′ 的外积 v′h′T,结果记为“负梯度”;
- 使用正梯度和负梯度的差值,以学习率 ϵ 更新权重系数,即 W=W+ϵ(vhT−v′h′T);
- 以学习率 ϵ 更新可见层的偏置系数 a 和隐藏层的偏置系数 b,即 a=a+ϵ(v−v′),b=b+ϵ(h−h′)}。
对比散度的训练过程本质上是求出一个最符合训练数据集统计特性的概率分布,也就是使训练数据集出现的概率最大的分布参数。在数据的前向传输中,受限玻尔兹曼机的目标是在给定权重系数 w 的条件下利用输入 x 预测输出 a,也就是求解条件概率 p(a∣x;w);而在使用输出 a 重构输入 x 的反向传输中,受限玻尔兹曼机的目标变成了求解条件概率 p(x∣a;w)。将两个条件概率结合,就可以得到输入输出的联合概率分布 p(x,a)。
将几个受限玻尔兹曼机堆叠在一起,就可以得到深度信念网络(deep belief network)。深度信念网络的无监督预训练也是逐层实现的。
传统的反向传播方法应用于深度结构在原则上是可行的,可实际操作中却无法解决梯度弥散(gradient vanishing)的问题。相比之下,基于预训练的训练方法就不会受梯度弥散的困扰。
虽然目前深度信念网络的应用远不如卷积神经网络等其他模型广泛,但它却是一次吃螃蟹的成功尝试。
卷积神经网络
人脸识别乃至图像识别中的一项关键技术,就是卷积神经网络。卷积神经网络(convolutional neural network)指的是至少在某一层中用卷积运算(convolution)来代替矩阵乘法的神经网络。 卷积是对两个函数进行的一种数学运算,在不同的学科中有不同的解释方式。在卷积网络中,两个参与运算的函数分别叫做输入和核函数(kernel function)。本质上讲,卷积就是以核函数作为权重系数,对输入进行加权求和的过程。
卷积神经网络的稀疏感知性、参数共享性和平移不变性都有助于将它应用在图像处理之中。稀疏感知性(sparse interaction)指的是卷积层核函数的大小通常远远小于图像的大小。参数共享性(parameter sharing)指的则是在一个模型中使用相同的参数,说白了就是在每一轮训练中用单个的核函数去和图像的所有分块来做卷积,这无疑能够显著降低核函数参数的数目。平移不变性(translational equivalence)指的是当卷积的输入产生平移时,其输出等于原始输出做出相同数量的平移,这说明平移操作和核函数的作用是可以交换的。
卷积神经网络的结构并非卷积运算的简单组合,而是包含几个功能不同的层次。当输入图像被送入卷积神经网络后,先后要循环通过卷积层、激活层和池化层,最后从全连接层输出分类结果。每个层次各司其职,各负其责,都发挥着不可替代的作用。卷积层无疑是卷积神经网络的核心部分,其参数是一个或者多个随机初始化的核函数。核函数就像探照灯一样,逐行逐列地扫描输入图像,对像素矩阵进行从左到右,从上到下的滑动覆盖。每一个被核函数的光圈覆盖的区域都是和核函数维度相同的像素组合,并且作为输入和核函数进行卷积。当核函数将输入图像全部扫描完毕后,计算出的所有卷积结果又可以构成一个矩阵,这个新矩阵就是特征映射(feature map)。
虽然卷积的表达式具有二维的形式,可如果把二维的输入和核函数拉成一维向量的话,卷积计算的实际上就是两者的内积!内积的作用是描述两个向量的关系,因而卷积的结果反映的正是输入像素和核函数之间的近似程度。通过合理设置核函数的性质,卷积层就能够提取出图像的特征。
卷积神经网络的卷积层之间通常周期性地会插入池化层(pooling layer)。池化层更恰当的名字是下采样层(downsampling layer),它的作用是对得到的特征映射矩阵进行筛选。
常见的最大池化(max pooling)的做法就是将特征映射划分为若干个矩形区域,挑选每个区域中的最大值,也就是最明显的特征作为下采样的结果。这样做在显著降低数据量的同时也能减少过拟合的风险。
池化机制的应用也可以看成是参数共享的体现:在一个图像区域有用的特征极有可能在另一个区域同样适用。因而对不同位置的特征进行聚合统计就是提取图像主要特征的有效方法。卷积层和池化层的循环使用能够实现对图像特征的逐层提取,而根据提取出的特征得到图像的分类与标记则要交给全连接层完成。由于全连接层中的神经元与前一层中的所有激活神经元都有连接,因此它们的激活与否可以通过矩阵乘法计算,这和常规的神经网络别无二致。全连接层可以使用 softmax 分类器得到原始图像属于不同类别的概率,对应的损失函数通常选择交叉熵。
卷积神经网络工作流程:输入层将待处理的图像转化为一个或者多个像素矩阵,卷积层利用一个或多个卷积核从像素矩阵中提取特征,得到的特征映射经过非线性函数处理后被送入池化层,由池化层执行降维操作。卷积层和池化层的交替使用可以使卷积神经网络提取出不同层次上的图像特征。最后得到的特征作为全连接层的输入,由全连接层的分类器输出分类结果。
循环神经网络
循环神经网络的独特之处在于引入了“时间”的维度,因而适用于处理时间序列类型的数据。对于一个以时间为自变量的变长数据来说,很难说清楚数据的终点在哪里,抑或这个终点根本就不存在。这种情况之下,如果对每一个时间点上的数据都计算一次神经网络的权重系数,无疑会带来极大的计算负荷。循环神经网络就是将长度不定的输入分割为等长度的小块,再使用相同的权重系数进行处理,从而实现对变长输入的计算与处理。
循环神经网络对时域的关联性的利用体现在时刻 t 的输出既取决于当前时刻的输入,也取决于网络在前一时刻 t−1 甚至于更早的输出。从这个意义上讲,循环神经网络引入了反馈机制,因而具有记忆的功能。正是记忆功能使循环神经网络能够提取来自序列自身的信息,这是传统的前馈神经网络所无法做到的。
具体来说,输入序列的内部信息存储在循环神经网络的隐藏层中,并随着时间的推移在隐藏层中流转。循环神经网络的记忆特性可以用以下公式表示
对循环神经网络的训练就是根据输出结果和真实结果之间的误差不断调整参数 W 和 U,直到达到预设要求的过程,其目的是实现对输入序列的精确划分。其训练方法也是基于梯度的反向传播算法,但和其他前馈网络不同的是,这里的反向传播是通过时间进行的。
在普通的循环神经网络中,记忆只会涉及到过去的状态。如果想让循环神经网络利用来自未来的信息,就要让当前的状态和以后时刻的状态同样建立起联系,得到的就是双向循环神经网络(bidirectional recurrent neural network)。 双向循环网络包括正向计算和反向计算两个环节,在正向计算中,时刻 t 的隐藏层状态 ht 与过去的 ht−1 相关;而在反向计算中,时刻 t 的隐藏层状态 ht 与未来的 ht+1 相关。循环神经网络的特点是在时间维度上共享参数,从而展开处理序列。如果换一种展开方式,将序列数据展开成树状结构,用到的就是递归神经网络。 在自然语言处理中,递归神经网络可以解决时间序列无法解决的问题。将数据用树状结构表示后,递归神经网络的作用是将它们进一步表示成向量,映射到表示语义的向量空间之中。在语义空间上既可以度量单个向量的尺度,比如判定句子的感情色彩到底是褒义还是贬义;也可以度量不同向量之间的关系,比如确定两个句子意义上的相似程度。
极客时间《人工智能基础课》学习笔记 Day 11