博客内容参考,本篇博客所有内容基于在这个链接内容做的一些加工以及思考,强烈建议去看一遍原文。
前言
假设一个场景,你在球场投篮,那么你是如何完成这个投篮动作呢?你的大脑会先根据抛物线公式计算一下角度高度等,甚至考虑微弱的风向吗?显然是不可能的,我们的大脑可能就是预估大概这个力度、角度,篮球是否会中,并且在篮球抛向球筐的过程中,我们的大脑还会不断的修正我们一开始预测的结果。
那么我们大脑是如何根据观察到的东西来进行预测以及动作呢?我们知道,我们大脑其实就仅仅只有各种感官数据的输入,并没有关于环境真实的状态。
假设
X
h
y
p
o
t
h
e
s
e
∈
R
n
X_{hypothese} \in R^n
Xhypothese∈Rn表示大脑试图去推断环境的真实状态,这里的n假设环境存在n个状态,比如上面例子中,篮筐的位置,篮球的位置等等,为了简单起见,我们用
x
x
x表示。
假设
Y
o
b
s
e
r
v
a
t
i
o
n
∈
R
q
Y_{observation} \in R^q
Yobservation∈Rq表示感官数据,例如眼睛看到的,手摸到的,其中q表示q个感官,为了简单起见,用
y
y
y表示。
假设
U
∈
R
l
U \in R^l
U∈Rl表示对环境做出的动作,比如抬起手臂,将球投出去等等。其中
l
l
l表示可以做的动作数量。
那么大脑所存在的世界,就可以表示成如下结构:
OK,那么定义好变量后,如何根据我们所观察到的去推断外部环境的隐状态
x
x
x呢?这里,我们首先会想到利用贝叶斯公式,根据
P
(
x
,
y
)
=
P
(
x
∣
y
)
P
(
y
)
=
P
(
y
∣
x
)
P
(
x
)
P(x,y)=P(x|y)P(y)=P(y|x)P(x)
P(x,y)=P(x∣y)P(y)=P(y∣x)P(x),可以得到如下公式:
P
(
x
∣
y
)
=
P
(
y
∣
x
)
P
(
x
)
P
(
y
)
P(x|y) = \frac{P(y|x)P(x)}{P(y)}
P(x∣y)=P(y)P(y∣x)P(x),其中
P
(
x
∣
y
)
P(x|y)
P(x∣y)也被称为后验概率,
P
(
y
∣
x
)
P(y|x)
P(y∣x)是似然,
P
(
x
)
P(x)
P(x)是先验,
P
(
y
)
P(y)
P(y)有时候也被称为证据。
在这里, P ( x ) P(x) P(x)通常会假设其符合高斯分布。如果我们知道了这 P ( y ) , P ( y ∣ x ) , P ( x ) P(y) , P(y|x),P(x) P(y),P(y∣x),P(x)这三个分布,我们当然可以求出这个后验概率,但是一般情况下,是不知道的,主要原因是在于计算 P ( y ) P(y) P(y),因为 P ( y ) = ∑ x P ( y ∣ x ) P ( x ) o r ∫ P ( y ∣ x ) P ( x ) d x P(y)=\sum_{x}P(y|x)P(x) or \int {P(y|x)P(x)dx} P(y)=∑xP(y∣x)P(x)or∫P(y∣x)P(x)dx,所以其实是很难计算的。
那么在这里,一个通用的解决办法就是使用变分推断,使用另一个分布去近似你想要求的分布。
比如在这里使用
q
(
x
;
ξ
)
q(x;\xi)
q(x;ξ)来近似分布
p
(
x
∣
y
)
p(x|y)
p(x∣y)。其中
ξ
\xi
ξ是一个分布的参数,比如高斯分布的话就是均值和方差。
这个
q
(
x
;
ξ
)
q(x;\xi)
q(x;ξ)有时也被称为认知密度分布(Recognition density)
那么此时,我们的结构就变为如下所示:
What the brain is doing? -Prediction error minimization
本质上来说,我们大脑做的就是最小化我们的预测误差,通过给定的观察数据推断的环境状态与真实的环境状态之间距离最小。那么如何最小化这个prediction error呢?主要是通过两个方面:1.改进我们的脑海中的内部模型,去更好的匹配输入的感官数据。2.通过在环境中做Action。
第一点好理解,那么如何第二点是怎么理解呢?什么叫做在环境中做Action可以改变prediction error呢?
在这里举个例子,假设你社恐或者内向,然后现在突然叫你去演讲,那么此时你就可能会逃避这个演讲,推脱这个演讲,以保持原来的prediction error。所以为什么我们习惯于待在舒适圈呢,从这个角度来说,因为待在舒适圈我们大脑对外部环境的prediction error是最小的,一旦跳出舒适圈,那大脑的内部模型就会被破坏,而对于生物来说,我们的根本任务就是活着,那么对于大脑来说就是尽可能最小化这个prediction error;所以一旦跳出舒适圈,大脑就会控制我们,想让我们尽快回到熟悉的圈子。
OK ,回归正题,那么对于第一点,我们想让内部模型更好的匹配真实的环境模型,那么如何去衡量分布的接近程度呢?在这里,我们使用KL散度来衡量,那么也就是说对于第一点,我们想要最小化 a r g m i n ξ D K L ( q ( x ; ξ ) ∣ ∣ p ( x ∣ y ) ) ( 1 ) argmin_{\xi} D_{KL}(q(x;\xi)||p(x|y)) (1) argminξDKL(q(x;ξ)∣∣p(x∣y))(1),但是这里依然有个问题,那就是我们并不知道 p ( x ∣ y ) p(x|y) p(x∣y),那么在这里怎么办呢? 其实如果知道变分推断的同学,此时应该知道可以怎么做。
首先,将
D
K
L
(
q
(
x
;
ξ
)
∣
∣
p
(
x
∣
y
)
)
D_{KL}(q(x;\xi)||p(x|y))
DKL(q(x;ξ)∣∣p(x∣y))展开,变成
∫
q
(
x
;
ξ
)
l
o
g
q
(
x
;
ξ
)
p
(
x
∣
y
)
d
x
\int q(x;\xi)log \frac{q(x;\xi)}{p(x|y)}dx
∫q(x;ξ)logp(x∣y)q(x;ξ)dx
然后通过如下变换:
D
K
L
(
q
(
x
;
ξ
)
∣
∣
p
(
x
∣
y
)
)
=
∫
q
(
x
;
ξ
)
l
o
g
q
(
x
;
ξ
)
p
(
x
∣
y
)
d
x
=
∫
q
(
x
;
ξ
)
l
o
g
q
(
x
;
ξ
)
p
(
y
)
p
(
x
,
y
)
d
x
=
∫
q
(
x
;
ξ
)
l
o
g
q
(
x
;
ξ
)
p
(
x
,
y
)
d
x
+
∫
q
(
x
;
ξ
)
l
o
g
p
(
y
)
d
x
=
∫
q
(
x
;
ξ
)
l
o
g
q
(
x
;
ξ
)
p
(
x
,
y
)
d
x
+
l
o
g
p
(
y
)
D_{KL}(q(x;\xi)||p(x|y))=\int q(x;\xi)log \frac{q(x;\xi)}{p(x|y)}dx= \int q(x;\xi)log \frac{q(x;\xi)p(y)}{p(x,y)}dx \\ =\int q(x;\xi)log \frac{q(x;\xi)}{p(x,y)}dx +\int q(x;\xi)log p(y)dx =\int q(x;\xi)log \frac{q(x;\xi)}{p(x,y)}dx +logp(y)\\
DKL(q(x;ξ)∣∣p(x∣y))=∫q(x;ξ)logp(x∣y)q(x;ξ)dx=∫q(x;ξ)logp(x,y)q(x;ξ)p(y)dx=∫q(x;ξ)logp(x,y)q(x;ξ)dx+∫q(x;ξ)logp(y)dx=∫q(x;ξ)logp(x,y)q(x;ξ)dx+logp(y)
最终,我们得到了上述式子,在这里,我们称
F
(
y
;
ξ
)
=
∫
q
(
x
;
ξ
)
l
o
g
q
(
x
;
ξ
)
p
(
x
,
y
)
d
x
\mathcal{F}(y;\xi) = \int q(x;\xi)log \frac{q(x;\xi)}{p(x,y)}dx
F(y;ξ)=∫q(x;ξ)logp(x,y)q(x;ξ)dx为自由能(Free energy),由此我们可以得到如下等式:
F
(
y
;
ξ
)
=
D
K
L
(
q
(
x
;
ξ
)
∣
∣
p
(
x
∣
y
)
)
−
l
o
g
p
(
y
)
≥
−
l
o
g
p
(
y
)
\mathcal{F}(y;\xi) = D_{KL}(q(x;\xi)||p(x|y))-logp(y) \ge -logp(y)
F(y;ξ)=DKL(q(x;ξ)∣∣p(x∣y))−logp(y)≥−logp(y),其中
−
l
o
g
p
(
y
)
-logp(y)
−logp(y)称为Surprise。
我们可以从上面这个公式中看到有趣的几点:
1.自由能只和观察数据y以及大脑内部推断外部环境状态的参数
ξ
\xi
ξ有关,是关于这两个概率分布对应的函数。
2.最小化自由能的同时会最小化Surprise。因为KL散度是≥0的。
3.最小化自由能的同时,Prediction error也会减小。
那么现在有一个问题,这个Surprise是什么?我们最小化自由的能的同时可以最小化它,这有什么作用吗?参考链接——> Surprise是什么?
简单举个例子来说明Surprise是什么,比如你日常喝水,突然被呛到了,这个事情就具有很高的Surprise,因为它发生的概率不是很高,所以当其发生了,就会具有很高的Surprise;所以,我们可以暂时简单的认为,一个事情发生是概率高,那么Surprise就很低,反之则很高。
那么这个Surprise重要吗?当然重要,举个例子,对于生物而言,最根本的任务就是活着,所以我们希望周围的环境是有序的,不是处处Surprise的,否则哪天可能就因为Surprise挂了。
虽然这个Surprise我们是无法直接计算的,但是我们可以通过最小化自由能来保证最小化它。
自由能原理的一个灵感来自于生物体为了生存而抵抗无序的必要性,通过最大限度的减少感官数据中非典型事件发生相关的意外。
让我们从熵的角度来看,最小化这个Surprise将会带来什么? 首先根据熵的定义,我们可以得到
H
(
p
(
y
)
)
=
−
∫
−
∞
+
∞
p
(
y
)
l
o
g
(
p
(
y
)
)
d
y
H(p(y))=- \int_{-\infty}^{+\infty} p(y)log(p(y))dy
H(p(y))=−∫−∞+∞p(y)log(p(y))dy
通过这个公式,我们可以发现,当我们最小化这个Surprise时候,熵也是被最小化的,也就是说外部状态的长期平均意外会被最小化,说简单的,相比于Surprise大的,可以活得更久的可能性更大.
还有一点就是,最小化这个Surprise,那么
H
(
p
(
x
)
)
H(p(x))
H(p(x))也会变小,也就说明了你的外部状态是稳定的。
OK,现在我们可以通过最小化自由能去提高我们大脑内部的模型于外部环境模型的匹配程度了,但是这并不是我们主要的目标。假设这个模型的已经达到了百分百匹配(虽然不可能),但是我们要的是对未来可预测,也就是prediction error最小,那么为了达到这个目标,我们需要的是知道这个分布: P ( x , y ) = P ( y ∣ x ) P ( x ) P(x,y)=P(y|x)P(x) P(x,y)=P(y∣x)P(x),这个联合分布也常被称为生成模型。当我们知道这个分布的时候, 我们就知道根据我们推断的环境状态x’分布,未来时刻的感官数据是什么(比如看到什么,听见什么等等)。
OK,那么现在让我们再次更新一下之前的结构图:
OK,那么这里,我们可以发现,只要最小化这个自由能,那么我们就可以更好的对外部环境进行建模,减少大脑的Prediction Error。那么根据上面定义的公式,我们可以发现只要对两个部分都最小化就可以了,如下图所示:
其中,对于感知部分(Perceptual part),我们只要找到一个参数
ξ
\xi
ξ,使得
D
K
L
(
q
(
x
;
ξ
)
∣
∣
p
(
x
∣
y
)
)
D_{KL}(q(x;\xi)||p(x|y))
DKL(q(x;ξ)∣∣p(x∣y))最小即可。
对于行动部分(Active part),我们之前讲了,我们无法直接计算
p
(
y
)
p(y)
p(y),但是我们知道,y是由环境产生的,然后我们的Agent做的动作action
u
u
u可以影响到环境状态,进而影响y。但是我们依然无法计算
p
(
y
)
p(y)
p(y),但是这已经不要紧了,我们只要找到动作
u
u
u,它可以最小化自由能即可。
在这里,对于感知部分其实讲完了,接下来的重点就是第二部分了。其实这和Judel提出的因果三阶梯有着相应的关系,Perceptual part同时包含了第一阶梯观察,Active Part 对应于第二阶梯干预。最终的整一个模型对应着第三阶梯反事实。