《python深度学习》笔记---6.4、用卷积神经网络处理序列

《python深度学习》笔记---6.4、用卷积神经网络处理序列

一、总结

一句话总结:

【卷积神经网络提取特征所以在计算机视觉表现出色】:卷积神经网络(convnet),并知道它在计算机视觉问题上表现出色,原因 在于它能够进行卷积运算,从局部输入图块中提取特征,并能够将表示模块化,同时可以高效 地利用数据。
【时间可以被看做空间维度,所以可用卷积】:时间可以被看作一个空间维度,就像二维图像的高度或宽度。
【一维卷积处理时间序列代价更小】:对于某些序列处理问题,这种一维卷积神经网络的效果可以媲美RNN,而且计算代价通常 要小很多。
【一维卷积在音频生成和机器翻译领域取得巨大成功】:最近,一维卷积神经网络[通常与空洞卷积核(dilated kernel)一起使用]已经在音 频生成和机器翻译领域取得了巨大成功。除了这些具体的成就,人们还早已知道,对于文本分 类和时间序列预测等简单任务,小型的一维卷积神经网络可以替代 RNN,而且速度更快。

1、序列数据的一维卷积的 原理?

【从序列中提取局部一维序列段】:前面介绍的卷积层都是二维卷积,从图像张量中提取二维图块并对每个图块应用相同的变 换。按照同样的方法,你也可以使用一维卷积,从序列中提取局部一维序列段(即子序列)
【识别局部模式】:这种一维卷积层可以识别序列中的局部模式。因为对每个序列段执行相同的输入变换,所 以在句子中某个位置学到的模式稍后可以在其他位置被识别,这使得一维卷积神经网络具有平 移不变性(对于时间平移而言)
【平移不变性】:举个例子,使用大小为5 的卷积窗口处理字符序列的一维卷积 神经网络,应该能够学习长度不大于5 的单词或单词片段,并且应该能够在输入句子中的任何位置识别这些单词或单词段。
【一维卷积神经网络能够学会单词构词法】:因此,字符级的一维卷积神经网络能够学会单词构词法。

2、一维卷积的池化运算?

【和二维卷积一样,也是平均池化和最大池化】:从输入中提取一维序列段(即子序列), 然后输出其最大值(最大池化)或平均值(平均池化)。与二维卷积神经网络一样,该运算也是 用于降低一维输入的长度(子采样)。

3、Keras中实现一维卷积神经网络 ?

【Conv1D层】:Keras 中的一维卷积神经网络是 Conv1D 层,
【(samples, time, features)】:其接口类似于 Conv2D。它接收的输入是形状 为 (samples, time, features) 的三维张量,并返回类似形状的三维张量。卷积窗口是时 间轴上的一维窗口(时间轴是输入张量的第二个轴)。

4、一维卷积神经网络的架构?

【Conv1D层和MaxPooling1D层的堆叠】:与二维卷积神经网络相同,它是 Conv1D 层和 MaxPooling1D 层的堆叠,最后是一个全局池化层或 Flatten 层,将三维输出转换为二维输出,让你可以向模 型中添加一个或多个 Dense 层,用于分类或回归。

5、一维卷积神经网络可以使用更大的卷积窗口?

【一维卷积中可以轻松使用大小等于7或9的一维卷积窗口】:对于二维卷积层,3×3 的卷积窗口包含3×3=9 个特征向量;但对于一位卷积层,大小为3 的卷积窗口只包含3 个卷积向量。因此,你可以轻松使用大小等于 7 或 9 的一维卷积窗口。

6、Keras中一维卷积神经网络 的代码使用?

