gpt4 book ai didi

python - RNN正则化:要正则化哪个组件?

转载 作者:行者123 更新时间:2023-12-02 09:47:46 25 4
gpt4 key购买 nike

我正在建立一个用于分类的RNN(在RNN之后有一个softmax层)。要进行正则化的选项有很多,我不确定是否只尝试所有这些,效果会一样吗?在什么情况下我应该规范哪些组件?

这些组件是:

  • 内核权重(图层输入)
  • 经常权重
  • 偏置
  • 激活功能(图层输出)
  • 最佳答案

    效果最佳的正则化函数将取决于您的特定体系结构,数据和问题。像往常一样,没有一刀切的规则可以统治一切,但是有(有的)和(尤其是)没有的,还有通过谨慎的内省(introspection)和评估来确定最有效的系统方法。

    RNN正则化如何工作?

    理解它的最佳方法也许是基于信息的。首先,请参阅“学习如何进行?”和“RNN:深度与宽度”。要了解RNN正则化,必须了解RNN如何处理信息和学习,这将在后面的章节中介绍(尽管并不详尽)。现在回答这个问题:

    RNN正则化的目标是任何正则化的目标:最大化信息实用性和遍历测试损失函数。然而,就RNN的重复性而言,具体方法往往存在很大差异-有些方法的效果优于其他方法。见下文。

    RNN正则化方法:

    重量衰减

  • 常规:缩小权重矩阵的范数(“平均值”)
  • 线性化,取决于激活;例如sigmoidtanh,但少一些relu
  • 梯度增强,取决于激活方式;例如sigmoidtanh逐渐变平以进行较大的激活-线性化使神经元能够继续学习
  • 权重:默认activation='sigmoid'
  • 优点:线性化可以帮助BPTT(补救消失梯度),因此还可以学习长期依赖性,因为循环信息实用性得到了增强
  • 缺点:线性化会损害表示能力-但是,可以通过堆叠RNN抵消
  • 内核权重:对于多对一(return_sequences=False),它们的作用类似于典型层上的权重衰减(例如Dense)。但是,对于多对多(=True),内核权重在每个时间步上都起作用,因此适用与上述类似的利弊。

  • 辍学:
  • 激活(内核):可以受益,但仅限于受限制的;实际上,值通常保持小于0.2。问题:往往会引入过多的噪音,并擦除重要的上下文信息,尤其是在时间步长受限的情况下。
  • 反复激活(recurrent_dropout):recommended dropout

  • 批量标准化:
  • 激活(内核):值得尝试。是否可以大幅受益。
  • 反复激活:应该可以更好地工作;参见Recurrent Batch Normalization。据我所知,还没有Keras实现,但是我将来可能会实现。

  • 权重约束:设置权重l2-norm的硬上限;减轻体重的可能替代方法。

    Activity 限制:不要打扰;在大多数情况下,如果您必须手动限制输出,则图层本身的学习可能很差,解决方案在其他地方。

    我应该怎么办? 很多信息-因此,这里有一些具体建议:
  • 权重衰减:尝试1e-31e-4,看看哪个效果更好。不要期望衰减的相同值适用于kernelrecurrent_kernel,尤其是取决于体系结构。检查砝码形状-如果一个比另一个小得多,则对以前的
  • 进行较小的衰减
  • 退出:尝试0.1。如果看到改进,请尝试0.2-否则,将其废弃
  • 经常辍学:从0.2开始。改进-> 0.4。改进-> 0.5,否则为0.3
  • 批处理规范化:尝试。改进->保留它-否则,将其废弃。
  • 循环批处理规范:与4相同。
  • 权重约束:建议采用较高的学习率,以防止梯度爆炸-否则使用较高的权重衰减
  • Activity 约束:可能不是(参见上文)
  • 剩余的RNN :引入重大变化,并具有正则化效果。在 IndRNNs中查看应用程序
  • 偏差:获得良好的反向传播特性后,重量衰减和约束变得很重要。如果不使用偏重权重,而使用核(K)和递归核(RK)权重,则偏重权重的增长速度可能比后两者快得多,并且主导了变换-也导致梯度爆炸。我建议重量衰减/约束小于或等于K和RK所使用的约束。同样,使用BatchNormalization,您不能将use_bias=False设置为“等价”。 BN适用于输出,而不适用于隐藏到隐藏的转换。
  • Zoneout :不知道,从未尝试过,可能会起作用-请参见paper
  • 层规范化:有人报告说RNN的效果比BN更好-但我的应用程序发现它却相反; paper
  • 数据改组:是强大的正则化器。还要混洗批次样品(批次样品)。查看有关stateful RNNs
  • 的相关信息
  • 优化器:可以是固有的正则化器。没有完整的解释,但是在我的应用程序中,Nadam(&NadamW)重踩了其他所有优化器-值得尝试。

  • 内省(introspection):如果没有此内容,“学习”的底部将不值钱;不要只看验证性能,而是称其为一日-检查调整正则化器对权重和激活的影响。评估使用信息的底部和相关理论。

    奖励:体重减轻可能是有力的-如果做对了,甚至会更强大;事实证明,如 this paper中所述,诸如Adam之类的自适应优化器可能会损害其有效性。解决方案:使用AdamW。我的Keras / TensorFlow实现 here

    太多了! 同意-欢迎使用深度学习。这里有两个提示:
  • Bayesian Optimization;可以节省您的时间,尤其是在昂贵的培训上。
  • Conv1D(strides > 1),许多时间步长(>1000);削减尺寸,不应损害性能(实际上可能会改善性能)。


  • 内省(introspection)代码:

    渐变:请参见 this answer

    权重:请参见 this answer

    权重标准跟踪:请参见 this Q & A

    激活:请参见 this answer

    权重: see_rnn.rnn_histogram see_rnn.rnn_heatmap (自述文件中的示例)

    “学习”如何工作?

    很少讨论或强调的机器学习的“最终真相”是 ,我们无法访问我们要优化的函数-测试损失函数。我们所有的工作都是针对真实损耗表面的近似值-训练集和验证集。这具有一些关键的含义:
  • 训练集的全局最优值可能离测试集的全局最优值很远
  • 局部最优并不重要,并且不相关:
  • 训练集局部最优几乎总是更好的测试集最优
  • 对于高维问题,实际的局部最优几乎是不可能的。对于“马鞍”,您需要w.r.t.数以百万计的所有参数立即等于零
  • Local attractors更相关;然后,类比从“跌入坑中”转变为“引力入强地”。一旦进入该字段,您的损失表面拓 flutter 便会绑定(bind)到该字段所设置的拓 flutter ,该字段定义了自己的局部最优值;高LR可以帮助退出场,就像“逃逸速度”

  • 此外,损失函数太复杂而无法直接分析。更好的方法是将分析本地化到各个图层,其权重矩阵以及相对于整个NN的角色。两个关键注意事项是:
  • 特征提取功能。例如:深度分类器的驱动机制是在给定输入数据的情况下,随着每一层的转换来增加类的可分离性。更高质量的功能将过滤掉不相关的信息,并提供输出层(例如softmax)学习单独的超平面所必需的内容。
  • 信息实用程序。死亡的神经元和极端的激活是信息利用不力的主要原因。没有任何一个神经元应该主导信息传递,太多的神经元也不应无目的地撒谎。稳定的激活和权重分布使梯度传播和持续学习成为可能。


  • 正则化如何工作? 首先阅读上文

    简而言之,通过最大化NN的信息实用性并改进对测试损失函数的估计。每个正则化方法都是唯一的,没有两个完全相同的方法-请参见“RNN正则化器”。

    RNN:深度与宽度:不像“一个非线性程度更高,另一个在更高维度上起作用”那样简单。
  • RNN宽度由(1)输入通道数定义; (2)单元过滤器(输出通道)的数量。与CNN一样,每个RNN过滤器都是一个独立的特征提取器:更适合更高复杂度的信息,包括但不限于:维数,模态,噪声,频率。
  • RNN深度由(1)#个堆叠层定义; (2)时间步数。具体细节因架构而异,但从信息的 Angular 来看,RNN不同于CNN,它是密集的:每个时间步都会影响层的最终输出,因此会影响下一层的最终输出-因此它又不像“更多的非线性”那样简单。 ;堆叠的RNN可以利用时空信息。


  • 更新:

    这是一个170多个时间步的近似理想RNN梯度传播的示例:

    这是罕见的,并且是通过仔细的正则化,规范化和超参数调整实现的。通常,在最后几个时间步中,我们会看到一个较大的渐变,该渐变向左急剧下降,即 here。另外,由于模型是有状态的,并且适合7个等效窗口,因此渐变有效地跨越了 1200个时间步

    更新2 :请参阅9 w /新信息和更正

    更新3 :添加体重规范和体重自省(introspection)代码

    关于python - RNN正则化:要正则化哪个组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48714407/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com