Fixed point理论是 Banach Space 中重要的理论工具。它常被用来讨论某个空间解的存在性,并由此发展出通过迭代的方式进行问题求解的算法。在[1]中,Fixed Piont理论处于整个算法的核心位置,是以分布式Bellman方程代替期望值Bellman方程的理论基础。本文将分成两个部分浅析之:第一部分 Fixed Point的迭代算法介绍;第二部分 Distributional 算法的不动点解析。
首先要回顾以下 Fixed Point 原理,首先要给出的是收缩映射(Contraction)的定义[2]。
Definition 4.13(原书【2】的编号,下同)
A function f : X → Y f:X\to Y f:X→Y between metric spaces is called a contraction if there exists a real number α \alpha α with 0 ≤ α < 1 0\le \alpha \lt 1 0≤α<1, such that :
d Y ( f ( x 1 ) , f ( x 2 ) ) ≤ α d X ( x 1 , x 2 ) d_Y(f(x_1), f(x_2))\le \alpha d_X(x_1, x_2) dY(f(x1),f(x2))≤αdX(x1,x2)
[简析]
所谓收缩(Contraction),指的是映射 f f f 的一个属性,映射前 x 1 , x 2 ∈ X x_1,x_2\in X x1,x2∈X 的距离 d X ( x 1 , x 2 ) d_X(x_1, x_2) dX(x1,x2) 大于映射后的距离 d Y ( f ( x 1 ) , f ( x 2 ) ) d_Y(f(x_1), f(x_2)) dY(f(x1),f(x2))。这里要注意的是,原像空间 X X X 的测度定义可以与像空间 Y Y Y 的测度定义不同。
如上定义,若原像空间 X X X 与像空间 Y Y Y 相同,而且测度定义不变,且 X X X 是Banach 空间(即完备的赋范空间,Complete Normed Space),则有如下不动点定理:
Theorem 4.8 (Banach Fixed-Point Theorem)
If X X X is a complete non-empty metric spaces and f : X → X f:X\to X f:X→X is a contraction
, then f f f has a unique fixed-point x 0 ∈ X x_0\in X x0∈X,
f ( x 0 ) = x 0 f(x_0)=x_0 f(x0)=x0。
Banach空间是一种特殊的非空、完备的测度空间(metric space),Fixed-Point Theorem 能够保证任意在Banach空间的contraction函数都有且只有一个
固定点(a unique fixed-point)。任取一个初始点 x 1 x_1 x1,经contraction映射后得到 x 2 x_2 x2,再将 x 2 x_2 x2 代入映射得到 x 3 x_3 x3,如此迭代,得到序列 { x n } n ≥ 1 \{x_n\}_{n\ge 1} {xn}n≥1,此序列收敛于 x 0 x_0 x0,即 x n → x 0 x_n\to x_0 xn→x0。若求解问题可以转换成在banach空间内不动点问题,就可以通过此迭代方法进行求解。这便是 fixed point 的迭代算法。以下通过一个例子进行说明。
例:线性方程组求解的迭代算法
考虑线性方程组:
∑ i = 1 n a k i x i = b k ( k = 1 , 2 , ⋯   , n ) ( 1.1 ) \sum^n_{i=1} a_{ki}x_{i} = b_k \quad (k=1,2,\cdots,n)\qquad(1.1) i=1∑nakixi=bk(k=1,2,⋯,n)(1.1)
写成矩阵形式为 A x = b \mathbf A\mathbf x=\mathbf b Ax=b,其中 A \mathbf A A 是 n × n n\times n n×n 矩阵, x = ( x 1 , x 2 , ⋯   , x n ) T \mathbf x=(x_1, x_2,\cdots,x_n)^T x=(x1,x2,⋯,xn)T, b = ( b 1 , b 2 , ⋯   , b n ) T \mathbf b=(b_1,b_2,\cdots,b_n)^T b=(b1,b2,⋯,bn)T,于是有:
A x = b ⇒ x = ( I n − A ) x + b ( 1.2 ) \mathbf A\mathbf x=\mathbf b\Rightarrow \mathbf x=(\mathbf I_n-\mathbf A)\mathbf x + \mathbf b\qquad(1.2) Ax=b⇒x=(In−A)x+b(1.2)
其中, I n \mathbf I_n In 是 n × n n\times n n×n 单位矩阵。考虑算子(operator) F = I n − A F=\mathbf I_n- \mathbf A F=In−A,有
x = F x + b \mathbf x = F\mathbf x+\mathbf b x=Fx+b
算子 F b x = F x + b F_b \mathbf x= F\mathbf x+\mathbf b Fbx=Fx+b,则有 x = F b x \mathbf x= F_b\mathbf x x=Fbx,这便是一个不动点问题。其中, F F F 是线性算子,而 F b F_b Fb 是非线性算子,而 Banach Fixed Point 并不要求必须是线性算子,若 F F F 是收缩算子,则 F b F_b Fb 也是收缩算子,这是因为:
d ( F b x , F b y ) = ∥ F b x − F b y ∥ = ∥ F x − F y ∥ = d ( F x , F y ) ( 1.3 ) d(F_b\mathbf x,F_b\mathbf y)=\Vert F_b\mathbf x- F_b\mathbf y\Vert=\Vert F\mathbf x- F\mathbf y\Vert = d(F\mathbf x,F\mathbf y)\qquad(1.3) d(Fbx,Fby)=∥Fbx−Fby∥=∥Fx−Fy∥=d(Fx,Fy)(1.3)
由 x = F b x \mathbf x= F_b\mathbf x x=Fbx,又 R n \mathbb R^n Rn 是一个Banach Space,若 F F F 是收缩算子,则符合Banach Fixed-Point Theorem的要求,则在 R n \mathbb R^n Rn 中存在唯一一个不动点。现在的焦点集中在: F F F 是否收缩算子?这由 Banach Space 的范数(Norm)定义决定。考虑两种情况:
Case 1:
在 R n \mathbb R^n Rn 上取 l ∞ l_{\infty} l∞ 为范数,即:
∥ x ∥ = max 1 ≤ k ≤ n ∣ x ∣ \Vert \mathbf x\Vert = \max_{1\le k\le n} \vert \mathbf x\vert ∥x∥=1≤k≤nmax∣x∣
于是,对于任意 n × n n\times n n×n矩阵 C C C 与 n × 1 n\times 1 n×1 矢量 x , y \mathbf x, \mathbf y x,y 有:
∥ C x − C y ∥ = max 1 ≤ k ≤ n ∣ ∑ i = 1 n c k , i ( x i − y i ) ∣ ≤ max 1 ≤ k ≤ n [ ∑ i = 1 n ∣ c k , i ∣ ⋅ ∣ x i − y i ∣ ] ≤ max 1 ≤ k ≤ n [ ∑ i = 1 n ∣ c k , i ∣ ] ⋅ max 1 ≤ k ≤ n ∣ x i − y i ∣ = max 1 ≤ k ≤ n [ ∑ i = 1 n ∣ c k , i ∣ ] ∥ x − y ∥ \Vert C\mathbf x-C\mathbf y\Vert=\max_{1\le k\le n}\left| \sum_{i=1}^n c_{k,i}(x_i-y_i)\right| \le \max_{1\le k\le n}\left[ \sum_{i=1}^n |c_{k,i}|\cdot |x_i-y_i|\right] \\ \ \\ \le \max_{1\le k\le n}\left[ \sum_{i=1}^n |c_{k,i}|\right] \cdot \max_{1\le k\le n}|x_i-y_i| = \max_{1\le k\le n}\left[ \sum_{i=1}^n |c_{k,i}|\right] \Vert \mathbf x- \mathbf y\Vert ∥Cx−Cy∥=1≤k≤nmax∣∣∣∣∣i=1∑nck,i(xi−yi)∣∣∣∣∣≤1≤k≤nmax[i=1∑n∣ck,i∣⋅∣xi−yi∣] ≤1≤k≤nmax[i=1∑n∣ck,i∣]⋅1≤k≤nmax∣xi−yi∣=1≤k≤nmax[i=1∑n∣ck,i∣]∥x−y∥
因此,如果以下不等式成立:
max 1 ≤ k ≤ n [ ∑ i = 1 n ∣ c k , i ∣ ] < 1 ( 1.4 ) \max_{1\le k\le n}\left[ \sum_{i=1}^n |c_{k,i}|\right] \lt 1\qquad(1.4) 1≤k≤nmax[i=1∑n∣ck,i∣]<1(1.4)
则 C C C 就是一个收缩算子,回到 F = I n − A F=\mathbf I_n- \mathbf A F=In−A 算子,要使 F F F 为收缩,则必须:
max 1 ≤ k ≤ n [ ∑ i = 1 n ∣ − a k , i + δ k , i ∣ ] < 1 ( 1.5 ) \max_{1\le k\le n}\left[ \sum_{i=1}^n |-a_{k,i}+\delta_{k,i}|\right] \lt 1 \qquad(1.5) 1≤k≤nmax[i=1∑n∣−ak,i+δk,i∣]<1(1.5)
其中, a k , i a_{k,i} ak,i 是矩阵 A A A 的k行,i列元素, δ k , i \delta_{k,i} δk,i 是矩阵 I n I_n In 的k行,i列元素。满足这个要求的 A x = b A\mathbf x=\mathbf b Ax=b,可用迭代的方法求解。
Case 2:
取 l 2 l_2 l2 范数,有
∥ x ∥ = ∑ i = 1 n x k 2 \Vert \mathbf x \Vert = \sum_{i=1}^n x_k^2 ∥x∥=i=1∑nxk2
对于任意 n × n n\times n n×n矩阵 C C C 与 n × 1 n\times 1 n×1 矢量 x \mathbf x x 积的范数有,
∥ C x ∥ 2 = ∑ i = 1 n ( c k x ) 2 ( 1.6 ) \Vert C\mathbf x \Vert^2 = \sum_{i=1}^n (\mathbf c_k \mathbf x)^2\qquad(1.6) ∥Cx∥2=i=1∑n(ckx)2(1.6)
其中 c k \mathbf c_k ck 是矩阵 C C C 的第k行,则 c k x \mathbf c_k \mathbf x ckx 是两个矢量的标准内积,于是有: ( c k x ) 2 = ∥ c k x ∥ 2 ≤ ∥ c k ∥ 2 ⋅ ∥ x ∥ 2 (\mathbf c_k \mathbf x)^2=\Vert \mathbf c_k \mathbf x\Vert^2\le \Vert \mathbf c_k\Vert^2\cdot\Vert \mathbf x\Vert^2 (ckx)2=∥ckx∥2≤∥ck∥2⋅∥x∥2,因此
∥ C x ∥ 2 = ∑ i = 1 n ( c k x ) 2 ≤ ∑ i = 1 n ∥ c k ∥ 2 ⋅ ∥ x ∥ 2 ∥ C x ∥ ≤ [ ∑ i = 1 n ∥ c k ∥ 2 ] ∥ x ∥ ( 1.7 ) \Vert C\mathbf x \Vert^2 = \sum_{i=1}^n (\mathbf c_k \mathbf x)^2\le \sum_{i=1}^n \Vert \mathbf c_k\Vert^2\cdot\Vert \mathbf x\Vert^2 \\ \ \\ \Vert C\mathbf x \Vert \le \left[\sqrt {\sum_{i=1}^n \Vert \mathbf c_k\Vert^2} \right]\Vert \mathbf x\Vert \qquad(1.7) ∥Cx∥2=i=1∑n(ckx)2≤i=1∑n∥ck∥2⋅∥x∥2 ∥Cx∥≤[i=1∑n∥ck∥2]∥x∥(1.7)
由上我们得知,若要使 F F F(或 F b F_b Fb)收缩,在 l 2 l_2 l2 范数下,必须:
∑ i = 1 n ( − a k , i + δ k , i ) 2 < 1 ( 1.8 ) \sum_{i=1}^n (-a_{k,i}+\delta_{k,i})^2 \lt 1 \qquad(1.8) i=1∑n(−ak,i+δk,i)2<1(1.8)
小结,上述两种情况(Case 1和Case 2)范数定义不同,得到的对算子 F F F 的要求不一样,但迭代过程是相同的,其实在迭代过程中,若满足要求,则不需要理会范数的定义。以下给出一个例子(二元一次方程组):
[ 0.5 0.2 0.3 0.5 ] [ x 1 x 2 ] = [ 0.1 0.7 ] \left[ \begin{array}{cc}\\0.5 & 0.2 \\ 0.3 & 0.5 \end{array}\right]\left[ \begin{array}{c}\\x_1 \\ x_2 \end{array}\right] = \left[ \begin{array}{c}\\0.1 \\ 0.7 \end{array}\right] [0.50.30.20.5][x1x2]=[0.10.7]
求解过程用numpy实现如下:
import numpy as np
import matplotlib.pyplot as plt
# 直接通过求逆矩阵的方法求解
A = np.array([[0.5, 0.2],[0.3, 0.5]])
A_inv = np.linalg.inv(A)
b = [[0.1],[0.7]]
x = np.matmul(A_inv, b) # x=array([[-0.47368421], [ 1.68421053]])
# 用迭代的方法求解
k = 30
x = np.array([[0.3],[0.1]])
x_arr = []
x_arr.append(x)
for i in range(k):
C = np.identity(2)-A
x = np.matmul(C,x)+b
x_arr.append(x)
for p in x_arr:
plt.scatter(p[0,0], p[1,0])
print(x_arr[-1])
plt.text(x_arr[-1][0,0]+0.03,x_arr[-1][1,0],'[%2.2f, %2.2f]'%(x_arr[-1][0,0],x_arr[-1][1,0]))
plt.show()
图1 用迭代法求解方程
上述二元一次方程组满足case1和case2对矩阵A的要求,用迭代的方法求出的数值与矩阵求逆的方法的相同。当矩阵A的维数大时,迭代方法要比求逆方法有优势,它不仅计算量小,速度快,而且有很强的鲁棒性。
在增强学习(Reinforcement Learning)中,Bellman Equation占着极其重要的地位,传统 Bellman Equation 可以写成如下形式:
Q ( x , a ) = E R ( x , a ) + γ E Q ( x ′ , a ′ ) ( 2.1 ) Q(x,a)=\mathbb E R(x,a)+\gamma\mathbb E Q(x',a')\qquad(2.1) Q(x,a)=ER(x,a)+γEQ(x′,a′)(2.1)
式中, Q ( x , a ) Q(x,a) Q(x,a) 是状态 x x x 下,采取行动 a a a 的总收益(价值函数), R ( x , a ) R(x,a) R(x,a) 是当前回报, γ \gamma γ 是折扣, E \mathbb E E 表示取随机量的期望。该方程反映的是总收益与随机量期望间的关系,但有时候均值并不能很好地反映实际分布,例如:具有两个模式的双峰分布,均值就在两个波谷之间。若能直接估计出总收益、当前回报等随机变量的分布,则岂不更好?《A Distributional Perspective on Reinforcement Learning》1所阐述的思想就是基于此出发点的。[1]将公式(2.1)的 E \mathbb E E 拿掉,变成了:
Q ( x , a ) = D R ( x , a ) + γ Q ( x ′ , a ′ ) ( 2.2 ) Q(x,a)\overset{D}{=} R(x,a)+\gamma Q(x',a')\qquad(2.2) Q(x,a)=DR(x,a)+γQ(x′,a′)(2.2)
式中, = D \overset{D}{=} =D 表示随机变量分布的相等,(2.2)表示当下“状态-行为”总收益的分布 Q ( x , a ) Q(x,a) Q(x,a) 和当前回报 R ( x , a ) R(x,a) R(x,a) 与考虑折扣的下一“状态-行为”的总收益 γ Q ( x ′ , a ′ ) \gamma Q(x',a') γQ(x′,a′) 的和相同。公式(2.1)与公式(2.2)的形式很相似,但意义却有巨大不同,公式(2.1)反映的是值(value)之间的关系,而公式(2.2)反映的是随机变量分布(distribution)之间的关系。[1]指出Q分布构成一个Banach 空间 Q \mathbb Q Q,在 Q \mathbb Q Q中定义Wasserstein metric 以衡量各分布( U , V ∈ Q U,V\in \mathbb Q U,V∈Q )之间距离:
d p ( F , G ) : = inf U , V ∥ U − V ∥ p ( 2.3 ) d_p(F,G):=\inf_{U,V} \Vert U-V \Vert_p\qquad(2.3) dp(F,G):=U,Vinf∥U−V∥p(2.3)
式中,F、G 分别是随机变量 U、V 的 c.d.f(cumulative distribution function, 累积分布函数)。再取 d p d_p dp 的上界,得到 d ˉ p \bar d_p dˉp:
d ˉ p ( Q 1 , Q 2 ) : = sup d p ( Q 1 ( x , a ) , Q 2 ( x , a ) ) ( 2.4 ) \bar d_p(Q_1, Q_2):=\sup d_p(Q_1(x,a),Q_2(x,a))\qquad(2.4) dˉp(Q1,Q2):=supdp(Q1(x,a),Q2(x,a))(2.4)
以此 d ˉ p \bar d_p dˉp 为空间 Q \mathbb Q Q 的范数,[1]证明了算子 T π : Q → Q \mathcal T^{\pi}:\mathbb Q\to\mathbb Q Tπ:Q→Q 是收缩的:
T π Q ( x , a ) = D R ( x , a ) + γ P π Q ( x , a ) ( 2.5 ) \mathcal T^{\pi}Q(x,a)\overset{D}{=} R(x,a)+\gamma P^{\pi}Q(x,a)\qquad(2.5) TπQ(x,a)=DR(x,a)+γPπQ(x,a)(2.5)
其中 P π P^{\pi} Pπ 是状态转换算子,它表示现状态-行为总收益到NEXT状态-行为总收益的转换概率:
P π Q ( x , a ) = D Q ( x ′ , a ′ ) x ′ ∼ P ( ⋅ ∣ x , a ) , a ′ ∼ π ( ⋅ ∣ x ′ ) ( 2.6 ) P^{\pi}Q(x,a)\overset{D}{=} Q(x',a')\\ \ \\ x'\sim P(\cdot | x,a),\ a'\sim \pi(\cdot|x') \qquad(2.6) PπQ(x,a)=DQ(x′,a′) x′∼P(⋅∣x,a), a′∼π(⋅∣x′)(2.6)
式中, x ′ x' x′ 表示Next状态,它服从给定(x,a)下的P分布, a ′ a' a′服从在 x ′ x' x′下采取行为的概率分布 π \pi π。
综上,考虑迭代过程: Q n + 1 = T π Q n , ∀ Q 0 ∈ Q Q_{n+1}=\mathcal T^{\pi}Q_n,\ \forall \ Q_0\in \mathbb Q Qn+1=TπQn, ∀ Q0∈Q ,它必收敛于算子 T π \mathcal T^{\pi} Tπ 的不动点,该不动点即是所需搜索的最优 Q ∗ ( x , a ) Q^*(x,a) Q∗(x,a) 分布。
[3]给出了一个pytorch实现例子,大致流程如下(还可参考我的另一篇博客[4]):
图2 distributional dqn 处理流程
该方案由两个网络构成:Net 和 Target-Net,这两个网络分别代表迭代过程( Q n + 1 = T π Q n , ∀ Q 0 ∈ Q Q_{n+1}=\mathcal T^{\pi}Q_n,\ \forall \ Q_0\in \mathbb Q Qn+1=TπQn, ∀ Q0∈Q)中的 Q n + 1 Q_{n+1} Qn+1 和 Q n Q_{n} Qn,图2的处理步骤如下:
以上方法,用多层神经网络作为分布函数的逼近工具,通过SGD方法优化网络,是典型的deep learning方法,另外,distributional Bellman算法还根据不动点理论,构建迭代学习框架,让deep learning成为整个框架的一部分,有机地将基础算法与deep learning融合起来,既扩展了deep learning使用的范围,也为未来搭建更复杂的系统提供了思路。
参考文献:
1、A Distributional Perspective on Reinforcement Learning,https://arxiv.org/abs/1707.06887
2、A Primer on Hilbert Space Theory:Linear Spaces, Topological Spaces, Metric Spaces, Normed Spaces, and Topological Groups,Carlo Alabiso,Springer International Publishing Switzerland 2015
3、《Deep Reinforcement Learning Hands-On》https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On/blob/master/Chapter07/07_dqn_distrib.py
4、《A Distributional Perspective on Reinforcement Learning》的理解:https://blog.csdn.net/StreamRock/article/details/86605272
1 ↩︎