- 时间序列
- 采用两种数据表示方式:[word_num, batch, word_vec]和[batch, word_num, word_vec]
- PyTorch中Embedding有两种表示方式:word2vec和GloVe,而且已经提供了实现方式。
3)PyTorch中使用nn.Embedding执行查表操作,使用PyTorch中面向自然语言处理的torchnlp包可以实现。使用GloVe是一种编码方式,会直接下载一个2.18GB大小的文件,可以直接使用。 - 也可以将输入图片看做时序信号,从上到下每个时间点对应一行像素点!
- 用RNN对时间信号序列进处理:
- 公式化表示:
ht = fW(ht-1, xt)
||
ht = tanh(Whhht-1+Wxhxt)
yt = Whyht
NOTE:这里Whh和Wxh是权值共享的!
- 公式化表示:
- RNN训练
- 梯度经验值是在10左右比较合适,如果大于100就会出现梯度爆炸的情形了!对于梯度爆炸,可以使用torch.nn.utils.clip_grad_norm(grad, threshold)对梯度grad进行修改,使梯度的值控制在threshold的范围内,即缩小了梯度的值但并没有改变其方向!
- LSTM
- 用LSTM解决梯度弥散问题!
- RNN的memory是short-term-memory,只能记住相近的信息;LSTM(Long short term memory)将记忆的时间序列加长了!
- 对记忆信息ht-1,应用一个"闸门"有目的性的进行过滤,对当下的信息xt也应用一个“闸门”,然后对这两者进行一个“结合”,最后输出的使用也应用一个“闸门”控制信息的输出量!采用sigmoid函数控制输出量!
这里的memory还是Ct,而ht是在Ct基础上的逻辑输出,是直接拿来用的部分,而Ct会继续维护在LSTM里面!
形式化表示如上图,更加形式化的理解如下图(0表示打开,1表示关闭)
- PyTorch中LSTM的使用
- Embedding层本质上是一张表
PyTorch-RNN笔记
最新推荐文章于 2024-08-16 22:27:00 发布