我正在构建一个用于分类的 RNN(在 RNN 之后有一个 softmax 层)。规范化的选项有很多,我不确定是否只尝试所有选项,效果会一样吗?我在什么情况下规范化哪些组件?
组件是:
- 内核权重(层输入)
- 经常性权重
- 偏见
- 激活函数(层输出)
我正在构建一个用于分类的 RNN(在 RNN 之后有一个 softmax 层)。规范化的选项有很多,我不确定是否只尝试所有选项,效果会一样吗?我在什么情况下规范化哪些组件?
组件是:
效果最好的正则化器将取决于您的特定架构、数据和问题;像往常一样,没有一个单一的削减来统治所有,但有做和(特别是)不做的,以及确定什么最有效的系统方法- 通过仔细的内省和评估。
RNN 正则化是如何工作的?
也许理解它的最好方法是基于信息的。首先,请参阅“‘学习’如何运作?” 和“RNN:深度与宽度”。要了解 RNN 正则化,必须了解 RNN 如何处理信息和学习,参考部分对此进行了描述(尽管并非详尽无遗)。现在回答这个问题:
RNN 正则化的目标是任何正则化的目标:最大化信息效用和测试损失函数的遍历。然而,根据 RNN 的循环性质,具体方法往往有很大差异——有些方法比其他方法效果更好;见下文。
RNN 正则化方法:
体重衰减
一般:缩小权重矩阵的范数(“平均”)
sigmoid
, tanh
, 但较少relu
sigmoid
,对于大的激活,tanh
毕业生变得平坦-线性化使神经元能够继续学习。循环权重:默认activation='sigmoid'
内核权重:对于多对一(return_sequences=False
),它们的工作方式类似于典型层(例如Dense
)上的权重衰减。=True
但是,对于多对多(
辍学:
0.2
实际值。问题:往往会引入过多的噪音,并删除重要的上下文信息,尤其是在时间步长有限的问题中。recurrent_dropout
):推荐的 dropout批量标准化:
权重约束:设置权重 l2-norm 的硬上限;可能替代重量衰减。
活动限制:不要打扰;对于大多数目的,如果您必须手动限制输出,则该层本身可能学习不佳,而解决方案在其他地方。
我应该怎么办?很多信息 - 所以这里有一些具体的建议:
体重衰减:试试1e-3
,1e-4
看看哪个效果更好。不要期望相同的衰减值适用于和kernel
,recurrent_kernel
尤其是取决于架构。检查重量形状 - 如果一个比另一个小得多,则对前者应用较小的衰减
辍学:尝试0.1
。如果您看到改进,请尝试0.2
- 否则,放弃它
经常性辍学:从0.2
. 改进 --> 0.4
。改进 --> 0.5
,否则0.3
。
BatchNormalization
,您use_bias=False
BN 适用于输出,而不是隐藏到隐藏的转换。内省:没有这个,关于“学习”的底部部分就不值钱了;不要只看验证性能并收工 -检查调整正则化器对权重和激活的影响。使用信息向底部和相关理论进行评估。
奖励:重量衰减可能很强大 - 如果做得好,效果会更强大;事实证明,像 Adam 这样的自适应优化器会损害其有效性,如本文所述。解决方案:使用 AdamW。我的 Keras/TensorFlow 实现在这里。
这太多了!同意 - 欢迎来到深度学习。这里有两个提示:
Conv1D(strides > 1)
, 对于许多时间步长 ( >1000
); 削减维度,不应该损害性能(实际上可能会改善它)。自省代码:
渐变:看到这个答案
重量:看到这个答案
体重标准跟踪:请参阅此问答
激活:看到这个答案
权重:see_rnn.rnn_histogram
或see_rnn.rnn_heatmap
(自述文件中的示例)
“学习”如何运作?
很少讨论或强调的机器学习的“终极真理”是,我们无法访问我们试图优化的函数——测试损失函数。我们所有的工作都是真实损失表面的近似值——训练集和验证集。这有一些重要的含义:
此外,损失函数过于复杂,无法直接分析;更好的方法是将分析定位到各个层、它们的权重矩阵以及相对于整个 NN 的角色。两个关键考虑因素是:
特征提取能力。例如:深度分类器的驱动机制是,给定输入数据,通过每一层的变换来增加类可分离性。更高质量的特征将过滤掉不相关的信息,并提供输出层(例如softmax)学习分离超平面所必需的信息。
信息实用程序。死神经元和极端激活是信息效用差的主要原因;没有一个神经元应该主导信息传递,太多的神经元不应该无目的。稳定的激活和权重分布使梯度传播和持续学习成为可能。
正则化如何工作?先读上面
简而言之,通过最大化 NN 的信息效用,并改进对测试损失函数的估计。每种正则化方法都是独一无二的,没有两个完全相同 - 请参阅“RNN 正则化器”。
RNN:深度与宽度:不像“一个更非线性,其他工作在更高维度”那么简单。
更新:
以下是 170 多个时间步的近乎理想的 RNN 梯度传播示例:
这是罕见的,是通过仔细的正则化、标准化和超参数调整来实现的。通常我们会看到最后几个时间步长的梯度很大,向左急剧下降 - 就像这里一样。此外,由于模型是有状态的并且适合 7 个等效窗口,因此梯度有效地跨越了1200 个时间步长。
更新 2:见 9 带新信息和更正
更新 3:添加权重规范和权重自省代码