- 你能想到sequence-to-sequenceRNN的一些应用吗? sequence-to-vector RNN的呢? vector-to-sequence RNN 的呢?
以下是RNN的一些应用:
- 对于序列到序列的RNN:预测天气(或任何其他时间序列),机器翻译(使用编码器 - 解码器架构),视频字幕,语音到文本,音乐生成(或其他序列生成),识别歌曲的和弦。
-
对于序列到矢量RNN:按音乐类型对音乐样本进行分类,分析书评的情绪,根据大脑植入物的读数预测失语症患者正在考虑的单词,预测用户想要观看的概率基于她的观看历史的电影(这是协作过滤的许多可能实现之一)。
-
对于矢量到序列RNN:图像字幕,基于当前艺术家的嵌入创建音乐播放列表,基于一组参数生成旋律,在图片中定位行人(例如,来自自身的视频帧)驾驶汽车的相机)。
- 为什么人们将编码器 - 解码器RNN用于自动翻译而不是简单的sequence-to-sequence RNN?
一般来说,如果你一次翻译一个单词,结果会很糟糕。
例如,法语句子“Je vous en prie”的意思是“You are welcome,”如果你一次翻译一个单词,你会得到“I you in pray.”。咦?首先阅读整个句子然后翻译它会好得多。
普通的序列到序列RNN将在读取第一个字之后立即开始翻译句子,而编码器 - 解码器RNN将首先读取整个句子然后翻译它。
也就是说,人们可以想象一个简单的序列到序列的RNN,只要不确定接下来要说什么就会输出静音(就像人类翻译者必须翻译直播时那样)。
- 你如何将卷积神经网络与RNN结合起来对视频进行分类?
要根据视觉内容对视频进行分类,一种可能的架构可能是
-
(比方说)每秒一帧,
-
然后通过卷积神经网络运行每一帧,将CNN的输出投喂到序列到矢量RNN,
-
最后通过softmax层运行其输出,为你提供所有类概率。
-
对于训练,你只需使用交叉熵作为成本函数。
如果你也想将音频用于分类,你可以将每秒音频转换为光谱仪(spectrograph),将此光谱仪输入CNN,并将此CNN的输出馈送到RNN(以及其他CNN的相应输出)。
- 使用
dynamic_rnn()
而不是static_rnn()
对构建RNN有什么好处?
使用dynamic_rnn()
而不是static_rnn()
构建RNN提供了以下几个好处:
-
它基于
while_loop()
操作,能够在反向传播期间将GPU的内存交换到CPU的内存,从而避免内存不足错误。 -
它可以说更容易使用,因为它可以直接将单个张量作为输入和输出(涵盖所有时间步骤),而不是张量列表(每个时间步长一个)。无需堆叠,取消堆叠或转置。
-
它生成一个较小的图形,更容易在TensorBoard中可视化。
- 你如何处理可变长度的输入序列? 可变长度输出序列呢?
-
要处理可变长度的输入序列,
-
最简单的选择是在调用
static_rnn()
或dynamic_rnn()
函数时设置sequence_length
参数。 - 另一种选择是填充较小的输入(例如,用零)以使它们与最大输入相同(如果输入序列都具有非常相似的长度,则这可能比第一选项快)。
-
最简单的选择是在调用
-
要处理可变长度输出序列,
- 如果事先知道每个输出序列的长度,可以使用sequence_length参数(例如,考虑一个序列到序列的RNN,用暴力评分标记视频中的每一帧: 输出序列与输入序列的长度完全相同)。
- 如果事先不知道输出序列的长度,则可以使用填充技巧:始终输出相同大小的序列,但忽略序列结束标记之后的任何输出(在计算成本函数时忽略它们)。
- 在多个GPU上分配深度RNN的训练和执行的常用方法是什么?
要在多个GPU上分配深度RNN的训练和执行,常见的技术就是将每个层放在不同的GPU上(参见第12章)。
网友评论