Python RNN正则化:要正则化哪个组件?

Python RNN正则化:要正则化哪个组件?,python,keras,deep-learning,recurrent-neural-network,regularized,Python,Keras,Deep Learning,Recurrent Neural Network,Regularized,我正在构建一个用于分类的RNN(RNN后面有一个softmax层)。有这么多的选择来规范什么,我不确定如果只是尝试所有这些,效果会一样吗?在什么情况下,我应该规范哪些组件 这些组成部分包括: 内核权重(层输入) 循环权重 偏倚 激活功能(图层输出) 最有效的正则化器取决于您特定的体系结构、数据和问题;像往常一样,没有一个单一的切入点来决定一切,但有做什么和(特别是)不做什么,以及通过仔细的反省和评估来确定什么最有效的系统方法 RNN正则化是如何工作的? 也许理解它的最好方法是基于信息的。首先

我正在构建一个用于分类的RNN(RNN后面有一个softmax层)。有这么多的选择来规范什么,我不确定如果只是尝试所有这些,效果会一样吗?在什么情况下,我应该规范哪些组件

这些组成部分包括:

  • 内核权重(层输入)
  • 循环权重
  • 偏倚
  • 激活功能(图层输出)

最有效的正则化器取决于您特定的体系结构、数据和问题;像往常一样,没有一个单一的切入点来决定一切,但有做什么和(特别是)不做什么,以及通过仔细的反省和评估来确定什么最有效的系统方法


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实现,但我可能在将来实现它
    权重约束:设置权重l2范数的硬上限;重量衰减的可能替代方案

    活动限制:不必麻烦;在大多数情况下,如果必须手动约束输出,层本身可能学习不好,解决方案在别处


    我该怎么办?有很多信息-这里有一些具体的建议:

  • 重量衰减:尝试
    1e-3
    1e-4
    ,看看哪个效果更好。不要期望相同的衰减值适用于
    内核
    内核
    ,特别是取决于体系结构。检查重量形状-如果一个比另一个小得多,则对前者应用较小的衰减

  • 退出:尝试
    0.1
    。如果您看到改进,请尝试
    0.2
    -否则,放弃它

  • 经常性辍学:从
    0.2开始。改进-->
    0.4
    。改进-->
    0.5
    ,否则
    0.3

  • 批量标准化:尝试。改进-->保留它-否则,废弃它
  • 经常性批处理规范:与4相同
  • 权重约束:建议使用更高的学习率来防止梯度爆炸-否则使用更高的权重衰减
  • 活动约束:可能不会(见上文)
  • 残余RNN:沿规则化效应引入显著变化。请参阅中的应用程序
  • 偏差:权重衰减和约束在获得良好的反向传播特性时变得非常重要;如果没有偏差权重,但使用核(K)和递归核(RK)权重,偏差权重的增长速度可能比后两者快得多,并主导转换-也会导致梯度爆炸。我建议重量衰减/约束小于或等于K&RK上使用的重量衰减/约束。此外,使用
    BatchNormalization
    ,您不能将
    使用_bias=False
    设置为“等效项”;BN应用于输出,而不是隐藏到隐藏变换
  • Zoneout:不知道,从未尝试过,可能有用-请参阅
  • 层规范化:一些人报告它比RNN的BN工作得更好-但我的应用程序发现它不是这样
  • 数据洗牌:是一种强正则化程序。还可以洗牌批次样本(批次中的样本)。有关详细信息,请参阅
  • 优化器:可以是固有的正则化器。没有一个完整的解释,但在我的