RNN 与 LSTM 的应用

本文介绍了循环神经网络(RNN)与长短时记忆网络(LSTM)在机器翻译、图像描述生成等任务中的应用。重点讨论了如何利用这两种网络结构进行有效的序列处理,包括模型结构、训练方法及实验结果。

之前已经介绍过关于 Recurrent Neural Nnetwork 与 Long Short-Trem Memory 的网络结构与参数求解算法( 递归神经网络(Recurrent Neural Networks,RNN) ,LSTM网络(Long Short-Term Memory )),本文将列举一些 RNN 与 LSTM 的应用, RNN (LSTM)的样本可以是如下形式的:1)输入输出均为序列;2)输入为序列,输出为样本标签;3)输入单个样本,输出为序列。本文将列举一些 RNN(LSTM) 的应用,了解 RNN(LSTM) 是如何应用在各种机器学习任务中的,在讲解具体任务之前,先看一下一些通用的 RNN(LSTM) 的结构,下图列举的这些结构都有描述详细的论文:

1

图中蓝色节点为输入,红色为输出,绿色为 hidden node 或者 memory block ,(a)描述的是传统的 MLP 网络,即不考虑数据的时序性,认为数据是独立的;(b)将输入序列映射为一个定长向量(分类标签),可用于文本、视频分类;(c)输入为单个数据点,输出为序列数据,典型的代表为 Image Captioning;(d)这种是一种结构 sequence-to-sequence 的任务,常被用于机器翻译,两个序列长度不一定相等;(e)这种结构会得到一个文本的生成模型,每词都会预测下一时刻的字符。

Machine Translation

机器翻译长期以来是 NLP任务 的一个难题,首先难点就在于文本表示方法,在 NLP 任务中,若处理词语级的序列, 当 RNN 的输出层为 $softmax$ 时,每个时刻输出会产生向量 $y^t   \in \mathbb{R}^K $ , $K$ 即为词表的大小,$y^t$ 向量中的第 $k$ 维代表生成第 $k$ 个词语的概率;每个时刻的输入也均为一个词语,以前经常用 one-hot (Bag-of-Word)的方法表示,现在比较常用的是 distribute representation(Glove ,word2vec)。若 RNN 处理字符级序列,这时通常采用的是 ont-hot 的方式。通常文本分类方法采用 one-hot 的方式(不考虑词序)即可取得很好的效果,但是词序在文本翻译中很重要,比如“Scientist killed by raging virus”和 “Virus killed by raging scientist”的 ont-hot 表示结果完全相同,所以机器翻译非常有必要考虑词序。Sutskever et al. [2014] 提出一个两层 LSTM 结构的机器翻译模型,在将英语翻译为法语的任务上表现出色,第一层 LSTM 用来对输入英语语句(phrase)编码,第二层用来解码为法语语句(phrase),模型如下图所示:

1

图中 LSTM1 为 encoding LSTM, LSTM2 为 decoding LSTM ,蓝色与紫色节节点为输入,粉红节点为输出:

1)对源语句 $x^t$ 设置结束标志(实现时可任意设定不出现在语句中的符号),每次将一个词语送入 encoding LSTM中,且每次网络均不输出。

2)当到达 $x^t$ 的末尾(图中的<EOS>),意味着目标语句将开始被送往 decoding LSTM,如图中的<EOS>对应 “j’al”,且 decoding LSTM 将 encoding LSTM 的输出作为输入(图中 LSTM1 $\rightarrow $ LSTM2 交接处),decoding LSTM 在每个时刻的输出为与词表大小相同的 $softmax$ 层,分量代表每个词语的概率。

3)推断时,在每个时刻通过 beam search 来找到最有可能的词语。直到输出达到<EOS>为结束状态。

训练阶段,将输入语句扔进 encoder ,翻译语句被扔进 decoder ,损失从 decoder 一直回传到最开始,整个模型通过极大化训练集中标签样本的概率,推断时,运行一个从左到右的 beam search 算法来找到最优序列,原文中作者用 SGD 来训练,每跑完一次 epoch ,将学习速率减半,跑完 5 个 epoch, BLEU 值(用来度量模型的好坏)达到 start –of-the-art ,模型本身通过 8 个 GPU 跑了 10 天训练出来的 - -!,每个 LSTM memory block 含有 1000 个 memory cell,英语词表为 160,000 ,法语词表为 80,000 ,权重初始化为 (-0.08,0.08) 的均匀分布。

Image Captioning

