Value-based learning(价值学习)入门(使用DQN)

以下内容总结自B站:深度强化学习(Deep Reinforcement Learning)_哔哩哔哩_bilibili

一、概述:

Value-based learning(价值学习):使用神经网络Deep Q network(DQN)来近似学习Q^*(s,a);使用时间差分(TD:temporal different)算法来训练DQN,即学习神经网络的参数。

二、概念回顾:

1、基于策略\pi的动作价值函数(Action-value function)

Q_{\pi}(s_t,a_t) = \mathbb{E}[U_t|S_t = s_t, A_t = a_t]表示t时刻状态s_t下做动作之后能获得的回报的期望。

U_t = R_t + \gamma \cdot R_{t+1} + \gamma ^2 \cdot R_{t+2} + \gamma ^3 \cdot R_{t+3} + \gamma ^4 \cdot R_{t+4} + \cdots

  • U_t 是回报 (Return):表示t时刻开始未来执行一组动作后能够获得的奖励之和。 U_t = R_t + \gamma R_{t+1} + \gamma ^2R_{t+2} + \gamma ^3R_{t+3} + \cdots
  • R_i是即时奖励,与状态 S_i和动作A_i相关;\gamma是折扣因子,取[0,1]之间。未来的奖励不确定,所以需要在未来奖励上打个折扣。
  • 动作价值函数Q_\pi(s_t, a_t)的现实意义:如果用策略\pi ,我们能知道在状态s_t下做动作a_t是否明智,即Q_\pi(s_t, a_t)会对动作空间中的每一个动作a_t打分。如果有了Q_\pi(s_t, a_t),Agent就能根据Q_\pi(s_t, a_t)对动作的评价做决策,选择得分最高的动作。
  • 用不同的策略\pi函数,会得到不同的Q_\pi(s_t, a_t)
  • 下面尝试把Q_\pi(s_t, a_t)中的\pi去掉:对Q_\pi(s_t, a_t)求关于\pi的最大值:Q^*(s_t,a_t) = max_\pi Q_\pi(s_t, a_t)

2、Optimal action-value function(最优动作价值函数Q^* (s, a)Q^*(s_t,a_t)):

Q^*(s_t,a_t) = max_\pi Q_\pi(s_t, a_t)表示在状态s_t下,做 a_t能得到最好的回报的期望。

  • 最优动作价值函数的现实意义: 在状态s_t下,会对动作空间中的每一个动作a_t打分,Agent每次选取最高分对应的动作a_t。 最优动作价值函数与策略\pi无关。
  • Q^*(s,a)能指导Agent做决策。有了Q^*(s,a),那么每观测到一个状态s_t,都能选择使状态价值函数值最大的动作 a_ta_t = argmax_a Q^*(s_t, a)
  • Value-based learning(价值学习)就是使用神经网络Deep Q network(DQN)来学习一个函数Q(s,a;w),该函数能够近似Q^*(s,a)。其中,w是DQN的参数,s是输入,a是输出。

三、Deep Q network(DQN)

(一)全貌概览:

假设我们已经训练好了一个DQN,即DQN的参数w已经有了,那么:

  • 将屏幕的一帧作为输入,通过卷积层(Conv)进行特征提取,得到特征向量(feature),然后通过全连接层(Dense)将特征映射到输出向量(图中紫色方块)。
  • 输出向量就是对动作的打分,向量的每一个元素对应一个动作的得分。例如,超级玛丽游戏中动作有left,right,up三个动作,因此输出向量是三维的:[2000,1000, 3000]。通过这个向量,就能指导Agent应该做的动作。Agent此时应该做up动作,因为该动作分数最高,代表做该动作能获得的回报的期望最大。

(二)如何使用DQN指导Agent打游戏:

  1. s_t为输入,给所有动作打分,选择得分最高的动作作为a_t
  2. Agent执行a_t动作后,环境会对状态进行改变,下一个状态是根据状态转移函数p随机抽样得来,得到s_{t+1}
  3. 同时环境还会告诉Agent得到的即时奖励r_tr_t是强化学习中的监督信号,DQN需要参考奖励值来进行训练。 
  4. 重复此过程,直至游戏结束。

如何训练DQN?最常用的是TD算法。

四、时序差分:Temporal Difference(TD) Learning

先看一个例子:开车从纽约(NYC)到亚特兰大(Atlanta)需要多长时间?用模型Q(w)进行预测,例如Q(w)=1000,分钟。如何更新这个模型?

方法一:

  1. 模型做一个预测,这个预测一开始可以是随机的:q=Q(w),即q=1000.
  2. 从NYC开车到Atlanta,结束一次完整行程后得到真实时间y,如,y=860.
  3. 计算预测值和真实值的损失函数Loss:L=\frac{1}{2}(q-y)^2.(类似均方损失函数),训练模型的目的就是使估计值逐渐逼近真实值,即误差尽可能小。
  4. 计算梯度:\frac{\partial L}{\partial w} = \frac{\partial q}{\partial w}\cdot \frac{\partial L}{\partial q}=(q-y)\cdot \frac{\partial Q(w)}{\partial w}=140\cdot \frac{\partial Q(w)}{\partial w}.(链式法则,L是q的函数,q是w的函数)
  5. 梯度下降法更新参数w:w_{t+1}=w_t-\alpha \cdot \frac{\partial L}{\partial w}|_{w=w_t}\alpha为学习率,值在(0,1)之间)

