人工智能学习:传统RNN模型
传统RNN模型
适用场景:
- 短序列任务:对于较短的序列,传统RNN仍然是一个可行的选择,例如:简单的文本分类、情感分析等。
- 计算资源有限的场景:在计算资源有限的情况下,传统RNN可以作为一种替代方案。
- 作为学习RNN的基础:学习传统RNN是理解更复杂的RNN变体(如LSTM和GRU)的基础。
不适用场景:
- 长序列任务:对于长序列数据,如长文本、长语音等,传统RNN的表现往往不佳,需要使用LSTM或GRU等更高级的模型。
- 需要长期依赖的任务:对于需要记住长期信息的任务,传统RNN难以胜任。
- 对训练稳定性要求较高的任务:由于梯度问题,传统RNN的训练可能不太稳定,需要仔细调整超参数。
一、传统RNN的内部结构图
-
结构解释图:
-
内部结构分析:
我们把目光集中在中间的方块部分,它的输入有两部分:分别是ht−1以及xt,代表上一时间步的隐藏层输出以及此时间步的输入。它们进入RNN结构体后,会”融合”到一起,这种融合我们根据结构解释可知是将二者进行拼接,形成新的张量[xt, ht−1]。之后这个新的张量将通过一个全连接层(线性层),该层使用tanh作为激活函数,最终得到该时间步的输出ht,它将作为下一个时间步的输入和xt+1一起进入结构体。以此类推…
-
内部结构过程演示:
-
根据结构分析得出内部计算公式:
-
激活函数tanh的作用:用于帮助调节流经网络的值,tanh函数将值压缩在-1和1之间。
二、Pytorch构建RNN模型
1、RNN函数
Pytorch中RNN函数为:
Python
out=torch.nn.RNN(input_size,hidden_size,num_layers,batch_first)
每个参数的含义如下:
input_size
:输入数据的维数,也就是词嵌入的维度hidden_size
:隐藏层的维数num_layers
:隐藏层的层数batch_first
:当batch_first设置为True时,输入的参数x顺序变为:(batch_size, seq_len, input_size)
2、输入的表示
输入的表示形式,输入如下图所示:
输入主要有向量x、初始的h0,其中x:(seq_len, batch_size, input_size)
,h0:(num_layers, batch, hidden_size)
,每个参数的含义如下:
seq_len
:输入序列的长度, 也就是句子的长度batch_size
:批次大小, 句子数input_size
:输入特征维度, 就是torch.nn.RNN(input_size,hidden_size,num_layers)
中的input_size
,二者要保持一致num_layers
:隐藏层层数, 与torch.nn.RNN中一致hidden_size
:隐藏层维度数, 与torch.nn.RNN中一致
3、输出的表示
RNN的输出可以是y向量和最后一个时刻隐藏层的输出hT
-
输出是y向量,如下图所示:
y向量的结构为out:(seq_len, batch_size, hidden_size)
,每个参数的意义与上述一致。
-
输出是最后一个时刻隐含层的输出hT,如下图所示: