第9章-常用深度学习模型(CNN、RNN)_第1页
第9章-常用深度学习模型(CNN、RNN)_第2页
第9章-常用深度学习模型(CNN、RNN)_第3页
第9章-常用深度学习模型(CNN、RNN)_第4页
第9章-常用深度学习模型(CNN、RNN)_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DEEPLEARNING深度学习第九章深度学习主流模型9.1

9.2卷积神经网络9.3循环神经网络习题绪论9.1神经网络技术的历史与发展第九章深度学习模型早期的神经网络是一个浅层的学习模型(包含一个输入层、一个隐层及一个输出层),它有大量的参数,在训练集上有较好的表现,但实际应用时其识别率并没有比其他模型(如支持向量机、Boosting等)体现出明显的优势神经网络在训练时采用误差反向传播算法(BackPropagation,简称BP算法),使用梯度下降方法在训练过程中修正权重减少网络误差。在层次深的情况下性能变得很不理想,传播时容易出现所谓的梯度弥散GradientDiffusion或称之为梯度消失(VanishingGradientProblem),根源在于非凸目标代价函数导致求解陷入局部最优,且这种情况随着网络层数的增加而更加严重,即随着梯度的逐层不断消散导致其对网络权重调整的作用越来越小。所以只能转而处理浅层结构(通常小于等于3),从而限制了神经网络的大范围应用。9.1概述--浅层神经网络9.1神经网络技术的历史与发展2006年Hinton提出深度学习后才被打破,深度神经网络的复兴存在多方面的原因其一,大规模的训练样本可以缓解过拟合问题;其二,网络模型的训练方法也有了显著的进步;其三,计算机硬件的飞速发展(如英伟达显卡的出现)使得训练效率能够以几倍、十几倍的幅度提升。此外,深度神经网络具有强大的特征学习能力,

过去几十年中,手工设计特征一直占据着主导地位,特征的好坏直接影响到系统的性能。of4749.1概述--深度学习模型第九章深度学习模型9.1神经网络技术的历史与发展面对一个新的任务,如果采用手工设计的方式,往往需要很长时间,而深度学习能很快提取到具有代表性的特征。另一方面,随着分类任务复杂性的增加,需要用到越来越多的参数及样本,虽然浅层神经网络也能模拟出与深度学习相同的分类函数,但其所需的参数要多出几个数量级,以至于很难实现。of4759.1概述--深度学习模型第九章深度学习模型9.1神经网络技术的历史与发展第九章深度学习模型学术界已经提出了多种深度学习模型,其中影响力较大的有以下几种(1)卷积神经网络:该网络一般包含三种类型的层,分别是卷积层、池化层层及全连接层。通过卷积核与上一层输出进行卷积作为卷积层的输出,这样可以达到权值共享的目的;池化层是在卷积层的基础上,执行池化操作,使得整个网络具有一定的缩放、平移及形变不变性。(2)循环神经网络:该网络与传统前馈网络的区别在于,隐层的输入不仅包括输入层的数据,还包括前一时刻的隐层数据。这种结构的网络能有效处理序列数据,如自然语言处理。(3)深度置信网络:该网络由若干层受限玻尔兹曼机及一个反向传播网络组成。of4769.1概述--深度学习模型第九章深度学习主流模型9.1

9.2卷积神经网络9.3循环神经网络习题绪论of4779.2卷积神经网络第九章深度学习模型卷积神经网络(Convolutionalneuralnetworks,CNN)已在图像理解领域得到了广泛的应用,特别是随着大规模图像数据的产生以及计算机硬件(特别是GPU)的飞速发展,卷积神经网络以及其改进方法在图像理解中取得了突破性的成果,引发了研究的热潮。

基于深度学习的方法几乎都以CNN为基础。of4789.2卷积神经网络9.2卷积神经网络第九章深度学习模型CNN和之前介绍的神经网络一样,可以像乐高积木一样通过组装层来构建。CNN中新出现了卷积层(Convolution层)和池化层(Pooling层)。神经网络中,相邻层的所有神经元之间都有连接,这称为全连接(fully-connected),用Affine层可以实现全连接层。5层的全连接的神经网络:Affine层后面激活函数ReLU层(或者Sigmoid层)。4层“Affine-ReLU”组合,第5层是Affine层,最后由Softmax层输出最终结果(概率)。of4799.2.1

CNN整体结构9.2卷积神经网络第九章深度学习模型of47109.2.1