最近一些工作是关于用自然语言描述一幅图像([Vinyals et al., 2015, Karpathy and Fei-Fei,2014, Mao et al., 2014].)。

1

Image Captioning 是一种监督学习任务,输入数据为图像  $x$ ,输出数据为描述图像的语句 $y$ 。Vinyals et al. [2015]的做法类似于刚才的 Machine Translation ,只不过将原来的 encoder 换成 Convolution Neural Network ,decoder 还是 LSTM 层,Karpathy and Fei-Fei [2014] 使用一种带有 attention 机制的双向 CNN 来 encoding 图像,且用标准的 RNN 去解码对图像的说明,使用的是 word2vec 产生的词向量。该模型即产生整个图片的 captioning ,并且还会产生图像区域与文本片段的对应性。

对印图片进行推断时,过程类似于 Machine Translation ,每次解码一个单词,得到最优词语作为下一时刻的输入,知道到达<EOS>.Karpathy and Fei-Fei  分别在三个数据集上进行试验: [Flickr8K, Flickr30K, and COCO, 大小分别为50MB (8000 images), 200MB (30,000 images), 与 750MB (328,000 images)],且 encoder 用的 CNN 是在 Image Net 上训练的。

其他的一些任务 比如 Handwriting recognition,在这个任务上,bidirectional LSTM 达到了 state-of-the-art 的效果, HMM 的准去率为 70.1% , 而  bidirectional LSTM 达到了 81.5% 。且这几年人们还有把以上成功的方法与应用到 unsupervised video encoding [Srivastava et al., 2015] 与 video captioning [Venugopalan et al., 2015] 甚至 program execution [Zaremba and Sutskever, 2014] ,video captioning 中作者用 CNN 得到图片的帧的特征 然后扔到 LSTM 里去编码,解码时生成对应的词语。

 

转载于:https://www.cnblogs.com/ooon/p/5603869.html

### RNNLSTM应用场景及区别 #### 应用场景分析 RNN(循环神经网络)适合用于解决具有短期依赖关系的任务。例如,在语音识别中的简单音节分割或者自然语言处理中的基础语法结构提取,这些任务通常不需要考虑非常长的历史信息[^2]。 相比之下,LSTM(长短期记忆网络)特别擅长捕捉长时间跨度内的依赖关系。这使得它非常适合于那些需要记住较远过去事件的信息才能做出当前决策的情境下工作,比如股票价格预测、天气预报以及复杂的机器翻译任务等。由于其内部机制能够有效缓解梯度消失问题,因此即使面对极长的时间序列也能保持良好的表现能力[^1]。 #### 技术特性比较 从技术角度来看,标准的RNN单元仅包含单一的状态转移函数来更新隐藏状态;然而这种简单的架构容易受到梯度爆炸或消失的影响,从而限制了它可以建模的有效时间范围长度。而LSTM通过引入三个门控结构——遗忘门(forget gate),输入门(input gate) 和 输出门(output gate)—实现了更精细地控制哪些历史信息应该被保留下来继续影响未来时刻的结果, 哪些则应逐渐淡忘掉不再发挥作用[^3]。 具体来说: - **遗忘门**决定了上一时刻细胞状态Ct−1中有多少比例会被丢弃; - **输入门**负责筛选新候选值向量~Ct并决定它们加入到现有细胞状态的程度; - **输出门**最后确定本步最终输出ht如何依据修改后的细胞状态ct生成。 这样的设计让LSTM能够在理论上无限期保存重要特征而不丢失精度,极大地扩展了可操作的数据窗口大小上限。 ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import SimpleRNN,LSTM,Dense # 构造一个基本的RNN模型 model_rnn = Sequential([ SimpleRNN(50, activation='relu', input_shape=(None, 1)), Dense(1) ]) # 对比之下构建一个LSTM模型 model_lstm = Sequential([ LSTM(50, activation='relu', input_shape=(None, 1)), Dense(1) ]) ``` 上述代码展示了如何利用Keras库分别创建基于SimpleRNN层和LSTM层的基础回归预测模型框架。可以看到两者除了核心组件不同外其余部分几乎一致,这也反映了二者间紧密联系的同时又各自具备独特优势的事实。 #### 计算成本考量 值得注意的是虽然LSTM提供了更强表达能力和稳定性保障,但是随之而来的是更高的运算需求。每一次前馈传播都需要额外计算多个矩阵乘法及其激活函数变换操作,所以当面临资源受限环境时可能不得不权衡取舍采用相对轻便高效的解决方案如GRU替代传统LSTM实现相似效果却减少不必要的开销[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值