Python 为什么在训练过程中多次缩小参数将有助于在渐进式训练中所有权重的学习速度相同? 英伟达团队的一篇论文中,特别是“均衡>学习速率是其中一个特殊的问题。通过使用这种方法,他们介绍了

Python 为什么在训练过程中多次缩小参数将有助于在渐进式训练中所有权重的学习速度相同? 英伟达团队的一篇论文中,特别是“均衡>学习速率是其中一个特殊的问题。通过使用这种方法,他们介绍了,python,optimization,deep-learning,gradient,generative-adversarial-network,Python,Optimization,Deep Learning,Gradient,Generative Adversarial Network,我们的方法确保所有权重的动态范围和学习速度相同 具体而言,他们通过正态分布初始化所有可学习的参数。在训练期间,每向前一次,他们将使用He初始值设定项的每层标准化常数来缩放结果 我复制了来自 def前向(自、x、均衡): #根据张量W的大小生成He常数 size=self.module.weight.size() 扇入=产品(尺寸[1:]) 重量=数学sqrt(2.0/扇入) ''' 模块示例: 导入torch.nn作为nn module=nn.Conv2d(nChannelsPrevious,n

我们的方法确保所有权重的动态范围和学习速度相同

具体而言,他们通过正态分布初始化所有可学习的参数。在训练期间,每向前一次,他们将使用He初始值设定项的每层标准化常数来缩放结果

我复制了来自

def前向(自、x、均衡):
#根据张量W的大小生成He常数
size=self.module.weight.size()
扇入=产品(尺寸[1:])
重量=数学sqrt(2.0/扇入)
'''
模块示例:
导入torch.nn作为nn
module=nn.Conv2d(nChannelsPrevious,nChannels,kernelSize,padding=padding,bias=bias)
'''
x=自我模块(x)
如果相等:
x*=自重
返回x
起初,我以为他常数是

通常情况下,so可以放大,这导致反向传播中的梯度增加,因为ProGan论文中的公式可以防止梯度消失

然而,代码显示

总之,我不明白为什么在训练期间多次缩小参数将有助于学习速度更稳定

我在一些社区问过这个问题,例如:人工智能、数学,但至今还没有答案


请帮我解释一下,谢谢

本文中已经解释了在每次过程中缩小参数的原因:

动态执行此操作而不是在初始化期间执行此操作的好处是 这与常用的自适应随机梯度下降中的尺度不变性有关 方法如RMSProp(Tieleman和Hinton,2012)和Adam(Kingma和Ba,2015)。这些 方法通过估计的标准偏差对梯度更新进行规范化,从而进行更新 与参数的比例无关。因此,如果某些参数具有较大的动态 与其他产品相比,它们需要更长的时间进行调整。这是现代初始值设定者造成的一种情况 因此,学习率可能同时太大和太小


我相信在每次传递中乘以He常数可以确保参数的范围在反向传播中的任何一点都不会太宽,因此它们不会花费太长的时间来调整。因此,例如,如果学习过程中鉴别器在某个点的调整速度比生成器快,则生成器不会自行调整,因此,它们的学习过程将相等。

如果有人对我的评价不高,请留下评论并让我知道原因。谢谢您的回答。我同意参数的范围不会太宽,但它也会缩放梯度,如果他们看到自适应SGD(如RMSProp或Adam)的问题,为什么他们不改为动量?你能用公式给我解释一下数学方法吗