系列文章目录
深度循环神经网络
🏷sec_deep_rnn
到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。但是RNN中一个隐藏层不能做很宽,会很过拟合 。
在 RNN(递归神经网络)中,隐藏层的宽度(即隐藏单元的数量)对模型的表现有重要影响。宽度过大的隐藏层可能导致过拟合,原因如下:
1. 模型复杂性增加
- 隐藏层的宽度增加意味着模型的参数数量显著增加。更多的参数可以捕捉到训练数据中的复杂模式,但这也使得模型容易记住训练数据的噪声,而不是学习到通用的特征。
2. 训练数据不足
- 如果训练数据量相对较小,宽的隐藏层可能会导致模型在训练数据上表现很好,但在未见数据(测试数据)上的泛化能力差。过拟合通常发生在模型对训练数据的依赖过强,无法适应新的数据分布。
3. 梯度消失和爆炸
- RNN 本身就容易出现梯度消失或爆炸的问题,尤其在处理长序列时。宽的隐藏层可能加剧这一问题,使得训练过程不稳定,从而影响模型的学习效果。
4. 正则化不足
- 如果模型过于复杂而没有适当的正则化(如 dropout、L2 正则化等),则会更容易过拟合。宽隐藏层在缺乏正则化的情况下,可能会导致对训练数据的过度拟合。
5. 特征冗余
- 宽的隐藏层可能导致特征冗余,许多隐藏单元可能学习到相似的特征,导致模型效率低下,并增加过拟合的风险。
总结
为了避免过拟合,通常需要在模型设计中平衡隐藏层的宽度与训练数据的数量和质量。可以考虑使用正则化方法、减少隐藏单元数量、增加训练数据量或使用更复杂的模型架构(如 LSTM 或 GRU)来提高模型的泛化能力。
其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。
只要交互类型建模具有足够的灵活性,这就不是一个大问题。
然而,对一个单层来说,这可能具有相当的挑战性。
之前在线性模型中,我们通过添加更多的层来解决这个问题。
而在循环神经网络中,我们首先需要确定如何添加更多的层,以及在哪里添加额外的非线性,因此这个问题有点棘手。
事实上,我们可以将多层循环神经网络堆叠在一起,通过对几个简单层的组合,产生了一个灵活的机制。
特别是,数据可能与不同层的堆叠有关。例如,我们可能希望保持有关金融市场状况(熊市或牛市)的宏观数据可用,而微观数据只记录较短期的时间动态。下图描述了一个具有 L L L个隐藏层的深度循环神经网络,每个隐状态都连续地传递到当前层的下一个时间步和下一层的当前时间步。
🏷fig_deep_rnn
函数依赖关系
我们可以将深度架构中的函数依赖关系形式化,这个架构是由 :numref:fig_deep_rnn
中描述了 L L L个隐藏层构成。
后续的讨论主要集中在经典的循环神经网络模型上,但是这些讨论也适应于其他序列模型。
假设在时间步 t t t有一个小批量的输入数据 X t ∈ R n × d \mathbf{X}_t \in \mathbb{R}^{n \times d} Xt∈Rn×d(样本数: n n n,每个样本中的输入数: d d d)。
同时,将 l t h l^\mathrm{th} lth隐藏层( l = 1 , … , L l=1,\ldots,L l=1,…,L)的隐状态设为 H t ( l ) ∈ R n × h \mathbf{H}_t^{(l)} \in \mathbb{R}^{n \times h} Ht(l)∈Rn×h(隐藏单元数: