深度学习(06)_循环神经网络RNN和LSTM_01
Posted 莫失莫忘Lawlite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习(06)_循环神经网络RNN和LSTM_01相关的知识,希望对你有一定的参考价值。
循环神经网络RNN和LSTM_01
- 个人博客地址:点击这里访问
一、介绍
1、什么是RNN
- 传统的神经网络是层与层之间是全连接的,但是每层之间的神经元是没有连接的(其实是假设各个数据之间是独立的)
- 这种结构不善于处理序列化的问题。比如要预测句子中的下一个单词是什么,这往往与前面的单词有很大的关联,因为句子里面的单词并不是独立的。
RNN
的结构说明当前的的输出与前面的输出也有关,即隐层之间的节点不再是无连接的,而是有连接的
- 基本的结构如图,可以看到有个循环的结构,将其展开就是右边的结构
2、运算说明
- 如上图,输入单元(
inputs units
): x0,x1,⋯⋯,xt,xt+1,⋯⋯ ,
- 输出单元(output units)为: o0,o1,⋯⋯,ot,ot+1,⋯⋯ ,
- 隐藏单元(hidden units)输出集: s0,s1,⋯⋯,ost,st+1,⋯⋯
- 时间
t
隐层单元的输出为: st=f(Uxt+Wst−1)
f
就是激励函数,一般是sigmoid,tanh, relu
等- 计算 s0 时,即第一个的隐藏层状态,需要用到 s−1 ,但是其并不存在,在实现中一般置为0向量
- (如果将上面的竖着立起来,其实很像传统的神经网络,哈哈)
- 时间
t
的输出为: ot=Softmax(Vst)
- 可以认为隐藏层状态 st 是网络的记忆单元. st 包含了前面所有步的隐藏层状态。而输出层的输出 ot 只与当前步的 st 有关。
- (在实践中,为了降低网络的复杂度,往往 st 只包含前面若干步而不是所有步的隐藏层状态)
- 在
RNNs
中,每输入一步,每一层都共享参数U,V,W
,(因为是将循环的部分展开,天然应该相等) RNNs
的关键之处在于隐藏层,隐藏层能够捕捉序列的信息。
3、应用方面
- 循环神经网络(
Recurrent Neural Networks,RNNs
)已经在众多自然语言处理(Natural Language Processing, NLP
)中取得了巨大成功以及广泛应用。目前使用最广泛最成功的模型便是LSTMs
(Long Short-Term Memory,长短时记忆模型)模型
(1) 语言模型和文本生成
- 给定一个单词序列,根据前面的单词预测下面单词的可能性
- 也可以根据概率生成新的词
- 这里给出了3篇论文
(2) 机器翻译
- 和上面的语言模型很像,只不过是根据一段过生成另外的一段话
- 注意的是开始的输出是在全部输入结束后生成的
- 一些论文
(3) 语音识别
(4) 图像描述生成
- 根据图像,生成一段描述图像的话
- 需要和
CNN
结合使用
二、结构
1、One to One
- 即一个输入对应一个输出,就是上面的图
2、Many to One
- 即多个输入对应一个输出,比如情感分析,一段话中很多次,判断这段话的情感
- 其中
x1,x2,…,xt
表示句子中的
t
个词,o
代表最终输出的情感标签 - 前向计算就是:
f(x)=Vst=V(Uxt+Wst−1)=V(Uxt+W(Uxt−1+Wst−2))⋯
3、One to Many
- 前向计算类似,不再给出
4、Many to Many
- 前向计算类似,不再给出
5、双向RNN(Bidirectional RNN)
- 比如翻译问题往往需要联系上下文内容才能正确的翻译,我们上面的结构线性传递允许“联系上文”,但是联系下文并没有,所以就有双向RNN
- 前向运算稍微复杂一点,以
t
时刻为例
ot=W(os)tst+W(oh)tht =W(os)t(W(ss)t−1st−1水很深的深度学习-Task05循环神经网络RNN