方法一特点:通过梯度下降更新参数w,使模型估计值越来越逼近真实值。但该方法必须等一整次旅途结束后,才能对模型进行一次更新(这是蒙特卡洛方法的典型特征)。能否在完成一整次旅途之前就对模型更新,即走一步更新一次?

方法二(TD算法):

  1. 模型做一个预测,这个预测一开始可以是随机的:q=Q(w),即q=1000.(同方法一)
  2. 从NYC开车到途中某处(华盛顿:DC),观测到实际使用了300分钟;此时模型又做一个预测:预测从DC到Atlanta需要600分钟。
  3. 更新预测值:300 + 600 = 900 分钟,这个新的估计成为TD target,记为y=900. 这个值比一开始的纯估计q=1000要更可靠,因为里面包含了300的真实值。越接近Atlanta,TD target就越准确。
  4. 计算最初预测值和TD target的损失函数Loss:L=\frac{1}{2}(q-y)^2.其中最初预测值和TD target之差q-y=1000-900=100称为TD error。模型训练的目的就是使TD error接近0. 
  5. 计算梯度:\frac{\partial L}{\partial w} = \frac{\partial q}{\partial w}\cdot \frac{\partial L}{\partial q}=(q-y)\cdot \frac{\partial Q(w)}{\partial w}=100\cdot \frac{\partial Q(w)}{\partial w}.(链式法则,L是q的函数,q是w的函数)(同方法一)
  6. 梯度下降法更新参数w:w_{t+1}=w_t-\alpha \cdot \frac{\partial L}{\partial w}|_{w=w_t}(同方法一)

TD算法特点:不必等一次完整旅途结束就可以更新模型参数,走一步就能更新一次。用TD算法来训练打游戏的DQN非常合适:不需要打完游戏就能更新DQN参数。

五、用TD算法训练DQN

(一)将TD算法用在DQN中:

 

在估计旅途耗时的例子中,NYC到ATL的总估计时间 约等于 NYC到DC的真实时间 加上 DC到ATL的估计时间。类比到深度强化学习中,Q(s_t,a_t;w) \approx r_t + \gamma \cdot Q(s_{t+1}, a_{t+1}; w)表示:DQN在t时刻做的估计值(期望)约等于 在t时刻观测到的真实奖励 加上 DQN在t+1时刻做的估计值(期望)。

下面解释公式Q(s_t,a_t;w) \approx r_t + \gamma \cdot Q(s_{t+1}, a_{t+1}; w)的来源:

回顾U_t的定义:U_t 是回报 (Return),表示t时刻开始未来执行一组动作后能够获得的奖励之和:

U_t = R_t + \gamma \cdot R_{t+1} + \gamma ^2 \cdot R_{t+2} + \gamma ^3 \cdot R_{t+3} + \gamma ^4 \cdot R_{t+4} + \cdots

从第二项起,拿出公有的\gamma,将公式变为:

U_t = R_t + \gamma \cdot (R_{t+1} + \gamma \cdot R_{t+2} + \gamma ^2 \cdot R_{t+3} + \gamma ^3 \cdot R_{t+4} + \cdots)

根据回报的定义,上式括号里的项共同表示了回报U_{t+1},则公式变为:

相邻两个时刻的折扣回报之间的关系:U_t = R_t + \gamma \cdot U_{t+1}

DQN在t时刻的输出是Q(s_t,a_t;w),这是对回报U_t的期望的近似:Q(s_t,a_t;w) \approx \mathbb{E}[U_t]

DQN在t+1时刻的输出是Q(s_{t+1},a_{t+1};w),这是对回报U_{t+1}的期望的近似 :Q(s_{t+1},a_{t+1};w) \approx \mathbb{E}[U_{t+1}]

因此,Q(s_t,a_t;w) \approx r_t + \gamma \cdot Q(s_{t+1},a_{t+1};w).

约等号左边是DQN的预测,右边是TD target.

(二)用TD算法训练DQN的模型参数