CNN整体结构基于CNN的网络,新增了Convolution层和Pooling层CNN的层的连接顺序是“Convolution-ReLU-Pooling”(Pooling层有时会被省略)。之前的“Affine-ReLU”连接被替换成了“Convolution-ReLU-(Pooling)”连接。靠近输出的层中使用了之前的“Affine-ReLU”组合。最后的输出层中使用了之前的“Affine-Softmax”组合。这些9.2卷积神经网络第九章深度学习模型of47119.2.2卷积层全连接层存在的问题全连接的神经网络中使用了全连接层(Affine层)。在全连接层中,相邻层的神经元全部连接在一起,输出的数量可以任意决定。全连接存在的问题:数据的形状被“忽视”了。输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据。

MNIST数据集的例子中,输入图像就是1通道、高28像素、长28像素的(1,28,28)形状,但却被排成1列,以784个数据的形式输入到最开始的Affine层。9.2卷积神经网络第九章深度学习模型of47129.2.2卷积层全连接层存在的问题如果图像是3维形状,这个形状中应该含有重要的空间信息。比如,空间上邻近的像素为相似的值、RBG的各个通道之间分别有密切的关联性、相距较远的像素之间没有什么关联等,3维形状中可能隐藏有值得提取的本质模式。但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。9.2卷积神经网络第九章深度学习模型of47139.2.2卷积层全连接层存在的问题卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以正确理解图像等具有形状的数据。CNN中,将卷积层的输入输出数据称为特征图(featuremap)。卷积层的输入数据称为输入特征图(inputfeaturemap),输出数据称为输出特征图(outputfeaturemap)。“输入输出数据”和“特征图”可以认为是同义词。9.2卷积神经网络第九章深度学习模型of47149.2.2卷积层卷积运算卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”。卷积运算对输入数据应用滤波器。输入数据是有高长方向的形状的数据,滤波器也一样,有高长方向上的维度。用(height,width)表示数据和滤波器的形状,输入大小是(4,4),滤波器大小是(3,3),输出大小是(2,2)。用符号表示卷积运算9.2卷积神经网络第九章深度学习模型of47159.2.2卷积层卷积运算对于输入数据,卷积运算以一定间隔滑动滤波器的窗口并应用。将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和(乘积累加运算)。然后,将这个结果保存到输出的对应位置。将这个过程在所有位置都进行一遍,就可以得到卷积运算的输出。在全连接的神经网络中,除了权重参数,还存在偏置。CNN中,滤波器的参数就对应之前的权重。并且,CNN中也存在偏置。9.2卷积神经网络第九章深度学习模型of47169.2.2卷积层卷积运算卷积运算的计算顺序9.2卷积神经网络第九章深度学习模型of47179.2.2卷积层卷积运算卷积运算的计算顺序9.2卷积神经网络第九章深度学习模型of47189.2.2卷积层卷积运算向应用了滤波器的数据加上了偏置。偏置通常只有1个(1×1)(本例中,相对于应用了滤波器的4个数据,偏置只有1个),这个值会被加到应用了滤波器的所有元素上。9.2卷积神经网络第九章深度学习模型of47199.2.2卷积层填充在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如0等),这称为填充(padding),是卷积运算中经常会用到的处理。大小为(4,4)的输入数据应用了幅度为1的填充。“幅度为1的填充”是指用幅度为1像素的0填充周围。卷积运算的填充处理:向输入数据的周围填入0(图中用虚线表示填充,并省略了填充的内容“0”)9.2卷积神经网络第九章深度学习模型of47209.2.2卷积层填充通过填充,大小为(4,4)的输入数据变成了(6,6)的形状。然后,应用大小为(3,3)的滤波器,生成了大小为(4,4)的输出数据。这个例子中将填充设成了1,不过填充的值也可以设置成2、3等任意的整数。如果将填充设为2,则输入数据的大小变为(8,8);如果将填充设为3,则大小变为(10,10)。9.2卷积神经网络第九章深度学习模型of47219.2.2卷积层填充使用填充主要是为了调整输出的大小。比如,对大小为(4,4)的输入数据应用(3,3)的滤波器时,输出大小变为(2,2),相当于输出大小比输入大小缩小了2个元素。这在反复进行多次卷积运算的深度网络中会成为问题。为什么呢?因为如果每次进行卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变为1,导致无法再应用卷积运算。为了避免出现这样的情况,就要使用填充。在刚才的例子中,将填充的幅度设为1,那么相对于输入大小(4,4),输出大小也保持为原来的(4,4)。因此,卷积运算就可以在保持空间大小不变的情况下将数据传给下一层。9.2卷积神经网络第九章深度学习模型of47229.2.2卷积层步幅应用滤波器的位置间隔称为步幅(stride)。之前的例子中步幅都是1,如果将步幅设为2,应用滤波器的窗口的间隔变为2个元素。步骤19.2卷积神经网络第九章深度学习模型of47239.2.2卷积层步幅步骤29.2卷积神经网络第九章深度学习模型of47249.2.2卷积层步幅对输入大小为(7,7)的数据,以步幅2应用了滤波器。通过将步幅设为2,输出大小变为(3,3)。像这样,步幅可以指定应用滤波器的间隔。综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。假设输入大小为(H,

W),滤波器大小为(FH,

FW),输出大小为(OH,

OW),填充为

