logo

模型调参

王哲峰 / 2022-07-15


目录

参数初始化

在神经网络的学习中,权重 $W$ 的的初始值特别重要。 设定什么样的权重初始值,经常关系到神经网络的学习能否成功。

不能将权重初始值全部设为 0,因为在误差反向传播中,所有权重都会进行相同的更新。 比如:在两层神经网络中,假设第 1 层和第 2 层的权重为 0,这样一来,正向传播时, 因为输入层的权重是 0,所有第 2 层的权重神经元全部会被传递相同的值。 第 2 层的神经元中全部输入相同的值,这意味着反向传播时第 2 层的权重全部都会进行相同的更新, 因此,权重被更新为相同的值,并拥有了对称的值,这使得神经网络拥有许多不同的权重的意义就丧失了。 为了防止“权重均一化”,必须随机生成初始值

梯度消失(gradient vanishing):

表现力受限:

各层的激活函值的分布都要求有适当的广度:

Xavier初始值

Xavier 初始值

在 Xavier Glorot 等人的论文中,推荐了权重初始值,俗称 “Xavier初始值”。 在一般的深度学习框架中,Xavier 初始值已经被作为标准使用。

Xavier 的论文中,为了使各层的激活值呈现出具有相同广度的分布,推导了合适的权重尺度。结论就是: 如果前一层的节点数为 $n$,则初始值使用标准差为 $\frac{1}{\sqrt{n}}$ 的分布。

He 初始值

He 初始值

Xavier 初始值是以激活函数是线性函数为前提推导出来的, 因为 Sigmoid 函数和 tanh 函数左右对称, 且中央附近可以视作线性函数,所以适合使用 Xavier 初始值。

当激活函数使用 ReLU 函数时,一般推荐 ReLU 专用的初始值, Kaiming He 等人推荐了一种初始值,俗称 “He 初始值”。 结论就是:如果前一层的节点数为 $n$,则初始值使用标准差为 $\sqrt{\frac{2}{n}}$ 的高斯分布。

结论

PyTorch 参数初始化

torch.nn.init 模块中的所有函数旨在用于初始化神经网络参数, 因此它们都在 torch.no_grad() 模式中运行,不会被 autograd 考虑在内。

常用分布初始化

常数初始值

Glorot 初始化

He 初始化

import torch.nn as nn

w = torch.empty(3, 5)
nn.init.kaiming_uniform_(w)

狄利克雷初始化

Fills the {3, 4, 5}-dimensional input Tensor with the Dirac delta function. Preserves the identity of the inputs in Convolutional layers, where as many input channels are preserved as possible. In case of groups>1, each group of channels preserves identity

其他

稀疏初始化

TensorFlow 参数初始化

Initializers 的使用方法

初始化定义了设置 Keras Layer 权重随机初始的方法

常数初始化器

分布初始化器

tf.keras.initializers.RandomNormal(mean = 0.0, stddev = 0.05, seed = None)

矩阵初始化器

tf.keras.initializers.VarianveScaling(scale = 1.0, mode = "fan_in", distribution = "normal", seed = None) - 根据权值的尺寸调整其规模 tf.keras.initializers.Orthogonal(gain = 1.0, seed = None) - 随机正交矩阵 tf.keras.initializers.Identity(gain = 1.0) - 生成单位矩阵的初始化器。仅用于 2D 方阵

LeCun 分布初始化器

tf.keras.initializers.lecun_normal()

tf.keras.initializers.lecun_uniform()

Glorot 分布初始化器

tf.keras.initializers.glorot_normal()

tf.keras.initializers.glorot_uniform()

He 正态分布和均匀分布初始化器

tf.keras.initializers.he_normal(): He 正态分布初始化器

tf.keras.initializers.he_uniform(): He 均匀分布方差缩放初始化器

自定义初始化器

超参数的调优

神经网络中的超参数是指,各层的神经元数量、batch 大小、参数更新时的学习率、权值衰减参数(正则化参数)等

参考