Abbreviations Declaration
这是在Quora上对动态规划(DP)说明的极好的例子
writes down “1+1+1+1+1+1+1+1 =” on a sheet of paper
“What’s that equal to?”
counting “Eight!”
writes down another “1+” on the left
“What about that?”
quickly “Nine!”
“How’d you know it was nine so fast?”
“You just added one more”
"So you didn’t need to recount because you remembered there were eight! Dynamic Programming is just a fancy way to say ‘remembering stuff to save time later’ "
这一部分是对被称为 memorization部分的的解释。
决策是人类或任何生物为了维持生存和存在而进行的最基本的活动。作为一个生存的决策者,他们在一个复杂的、未知的、不可预测的、不断变化的环境中不断遇到各种各样的挑战。为了应对这些挑战,应在评估情况或环境变化后作出相应的决定。可以说,做出正确决定的能力不是与生俱来的,但幸运的是,他们可以通过学习环境经验的过程获得。当然,获得这种学习能力往往伴随着一定的成本。也就是说,他们必须通过尝试各种决策,包括错误的决策来学习正确的决策,以对环境做出反应,接受环境的反馈,并在未来的决策中更新自己的策略。
例子, AlphaGo, Autonomous Driving
Definition 1.2 (Machine learning 机器学习).
机器学习是一个计算机程序,它 “关于某类任务 T \mathcal{T} T,从经验 E \mathcal{E} E中学习。它在 T \mathcal{T} T中的任务表现,由性能测量 P \mathcal{P} P度量,随着经验 E \mathcal{E} E的增加而提高”。
X \mathcal{X} X :状态空间,描述环境中所有情况的集合。
U \mathcal{U} U :可接受行动的集合。
X k , U k \mathcal{X}_k, \mathcal{U}_k Xk,Uk: 初始时间点之后的第 k k k个状态或阶段的可接受的状态空间和行动空间。
Definition 1.3 历史(history )或轨迹(trajectory )被定义为环境的状态和智能体的交互而产生的行动的序列,即。
h : = ( x 0 , u 0 , . . . , x N − 1 , u N − 1 , x N ) ∈ X 0 × U 0 × . . . × U N − 1 × X N (1.1) h :=(x_0,u_0,...,x_{N-1},u_{N-1},x_N) \in \mathcal{X}_0 \times \mathcal{U}_0 \times ... \times\mathcal{U}_{N-1} \times\mathcal{X}_N \tag{1.1} h:=(x0,u0,...,xN−1,uN−1,xN)∈X0×U0×...×UN−1×XN(1.1)
其中,
N N N: 交互的范围(horizon of interaction)
而当 范围(horizon ) 是有限的,相应的SDM问题被称为有限范围问题(finite horizon problem) 或RL背景下的事件问题(episodic problem)。
为了使状态转换问题更具有可操作性,我们需要建立一个系统演化的模型 ( x k , u k ) → x k + 1 (x_k, u_k) \to x_{k+1} (xk,uk)→xk+1。在一个状态 k k k,环境和智能体之间的交互被描述为以下离散时间动态系统
x k + 1 = f k ( x k , u k , w k ) , for k = 0 , . . . , N − 1 (1.2) x_{k+1} = f_k(x_k, u_k, w_k), \text{for} \ k = 0,..., N-1 \tag{1.2} xk+1=fk(xk,uk,wk),for k=0,...,N−1(1.2)
w k ∈ W k w_k \in \mathcal{W}_k wk∈Wk 表示阶段 k k k的扰动(perturbation) 或不确定性(uncertainty) 。
在状态 k k k的扰动可以由条件概率 p ( w k ∣ x k , u k ) p(w_k|x_k, u_k) p(wk∣xk,uk)驱动,而扰动往往要与历史无关,即 p ( w k ) p(w_k) p(wk)。我们用 h h h来表示轨迹或历史。在每个决策状态中,需要对轨迹 h h h进行适当的评估,以促进下一次决策。
Assumption 1.1 (Reinforcement hypothesis 强化假设).智能行为源于个人的行为,该行为寻求最大化其从环境中获得的奖励的积累。
具体来说,对于一个交互的基本部分( x k , u k , x k + 1 x_k, u_k, x_{k+1} xk,uk,xk+1)来说,我们可以构建一个实值评价,即对于 k = 0 , . . . , N − 1 k=0, ..., N-1 k=0,...,N−1来说
g k = X k × U k × W k → R , ( x k , u k , w k ) → g k ( x k , u k , w k ) . (1.3) g_k= \mathcal{X}_k \times \mathcal{U}_k \times \mathcal{W}_k \to \mathbb{R},\\ (x_k, u_k, w_k) \to g_k(x_k, u_k, w_k). \tag{1.3} gk=Xk×Uk×Wk→R,(xk,uk,wk)→gk(xk,uk,wk).(1.3)
这是一个局部评估函数, 对于一个基本的转换来说也被称为局部"成本去向函数(cost-to-go function) ", 或者在RL文献中被称为 奖励函数(reward function)。
Remark 1.1 (Cost function vs. reward function 成本函数 vs. 奖励函数)
DP和RL的区别可以从成本函数的选择来看。DP中的成本函数通常是客观地预先确定的。但在RL中,成本函数更多的是由解决方案提供者或工程师手动设计的。
使用(1.3)中定义的基本评估和强化假设,我们可以定义整个轨迹的评估,其中包括所有的局部转换,即
G ( h ) : = g N ( x N ) + ∑ k = 0 N − 1 g k ( x k , u k , w k ) (1.4) G(h):=g_N(x_N) + \sum_{k=0}^{N-1}g_k(x_k,u_k, w_k) \tag{1.4} G(h):=gN(xN)+k=0∑N−1gk(xk,uk,wk)(1.4)
其中 g N ( x N ) g_N(x_N) gN(xN)定义为在最终状态 N N N的的成本函数。为了使这种评估具有可比性, 通常假设成本函数具有边界性。
Assumption 1.2 (Bounded cost function 有边界的成本函数)
成本函数 g k ( x k , u k , w k ) g_k(x_k, u_k, w_k) gk(xk,uk,wk) 被假设为有边界, i.e., ∣ g k ( x k , u k , w k ) ∣ < ∞ for all k = 0 , . . . , N − 1 |g_k(x_k, u_k, w_k)| < \infin \text{ for all } k = 0, ..., N-1 ∣gk(xk,uk,wk)∣<∞ for all k=0,...,N−1
用 w : = [ w 0 , w 1 , . . . w N − 1 ] w :=[w_0, w_1, ... w_{N-1}] w:=[w0,w1,...wN−1]表示整个范围上的扰动,用 p ( w ) p(w) p(w)表示 w w w的概率密度函数。因此,从一个给定的初始状态 x 0 ∈ X 0 x_0\in \mathcal{X}_0 x0∈X0开始,跟随一连串的行动 π : = u 0 , u 1 , . . . , u N − 1 ∈ U 0 × . . . × U N − 1 \pi:= {u_0, u_1, ..., u_{N-1}} \in \mathcal{U}_0 \times ... \times\mathcal{U}_{N-1} π:=u0,u1,...,uN−1∈U0×...×UN−1,期望为
J π ( x 0 ) : = E p ( w ) [ g N ( x N ) + ∑ k = 0 N − 1 g k ( x k , u k , w k ) ] (1.5) J^\pi(x_0) := \mathbb{E}_{p(w)}[g_N(x_N) + \sum_{k=0}^{N-1}g_k(x_k,u_k, w_k)] \tag{1.5} Jπ(x0):=Ep(w)[gN(xN)+k=0∑N−1gk(xk,uk,wk)](1.5)
在行动序列 π \pi π下,可以给出总成本函数。而SDM的目标是找到一个行动序列 π \pi π,使任何状态 x 0 x_0 x0的总成本函数最小。
Definition 1.4 有限范围的随机顺序决策(Stochastic Sequential decision making with finite horizon).
给定一个如公式(1.2)的离散时间动态系统,一个有限范围SDM问题旨在为任意 x 0 ∈ X 0 x_0\in\mathcal{X}_0 x0∈X0,找到一个行动序列 π ∈ U 0 × . . . × U N − 1 \pi\in\mathcal{U}_0\times ... \times \mathcal{U}_{N-1} π∈U0×...×UN−1,这样就可以解决以下最小化问题
min π E p ( w ) [ g N ( x N ) + ∑ k = 0 N − 1 g k ( x k , u k , w k ) ] (1.6) \min _{\pi} \mathbb{E}_{p(w)}[g_N(x_N) + \sum_{k=0}^{N-1}g_k(x_k,u_k, w_k)] \tag{1.6} πminEp(w)[gN(xN)+k=0∑N−1gk(xk,uk,wk)](1.6)
请注意,SDM问题的解决方案是一系列依赖于初始状态 x 0 ∈ X 0 x_0\in \mathcal{X}_0 x0∈X0的行动序列。由于状态空间和行动空间都是有限的,很明显,可能行动的总数也是有限的。而成本 g k g_k gk的有界性仅仅表明问题的全局最小值的存在。将 π ∗ \pi^* π∗作为上述优化问题的解,并将 J ∗ ( x 0 ) : = J π ∗ ( x 0 ) J^*(x_0) := J^{\pi^*}(x_0) J∗(x0):=Jπ∗(x0)作为所有状态 x 0 在 X 0 x_0 在 \mathcal{X}_0 x0在X0 中的最优总成本函数。
环境和智能体之间的交互被描述为以下离散时间动态系统
x k + 1 = f k ( x k , u k ) for all k = 0 , . . . N − 1 (1.7) x_{k+1} = f_k(x_k, u_k) \text{ for all }k = 0, ... N-1 \tag{1.7} xk+1=fk(xk,uk) for all k=0,...N−1(1.7)
然后,我们表示任意初始状态 x 0 ∈ X 0 x_0 \in \mathcal{X}_0 x0∈X0在一连串行动 u 0 , . . . , u N − 1 u_0, ...,u_{N-1} u0,...,uN−1之后的总成本函数
J 0 ( x 0 ; u 0 , . . . , u N − 1 ) : = g N ( x N ) + ∑ k = 0 N − 1 g k ( x k , u k ) (1.8) J_0(x_0;u_0, ..., u_{N-1}): = g_N(x_N) + \sum_{k=0}^{N-1}g_k(x_k,u_k) \tag{1.8} J0(x0;u0,...,uN−1):=gN(xN)+k=0∑N−1gk(xk,uk)(1.8)
因为系统是完全确定性的, 它与对每一个状态进行映射是相同的,
π k : X k → U k , x k → u k (1.9) \pi_k: \mathcal{X}_k \to\mathcal{U}_k, x_k \to u_k \tag{1.9} πk:Xk→Uk,xk→uk(1.9)
这就被称为策略(policy)。稍微借用下符号,我们定义 π 0 ( x 0 ) = ( u 0 , u 1 , . . . , u N − 1 ) \pi_0(x_0) = (u_0, u_1, ..., u_{N-1}) π0(x0)=(u0,u1,...,uN−1),有在策略 π 0 \pi_0 π0下的成本函数 J 0 π 0 J_0^{\pi_0} J0π0,
J 0 π 0 ( x 0 ) = J 0 ( x 0 ; u 0 , . . . , u N − 1 ) . (1.10) J_0^{\pi_0}(x_0) = J_0(x_0; u_0, ..., u_{N-1}). \tag{1.10} J0π0(x0)=J0(x0;u0,...,uN−1).(1.10)
然后,问题是找到一个行动序列,使所有初始状态为 x 0 x_0 x0的成本函数最小,即
J 0 ∗ ( x 0 ) = min u k ∈ U k ( x k ) , k = 0 , . . . , N − 1 J 0 ( x 0 ; u 0 , . . . , u N − 1 ) . (1.11) J_0^{*}(x_0) = \min_{u_k \in U_k(x_k), k = 0, ..., N-1} J_0(x_0; u_0, ..., u_{N-1}). \tag{1.11} J0∗(x0)=uk∈Uk(xk),k=0,...,N−1minJ0(x0;u0,...,uN−1).(1.11)
其中 J 0 ∗ ( x 0 ) J_0^{*}(x_0) J0∗(x0)被称为最佳总成本函数。我们把相应的的最优行动序列表示为 π 0 ∗ ( x 0 ) \pi_0^*(x_0) π0∗(x0),即:
π 0 ∗ ( x 0 ) = ( u 0 ∗ , u 1 ∗ , . . . , u N − 1 ∗ ) ∈ arg min u k ∈ U k ( x k ) , k = 0 , . . . , N − 1 J 0 ( x 0 ; u 0 , . . . , u N − 1 ) (1.12) \pi_0^*(x_0) = (u^*_0, u^*_1, ..., u^*_{N-1}) \in \argmin_{u_k \in U_k(x_k), k = 0, ..., N-1} J_0(x_0; u_0, ..., u_{N-1}) \tag{1.12} π0∗(x0)=(u0∗,u1∗,...,uN−1∗)∈uk∈Uk(xk),k=0,...,N−1argminJ0(x0;u0,...,uN−1)(1.12)
这样一连串的最佳行动被称为问题的最佳策略。根据定义。显而易见的是
J 0 ∗ ( x 0 ) = J 0 π 0 ∗ ( x 0 ) (1.13) J^*_0(x_0) = J_0^{\pi_0^*}(x_0) \tag{1.13} J0∗(x0)=J0π0∗(x0)(1.13)
因为最佳策略下的总成本函数一定是最佳成本函数。
对于每一个确定性有限范围问题,我们可以从第 k k k阶段得出一个前向截断的尾部子问题为
min u t ∈ U t ( x t ) , t = k , . . . , N − 1 J k ( x k ; u k , . . . , u N − 1 ) (1.14) \min_{u_t \in U_t(x_t), t=k, ... ,N-1} J_k(x_k;u_k,..., u_{N-1}) \tag{1.14} ut∈Ut(xt),t=k,...,N−1minJk(xk;uk,...,uN−1)(1.14)
其中最佳总成本函数及其相关策略以同样的方式表示。然后,最初的SDM问题和它的尾部子问题之间的关系被描述为最优化原则,它在Bellman的论文“Dynamic Programming”中被表述为
“Any optimal policy has the property that whatever the initial state and initial decision are, the remaining decisions must constitute an optimal policy with regard to the state resulting from the first decision.”
“任何最优化策略都具有这样的特性:无论初始状态和初始决策是什么,其余的决策必须构成关于第一个决定所产生的状态的最优策略。”
Theorem 1.1 最优化原则(Principle of Optimality)
给定一个有限范围的确定性问题, 使 π 0 ∗ ( x 0 ) = ( u 0 ∗ , u 1 ∗ , . . . , u N − 1 ∗ ) \pi_0^*(x_0) = (u^*_0,u^*_1, ..., u^*_{N-1}) π0∗(x0)=(u0∗,u1∗,...,uN−1∗)作为最佳策略, 然后对于 k = 1 , . . . , N − 1 k= 1, ..., N-1 k=1,...,N−1,任何向前截断策略(forward truncated policy) π k ∗ ( x k ) = ( u k ∗ , . . . , u N − 1 ∗ ) \pi^*_k(x_k) = (u_k^*, ..., u_{N-1}^*) πk∗(xk)=(uk∗,...,uN−1∗)对于相应的尾部子问题是最优的。
证明: 我们通过矛盾法(contradiction)证明这个结果。 假设对于在 k k k状态的尾部子问题,存在一个最优策略 π ~ k ∗ ( x k ) = ( π ~ k , . . . , π ~ N − 1 ) \tilde{\pi}_k^*(x_k) = (\tilde{\pi}_k, ...,\tilde{\pi}_{N-1}) π~k∗(xk)=(π~k,...,π~N−1) 优于 π k ∗ \pi_k^* πk∗, 即,对于一些 x k x_k xk有 J k π ~ k ∗ ( x k ) < J k π k ∗ ( x k ) J_k^{\tilde{\pi}^*_k}(x_k) < J_k^{\pi^*_k}(x_k) Jkπ~k∗(xk)<Jkπk∗(xk)。根据成本函数的定义,我们得到
J 0 π 0 ∗ ( x 0 ) = g N ( x N ) + ∑ t = 0 N − 1 g t ( x t , u t ∗ ) = g N ( x N ) + ∑ t = k N − 1 g t ( x t , u t ∗ ) + ∑ t = 0 k − 1 g t ( x t , u t ∗ ) > g N ( x N ) + ∑ t = k N − 1 g t ( x t , u ~ t ∗ ) + ∑ t = 0 k − 1 g t ( x t , u ~ t ∗ ) (1.15) \begin{aligned} J_0^{\pi^*_0}(x_0) & = g_N(x_N) + \sum_{t=0}^{N-1}g_t(x_t, u^*_t) \\ & = g_N(x_N) + \sum_{t=k}^{N-1}g_t(x_t, u^*_t) + \sum_{t=0}^{k-1}g_t(x_t, u^*_t) \\ & > g_N(x_N) + \sum_{t=k}^{N-1}g_t(x_t, \tilde{u}^*_t) + \sum_{t=0}^{k-1}g_t(x_t, \tilde{u}^*_t) \end{aligned} \tag{1.15} J0π0∗(x0)=gN(xN)+t=0∑N−1gt(xt,ut∗)=gN(xN)+t=k∑N−1gt(xt,ut∗)+t=0∑k−1gt(xt,ut∗)>gN(xN)+t=k∑N−1gt(xt,u~t∗)+t=0∑k−1gt(xt,u~t∗)(1.15)
显然,组成的策略( u 0 ∗ , . . . , u k − 1 ∗ , u ~ k ∗ , . . . , u ~ N − 1 ∗ u_0^*,...,u_{k-1}^*,\tilde{u}^*_k,..., \tilde{u}^*_{N-1} u0∗,...,uk−1∗,u~k∗,...,u~N−1∗)是比最优策略 π 0 ∗ \pi^*_0 π0∗更好的策略。 这个结果就直接与预设矛盾。
Theorem 1.2 确定性的动态规划 (Deterministic Dynamic Programming)
给定一个有限范围的确定性问题,有以下算法,即
J N ( x N ) = g N ( x N ) for all x N ∈ X N (1.16) J_N(x_N) = g_N(x_N) \text{ for all } x_N \in \mathcal{X}_N \tag{1.16} JN(xN)=gN(xN) for all xN∈XN(1.16)
并倒推为 k = N − 1 , . . . , 1 , 0 for all x N ∈ X N k = N-1, ..., 1, 0 \text{ for all } x_N \in \mathcal{X}_N k=N−1,...,1,0 for all xN∈XN
J k ( x k ) = min u k ∈ U k ( x k ) ( g k ( x k , u k ) + J k + 1 ( f k ( x k , u k ) ) ) (1.17) J_k(x_k) = \min_{u_k \in \mathcal{U}_k(x_k)}(g_k(x_k, u_k) + J_{k+1}(f_k(x_k, u_k)))\tag{1.17} Jk(xk)=uk∈Uk(xk)min(gk(xk,uk)+Jk+1(fk(xk,uk)))(1.17)
J 0 J_0 J0即为最佳成本函数。
证明: 我们通过 归纳法(induction)证明这个结果。从最终状态 N N N开始,对于所有的 x N ∈ X N x_N \in \mathcal{X}_N xN∈XN,以下是易得的
J N ∗ ( x N ) = g N ( x N ) = J N ( x N ) (1.18) J^*_N(x_N) = g_N(x_N) = J_N(x_N) \tag{1.18} JN∗(xN)=gN(xN)=JN(xN)(1.18)
我们假设对于 l = N − 1 , . . . , K + 1 l=N-1, ..., K+1 l=N−1,...,K+1,由公式(1.17)产生的成本函数 J l J_l Jl对于 l l l阶段的尾部问题是最优的,即对于所有 x l ∈ X l x_l \in \mathcal{X}_l xl∈Xl, 有
J l ( x l ) = J l ∗ ( x l ) : = min u t ∈ U t ( x t ) , t = l , . . . , N − 1 ( g N ( x N ) + ∑ t = l N − 1 g t ( x t , u t ) ) (1.19) J_l(x_l) = J_l^*(x_l) := \min_{u_t \in \mathcal{U}_t(x_t), t=l,...,N-1}(g_N(x_N) + \sum_{t=l}^{N-1}g_t(x_t, u_t)) \tag{1.19} Jl(xl)=Jl∗(xl):=ut∈Ut(xt),t=l,...,N−1min(gN(xN)+t=l∑N−1gt(xt,ut))(1.19)
那么对于状态 k k k,根据结构,我们有
J l ∗ ( x l ) : = min u k ∈ U k ( x k ) ( g k ( x k , u k ) + J k + 1 ( f k ( x k , u k ) ) ) = min u k ∈ U k ( x k ) ( g k ( x k , u k ) + J k + 1 ∗ ( f k ( x k , u k ) ) ) = min u k ∈ U k ( x k ) ( g k ( x k , u k ) + min u k ∈ U k ( x k ) , t = k + 1 , . . . , N − 1 ( g N ( x N ) + ∑ t = k + 1 N − 1 g t ( x t , u t ) ) ) = min u k ∈ U k ( x k ) , t = k , . . . , N − 1 ( g N ( x N ) + ∑ t = k N − 1 g t ( x t , u t ) ) = J k ∗ ( x k ) (1.20) \begin{aligned} J_l^*(x_l) & := \min_{u_k \in \mathcal{U}_k(x_k)}(g_k(x_k, u_k) + J_{k+1}(f_k(x_k, u_k))) \\ & = \min_{u_k \in \mathcal{U}_k(x_k)}(g_k(x_k, u_k) + J^*_{k+1}(f_k(x_k, u_k))) \\ & = \min_{u_k \in \mathcal{U}_k(x_k)}(g_k(x_k, u_k) + \min_{u_k \in \mathcal{U}_k(x_k), t=k+1, ..., N-1}(g_N(x_N) + \sum_{t=k+1}^{N-1}g_t(x_t, u_t))) \\ &=\min_{u_k \in \mathcal{U}_k(x_k), t=k, ..., N-1}(g_N(x_N) + \sum_{t=k}^{N-1}g_t(x_t, u_t)) \\ &= J^*_k(x_k) \end{aligned} \tag{1.20} Jl∗(xl):=uk∈Uk(xk)min(gk(xk,uk)+Jk+1(fk(xk,uk)))=uk∈Uk(xk)min(gk(xk,uk)+Jk+1∗(fk(xk,uk)))=uk∈Uk(xk)min(gk(xk,uk)+uk∈Uk(xk),t=k+1,...,N−1min(gN(xN)+t=k+1∑N−1gt(xt,ut)))=uk∈Uk(xk),t=k,...,N−1min(gN(xN)+t=k∑N−1gt(xt,ut))=Jk∗(xk)(1.20)
其中,公式(1.20b)中的第一个等式是由于归纳法的假设,第二个等式是由最佳成本函数 J k + 1 ∗ J^*_{k+1} Jk+1∗的定义得出的。
在计算出所有尾部问题的最优成本函数 J k ∗ J^*_k Jk∗后,可以通过以下方式直接提取出向前截断最优策略 π k ∗ \pi_k^* πk∗
π k ∗ ( x k ) ∈ arg min u k ∈ U k ( x k ) ( g k ( x k , u k ) + J k + 1 ∗ ( f k ( x k , u k ) ) ) (1.21) \pi_k^*(x_k) \in \argmin_{u_k \in \mathcal{U}_k(x_k) }(g_k(x_k, u_k) + J^*_{k+1}(f_k(x_k, u_k))) \tag{1.21} πk∗(xk)∈uk∈Uk(xk)argmin(gk(xk,uk)+Jk+1∗(fk(xk,uk)))(1.21)
向前截断最优策略 π k ∗ \pi_k^* πk∗与最优策略 π 0 ∗ \pi_0^* π0∗不同的是关注的范围不同,向前截断最优策略 π k ∗ \pi_k^* πk∗关注于范围 k = 1 , . . . , N − 1 k= 1, ..., N-1 k=1,...,N−1。可以说, π k ∗ ( x k ) ∈ π 0 ∗ ( x 0 ) \pi_k^*(x_k) \in \pi_0^*(x_0) πk∗(xk)∈π0∗(x0),根据定理1.1 和定理1.2。
扩展阅读:Top 50 Dynamic Programming Practice Problems