P,步幅为

S。此时,输出大小可通过下式进行计算。9.2卷积神经网络第九章深度学习模型of47259.2.2卷积层步幅示例1:输入大小:(4,4);填充:1;步幅:1;滤波器大小:(3,3)示例2:输入大小:(7,7);填充:0;步幅:2;滤波器大小:(3,3)9.2卷积神经网络第九章深度学习模型of47269.2.2卷积层步幅示例3:输入大小:(28,31);填充:2;步幅:3;滤波器大小:(5,5)这些示例中,通过式中代入值,就可以计算输出大小。需要注意的是,虽然只要代入值就可以计算输出大小,但是所设定的值必须可以除尽。当输出大小无法除尽时(结果是小数时),需要采取报错等对策。根据深度学习的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。9.2卷积神经网络第九章深度学习模型of47279.2.2卷积层3维数据的卷积运算之前的卷积运算的例子都是以有高、长方向的2维形状为对象的。但是,图像是3维数据,除了高、长方向之外,还需要处理通道方向。这里,我们按照与之前相同的顺序,看一下对加上了通道方向的3维数据进行卷积运算的例子。和2维数据时相比,可以发现纵深方向(通道方向)上特征图增加了。通道方向上有多个特征图时,会按通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。9.2卷积神经网络第九章深度学习模型of47289.2.2卷积层3维数据的卷积运算9.2卷积神经网络第九章深度学习模型of47299.2.2卷积层3维数据的卷积运算9.2卷积神经网络第九章深度学习模型of47309.2.2卷积层结合方块思考将数据和滤波器结合长方体的方块来考虑,3维数据的卷积运算会很容易理解。方块是3维长方体,把3维数据表示为多维数组时,写顺序为(channel,height,width)。通道数为

C、高度为

H、长度为

W

的数据的形状可以写成(C,

H,

W)。滤波器也一样,要按(channel,height,width)的顺序写。通道数为

C、滤波器高度为

FH(FilterHeight)、长度为

FW(FilterWidth)时,可以写成(C,

FH,

FW)。9.2卷积神经网络第九章深度学习模型of47319.2.2卷积层结合方块思考数据输出是1张特征图。所谓1张特征图,就是通道数为1的特征图。如果通道方向上拥有多个卷积运算的输出,就需要用到多个滤波器(权重)。9.2卷积神经网络第九章深度学习模型of47329.2.2卷积层结合方块思考通过应用

FN

个滤波器,输出特征图也生成了

FN

个。如果将这

FN

个特征图汇集在一起,就得到了形状为(FN,

OH,

OW)的方块。将这个方块传给下一层,就是CNN的处理流。关于卷积运算的滤波器,也必须考虑滤波器的数量。因此,作为4维数据,滤波器的权重数据要按(output_channel,input_channel,height,width)的顺序写。比如,通道数为3、大小为5×5的滤波器有20个时,可以写成(20,3,5,5)。卷积运算中(和全连接层一样)存在偏置,需追加偏置的加法运算处理。比如,偏置的形状是(FN,1,1),滤波器的输出结果的形状是(FN,

OH,

OW)。这两个方块相加时,要对滤波器的输出结果(FN,

OH,

OW)按通道加上相同的偏置值。另外,不同形状的方块相加时,可以基于NumPy的广播功能轻松实现。9.2卷积神经网络第九章深度学习模型of47339.2.2卷积层结合方块思考9.2卷积神经网络第九章深度学习模型of47349.2.2卷积层批处理神经网络的处理中进行了将输入数据打包的批处理。之前的全连接神经网络的实现也对应了批处理,通过批处理,能够实现处理的高效化和学习时对mini-batch的对应。我们希望卷积运算也同样对应批处理。为此,需要将在各层间传递的数据保存为4维数据。具体地讲,就是按(batch_num,channel,height,width)的顺序保存数据。批处理版的数据流中,在各个数据的开头添加了批用的维度。像这样,数据作为4维的形状在各层间传递。这里需要注意的是,网络间传递的是4维数据,对这

