PyTorch RNN的原理及其手写复现。
- 记忆单元(考虑过去的信息)分类包括:1.RNN 2.GRU 3.LSTM
- 模型类别:1.单向循环(左到右) 2.双向循环(考虑未来信息) 3.多层单向或双向循环
- 优缺点
- 应用场景
- 具体公式
- 代码实现
记忆单元(考虑过去的信息)分类包括:1.RNN 2.GRU 3.LSTM
模型类别:1.单向循环(左到右) 2.双向循环(考虑未来信息) 3.多层单向或双向循环
既能看到过去又能看到未来。
优缺点
优点:
- 可以处理变长序列(权重在每一时刻共享)
- 模型大小与序列长度无关
- 计算量与序列长度呈线性增长
- 考虑历史信息(隐含层)
- 便于流式输出
- 权重时不变
缺点:
1.串行计算比较慢
2.无法获取太长的历史信息 (Transformer可以)
应用场景
-
AI诗歌生成(one2many)
-
文本情感分类(many2one)
-
词法识别(many2many)
-
机器翻译(many2many)seq2seq有编码器和解码器中间有attention帮助解码器
-
语音识别/合成
-
语言模型
具体公式
可以看作是对输入
x
t
x_t
xt和前一个隐含层的状态
h
t
−
1
h_{t-1}
ht−1的一个线性层。权重加偏置,然后就是一个非线性层tanh或者ReLU。
代码实现
RNN的手写算法在这个链接里面,包括调用api和自己写。
https://drive.google.com/file/d/1ph2dN92gnzYcAFxWrqEYY9vopznoldP4/view?usp=sharing
官方教程在:
https://pytorch.org/docs/stable/generated/torch.nn.RNN.html#torch.nn.RNN
主要参考自
https://www.bilibili.com/video/BV13i4y1R7jB/?spm_id_from=333.999.0.0&vd_source=5413f4289a5882463411525768a1ee27