TD算法的一次循环由如下步骤组成,每次循环更新一次模型参数w:

  1. t时刻,观测到当前的状态s_t和做出的动作a_t,DQN做一个预测,即输出一个当前动作的得分:q_t = Q(s_t, a_t; w_t)w_t是当前的模型参数;
  2. t+1时刻,模型观测到了真实奖励r_t,并观测到了一个新的状态s_{t+1},因此可以用DQN算出下一个动作a_{t+1}. 动作a_{t+1}的选择依据是:DQN对每一个动作打分,选得分最高的那个动作为a_{t+1}
  3. 计算TD targety_t = r_t + \gamma \cdot Q(s_{t+1}, a_{t+1}; w_t) ,因为a_{t+1}是得分最高的动作,因此,y_t = r_t + \gamma \cdot max_{a}Q(s_{t+1}, a; w_t).
  4. 计算最初预测值Q(s_t, a_t; w_t)和TD target的损失函数Loss:L_t=\frac{1}{2}(q_t-y_t)^2.
  5. 计算梯度:\frac{\partial L_t}{\partial w} = \frac{\partial q_t}{\partial w}\cdot \frac{\partial L_t}{\partial q_t}=(q_t-y_t)\cdot \frac{\partial Q(w)}{\partial w}|_{w=w_t}. 记d_t = \frac{\partial Q(w)}{\partial w}|_{w=w_t},这个梯度可以用Pytorch自动求。
  6. 梯度下降法更新参数w:w_{t+1}=w_t-\alpha \cdot \frac{\partial L_t}{\partial w}|_{w=w_t} = w_t-\alpha \cdot (q_t - y_t) \cdot d_t.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Value-based 强化学习模型是一种将智能体的行动价值进行评估,从而决策哪个行动更有利可图的强化学习方法。 这种模型的框架如下: 1. 定义状态:确定智能体的环境状态。 2. 定义动作:确定智能体可以执行的动作。 3. 定义奖励函数:确定行动对环境状态的影响,并对每个动作进行评估。 4. 通过价值函数预测动作的价值:根据智能体的当前状态和奖励函数,估算动作的价值。 5. 基于价值函数选择动作:选择价值最高的动作。 该模型的原理是:通过不断地评估动作的价值,来决策智能体的行动。这种方法可以在不知道环境的内部状态的情况下,让智能体学会在复杂的环境中进行决策。 通过迭代不断更新价值函数,智能体可以学习到如何选择最优的行动。随着智能体对环境的了解不断深入,价值函数也会变得更加准确。 ### 回答2: Value-based强化学习模型是一种基于值函数的方法,用于解决强化学习问题。它的基本框架包括状态空间、动作空间、奖励函数和值函数。 在这个框架中,状态空间是所有可能的状态集合,动作空间是所有可能的动作集合。奖励函数用来评估在特定状态下采取某个动作的好坏程度,它为每个状态和动作对分配一个即时奖励。 值函数是定义在状态空间上的函数,用来评估状态的价值。具体而言,值函数可以分为状态价值函数和动作价值函数。状态价值函数(V函数)给出了在特定状态下能够获得多少累积奖励,而动作价值函数(Q函数)给出了在特定状态采取某个动作后能够获得多少累积奖励。 Value-based强化学习模型的原理是通过学习值函数来指导智能体的决策。这种方法的核心思想是,智能体应该选择能够使累积奖励最大化的动作。为了实现这个目标,模型通过利用当前已知的值函数来估计状态动作对的价值,并选择具有最高价值的动作。 具体来说,模型使用了通过迭代更新的方法,例如Q-learning算法或Deep Q网络(DQN)来学习值函数。这些算法通过采样和优化来不断改进值函数的估计,以此来提高智能体的决策性能。 总之,Value-based强化学习模型的框架和原理是通过学习值函数来指导智能体的决策,以实现最大化累积奖励的目标。这个框架包括状态空间、动作空间、奖励函数和值函数,原理则是通过迭代更新值函数,使其能够准确评估状态动作对的价值,从而使智能体能够做出最佳决策。 ### 回答3: value-based强化学习是一种基于值函数的强化学习模型。它的框架包括四个主要的组成部分:状态表示、行动选择、状态转移和值函数更新。 首先,状态表示是指将环境的状态进行合适的编码表示。在value-based强化学习中,通常将状态表示为一个向量或一个张量,它包含了环境中所有重要的信息。 其次,行动选择是指根据当前状态和值函数选择下一步的行动。在value-based强化学习中,行动选择通常是基于一个被称为Q值函数的值函数。Q值函数接受一个状态和一组可能的行动,并输出每个行动的值。根据Q值函数,我们可以选择具有最高Q值的行动作为下一步执行的行动。 然后,状态转移是指在环境中执行选择的行动,并观察到新的状态和获得的奖励。根据环境的动力学,我们能够了解如何从当前状态和选择的行动转移到下一个状态,并且能够获取到与该转移相关的奖励信号。 最后,值函数更新是指通过与环境交互获得的奖励信号更新值函数。在value-based强化学习中,我们使用一种迭代的方法,通过比较实际奖励和预测奖励来改进值函数的估计。常用的值函数更新算法有Q Learning和Deep Q Network(DQN)。这些算法使用经验回放和目标网络来稳定训练过程,并通过不断迭代来逼近最优的值函数。 综上所述,value-based强化学习模型的框架和原理涵盖了状态表示、行动选择、状态转移和值函数更新这四个主要的组成部分。通过这些组成部分的配合和训练,value-based强化学习模型能够学习到最优的值函数,从而能够在环境中做出最佳的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值