N

个数据进行了卷积运算。也就是说,批处理将

N

次的处理汇总成了1次进行。9.2卷积神经网络第九章深度学习模型of47359.2.2卷积层批处理9.2卷积神经网络第九章深度学习模型of47369.2.3池化层池化是缩小高、长方向上的空间的运算。如下图,进行将2×2的区域集约成1个元素的处理,缩小空间大小。Max池化的处理顺序9.2卷积神经网络第九章深度学习模型of47379.2.3池化层例子是按步幅2进行2×2的Max池化时的处理顺序。“Max池化”是获取最大值的运算,“2×2”表示目标区域的大小。从2×2的区域中取出最大的元素。此外,这个例子中将步幅设为了2,所以2×2的窗口的移动间隔为2个元素。另外,一般来说,池化的窗口大小会和步幅设定成相同的值。比如,3×3的窗口的步幅会设为3,4×4的窗口的步幅会设为4等。除了Max池化之外,还有Average池化等。相对于Max池化是从目标区域中取出最大值,Average池化则是计算目标区域的平均值。在图像识别领域,主要使用Max池化。因此,说到“池化层”时,指的是Max池化。9.2卷积神经网络第九章深度学习模型of47389.2.3池化层池化层的特征没有要学习的参数池化层和卷积层不同,没有要学习的参数。池化只是从目标区域中取最大值(或者平均值),所以不存在要学习的参数。通道数不发生变化经过池化运算,输入数据和输出数据的通道数不会发生变化,计算是按通道独立进行的。9.2卷积神经网络第九章深度学习模型of47399.2.3池化层池化层的特征对微小的位置变化具有鲁棒性输入数据发生微小偏差时,池化仍会返回相同的结果。因此,池化对输入数据的微小偏差具有鲁棒性。比如,3×3的池化的情况下,池化会吸收输入数据的偏差(根据数据的不同,结果有可能不一致)。9.2卷积神经网络第九章深度学习模型of47409.2.4

CNN的可视化CNN中用到的卷积层在“观察”什么呢?本节将通过卷积层的可视化,探索CNN中到底进行了什么处理。9.2卷积神经网络第九章深度学习模型of47419.2.4

CNN的可视化第1层权重的可视化MNIST数据集进行学习后,假设,第1层的卷积层的权重的形状是(30,1,5,5),即30个大小为5×5、通道为1的滤波器。滤波器大小是5×5、通道数是1,意味着滤波器可以可视化为1通道的灰度图像。现在,我们将卷积层(第1层)的滤波器显示为图像。我们来比较一下学习前和学习后的权重。学习前的滤波器是随机进行初始化的,所以在黑白的浓淡上没有规律可循,但学习后的滤波器变成了有规律的图像。我们发现,通过学习,滤波器被更新成了有规律的滤波器,比如从白到黑渐变的滤波器、含有块状区域(称为blob)的滤波器等。9.2卷积神经网络第九章深度学习模型of47429.2.4

CNN的可视化第1层权重的可视化上图右边的有规律的滤波器在“观察”什么,答案就是它在观察边缘(颜色变化的分界线)和斑块(局部的块状区域)等。比如,左半部分为白色、右半部分为黑色的滤波器的情况下,会对垂直方向上的边缘有响应。9.2卷积神经网络第九章深度学习模型of47439.2.4

CNN的可视化第1层权重的可视化上图对水平方向上和垂直方向上的边缘有响应的滤波器:输出图像1中,垂直方向的边缘上出现白色像素,输出图像2中,水平方向的边缘上出现很多白色像素图中显示了选择两个学习完的滤波器对输入图像进行卷积处理时的结果。我们发现“滤波器1”对垂直方向上的边缘有响应,“滤波器2”对水平方向上的边缘有响应。由此可知,卷积层的滤波器会提取边缘或斑块等原始信息。CNN会将这些原始信息传递给后面的层。9.2卷积神经网络第九章深度学习模型of47449.2.4

CNN的可视化基于分层结构的信息提取第1层的卷积层中提取了边缘或斑块等“低级”信息,那么在堆叠了多层的CNN中,各层中又会提取什么样的信息呢?根据深度学习的可视化相关的研究,随着层次加深,提取的信息(正确地讲,是反映强烈的神经元)也越来越抽象。下图展示了进行一般物体识别(车或狗等)的8层CNN。这个网络结构的名称是AlexNet。AlexNet网络结构堆叠了多层卷积层和池化层,最后经过全连接层输出结果。图中方块表示的是中间数据,对于这些中间数据,会连续应用卷积运算。9.2卷积神经网络第九章深度学习模型of47459.2.4

