不动点理论在《A Distributional Perspective on Reinforcement Learning》上的应用

Fixed point理论是 Banach Space 中重要的理论工具。它常被用来讨论某个空间解的存在性,并由此发展出通过迭代的方式进行问题求解的算法。在[1]中,Fixed Piont理论处于整个算法的核心位置,是以分布式Bellman方程代替期望值Bellman方程的理论基础。本文将分成两个部分浅析之:第一部分 Fixed Point的迭代算法介绍;第二部分 Distributional 算法的不动点解析。

一、Fixed Point的迭代算法

首先要回顾以下 Fixed Point 原理,首先要给出的是收缩映射(Contraction)的定义[2]。
Definition 4.13(原书【2】的编号,下同)
A function f : X → Y f:X\to Y f:XY 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,x2X 的距离 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:XX is a contraction, then f f f has a unique fixed-point x 0 ∈ X x_0\in X x0X,
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}n1,此序列收敛于 x 0 x_0 x0,即 x n → x 0 x_n\to x_0 xnx0。若求解问题可以转换成在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=1nakixi=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=bx=(InA)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=InA,有
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)=FbxFby=FxFy=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=1knmaxx
于是,对于任意 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 CxCy=1knmaxi=1nck,i(xiyi)1knmax[i=1nck,ixiyi] 1knmax[i=1nck,i]1knmaxxiyi=1knmax[i=1nck,i]xy
因此,如果以下不等式成立:
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) 1knmax[i=1nck,i]<1(1.4)
C C C 就是一个收缩算子,回到 F = I n − A F=\mathbf I_n- \mathbf A F=InA 算子,要使 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) 1knmax[i=1nak,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=1nxk2
对于任意 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) Cx2=i=1n(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=ckx2ck2x2,因此
∥ 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) Cx2=i=1n(ckx)2i=1nck2x2 Cx[i=1nck2 ]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=1n(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()

不动点理论在《A Distributional Perspective on Reinforcement Learning》上的应用_第1张图片
图1 用迭代法求解方程
上述二元一次方程组满足case1和case2对矩阵A的要求,用迭代的方法求出的数值与矩阵求逆的方法的相同。当矩阵A的维数大时,迭代方法要比求逆方法有优势,它不仅计算量小,速度快,而且有很强的鲁棒性。

二、Distributional Bellman算法的不动点解析

在增强学习(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,VQ )之间距离:
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,VinfUVp(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π:QQ 是收缩的:
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) xP(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,  Q0Q ,它必收敛于算子 T π \mathcal T^{\pi} Tπ 的不动点,该不动点即是所需搜索的最优 Q ∗ ( x , a ) Q^*(x,a) Q(x,a) 分布。

[3]给出了一个pytorch实现例子,大致流程如下(还可参考我的另一篇博客[4]):
不动点理论在《A Distributional Perspective on Reinforcement Learning》上的应用_第2张图片
图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,  Q0Q)中的 Q n + 1 Q_{n+1} Qn+1 Q n Q_{n} Qn,图2的处理步骤如下:

  1. Net 接受Transition 采样中的当前状态 x。其中,一个Transition包含(x,a,r,x’)
    ,分别表示当前状态x、采取行动a,当前回报r,Next状态x’;
  2. Net 输出的Q分布—— Z ( x , a ) Z(x,a) Z(x,a),它由N个 [ V m i n , V m a x ] [V_{min},V_{max}] [Vmin,Vmax] 离散分布构成,一般在 [ V m i n , V m a x ] [V_{min},V_{max}] [Vmin,Vmax]上可以分为51个间隔,称为C51。N对应actions的数量,也即一个action对应一条分布,即图中一条 a i a_i ai 分布;
  3. 从输出中选取Transition中a对应的分布,作为后续交叉熵计算所需分布 Z ( x , a ) Z(x,a) Z(x,a);
  4. 将 Transition 中Next状态 x’ 作为Target-Net的输入,得到下一状态价值分布 Z ( x ′ , a ′ ) Z(x',a') Z(x,a),其组成也如2步骤的输出一样,因为Net的网络结构与Target-Net的结构是一样的;
  5. Z ( x ′ , a ′ ) Z(x',a') Z(x,a)中选取期望最大的那一个 a ∗ a^* a对应的分布—— Z ( x ′ , a ∗ ) Z(x',a^*) Z(x,a);
  6. 计算 r + γ Z ( x ′ , a ∗ ) r+\gamma Z(x',a^*) r+γZ(x,a) 分布函数在 [ V m i n , V m a x ] [V_{min},V_{max}] [Vmin,Vmax] 上的投影 Z ′ ( x , a ) = P r o j [ V m i n , V m a x ] ( r + γ Z ( x ′ , a ∗ ) ) Z'(x,a)=Proj_{[V_{min},V_{max}]}(r+\gamma Z(x',a^*)) Z(x,a)=Proj[Vmin,Vmax](r+γZ(x,a)),其中 r 是Transition中的当前回报, Z ′ ( x , a ) Z'(x,a) Z(x,a)便是不动点迭代 Q n + 1 = T π Q n Q_{n+1}=\mathcal T^{\pi}Q_n Qn+1=TπQn 算法中的 Q n + 1 Q_{n+1} Qn+1
  7. 用交叉熵定义 Z ′ ( x , a ) Z'(x,a) Z(x,a) Z ( x , a ) Z(x,a) Z(x,a)的距离,通过SGD(统计梯度下降)优化Net的参数,使 Z ( x , a ) Z(x,a) Z(x,a)逼近 Z ′ ( x , a ) Z'(x,a) Z(x,a),上述的pytorch实现中通过 target_net_sync=1000,设置梯度学习循环次数;
  8. 用学习后的Net 同步 Target-Net,实现不动点算法的迭代,即: Q n + 1 = T π Q n ,  such that  Q 0 → Q 1 → ⋯ → Q n → Q n + 1 ⋯ Q_{n+1}=\mathcal T^{\pi}Q_n,\ \text{such that }Q_0\to Q_1\to\cdots\to Q_n\to Q_{n+1}\cdots Qn+1=TπQn, such that Q0Q1QnQn+1
  9. 最后收敛,得到 Q ∗ ( x , a ) Q^*(x,a) Q(x,a)分布。

以上方法,用多层神经网络作为分布函数的逼近工具,通过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. 1 ↩︎

你可能感兴趣的:(机器学习与神经网络,数学)