目录html
本文简单介绍什么是贝叶斯深度学习(bayesian deep learning),贝叶斯深度学习如何用来预测,贝叶斯深度学习和深度学习有什么区别。对于贝叶斯深度学习如何训练,本文只能大体给个介绍。(不敢误人子弟)编程
在介绍贝叶斯深度学习以前,先来回顾一下贝叶斯公式。数组
\[p(z|x) = \frac{p(x, z)}{p(x)} = \frac{p(x|z)p(z)}{p(x)} \tag{1}\]网络
其中,\(p(z|x)\) 被称为后验几率(posterior),\(p(x, z)\) 被称为联合几率,\(p(x|z)\) 被称为似然(likelihood),\(p(z)\) 被称为先验几率(prior),\(p(x)\) 被称为 evidence。框架
若是再引入全几率公式 \(p(x) = \int p(x|z)p(z) dz\),式(1)能够再变成以下形式:
\[p(z|x) = \frac{p(x|z)p(z)}{\int p(x|z)p(z) dz} \tag{2}\]ide
若是 \(z\) 是离散型变量,则将式(2)中分母积分符号 \(\int\) 改为求和符号 \(\sum\) 便可。(几率分布中的几率质量函数通常用大写字母 \(P(\cdot)\) 表示,几率密度函数通常用小写字母 \(p(\cdot)\) 表示,这里为了简便,很少作区分,用连续型变量举例)函数
一个最简单的神经元网络结构以下图所示:
post
在深度学习中,\(w_i, (i = 1,...,n)\) 和 \(b\) 都是一个肯定的值,例如 \(w_1 = 0.1, b = 0.2\)。即便咱们经过梯度降低(gradient decent)更新 \(w_i = w_i - \alpha\cdot\frac{\partial J}{\partial w_i}\),咱们仍未改变 “\(w_i\) 和 \(b\) 都是一个肯定的值” 这一事实。学习
那什么是贝叶斯深度学习?将 \(w_i\) 和 \(b\) 由肯定的值变成分布(distributions),这就是贝叶斯深度学习。测试
贝叶斯深度学习认为每个权重(weight)和偏置(bias)都应该是一个分布,而不是一个肯定的值。(这很贝叶斯。)以下图所示,给出一个直观的例子:
图 2 展现了一个结构为 4x3x1 的贝叶斯神经网络。(输入层神经元个数为 4,中间隐含层神经元个数为 3,输出层神经元个数为 1。)
说了这么多,贝叶斯神经网络该怎么用?网络的权重和偏置都是分布,分布咋用,采样呗。想要像非贝叶斯神经网络那样进行前向传播(feed-forward),咱们能够对贝叶斯神经网络的权重和偏置进行采样,获得一组参数,而后像非贝叶斯神经网络那样用便可。
固然,咱们能够对权重和偏置的分布进行屡次采样,获得多个参数组合,参数的细微改变对模型结果的影响在这里就能够体现出来。这也是贝叶斯深度学习的优点之一,屡次采样最后一块儿获得的结果更加 robust。
对于非贝叶斯神经网络,在各类超参数固定的状况下,咱们训练一个神经网络想要的就是各个层之间的权重和偏置。对于贝叶斯深度学习,咱们训练的目的就是获得权重和偏置的分布。这个时候就要用到贝叶斯公式了。
给定一个训练集 \(D= \{( \bm{x}_1, y_1), (\bm{x}_2, y_2),..., (\bm{x}_m, y_m)\}\),咱们用 \(D\) 训练一个贝叶斯神经网络,则贝叶斯公式能够写为以下形式:
\[ p(w|\bm{x}, y) = \frac{p(y|\bm{x}, w)p(w)}{\int p(y|\bm{x}, w)p(w) dw} \tag{3} \]
式(3)中,咱们想要获得的是 \(w\) 的后验几率 $p(w|\bm{x}, y) $,先验几率 \(p(w)\) 是咱们能够根据经验也好瞎猜也好是知道的,例如初始时将 \(p(w)\) 设成标准正太分布,似然 \(p(y|\bm{x}, w)\) 是一个关于 \(w\) 的函数。当 \(w\) 等于某个值时,式(3)的分子很容易就能算出来,但咱们想要获得后验几率 \(p(w|\bm{x}, y)\),按理还要将分母算出来。但事实是,分母这个积分要对 \(w\) 的取值空间上进行,咱们知道神经网络的单个权重的取值空间能够是实数集 \(R\),而这些权重一块儿构成的空间将至关复杂,基本无法积分。因此问题就出如今分母上。
贝叶斯深度学习的训练方法目前有如下几种:(请参考Deep Bayesian Neural Networks. -- Stefano Cosentino)
(1)Approximating the integral with MCMC
(2)Using black-box variational inference (with Edward)
(3)Using MC (Monte Carlo) dropout
第(1)种状况最好理解,用 MCMC(Markov Chains Monte Carlo) 采样去近似分母的积分。第(2)种直接用一个简单点的分布 \(q\) 去近似后验几率的分布 \(p\),即无论分母怎么积分,直接最小化分布 \(q\) 和 \(p\) 之间的差别,如可使用 KL散度 计算。详情能够参考贝叶斯编程框架 Edward 中的介绍。第(3)种,蒙特卡罗 dropout,简单而强大,不改变通常神经网络结构,只是要求神经网络带 dropout 层,训练过程和通常神经网络一致,只是测试的时候也打开 dropout,而且测试时须要屡次对同一输入进行前向传播,而后能够计算平均和统计方差。
经过以前的介绍,咱们也能够发现,在深度学习的基础上把权重和偏置变为 distribution 就是贝叶斯深度学习。
贝叶斯深度学习还有如下优势:
(1)贝叶斯深度学习比非贝叶斯深度学习更加 robust。由于咱们能够采样一次又一次,细微改变权重对深度学习形成的影响在贝叶斯深度学习中能够获得解决。
(2)贝叶斯深度学习能够提供不肯定性(uncertainty),非 softmax 生成的几率。详情参见 Deep Learning Is Not Good Enough, We Need Bayesian Deep Learning for Safe AI。
请不要混淆贝叶斯神经网络和贝叶斯网络这二者的概念。
“贝叶斯网络(Bayesian network),又称信念网络(belief network)或是有向无环图模型(directed acyclic graphical model),是一种几率图型模型。”
而贝叶斯神经网络(Bayesian neural network)是贝叶斯和神经网络的结合,贝叶斯神经网络和贝叶斯深度学习这两个概念能够混着用。
Eric J. Ma - An Attempt At Demystifying Bayesian Deep Learning
Deep Bayesian Neural Networks. -- Stefano Cosentino
Edward -- A library for probabilistic modeling, inference, and criticism.
Deep Learning Is Not Good Enough, We Need Bayesian Deep Learning for Safe AI
贝叶斯网络 -- 百度百科