CNN的可视化基于分层结构的信息提取9.2卷积神经网络第九章深度学习模型of47469.2.4

CNN的可视化基于分层结构的信息提取CNN的卷积层中提取的信息。第1层的神经元对边缘或斑块有响应,第3层对纹理有响应,第5层对物体部件有响应,最后的全连接层对物体的类别(狗或车)有响应。图中,如果堆叠了多层卷积层,则随着层次加深,提取的信息也愈加复杂、抽象,这是深度学习中很有意思的一个地方。最开始的层对简单的边缘有响应,接下来的层对纹理有响应,再后面的层对更加复杂的物体部件有响应。也就是说,随着层次加深,神经元从简单的形状向“高级”信息变化。换句话说,就像我们理解东西的“含义”一样,响应的对象在逐渐变化。9.2卷积神经网络第九章深度学习模型of47479.2.4

CNN的可视化具有代表性的CNN关于CNN,迄今为止已经提出了各种网络结构。这里,介绍其中特别重要的两个网络,一个是在1998年首次被提出的CNN元祖LeNet,另一个是在深度学习受到关注的2012年被提出的AlexNet。9.2卷积神经网络第九章深度学习模型of47489.2.4

CNN的可视化具有代表性的CNNLeNetLeNet在1998年被提出,是进行手写数字识别的网络。它有连续的卷积层和池化层最后经全连接层输出结果。和“现在的CNN”相比,LeNet有几个不同点。第一个不同点在于激活函数。LeNet中使用sigmoid函数,而现在的CNN中主要使用ReLU函数。此外,原始的LeNet中使用子采样(subsampling)缩小中间数据的大小,而现在的CNN中Max池化是主流。LeNet与现在的CNN虽然有些许不同,但差别并不是那么大。并且LeNet是20多年前提出的最早的CNN,还是非常了不起的。9.2卷积神经网络第九章深度学习模型of47499.2.4

CNN的可视化具有代表性的CNNLeNet9.2卷积神经网络第九章深度学习模型of47509.2.4

CNN的可视化具有代表性的CNNAlexNet在LeNet问世20多年后,AlexNet被发布出来。AlexNet是引发深度学习热潮的导火线,不过它的网络结构和LeNet基本上没有什么不同AlexNet叠有多个卷积层和池化层,最后经由全连接层输出结果。虽然结构上AlexNet和LeNet没有大的不同,但有以下几点差异。激活函数使用ReLU。使用进行局部正规化的LRN(LocalResponseNormalization)层。使用Dropout。如上所述,关于网络结构,LeNet和AlexNet没有太大的不同。但是,围绕它们的环境和计算机技术有了很大的进步。具体地说,现在任何人都可以获得大量的数据。而且,擅长大规模并行计算的GPU得到普及,高速进行大量的运算已经成为可能。大数据和GPU已成为深度学习发展的巨大的原动力。9.2卷积神经网络第九章深度学习模型of47519.2.4

CNN的可视化具有代表性的CNNAlexNet第九章深度学习主流模型9.1

9.2卷积神经网络9.3循环神经网络习题绪论of47529.3循环神经网络第九章深度学习模型of4753循环神经网络(Recurrentneuralnetworks,RNN)是用来处理序列数据的神经网络击球手击出垒球,你会开始预测球的轨迹并立即开始奔跑。你追踪着它,不断调整你的移动步伐,最终在观众的掌声中抓到它。无论是在听完朋友的话语还是早餐时预测咖啡的味道,你时刻在做的事就是在预测未来。一类预测未来的网络。RNN可以分析时间序列数据,诸如股票价格,并告诉你什么时候买入和卖出。在自动驾驶系统中,他们可以预测行车轨迹,避免发生交通意外。RNN可在任意长度的序列上工作,而不是截止目前我们讨论的只能在固定长度的输入上工作的网络。RNN可以把语句,文件,以及语音范本作为输入,使得它们在诸如自动翻译,语音到文本或者情感分析(例如,读取电影评论并提取评论者关于该电影的感觉)的自然语言处理系统中极为有用。9.3循环神经网络第九章深度学习模型of4754循环神经网络的预测能力使得它们具备令人惊讶的创造力。RNN可以预测一段旋律的下几个音符,然后随机选取这些音符的其中之一并演奏它。然后RNN给出接下来最可能的音符,演奏它,如此周而复始。RNN可以生成语句,图像标注以及更多,未来可能生成莎士比亚或者莫扎特水平的作品。9.3循环神经网络第九章深度学习模型of4755之前,我们关注的是前馈神经网络,其中激活仅从输入层到输出层的一个方向流动。循环神经网络看起来非常像一个前馈神经网络,除了它也有连接指向后方。让我们看一下最简单的RNN,它由一个神经元接收输入,产生一个输出,并将输出发送回自己。如图,在每个时间步t(也称为一个帧),这个循环神经元接收输入x(t)以及它自己的前一时间步长y(t-1)的输出。我们可以用时间轴来表示这个微小的网络。如图右边,这被称为随时间展开网络。9.3.1循环神经元

