from:
http://www.fields.utoronto.ca/talks/MCMC-Training-Bayesian-Neural-Networks
一、贝叶斯神经网络模型 Bayesian neural network models
1.多层感知器神经网络
我将讨论利用多层感知器神经网络的回归和分类模型。
网络使用一定数量的隐藏单元层从输入
x
1
,
.
.
.
,
x
p
x_1,...,x_p
x1,...,xp 计算输出
o
1
,
…
…
…
,
O
q
o_1,………,O_q
o1,………,Oq。
例如,具有
N
N
N 和
M
M
M 个单元的两个隐藏层:
o k ( x ) = c k + ∑ j = 1 M w j k g j ( x ) , g k ( x ) = G ( b k + ∑ j = 1 N v i k h j ( x ) ) , h k ( x ) = F ( a x + ∑ j = 1 p u j k x j ) i s : X → H → G → O o_k(x)=c_k+\sum_{j=1}^M w_{jk}g_j(x),g_k(x)=G(b_k+\sum_{j=1}^Nv_{ik}h_j(x)),h_k(x)= F(a_x+\sum_{j=1}^pu_{jk}x_j) is :X→H→G→O ok(x)=ck+j=1∑Mwjkgj(x),gk(x)=G(bk+j=1∑Nvikhj(x)),hk(x)=F(ax+j=1∑pujkxj)is:X→H→G→O
F
F
F 和
G
G
G 是层的激活函数。 我将使用
t
a
n
h
tanh
tanh 或
s
o
f
t
p
l
u
s
(
s
)
=
l
o
g
(
1
+
e
x
p
(
s
)
)
softplus(s) =log(1 +exp(s))
softplus(s)=log(1+exp(s)) 作为激活函数。
该网络的参数是权重
u
、
v
u、v
u、v 和
w
w
w,以及偏差
a
、
b
a、b
a、b 和
c
c
c。 我将使用
θ
\theta
θ 来表示所有这些。
比如:
- 从输入到隐藏层的直接连接(或到输出)
- 从一层跳过连接到下一层(或输出)。
- 稀疏或权重共享层之间的连接(例如,卷积层)
2.来自神经网络的模型
我将使用多层感知器网络来构建非线性回归或分类模型,它指定给定输入变量的目标变量的分布。 对于回归,我们使用具有一个输出
o
(
x
)
o(x)
o(x) 的网络,令:
y
∣
x
,
θ
,
σ
−
G
a
u
s
s
i
a
n
(
o
(
x
)
,
σ
2
y|x,\theta,σ - Gaussian(o(x),σ^2
y∣x,θ,σ−Gaussian(o(x),σ2
请注意,
o
(
x
)
o(x)
o(x) 取决于网络参数
θ
\theta
θ,并且
σ
\sigma
σ 是附加的模型参数。
对于二元分类,我们可以在逻辑模型中使用一个输出:
P
(
y
=
1
∣
x
,
θ
)
=
1
1
+
e
x
p
(
−
o
(
x
)
)
P(y=1|x,\theta)=\frac {1}{1+exp(-o(x))}
P(y=1∣x,θ)=1+exp(−o(x))1
对于具有
q
q
q 个类别的分类,我们使用与“softmax”(多项 logit)模型中的类别一样多的输出:
P
(
y
=
k
∣
x
,
θ
)
=
exp
(
o
k
(
x
)
)
∑
j
=
1
q
exp
(
o
j
(
x
)
)
P(y=k|x,\theta) =\frac {\exp(o_k(x))}{\sum_{j=1}^q\exp(o_j(x))}
P(y=k∣x,θ)=∑j=1qexp(oj(x))exp(ok(x))
3. 新的和老的非贝叶斯训练
神经网络模型可以通过批量梯度下降以某种误差度量进行训练。 当误差减去目标的对数概率时,这就是最大似然估计。 或者可以进行在线梯度下降(一次只看一个案例)。
过度拟合训练数据的可能性很大。为了避免这种典型的做法。
大约在 1990 年可能涉及
- 限制网络的复杂性(例如,层数,每层隐藏单元的数量)。
- 使用重新标准化(例如,权重衰减),使用批处理或在线梯度下降
- 提前停止训练 - 故意使用验证集,或者意外,因为计算机太慢而无法训练到过度拟合的程度
更现代的操作:
- 更复杂的网络,更多的数据。
- 梯度下降与小批量。
- 随机修改,例如dropout.
- 早期停止,ensembles。
但为什么它会起作用?
4.神经网络模型的贝叶斯方法
只有几个隐藏单元的网络不是一个合理的模型——例如,我们需要三个 t a n h tanh tanh 函数之和的真正函数很少。
但是具有许多隐藏单元的网络是一个合理的“非参数”模型,因为这样具有足够的隐藏单元的网络可以任意逼近任何函数。
所以我们应该使用一个有很多隐藏单元的网络。但是,最大似然估计会导致严重的过度拟合和泛化性差。
贝叶斯方法[MacKay 1992 Neal 1995] 始终使用概率
- 定义网络参数的先验分布,代表我们在看到任何数据之前认为实际功能可能是什么
- 找到参数的后验分布,它结合了来自先验数据和训练数据的信息
- 通过平均模型在使用从该后验分布中提取的参数时所做的预测,找到测试用例的预测分布
理想情况下,网络和先验的选择基于我们对正在解决的任务的了解——尽管在实践中,我们受限于对这些网络模型含义的理解以及我们的计算资源。
5.先验函数的高斯极限
[ Neal 1995 ]
考虑由具有一个隐藏层的网络定义的先验函数,其中参数具有独立的高斯先验分布。我们能看到其极限是隐藏单元的数量
N
N
N 趋于无穷大。
对于函数的一个分量
k
k
k,在单个点
x
(
1
)
x^{(1)}
x(1) 处求值:
o
k
(
x
(
1
)
)
=
b
k
+
∑
j
=
1
N
v
j
k
h
j
(
x
(
1
)
)
o_k(x^{(1)}) = b_k + \sum_{j=1}^N v_{jk}h_j(x^{(1)})
ok(x(1))=bk+j=1∑Nvjkhj(x(1))
上面的第一项是高斯。
根据中心极限定理,当每个项具有有限方差时,随着
N
→
o
o
N→oo
N→oo,第二项变为高斯。当
u
j
k
u_{jk}
ujk 为高斯且隐藏单元激活函数有界(例如 tanh)时,方差是有限的,对于其他常见的激活函数,使用高斯先验作为输入层和隐藏层连接的权重和偏差。
因此
o
k
(
x
(
1
)
)
o_k(x^{(1)})
ok(x(1))对于大的
N
N
N变成高斯分布。如果我们将
σ
v
\sigma_v
σv尺度设为
N
−
1
2
N^{-\frac {1}2}
N−21,它的分布将达到一个极限。
类似地,函数在任意数量的输入点处的联合分布收敛于多元高斯,即,我们对函数有高斯过程的先验。
6:高斯网络先验的一些性质
- 当隐藏单元数趋于无穷时,隐藏输出权值趋于0,所以隐藏单位本身并不重要。
- 具有平滑的隐藏单元激活功能,函数顺畅,具有
C o r [ o ( x ( 1 ) ) , o ( x ( 2 ) ) ] ≈ 1 − ∣ x ( 1 ) − x ( 2 ) ∣ 2 Cor [o(x^{(1)}),o(x^{(2)}) ]≈1-|x^{(1)}-x^{(2)}|^2 Cor[o(x(1)),o(x(2))]≈1−∣x(1)−x(2)∣2
-
如果隐单元使用阶跃函数,则函数是局部布朗函数
C o r [ o ( x ( 1 ) ) , o ( x ( 2 ) ) ] ≈ 1 − ∣ x ( 1 ) − x ( 2 ) ∣ Cor [o(x^{(1)}),o(x^{(2)}) ]≈1-|x^{(1)}-x^{(2)}| Cor[o(x(1)),o(x(2))]≈1−∣x(1)−x(2)∣ -
不同输出单元计算的函数是独立的。
-
即使有更多的隐藏层,我们仍然得到高斯过程的先验(有一个不同的协方差函数)- CLT参数可以依次应用到每个隐藏层[Lee et al, 2017]。
注意,如果你可以计算高斯过程的协方差函数,你可以直接使用矩阵运算来做推断,不需要实际的网络!
7. 基于非高斯稳定分布的先验
[Neal 1995,Der and Lee 2005]
如果
X
1
,
…
,
X
n
X_1,…,X_n
X1,…,Xn是索引
α
∈
(
0
,
2
]
\alpha∈(0,2]
α∈(0,2]的对称稳定分布的独立同分布。
(
X
1
+
…
…
+
X
n
)
N
−
1
/
α
(X_1 +……+ X_n) N^{-1/\alpha}
(X1+……+Xn)N−1/α
具有相同的稳定分布。如果
X
X
X 处于稳定分布的“正态吸引域”,则当
N
→
∞
N→∞
N→∞也是如此——这是中心极限定理的推广。
如果我们赋予各层之间连接的权重一个先验,使一个单元对下一层单元的贡献分布在指数稳定分布的吸引的正态域内,并将先验的宽度缩放为
N
−
1
/
α
N{-1/\alpha}
N−1/α,我们得到一个定义良好的
N
→
∞
N→∞
N→∞极限。
示例:对于tanh单位(有界值),使用带有宽度的柯西先验参数缩放为 N − 1 N^{-1} N−1。更一般地,我们可以使用自由度为 α ∈ ( 0 , 2 ) \alpha∈(0,2) α∈(0,2)的分布 t t t,并按 N − 1 / α N^{-1/\alpha} N−1/α 进行缩放。
8.非高斯稳定先验的性质
- 当 N → ∞ N→∞ N→∞时,隐藏到输出的权重不趋于零,而是渐进地来自泊松过程(这是定义先验的另一种方法)。因此,一些单独的隐藏单元具有显著的影响——可以从数据中发现“隐藏特征”。
- 不同输出单元计算的函数是独立的。但它们可以相互依赖而不相互关联,通过从相同的隐藏单元是相互依赖的。“隐藏特征”可以在输出之间共享。
- 具有多个隐藏层的网络(可能混合了高斯和非高斯先验)可以产生有趣的新效果。
分析非高斯稳定过程比分析高斯稳定过程困难得多。
在极限过程中没有可行的方法直接进行推断。所以实际的网络可能还是有用的!
9.神经网络模型的超参数
我们给出权重的先验,例如输入到隐藏的权重 u i j : G a u s s i a n ( 0 , σ u 2 ) u_{ij}:Gaussian(0,\sigma_u^2) uij:Gaussian(0,σu2),影响从网络中提取的函数的性质。这里是三个函数(一个输入)的样本,使用高斯先验对具有1000个单位的隐含层的网络绘制,使用两个不同的 σ u 2 σ_u^2 σu2。
较大的 σ u σ_u σu产生“wigglier”函数。通常情况下,我们不知道函数应该有多大的波动。所以我们设一个变量超参数,给 σ u σ_u σu一个跨越几个数量级的先验分布。
10. 层次化超先验:自动相关性判定
可以使用更详细的超参数先验来考虑数据的各种可能的高级特征。一个非常有用的例子是自动相关性确定先验。
当我们有很多输入时,我们常常不确定每个输入对预测目标变量的相关性。我们可以通过使用输入到隐藏权重的先验来表示这种不确定性,如下所示:
u
i
j
∣
σ
u
,
i
:
G
a
u
s
s
i
a
n
(
0
,
σ
u
,
i
2
)
,
f
o
r
i
=
1
,
.
.
.
.
.
,
p
a
n
d
j
=
1
,
.
.
.
.
.
,
N
u_{ij} |σ_{u,i} :Gaussian(0,\sigma^2_{u,i}), for i = 1,....., p and j = 1,....., N
uij∣σu,i:Gaussian(0,σu,i2),fori=1,.....,pandj=1,.....,N
1
/
σ
u
,
i
2
∣
σ
u
,
∗
:
g
a
m
m
a
(
m
e
a
n
=
1
/
σ
u
,
∗
2
,
s
h
a
p
e
=
…
)
,
f
o
r
i
=
1
,
…
,
p
1 /σ^2_{u,i} |σ_{u,*} : gamma(mean = 1 / \sigma^2_{u,*},shape=…), for i= 1,…,p
1/σu,i2∣σu,∗:gamma(mean=1/σu,∗2,shape=…),fori=1,…,p
1
/
σ
u
,
∗
2
:
g
a
m
m
a
(
…
)
1 / \sigma^2_{u,*}: ~gamma(…)
1/σu,∗2: gamma(…)
这里,
σ
u
,
i
σ_{u,i}
σu,i 控制从输入
i
i
i 到隐藏单位的权重的大小。
如果它很小,这个输入很大程度上将被忽略。顶层超参数
σ
u
,
∗
\sigma_{u,*}
σu,∗,控制低层
σ
u
,
i
σ_{u,i}
σu,i 的分布。
11.基于贝叶斯神经网络模型的预测
为了对一个新的测试用例进行预测,我们将模型的预测在参数的后验分布上取平均值。对于分类模型,对给定输入的类
y
∗
y^*
y∗的预测,基于
n
n
n个独立训练用例的
x
∗
x^*
x∗具有这样的形式
P
(
y
∗
=
k
∣
x
∗
,
x
(
1
)
,
y
(
1
)
…
…
,
x
(
n
)
,
y
(
m
)
)
=
∫
P
(
y
∗
=
k
∣
x
∗
,
θ
)
P
(
θ
∣
x
(
1
)
,
y
(
1
)
…
…
,
x
(
n
)
,
y
(
m
)
)
P (y^* = k | x^* ,x^{(1)}, y^{(1)}……,x^{(n)}, y^{(m)} )= \int P (y^* = k | x^*, \theta) P (\theta | x^{(1)}, y^{(1)}……,x^{(n)}, y^{(m)})
P(y∗=k∣x∗,x(1),y(1)……,x(n),y(m))=∫P(y∗=k∣x∗,θ)P(θ∣x(1),y(1)……,x(n),y(m))
θ
\theta
θ 的后验分布由下给出
P
(
θ
∣
x
(
1
)
,
y
(
1
)
…
…
,
x
(
n
)
,
y
(
m
)
)
∝
p
(
θ
)
∏
i
=
1
n
p
(
y
(
i
)
∣
θ
,
x
(
i
)
)
P (\theta | x^{(1)}, y^{(1)}……,x^{(n)}, y^{(m)} )∝ p(\theta)\prod_{i=1}^np(y^{(i)}|\theta,x^{(i)})
P(θ∣x(1),y(1)……,x(n),y(m))∝p(θ)i=1∏np(y(i)∣θ,x(i))
这个积分在分析上是不容易处理的,所以我们必须用一些近似,或使用蒙特卡罗方法,将积分替换为从后验分布中提取的 θ \theta θ的平均值。
11. 神经网络模型贝叶斯方法的好处
- 贝叶斯模型和先验的意义可以通过观察先验样本等方法来理解——它不是一个不可解释的“黑箱”。(尽管在实践中解释复杂的模型可能很困难。)
- 贝叶斯推断的预测不仅包含了由于被建模过程而产生的不确定性,还包含了由于我们对过程的不完全了解而产生的不确定性(反映在网络参数的后验分布中)。
- 模型可以通过使用作为概率模型一部分的超参数来了解问题的高级方面,例如哪些输入是相关的。理论上,不需要为此保留验证集。(实际上,保留一些数据进行验证是谨慎的做法。)
- 过拟合应该不是问题,如果模型和先验设置正确,一个好的模型应该是这样的,不管我们有多少数据。没有“偏差方差权衡”。
当然,只有当我们能够可行地执行贝叶斯推理所需的计算时,这些好处才能在实践中得到。
12.实现贝叶斯神经网络
对网络参数的后验分布进行积分以产生预测是一个非常具有挑战性的问题。一些方法:
- 对后验模做高斯近似,基于对数似然的二阶导数[MacKay19921]。但这并没有很好地捕捉到真实的,高度非高斯后验。
- 使用基于高斯分布或其他简单类近似分布的“变分”近似。同样,不太可能捕捉到真正的后部
- 使用马尔可夫链蒙特卡洛(MCMC),它是渐近精确的,在长期运行的极限。
使用H&miltonian蒙特卡罗方法[Duaneet al 1987,Neal 2010]对于中等规模的问题非常有效[Neal 1995Neal 2006,Neal and Zhang 2006]
我感兴趣的是,使用更大的网络,精确的MCMC方法能在多大程度上解决更大的问题。
二、马尔可夫链蒙特卡罗的实现 Implementaton with Markov Chain Monte Carlo
1.马尔可夫链蒙特卡洛(MCMC)
思想:
- 以某种方式初始化网络参数和超参数(可能是随机的)。
- 从初始状态开始模拟一个遍历马尔可夫链,使其收敛到给定训练数据的参数和超参数的后验分布。
- 在(近似)收敛点之后进行迭代估计测试用例的预测分布,通过使用具有来自每次迭代的参数的网络来平均预测。
也可以初始化和模拟几个链,并在进行预测时结合所有链的状态。
但是我们如何定义一个收敛于后验分布的马尔可夫链呢?
一种方法是使用随机游走Metropolis算法[Metropolis, et al,1953]
- 对于每个过渡,提出一个小的状态变化,然后根据后验概率的变化接受或拒绝这个变化。
这是一种非常通用的技术,适用于大量的模型。
2.哈密顿蒙特卡罗用于贝叶斯神经网络
[Neal 1995]
不幸的是,除了“玩具”贝叶斯神经网络问题,使用简单的随机游走Metropolis更新收敛到后验分布的速度慢得令人绝望。
但哈密顿蒙特卡罗(HMC)的工作效果要好得多——利用通常的“backprop”方法获得的梯度信息,它可以大量改变网络参数,而不受随机漫步行为的惩罚。
每次HMC更新包括以下步骤:
- 随机抽样“动量”变量,在参数空间中建立移动方向。动量是高斯分布状态的一部分。
- 模拟(近似地)一段模拟时间内的哈密顿动力学轨迹,可能产生参数的实质性变化。这将需要执行许多“跨越式”步骤,这与标准的“动量梯度下降”方法(使用“批处理”梯度)的步骤类似。
- 通过通常的Metropolis准则 P r ( a c c e p t ) = m i n ( 1 , P ( e n d ) / P ( s t a r t ) ) Pr(accept)= min(1,P(end)/P(start)) Pr(accept)=min(1,P(end)/P(start)),接受或拒绝轨迹的端点。
为什么HMC运作良好?
通过模拟哈密顿动力学,我们可以在参数空间中提出一个远离当前点的点,并且我们有很好的机会接受这个点。如果动力学被精确模拟,我们总是会接受的。实际上,我们在小步骤中不精确地模拟它,这带来了误差。
但值得注意的是,误差通常是有限制的——只是沿着轨迹振荡。
示例:CIFAR-10(有239,370个参数)卷积模型沿HMC轨迹的对数概率(参数和动量)的误差:
设置参数的步长
为跨越式步骤使用良好的步长是使HMC良好工作的关键。基于对每个参数的对数后验概率二阶导数的估计,我使用启发式程序[Neal,1995, Neal, 2022 ]设置步长。
注意,我们应该为不同的参数设置不同的步长—例如,通常较大的输入的权值的步长应该小于通常较小的输入的权值的步长。
对于隐藏单位,我们需要估计它们通常的大小。然而,在训练情况下,根据隐藏单元的实际值设置步长是无效的——这将破坏证明HMC样本正确所需的可逆性条件。
相反,假设网络中的权重具有给定当前超参数值的典型值,就可以找到隐藏单元的典型值。要使其有效,hmc不能更新超参数。相反,它们在单独的吉布斯抽样步骤中更新。
(使用HMC更新超参数也会导致其他问题。)
3.实验用软件
自1995年以来,我已经发布了使用神经网络和其他模型的“灵活贝叶斯建模”(Flexible Bayesian Modeling)软件包。一个发布于2022年4月21日的新版本旨在使神经网络模型对更大规模的问题更有用。
体系结构特性:连接可以以任意方式配置,允许卷积和权值共享。允许在所有层之间跳过连接。性能改进:针对cpu上使用SIMD指令进行了优化,允许使用CUDA在gpu上进行计算,有许多先进的MCMC方法。
你可以在http://www.csutoronto.ca/~radford/fbm.software.html
或gitlab.com/radfordneal/fbm
上获得它
两个目标:
- 扩展贝叶斯神经网络模型是首选的实际解决方案的问题范围。
- 了解贝叶斯方法在较大问题中的特点(即使需要的计算可能不实际)。
三、 一些实验 Some experiments
1. “Bioresponse”任务
这是一个Kaggle数据集。这项任务是根据分子的特征来预测分子是否会产生某种生物反应。细节没有记录。有1776个输入特征(一些数字的,一些二进制的),一个二进制目标。
对数据的检查显示,特征因索引而异,六组特征具有明显不同的属性。这些可能是不同的特征类别,它们可能具有不同的相关性。
提供培训案例3751个。我用3000进行培训,用751进行验证集。
所使用的模型有17,457个参数,其中:
- 6个初始隐藏层(每个8个softplus单元),每个只连接到六组的其一输入特征。在每个组中使用超参数对输入的不同相关性进行建模。组之间可能不同的相关性也用超参数建模。
- 一个48个tanh单位的层连接所有6个初始层。
- 另一层16 tanh单位连接到前一层。
- 用于逻辑模型的输出单元,连接到前两个隐藏层,用超参数控制每一层的贡献。
2. CIFAR10
四、未来的工作 Future work
1. 来自Brute Force力贝叶斯学习的见解
Izmailov、Vikram、Hoffman和Wilson[2021年使用大型计算资源(512 TPUv3设备)使用HMC实现了贝叶斯神经网络学习,并评估了它与其他方法的比较情况。
- 他们发现在各种问题上,包括CIFAR-10(采用ResNet-20-FRN架构)都有非常好的性能(以较高的计算成本)。
- 两种近似贝叶斯方法(随机梯度朗格万动力学和平均场变分推理)不能很好地模拟HMC的结果(尽管它们的结果有时相当不错)。
- 他们发现参数的先验方差值(在他们的运行中固定)几乎没有影响。
- 他们发现当有“分布转移”时,贝叶斯预测是很差的。(来自修改后的发行版的测试用例)。
最后两个结果对我来说似乎令人费解。我想研究一下使用更好的HMC实现的结果。(对于步长,这是一个很好的启发式方法),使用的是不固定的超参数。
2 . 其他未来的工作
- 研究如何最好地更新超参数——单独更新,还是在HMC中更新?如果在HMC内部,怎样做最好?
- 研究HMC的哪些变体组合实际上最适合大规模问题。
- 与非精确的MCMC方法相比(如[Welling and Teh,2011])。
- 深入了解非贝叶斯深度学习。例如,用于表示关系模型的非常深的网络是必要的,还是网络深度是正则化的隐式方法?
- 在中等规模的应用中,贝叶斯方法可以在可接受的计算成本下给出superion预测性能。