model.add(layers.Conv1D(32, 7, activation=\'relu\'))
model = Sequential()
model.add(layers.Embedding(max_features, 128, input_length=max_len))
model.add(layers.Conv1D(32, 7, activation=\'relu\'))
model.add(layers.MaxPooling1D(5))
model.add(layers.Conv1D(32, 7, activation=\'relu\'))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(1))

7、一维卷积与LSTM做序列处理的优劣?

【一维卷积运行更快,LSTM有些时候精度高一点】

8、一维卷积对时间的特点?

【一维卷积对时间步的顺序不敏感】:一维卷积神经网络分别处理每个输入序列段,所以它对时间步的顺序不敏感(这里所说顺 序的范围要大于局部尺度,即大于卷积窗口的大小),这一点与RNN 不同。
【为了识别更长期的模式,你可以将许多卷积层和池化层堆叠在一起】:当然,为了识别更长期的模式,你可以将许多卷积层和池化层堆叠在一起,这样上面的层能够观察到原始输入中 更长的序列段,但这仍然不是一种引入顺序敏感性的好方法。

9、一维卷积为什么在温度预测上还没有基准好?

【一维卷积并不知道所看到某个模式的时 间位置(距开始多长时间,距结束多长时间等)】:这是因为卷积神经网络在输入时间序列的所有位置寻找模式,它并不知道所看到某个模式的时 间位置(距开始多长时间,距结束多长时间等)
【对最新数据点的解释与对较早数据点的解释应该并不相同】:对于这个具体的预测问题,对最新数据点的解 释与对较早数据点的解释应该并不相同,所以卷积神经网络无法得到有意义的结果。
【卷积神经网络的这种限制对于IMDB数据来说并不是问题】:卷积神经网络的这种限制对于IMDB 数据来说并不是问题,因为对于与正面情绪或负面情绪相关联的关 键词模式,无论出现在输入句子中的什么位置,它所包含的信息量是一样的。

10、结合 CNN 和 RNN 来处理长序列?

【在RNN前面使用一维卷积神经网络作为预处理步骤】:要想结合卷积神经网络的速度和轻量与RNN 的顺序敏感性,一种方法是在RNN 前面使用 一维卷积神经网络作为预处理步骤
【非常长的序列cnn结合rnn很好用】:对于那些非常长,以至于 RNN 无法处理的序列 (比如包含上千个时间步的序列),这种方法尤其有用。
【卷积神经网络可以将长的输入序列转换为高级特征组成的更短序列(下采样)】:卷积神经网络可以将长的输入序列转换为 高级特征组成的更短序列(下采样)。然后,提取的特征组成的这些序列成为网络中 RNN 的输入。
【CNN结合RNN来处理长序列非常有效】:这种方法非常 有效,应该被更多人使用。因为这种方法允许操作更长 的序列,所以我们可以查看更早的数据(通过增大数据生成器的 lookback 参数)或查看分辨 率更高的时间序列(通过减小生成器的 step 参数)

11、cnn结合rnn处理温度预测实例?

model.add(layers.Conv1D(32, 5, activation=\'relu\'))
model.add(layers.MaxPooling1D(3))
model.add(layers.GRU(32, dropout=0.1, recurrent_dropout=0.5))
model = Sequential()
model.add(layers.Conv1D(32, 5, activation=\'relu\',
                        input_shape=(None, float_data.shape[-1])))
model.add(layers.MaxPooling1D(3))
model.add(layers.Conv1D(32, 5, activation=\'relu\'))
model.add(layers.GRU(32, dropout=0.1, recurrent_dropout=0.5))
model.add(layers.Dense(1))

12、温度预测实例中一维cnn结合rnn处理 与正则化GRU处理 比较?

【精度略不如,但是速度快】:从验证损失来看,这种架构的效果不如只用正则化 GRU,但速度要快很多。它查看了两倍 的数据量,在本例中可能不是非常有用,但对于其他数据集可能非常重要。

13、用卷积神经网络处理序列 知识点总结?

【一维卷积在自然语言处理任务中可以替代RNN】:二维卷积神经网络在二维空间中处理视觉模式时表现很好,与此相同,一维卷积神经网 络在处理时间模式时表现也很好。对于某些问题,特别是自然语言处理任务,它可以替 代 RNN,并且速度更快。
【一维卷积也是卷积层叠池化层】:通常情况下,一维卷积神经网络的架构与计算机视觉领域的二维卷积神经网络很相似, 它将 Conv1D 层和 MaxPooling1D 层堆叠在一起,最后是一个全局池化运算或展平操作。
【一维卷积神经网络的计算代价很小】:因为RNN 在处理非常长的序列时计算代价很大,但一维卷积神经网络的计算代价很小, 所以在RNN 之前使用一维卷积神经网络作为预处理步骤是一个好主意,这样可以使序 列变短,并提取出有用的表示交给 RNN 来处理。

二、内容在总结中

博客对应课程的视频位置:

用卷积神经网络处理序列 知识点总结