循环神经网络(左),随时间展开网络(右)9.3循环神经网络第九章深度学习模型可以轻松创建一个循环神经元层。在每个时间步t,每个神经元都接收输入向量x(t)和前一个时间步y(t-1)的输出向量,如图,输入和输出都是向量(当只有一个神经元时,输出是一个标量)。9.3.1循环神经元一层循环神经元(左),及其随时间展开(右)9.3循环神经网络第九章深度学习模型每个循环神经元有两组权重:一组用于输入x(t),另一组用于前一时间步长y(t-1)的输出。我们称这些权重向量为wx和wy。如公式所示(b是偏差项,φ(·)是激活函数,例如ReLU),可以计算单个循环神经元的输出。9.3.1循环神经元单个循环神经元的输出9.3循环神经网络第九章深度学习模型由于时间t的循环神经元的输出,是由所有先前时间步骤计算出来的的函数,你可以说它有一种记忆形式。一个神经网络的一部分,跨越时间步长保留一些状态,称为存储单元(或简称为单元)。单个循环神经元或循环神经元层是非常基本的单元,后面我们将介绍一些更为复杂和强大的单元类型。一般情况下,时间步t的单元状态,记为h(t)(h代表“隐藏”),是该时间步的某些输入和前一时间步的状态的函数:h(t)=f(h(t–1),x(t))。其在时间步t处的输出,表示为y(t),也和前一状态和当前输入的函数有关。在我们已经讨论过的基本单元的情况下,输出等于单元状态,但是在更复杂的单元中并不总是如此,如图所示。9.3.2记忆单元单元的隐藏状态和输出可能不同9.3循环神经网络第九章深度学习模型RNN可以同时进行一系列输入并产生一系列输出。例如,这种类型的网络对于预测时间序列(如股票价格)非常有用:过去的N天内给出价格,并且它必须输出向未来一天移动的价格(即从N-1天前到明天)。9.3.2记忆单元9.3循环神经网络第九章深度学习模型RNN可以向网络输入一系列输入,并忽略除最后一个之外的所有输出。换句话说,这是一个向量网络的序列。例如,可以向网络提供与电影评论相对应的单词序列,并且网络将输出情感评分(例如,从-1[恨]到+1[爱])。9.3.2记忆单元9.3循环神经网络第九章深度学习模型RNN可以在第一个时间步中为网络提供一个输入(而在其他所有时间步中为零),然后让它输出一个序列。这是一个向量到序列的网络。例如,输入可以是图像,输出可以是该图像的标题。9.3.2记忆单元9.3循环神经网络第九章深度学习模型RNN可以有一个序列到向量网络,称为编码器,后面跟着一个称为解码器的向量到序列网络。例如,可以用于将句子从一种语言翻译成另一种语言。你会用一种语言给网络喂一个句子,编码器会把这个句子转换成单一的向量表示,然后解码器将这个向量解码成另一种语言的句子。这种称为编码器-解码器的两步模型,比用单个序列到序列的RNN快速地进行翻译要好得多,因为句子的最后一个单词可以影响翻译的第一句话,所以你需要等到听完整个句子才能翻译。9.3.2记忆单元9.3循环神经网络第九章深度学习模型来实现一个非常简单的RNN模型,使用tanh激活函数创建由5个循环神经元的循环层组成的RNN。我们将假设RNN只运行两个时间步,每个时间步输入大小为3的向量。网络看起来很像一个双层前馈神经网络,有一些改动:首先,两个层共享相同的权重和偏差项,其次,我们在每一层都有输入,并从每个层获得输出。为了运行模型,我们需要在两个时间步中都有输入。9.3.3构建简单RNN9.3循环神经网络第九章深度学习模型训练一个RNN,诀窍是在时间上展开,然后简单地使用常规反向传播。这个策略被称为时间上的反向传播(BPTT)。9.3.4训练RNN9.3循环神经网络第九章深度学习模型像在正常的反向传播中一样,展开的网络(用虚线箭头表示)有第一个正向传递。然后使用损失函数评估输出序列(其中tmin和tmax是第一个和最后一个输出时间步长,不计算忽略的输出),并且该损失函数的梯度通过展开的网络向后传播(实线箭头);最后使用在BPTT期间计算的梯度来更新模型参数。梯度在损失函数所使用的所有输出中反向流动,而不仅仅通过最终输出(在图中,损失函数使用网络的最后三个输出Y(2),Y(3)和Y(4),所以梯度流经这三个输出,但不通过Y(0)和Y(1)。而且,由于在每个时间步骤使用相同的参数W和b,所以反向传播将做正确的事情并且总结所有时间步骤。9.3.4训练RNN9.3循环神经网络第九章深度学习模型训练一个RNN来分类MNIST图像,把每个图像视为28行28像素的序列(因为每个MNIST图像是28×28像素)。我们将使用150个循环神经元,再加上一个全连接层,其中包含连接到上一个时间步的输出的10个神经元(每个类一个),然后是一个softmax层。建模阶段非常简单,和CNN中建立的MNIST分类器几乎是一样的,只是展开的RNN替换了隐层。注意,全连接层连接到状态张量,其仅包含RNN的最终状态。9.3.4训练序列分类器序列分类器9.3循环神经网络第九章深度学习模型如何处理时间序列,如股价,气温,脑电波模式等等。我们将训练一个RNN来预测生成的时间序列中的下一个值。每个训练实例是从时间序列中随机选取的20个连续值的序列。9.3.5为预测时间序列而训练时间序列(左)和用该序列训练的实例(右)9.3循环神经网络第九章深度学习模型创建一个RNN。它将包含100个循环神经元,并且我们将在20个时间步骤上展开它,因为每个训练实例将是20个输入那么长。每个输入将仅包含一个特征(在该时间的值)。目标也是20个输入的序列,每个输入包含一个值。在每个时间步,我们现在有一个大小为100的输出向量。但是我们实际需要的是每个时间步的单个输出值。最简单的解决方法是将单元包装在OutputProjectionWrapper中。单元包装器就像一个普通的单元,代理每个方法调用一个底层单元,但是它也增加了一些功能。OutputProjectionWrapper在每个输出之上添加一个完全连接的线性神经元层(即没有任何激活函数)(但不影响单元状态)。所有这些完全连接的层共享相同(可训练)的权重和偏差项。如下图。9.3.5为预测时间序列而训练9.3循环神经网络第九章深度学习模型9.3.5为预测时间序列而训练9.3循环神经网络第九章深度学习模型在经过了1000次训练迭代后的预测序列9.3.5为预测时间序列而训练时间序列(左)和用该序列训练的实例(右)9.3循环神经网络第九章深度学习模型一个朴素的想法就是把一层层神经元堆叠起来,就可呈现深度RNN。9.3.6深度RNN深度RNN(左),时间展开(右)9.3循环神经网络第九章深度学习模型在训练长序列的RNN模型时,那么就需要把RNN在时间维度上展开成很深的神经网络。正如任何深度神经网络一样,其面临着梯度消失/爆炸的问题,使训练无法终止或收敛。很多之前讨论过的缓解这种问题的技巧都可以应用在深度展开的RNN网络:好的参数初始化方式,非饱和的激活函数(如ReLU),批量规范化(BatchNormalization),梯度截断(GradientClipping),更快的优化器。即便如此,RNN在处理适中的长序列(如100输入序列)也在训练时表现的很慢。最简单和常见的方法解决训练时长问题就是在训练阶段仅仅展开限定时间步长的RNN网络,一种称为截断时间反向传播的算法。可通过截断输入序列来简单实现这种功能。例如在时间序列预测问题上可以在训练时减小步骤来实现截断。理所当然这种方法会限制模型在长期模式的学习能力。一种变通方案确保缩短的序列中包含旧数据和新数据,从而使模型获得两者信息(如序列同时包含最近五个月的数据,最近五周的和最近五天的数据)。9.3.7长时训练的困难9.3循环神经网络第九章深度学习模型问题是如何确保从去年的细分类中获取的数据有效性呢?这期间短暂但重要的事件对后世的影响,甚至是数年后这种影响是否一定要考虑在内呢(如选举结果)?这种方案有其先天的不足之处。在长的时间训练过程中,第二个要面临的问题时第一个输入的记忆会在长时间运行的RNN网络中逐渐淡去。确实,通过变换的方式,数据穿流在RNN网络之中,每个时间步长后都有一些信息被抛弃掉了。那么在一定时间后,第一个输入实际上会在RNN的状态中消失于无形。比如说,你想要分析长篇幅的影评的情感类别,影评以“Ilovethismovie”开篇,并辅以各种改善影片的一些建议。试想一下,如果RNN网络逐渐忘记了开头的几个词,RNN网络的判断完全有可能会对影评断章取义。为了解决其中的问题,各种能够携带长时记忆的神经单元的变体被提出。这些变体是有效的,往往基本形式的神经单元就不怎么被使用了。首先了解一下最流行的一种长时记忆神经单元:长短时记忆神经单元LSTM。9.3.7长时训练的困难9.3循环神经网络第九章深度学习模型长短时记忆单元在1997年由S.H.和J.S.首次提出,并在接下来的几年内经过A.G,H.S,W.Z等数位研究人员的改进逐渐形成。如果把LSTM单元看作一个黑盒,从外围看它和基本形式的记忆单元很相似,但LSTM单元会比基本单元性能更好,收敛更快,能够感知数据的长时依赖。9.3.8LSTM单元基本LSTM单元的结构9.3循环神经网络第九章深度学习模型不观察LSTM单元内部,除了一些不同外跟常规RNN单元极其相似。这些不同包括LSTM单元状态分为两个向量:h(t)和c(t)(c代表cell)。可以简单认为h(t)是短期记忆状态,c(t)是长期记忆状态。打开盒子,LSTM单元的核心思想是其能够学习从长期状态中存储什么,忘记什么,读取什么。长期状态c(t-1)从左向右在网络中传播,依次经过遗忘门(forgetgate)时丢弃一些记忆,之后加法操作增加一些记忆(从输入门中选择一些记忆)。输出c(t)不经任何转换直接输出。每个单位时间步长后,都有一些记忆被抛弃,新的记忆被添加进来。另一方面,长时状态经过tanh激活函数通过输出门得到短时记忆h(t),同时它也是这一时刻的单元输出结果y(t)。接下来讨论一下新的记忆时如何产生的,门的功能是如何实现的。9.3.8LSTM单元9.3循环神经网络第九章深度学习模型首先,当前的输入向量x(t)和前一时刻的短时状态h(t-1)作为输入传给四个全连接层,这四个全连接层有不同的目的:其中主要的全连接层输出g(t),它的常规任务就是解析当前的输入x(t)和前一时刻的短时状态h(t-1)。在基本形式的RNN单元中,就与这种形式一样,直接输出了h(t)和y(t)。与之不同的是LSTM单元会将一部分g(t)存储在长时状态中。其它三个全连接层被称为门控制器(gatecontroller)。其采用Logistic作为激活函数,输出范围在0到1之间。正如在结构图中所示,这三个层的输出提供给了逐元素乘法操作,当输入为0时门关闭,输出为1时门打开。分别为:遗忘门(forgetgate)由f(t)控制,来决定哪些长期记忆需要被擦除;输入门(inputgate)由i(t)控制,它的作用是处理哪部分g(t)应该被添加到长时状态中,也就是为什么被称为部分存储。输出门(outputgate)由o(t)控制,在这一时刻的输出h(t)和y(t)就是由输出门控制的,从长时状态中读取的记忆。9.3.8LSTM单元9.3循环神经网络第九章深度学习模型简要来说,LSTM单元能够学习到识别重要输入(输入门作用),存储进长时状态,并保存必要的时间(遗忘门功能),并学会提取当前输出所需要的记忆。这也解释了LSTM单元能够在提取长时序列,长文本,录音等数据中的长期模式的惊人成功的原因。9.3.8LSTM单元9.3循环神经网络第九章深度学习模型基本形式的LSTM单元中,门的控制仅有当前的输入x(t)和前一时刻的短时状态h(t-1)。不妨让各个控制门窥视一下长时状态,获取一些上下文信息不失为一种尝试。该想法由F.G.heJ.S.在2000年提出。他们提出的LSTM的变体拥有叫做窥孔连接的额外连接:把前一时刻的长时状态c(t-1)加入遗忘门和输入门控制的输入,当前时刻的长时状态加入输出门的控制输入。在众多LSTM变体中,一个特别流行的变体就是GRU单元。9.3.8LSTM单元9.3.8.1窥孔连接9.3循环神经网络第九章深度学习模型9.3.9GRU单元9.3循环神经网络第九章深度学习模型9.3.9GRU单元门控循环单元在2014年的K.Choetal.的论文中提出,并且此文也引入了前文所述的编解码网络。门控循环单元是LSTM单元的简化版本,能实现同样的性能,这也说明了为什么它能越来越流行。简化主要在一下几个方面:长时状态和短时状态合并为一个向量h(t)。用同一个门控制遗忘

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论