Python RNN正则化:要正则化哪个组件?
我正在构建一个用于分类的RNN(RNN后面有一个softmax层)。有这么多的选择来规范什么,我不确定如果只是尝试所有这些,效果会一样吗?在什么情况下,我应该规范哪些组件 这些组成部分包括:Python RNN正则化:要正则化哪个组件?,python,keras,deep-learning,recurrent-neural-network,regularized,Python,Keras,Deep Learning,Recurrent Neural Network,Regularized,我正在构建一个用于分类的RNN(RNN后面有一个softmax层)。有这么多的选择来规范什么,我不确定如果只是尝试所有这些,效果会一样吗?在什么情况下,我应该规范哪些组件 这些组成部分包括: 内核权重(层输入) 循环权重 偏倚 激活功能(图层输出) 最有效的正则化器取决于您特定的体系结构、数据和问题;像往常一样,没有一个单一的切入点来决定一切,但有做什么和(特别是)不做什么,以及通过仔细的反省和评估来确定什么最有效的系统方法 RNN正则化是如何工作的? 也许理解它的最好方法是基于信息的。首先
- 内核权重(层输入)
- 循环权重
- 偏倚
- 激活功能(图层输出)
RNN正则化是如何工作的? 也许理解它的最好方法是基于信息的。首先,请参阅“学习”是如何工作的?”和“RNN:深度与宽度”。要理解RNN正则化,必须理解RNN如何处理信息和学习,参考章节对此进行了描述(尽管并非详尽)。现在回答问题: RNN正则化的目标是任何正则化的目标:最大化信息效用和测试损失函数的遍历。然而,根据RNN的复发性质,其具体方法往往有很大的不同,有些方法比其他方法更有效;见下文
RNN正则化方法: 重量衰减
- 线性化,取决于激活;e、 g.
,sigmoid
,但tanh
relu
- 梯度增强,取决于激活;e、 g.
,sigmoid
梯度变平,用于大的激活-线性化使神经元能够持续学习tanh
activation='sigmoid'
- 优点:线性化可以帮助BPTT(补救消失梯度),因此也可以学习长期相关性,因为重复信息效用增加
- 缺点:线性化可能损害代表性力量-但是,这可以通过叠加RNN来抵消
return\u sequences=False
),它们的工作原理类似于典型层上的权重衰减(例如密集
)。然而,对于多对多(=True
),内核权重在每个时间步上运行,因此类似于上述的优点和缺点将适用- 激活(内核):可以受益,但只有在有限的情况下;在实践中,值通常保持在
以下。问题:往往会引入太多噪音,并删除重要的上下文信息,特别是在时间步长有限的问题中0.2
- 反复激活(
):反复退出
- 激活(内核):值得一试。可以从中受益,也可以不受益
- 反复激活:应能更好地工作;看见据我所知,还没有Keras实现,但我可能在将来实现它
我该怎么办?有很多信息-这里有一些具体的建议:
1e-3
,1e-4
,看看哪个效果更好。不要期望相同的衰减值适用于内核
和内核
,特别是取决于体系结构。检查重量形状-如果一个比另一个小得多,则对前者应用较小的衰减0.1
。如果您看到改进,请尝试0.2
-否则,放弃它0.2开始。改进-->0.4
。改进-->0.5
,否则0.3
BatchNormalization
,您不能将使用_bias=False
设置为“等效项”;BN应用于输出,而不是隐藏到隐藏变换