贝叶斯神经网络¶
HiddenLayer¶
- class HiddenLayer(X=None, A_mean=None, A_scale=None, non_linearity=<function relu>, KL_factor=1.0, A_prior_scale=1.0, include_hidden_bias=True, weight_space_sampling=False)[source]¶
这种分布是贝叶斯神经网络中的一个基本构建块。它表示一个单一隐藏层,即对输入 X 应用仿射变换后接非线性激活。权重的不确定性通过由参数 A_scale 和 A_mean 指定的正态变分分布来编码。使用所谓的“局部重新参数化技巧”来减少方差(参见下面的参考文献)。实际上,这意味着权重永远不会直接采样;相反,是在预激活空间(即应用非线性之前)进行采样。由于权重从未直接采样,当在变分推断的上下文中使用此分布时,必须注意正确缩放与权重矩阵对应的 KL 散度项。此项已包含在此分布的 log_prob 方法中。
实际上,此分布编码了以下生成过程:
A ~ Normal(A_mean, A_scale) output ~ non_linearity(AX)
- 参数
X (torch.Tensor) – B x D 维度的输入小批量
A_mean (torch.Tensor) – D x H 维度的权重均值
A_scale (torch.Tensor) – D x H 维度的(对角协方差矩阵)指定权重不确定性
non_linearity (callable) – 指定所用非线性的可调用对象。默认为 ReLU。
KL_factor (float) – KL 散度的缩放因子。通常等于小批量的尺寸除以整个数据集的尺寸。默认为 1.0。
A_prior (float or torch.Tensor) – 权重上的先验分布假定为均值为零、尺度因子为 A_prior 的正态分布。默认值为 1.0。
include_hidden_bias (bool) – 控制激活是否应通过添加 1 来增强,这可用于包含偏置项。默认为 True。
weight_space_sampling (bool) – 控制是否使用局部重新参数化技巧。这仅用于内部测试。默认为 False。
参考文献
Kingma, Diederik P., Tim Salimans, and Max Welling. “Variational dropout and the local reparameterization trick.” Advances in Neural Information Processing Systems. 2015.