zoukankan      html  css  js  c++  java
  • 机器学习 | 强化学习(5) | 价值函数拟合(Value Function Approximation)

    价值函数拟合(Value Function Approximation)

    导论(Introduction)

    • 目前的价值函数都是基于打表法(lookup table)进行穷举

      • 对于所有状态(s)都有一个实体(V(s))去表示
      • 或者对于每个状态-价值函数对(s,a)都有一个实体(Q(s,a))去表示
    • 对于拥有大规模马尔科夫决策过程的问题

      • 状态和动作过多以至于难以存储在内存中
      • 每个状态独立地进行学习实在是太慢了
    • 对于拥有大规模马尔科夫决策过程的解决方案

      • 基于函数近似去估计价值函数

        [egin{align} hat v(s,mathbf w) & approx v_pi(s) \ or hat v(s,a,mathbf w) & approx v_pi(s,a) end{align} ]

      • 由已知的状态去拟合未知的状态

      • 基于蒙特卡罗或者时序差分学习去更新参数(mathbf w)

    价值函数近似的类型

    这里的( heta)指的是一个函数近似的模型(不管是神经网络还是啥),或者说这里看成一个黑箱

    • 单纯估算一个状态的价值:

    [s ightarrow heta(mathbf w) ightarrow hat v(s,mathbf w) ]

    • 估计某状态下作出某动作的价值:

    [s,a ightarrow heta(mathbf w) ightarrow hat q(s, a,mathbf w) ]

    • 估计一个状态下做不同动作的价值

    [s ightarrow heta(mathbf w) ightarrow hat q(s, a_1,mathbf w)cdots hat q(s, a_m,mathbf w) ]

    该如何选择函数近似模型呢?

    这里有着多多少少的函数近似模型

    • 线性模型
    • 神经网络
    • 决策树
    • K近邻
    • 基于傅里叶/小波(wavelet)分析
    • ...

    我们一般采用可微分的(differentiable)函数近似模型

    例如:

    • 线性模型

    • 神经网络

    • 决策树

    • K近邻

    • 基于傅里叶/小波(wavelet)分析

    • ...

    更多方面,我们需要一种可以适用于非静态以及的非IID数据的训练方法

    注:非IID(Non-independent and identical distributed)非独立或是同质分布,这里我抄一下定义:

    Literally, non iid should be the opposite of iid in either way, independent or identical.

    顾名思义,non-iid即是独立 或者 同质分布(iid)的反义词。

    So for example, if a coin is flipped, let X is the random variable of event that result is tail, Y is the random variable of event the result is head, then X and Y are definitely dependent. They can be decided by each other.

    我们举一个例子,想象抛出一枚硬币,x是最后一次抛出的结果分布,而y是第一次抛出的结果分布,若xy之间存在一定的相关性。那么他们之间存在决定关系。

    As to the non identical, once the distributions of two random variables are not the same, they can be called non-identical.

    对于非同质性,如果一个分布里面的任意两个变量都是不一致的,那么就称为非同质的

    Therefore, either of the situations happen, you may get an example of non iid case.

    为此,存在上述一种情况,那么就是non-iid数据

    提升性方法(Incremental Methods)

    梯度下降(Gradient Descent)

    • 使(J(mathbf w))为关于参数向量(mathbf w)的可微分函数

    • 那么定义(J(mathbf w))的梯度为:

      [ abla_{mathbf w}J(mathbf w) = left( egin{array}{c} frac{delta J(mathbf w)}{deltamathbf w_1}\ vdots \ frac{delta J(mathbf w)}{deltamathbf w_n} end{array} ight) ]

    • 为此要寻找(J(mathbf w))的局部最小值

    • 基于负梯度的方向去调整参数(mathbf w)

      [Delta mathbf w = -frac{1}{2}alpha abla_{mathbf w}J(mathbf w) ]

      此处(alpha)是一个步长大小的参数

    基于随机梯度下降(Stochastic Gradient Descent)的价值函数拟合

    • 目标:寻找一个参数向量(mathbf w)可以最小化近似价值(hat v(s,mathbf w))与真实价值(v_pi(s))之间的均方差MSE

      [J(mathbf w)=mathbb{E_pi}[(v_pi(S) -hat v(S,mathbf w)) ^2] ]

    • 通过梯度下降去寻找局部最小值

      [egin{align} Delta mathbf w & = -frac{1}{2}alpha abla_mathbf wJ(mathbf w) \ & = alphamathbb{E_pi}[(v_pi(S) - hat v(S,mathbf w)) abla_mathbf what v(S,mathbf w)] end{align} ]

    • 而随机梯度下降则基于梯度取样

      [Deltamathbf w= alpha(v_pi(S) - hat v(S,mathbf w)) abla_mathbf what v(S,mathbf w) ]

    • 期望更新与全梯度更新本质一致

    特征向量(Feature Vectors)

    • 基于一个特征向量去表示状态

      [mathbf x(S) = left( egin{array}{c} mathbf x_1(S)\ vdots \ mathbf x_n(S) end{array} ight) ]

    • 例如说:

      • 机器人与目标的距离
      • 股票市场的趋势
      • Piece与Pawn(不打国际象棋,真不知道什么玩意)在棋盘上的排兵布阵

    线性价值函数近似(Linear Value Function Approximation)

    • 通过一个特征之间的线性组合来代表一个价值函数

      [hat v(S,mathbf w) = mathbf x(S)^Tmathbf w = sum^n_{j=1}mathbf x_j(S)mathbf w_j ]

    • 而目标函数关于参数(mathbf w)的二次方

      [J(mathbf w)=mathbb{E_pi}Big[(v_pi(S) -mathbf x(S)^Tmathbf w)^2Big] ]

    • 因此随机梯度下降将会收敛于全局最优解(因为二次函数只有一个最小值)

      更新方式如下简单:

      [egin{align} Delta _mathbf what v(S,mathbf w) & =mathbf x(S) \ Deltamathbf w&=alpha(v_pi(S),-hat v(S,mathbf w))mathbf x(S) end{align} ]

      更新 = 步长 x 预测误差 x 特征值

    查表式特征(Table Lookup Features)

    • 查表法属于线性函数近似的一个特例

    • 采用查表式特征

      [mathbf x ^ {table}(S) = left( egin{array}{c} mathbf 1(S=s_1) \ vdots \ mathbf 1(S=s_n) end{array} ight) ]

    • 参数向量(w)表示所有状态的价值

      [hat v(S, mathbf w) =left( egin{array}{c} mathbf 1(S=s_1) \ vdots \ mathbf 1(S=s_n) end{array} ight) cdot left( egin{array}{c} mathbf w_1 \ vdots \ mathbf w_n end{array} ight) ]

    • 特征中的每一个数值都可以当成某个状态的二进制编码或者独热编吗,而权重则是每一个状态的价值,以此转化为线性价值函数的估计

    增长型的预测算法(Incremental Prediction Algorithm)

    • 假设基于监督学习给定一个真实的价值函数(v_pi(s))

    • 只不过在强化学习中没有监督,只有回报

    • 实践中我们用(v_pi(s))来取代目标标签

      • 在蒙特卡罗算法中,目标则是返回回报(G_t)

        [Delta mathbf w = alpha(color{red}{G_t} - hat v(S_t, mathbf w)) abla_mathbf what v(S_t, mathbf w) ]

      • 对于(TD(0)),目标是时序差分目标(R_{t+1} + gammahat v(S_{t+1}, mathbf w))

        [Deltamathbf w=alpha(color{red}{R_{t+1} + gammahat v(S_{t+1}, mathbf w)} - hat v(S_t, mathbf w)) abla_mathbf what v(S_t, mathbf w) ]

      • 对于(TD(lambda)),目标则为(lambda)-返回回报(G_t^lambda)

        [Deltamathbf w = alpha(color{red}{G_t^lambda}-hat v(S_t,mathbf w)) abla_mathbf what v(S_t,mathbf w) ]

    基于蒙特卡罗的价值函数估计

    • 返回回报(G_t)乃是对真实价值(v_pi(S_t))无偏差的噪音采样

    • 为此我们可以基于“训练集”的监督学习

      [langle S_1, G_1 angle, langle S_2, G_2 angle, dots, langle S_T, G_T angle ]

    • 例如,采用线性蒙特卡罗策略评估

      [egin{align} Delta mathbf w & = alpha(color{red}{G_t}-hat v(S_t,mathbf w)) abla_mathbf what v(S_t,mathbf w)\ & = alpha(G_t - hat v(S_t,mathbf w))mathbf x(S_t) end{align} ]

    • 蒙特卡罗评价收敛于局部最优解

    • 基于非线性价值函数估计同样适用

    基于时序差分的价值函数估计

    • 对于时序差分目标(R_{t+1}+gammahat v(S_{t+1},mathbf w))是价值函数(v_pi(S_t))偏差采样

    • 为此我们可以基于“训练集”的监督学习

      [langle S_1, R_2 + gammahat v(S_2,mathbf w) angle, langle S_2, R_3 + gammahat v(S_3,mathbf w) angle, dots, langle S_{T-1}, R_T angle ]

    • 例如,基于线性的(TD(0))

      [egin{align} Delta mathbf w & = alpha(color{red}{ R + gammahat v(S', mathbf w)} - hat v(S,mathbf w)) abla_mathbf what v(S,mathbf w) \ & = alphadeltamathbf x(S) end{align} ]

    • (TD(0))将会收敛于(接近)最优解

    基于(TD(lambda))的价值函数估计

    • 对于时序差分目标(G^lambda_t)是价值函数(v_pi(S_t))偏差采样

    • 为此我们可以基于“训练集”的监督学习

      [langle S_1, G^lambda_1 angle, langle S_2, G^lambda_2 angle, dots, langle S_{T-1}, G^lambda_{T-1} angle ]

    • Forward View的线性(TD(0))

      [egin{align} Delta mathbf w & = alpha(color{red}{G^lambda_t} - hat v(S,mathbf w)) abla_mathbf what v(S,mathbf w) \ & = alpha(color{red}{G^lambda_t} - hat v(S,mathbf w))mathbf x(S) end{align} ]

    • Backward View的线性(TD(0))

      [egin{align} delta_t & = R_{t+1} + gamma hat v(S_{t+1},mathbf w) - hat v(S_,mathbf w)\ E_t & = gammalambda E_{t-1} + mathbf x(S_t) \ Delta w & =alphadelta_tE_t end{align} ]

    对于Forward View和Backward View的线性(TD(lambda))都是等价的

    这时候有学生提问Silver道为何更新的时候只用(hat v(S,mathbf w)),而不用所有(lambda)的价值函数,Silver解释道因为每次更新都会用到Forward的数据,而这些Forward的数据基于一大堆真实reward,其置信度较高,如果在后续更新一个未知的价值函数再更新一次只会对这些价值函数产生倒退的作用;另外实践中证明的确是前者方法更高效。

    动作-价值函数的估计

    • 近似动作-价值函数

      [hat q(S,A,mathbf w)approx q_pi(S,A) ]

    • 最小化估计动作-价值函数(hat q(S,A,mathbf w))与真实动作-价值(q_pi(S,A))之间的均方差

      [J(mathbf w) = mathbb{E_pi}[(q_pi(S,A)-hat q(S,A,mathbf w))^2] ]

    • 基于随机梯度去寻找其局部最优解

      [egin{align} -frac{1}{2} abla_mathbf wJ(mathbf w) & =(q_pi(S,A)-hat q(S,A,mathbf w)) abla_mathbf what q(S,A,mathbf w) \ Deltamathbf w & = alpha(q_pi(S,A) - hat q(S,A,mathbf w)) abla_mathbf what q(S,A,mathbf w) end{align} ]

    线性动作-价值函数(Linear Action-Value Function)的估计

    • 通过一个特征向量来表示状态与动作

    • 然后通过这些特征的线性组合来表示动作-价值

      [hat q(S,A,mathbf w)=mathbf x(S,A)^Tmathbf w = sum^n_{j=1}mathbf x_k(S,A)mathbf w_j ]

    • 随机梯度下降更新

      [egin{align} abla_mathbf w hat q(S,A,mathbf w) &= mathbf x(S,A) \ Deltamathbf w & = alpha(q_pi(S,A) - hat q(S,A,mathbf w))mathbf x(S,A) end{align} ]

    增长型的控制算法

    • 正如预测算法,我们采用(q_pi(S,A))去取代目标

      • 对于蒙特卡罗,目标即是返回回报(G_t)

        [Deltamathbf w=alpha(color{red}{G_t}-hat q(S_t,A_t,mathbf w)) abla_mathbf what q(S_t,A_t,mathbf w) ]

      • 对于(TD(0)),目标即是时序差分目标(R_{t+1} + gamma Q(S_{t+1},A_{t+1}))

      [Deltamathbf w=alpha(color{red}{R_{t+1} + gamma Q(S_{t+1},A_{t+1})}-hat q(S_t,A_t,mathbf w)) abla_mathbf what q(S_t,A_t,mathbf w) ]

      • 对于orward-View(TD(lambda)),目标即是状态-价值(lambda)-返回回报

        [Deltamathbf w=alpha(color{red}{q^lambda_t}-hat q(S_t,A_t,mathbf w)) abla_mathbf what q(S_t,A_t,mathbf w) ]

      • 对于Backward View(TD(lambda)),等价更新

        [egin{align} delta_t & = R_{t+1} + gammahat q(S_{t+1}, A_{t+1},mathbf w)-hat (S_t,A_t,mathbf w) \ E_t & = gammalambda E_{t-1} + abla_mathbf what (S_t,A_t,mathbf w) \ Deltamathbf w & = alphadelta_tE_t end{align} ]

    预测算法的收敛性

    这里Silver提出了一个反例并不是所有情况下都适用用(TD)学习,有时候并不一定会收敛

    基于策略与否 算法 查表 线性 非线性
    基于策略 蒙特卡罗 (checkmark) (checkmark) (checkmark)
    (TD(0)) (checkmark) (checkmark) ( imes)
    (TD(lambda)) (checkmark) (checkmark) ( imes)
    非基于策略 蒙特卡罗 (checkmark) (checkmark) (checkmark)
    (TD(0)) (checkmark) ( imes) ( imes)
    (TD(lambda)) (checkmark) ( imes) ( imes)

    梯度时序差分学习(Gradient Temporal-Diference Leanrning)

    • (TD)学习本身并不跟随任何一个目标函数
    • 这就是为何(TD)学习在非基于策略或者非线性函数拟合时发散
    • 梯度(TD)则是基于预测的贝尔曼误差(projected Bellman error)
    基于策略与否 算法 查表 线性 非线性
    基于策略 蒙特卡罗 (checkmark) (checkmark) (checkmark)
    (TD) (checkmark) (checkmark) ( imes)
    梯度(TD) (checkmark) (checkmark) (checkmark)
    非基于策略 蒙特卡罗 (checkmark) (checkmark) (checkmark)
    (TD) (checkmark) ( imes) ( imes)
    梯度(TD) (checkmark) (checkmark) (checkmark)

    控制算法的收敛性

    算法 查表法 线性 非线性
    蒙特卡罗控制 (checkmark) (checkmark) ( imes)
    (SARSA)控制 (checkmark) (checkmark) ( imes)
    Q-学习 (checkmark) ( imes) ( imes)
    梯度Q-学习 (checkmark) (checkmark) ( imes)

    带括号表示会在接近最优解旁边环绕

    批量方法(Batch Methods)

    批量强化学习(Batch Reinforcement Learning)

    • 梯度下降即简单又直观
    • 但采样并非高效
    • 批量方法则寻求最佳的拟合价值函数
    • 基于agent的记录(训练集)

    最小二乘预测(Least Squares Prediction)

    • 给定价值函数的近似(hat v(s,mathbf w)approx v_pi(s))

    • 以及由((state,value))组成的记录(mathcal{D})

      [mathcal{D} = {(s_1,v^pi_1), (s_2,v_2^pi),dots,(s_T,v^pi_T)} ]

    • 参数(mathbf w)如何取值才是对函数(hat v(s,mathbf w))的最佳拟合?

    • 最小二乘法预测寻找一个参数向量(mathbf w)以最小化(hat v(s_t, mathbf w))与目标价值(v_t^pi)的方差

      [egin{align} LS(mathbf w) & =sum^T_{t=1}(v_t^pi - hat v(s_t,mathbf w))^2 \ & = mathbb{E}_mathcal{D}[(v^pi - hat v(s,mathbf w)) ^ 2] end{align} ]

    基于记录回放(Experience Replay)的随机梯度下降(SGD)

    • 给定由((state,value))组成的记录(mathcal{D})

      [mathcal{D} = {(s_1,v^pi_1), (s_2,v_2^pi),dots,(s_T,v^pi_T)} ]

    • 重复:

      • 从记录中进行状态、价值的采样

        [langle s, v^pi anglesimmathcal{D} ]

      • 应用随机梯度下降进行更新

        [Deltamathbf w =alpha(v^pi - hat v(s,mathbf w)) abla_mathbf what v(s, mathbf w) ]

    • 收敛于最小二乘解

      [mathbf w^pi = mathop{argmin}_mathbf w LS(mathbf w) ]

    基于记录回放的深度Q网络(Deep Q-Network, DQN)

    DQN采用纪录回放以及拟合Q目标

    • 基于(epsilon)-贪心策略去获取动作(a_t)

    • 将状态转移(langle s_t, a_t, r_{t+1},s_{t+1} angle)存储在回放内存(mathcal{D})

    • (mathcal{D})中采集任意大小的迷你批量状态转移(langle s_t, a_t, r_{t+1},s_{t+1} angle)

    • 计算Q学习的目标,也就是旧的、已经拟合好的参数(mathbf w)

    • 基于MSE最优化Q网络以及Q学习目标

      [mathcal{L}_i(mathbf w) =mathbb{E_{s,a,r,s'simmathcal{D_i}}}Bigg[ igg(r+gammamax_{a'}Q(s',a';mathbf w_i^-)-Q(s,a'mathbf w_i^)igg)^2 Bigg] ]

    • 通过多次的梯度下降

    [后面都是讲DQN应用于雅达利游戏的例子,就没记录了]

    线性最小二乘法预测(Linear Least Squares Prediction)

    • 基于记录回放去寻找最小二乘解
    • 会导致多次迭代
    • 因此通过线性的价值函数拟合(hat v(s,mathbf w)=mathbf x(s)^Tmathbf w)
    • 我们可以直接得出闭式解

    对于(LS(mathbf w))中的最小值,其期望的更新应该为0

    [egin{align} mathbb{E}_mathcal{D}[Deltamathbf]&=0 \ alphasum^T_{t=1}mathbf x(s_t)(v^pi_t -mathbf x(s_t)^Tmathbf w) & = 0 \ sum^T_{t=1}mathbf x(s_t)v^pi_t & =sum^T_{t=1}mathbf x(s_t) mathbf x(s_t)^Tmathbf w \ mathbf w & =Bigg(sum^T_{t=1}mathbf x(s_t) mathbf x(s_t)^T Bigg) ^ {-1}sum^T_{t=1}mathbf x(s_t)v^pi_t end{align} ]

    • 闭式解的时间复杂度为(O(N^3))
    • 而基于谢尔曼莫里森(Shermann-Morrison)方法增长型方法则为(O(N^2))

    线性最小二乘法预测

    • 我们对于真实价值(v_t^pi)是未知的

    • 在实践中,训练数据不可避免采用带有噪音或者偏差的(v_t^pi)的样本

      • LSMC,最小二乘法蒙特卡罗基于返回回报(v^pi_tapprox G_t)
      • LSTD,最小二乘法时序差分基于时序差分目标(v^pi_tapprox R_{t+1}+gamma hat v(S_{t+1},mathbf w))
      • LSTD((lambda)),最小二乘法TD((lambda))基于(lambda)-返回回报(v^pi_tapprox G_t^pi)
    • 每一种情况下都能为拟合MC/TD/TD((lambda))找到一个闭式解

    • LSMC

      [egin{align} 0 & = sum^T_{t=1}alpha(G_t - hat v(S_t, mathbf w))mathbf x(S_t) \ mathbf w & = Bigg(sum^T_{t=1}mathbf x(S_t)mathbf x(S_t)^TBigg)^{-1}sum^T_{t=1}mathbf x(S_t)G_t end{align} ]

    • LSTD

      [egin{align} 0 & =sum^T_{t=1}alpha(R_{t+1} + gammahat v(S_{t+1},mathbf w) - hat v(S_t, mathbf w))mathbf x(S_t) \ mathbf w & = Bigg(sum^T_{t=1}mathbf x(S_t)(mathbf x(S_t)-gammamathbf x(S_{t+1}))^TBigg)^{-1}sum^T_{t=1}mathbf x(S_t)R_{t+1} \ 0 & =sum^T_{t=1}alphadelta_tE_t \ mathbf w&= Bigg(sum^T_{t=1}E_t(mathbf x(S_t)-gammamathbf x(S_{t+1}))^TBigg)^{-1}sum^T_{t=1}E_tR_{t+1} end{align} ]

      基于、非基于策略 算法 查表法 线性 非线性
      基于策略 MC (checkmark) (checkmark) (checkmark)
      LSMC、 (checkmark) (checkmark) -
      TD (checkmark) (checkmark) ( imes)
      LSTD (checkmark) (checkmark) -
      非基于策略 MC (checkmark) (checkmark) (checkmark)
      LSMC (checkmark) (checkmark) -
      TD (checkmark) ( imes) ( imes)
      LSTD (checkmark) (checkmark) -

    最小平方动作-状态函数拟合(Least Squares Action-Value Function Approximation)

    • 拟合动作-价值函数(q_pi(s,a))

    • 采用特征的线性组合(mathbf x(s,a))

      [hat q(s,a,mathbf) = mathbf x(s,a)^Tmathbf w approx q_pi(s,a) ]

    • 最小化(hat q(s,a,mathbf w))(q_pi(s,a))的最小平方误差

    • 基于策略(pi)产生的记录序列

    • (langle (state,action), value angle)对子定义为

    [mathcal{D} = {langle (s_1,a_1),v_1^pi angle,langle (s_2,a_2),v_2^pi angle,dots,langle (s_T,a_T),v_T^pi angle} ]

    最小二乘控制(Least Squares Control)

    • 对于每一次迭代,我们将高效地利用所有序列。

    • 因为是控制,所以同时也要提升策略。

    • 这个记录序列从多个策略中产生

    • 因此为了计算(q_pi(S,A)),我们得用非基于策略方法

    • 跟Q-学习大体一致

      • 由旧策略产生的记录序列

        [S_t, A_t, R_{t+1},S_{t+1}sim pi_{old} ]

      • 其更新的后继动作定义为(A'=pi_{new(S_{t+1})})

      • 通过更新的动作去更新(hat q(S_t,A_t,mathbf w))

        [R_{t+1}+gammahat q(S_{t+1}, A', mathbf w) ]

    最小二乘Q-Learning

    • 将线性Q-学习更新定义为:

      [egin{align} delta & = R_{t+1} + gammahat q(S_{t+1}, color{red}{pi(S_{t+1})},mathbf w) - hat q(S_t,A_t,mathbf w) \ Deltamathbf w & = alpha deltamathbf x(S_t,A_t) end{align} ]

    • LSTDQ算法:通过总体更新为0去进行更新

      [egin{align} 0 & = sum^T_{t=1}alpha(R_{t+1}+gammahat q(S_{t+1}, color{red}{pi(S_{t+1})}, mathbf w)-hat q(S_t, A_t, mathbf w))mathbf x(S_t, A-t) \ mathbf w & = igg(sum^T_{t=1}mathbf x(S_t, A_t)(mathbf x(S_t,A_t) - gammamathbf x(S_{t+1}, pi(S_{t+1})))^Tigg)^{-1}sum^T_{t=1}mathbf x(S_t,A_t)R_{t+1} end{align} ]

    各类控制算法的收敛性

    算法 查表法 线性 非线性
    蒙特卡罗控制 (checkmark) (checkmark) ( imes)
    SARSA (checkmark) (checkmark) ( imes)
    Q-Learning (checkmark) ( imes) ( imes)
    LSPI (checkmark) (checkmark) -

    带括号的意味着会在最优解附近徘徊

  • 相关阅读:
    src和href属性的区别
    cookie, sessionStorage和localStorage的区别
    C# base64 转 byte[]
    C# 中字符串string和字节数组byte[]的转换
    C#获取当前路径的七种方法 【转载】
    C# 读取大文件 (可以读取3GB大小的txt文件)
    伪装文件到图片工具
    nmap命令扫描存活主机
    .deb文件如何安装,Ubuntu下deb安装方法图文详解
    kali修改更新源及更新
  • 原文地址:https://www.cnblogs.com/uzuki/p/14289944.html
Copyright © 2011-2022 走看看