文章目录
入门课程网址:https://aistudio.baidu.com/aistudio/education/lessonvideo/981570
一、基本框架
Environment-Agent-Policy。
其中Agent为与环境交互的主体,例如机器人,Agent的定义核心为
- 根据环境和状态可以执行的动作表。
- 根据policy决定执行什么样的动作,因此policy(algorithm)理论上是agent的一部分。
二、算法分类
2.1 按效果划分
- value-based: 每个状态都有一个reward
- 确定性策略
- Q-learning、DQN、Sarsa
- 进一步分为on-policy和off-policy
- policy-based: 只有终点有reward,学习一个策略函数
π
(
a
t
∣
s
t
)
\pi(a_t|s_t)
π(at∣st)
- 随机性策略,随机性更强
- policy-gradient
三、工具资源
3.1强化学习算法库
3.2强化学习环境库
**gym: ** 核心环境为environment,提供三种接口
- reset(): 初始化环境
- steep(action)->
- obs: 对环境的一次观察
- reward: 奖励
- done: 是否需要重绘环境
- info: 调试信心
- render(): 重绘环境的一帧图像
四、基于表格学习的算法
强化学习通过时序差分的方式训练Agent, 时序强化也是强化的体现。
算法描述
- 马尔科夫决策过程四元组(S,A,P,R)
- State: 状态空间
- Action: 动作空间
- Probability: 环境状态转移概率 p ( s t + 1 , r t ∣ s , a ) p(s_{t+1}, r_t|s,a) p(st+1,rt∣s,a)
- Reward: 奖励 r ( s t , a t ) r(s_t, a_t) r(st,at)
4.1 sarsa(state-action-reward-state’-action’)
- 学习特定的state下,特定action的价值Q,最终建立和优化一个Q表格,以state为行,action为列,根据与环境交互得到的reward来更新Q表格,更新公式为
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right)\right] Q(St,At)←Q(St,At)+α[Rt+1+γQ(St+1,At+1)−Q(St,At)] - sarsa使用on-policy策略,下一步动作的选择会影响当前Q值的更新,因此训练出来的最终路径距离悬崖较远。下一节中的Q-learning使用off-policy策略,使用next_obs的最佳reward作为更新参考,不受next-action的影响。
Sarsa在训练中为了更好的探索环境,采用ε-greedy方式来训练,有一定概率随机选择动作输出,而不是完全按照Q值选择动作。# 学习方法,也就是更新Q-table的方法 def learn(self, obs, action, reward, next_obs, next_action, done): """ on-policy obs: 交互前的obs, s_t action: 本次交互选择的action, a_t reward: 本次动作获得的奖励r next_obs: 本次交互后的obs, s_t+1 next_action: 根据当前Q表格, 针对next_obs会选择的动作, a_t+1 done: episode是否结束 """ predict_Q = self.Q[obs, action] # Q表:状态为行,状态对应的动作为列 if done: target_Q = reward # 没有下一个状态了 else: target_Q = reward + self.gamma * self.Q[next_obs, next_action] # Sarsa self.Q[obs, action] += self.lr * (target_Q - predict_Q) # 修正q
4.1 Q-learing
Q表示(state-action)pair的价值,Q来源的单词在原始论文中没有介绍,大家猜测可能为quantity或quality。
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
[
R
t
+
1
+
γ
max
a
Q
(
S
t
+
1
,
a
)
−
Q
(
S
t
,
A
t
)
]
Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \max _{a} Q\left(S_{t+1}, a\right)-Q\left(S_{t}, A_{t}\right)\right]
Q(St,At)←Q(St,At)+α[Rt+1+γamaxQ(St+1,a)−Q(St,At)]
Q-learning的学习方法和sarsa相似,采用ε-greedy方式来训练,不同之处在于Q-learning的更新采用off-policy策略,即不需要下一步的action产生反馈,而是直接使用当前action产生的state和reward更新Q-table。
def learn(self, obs, action, reward, next_obs, done):
""" off-policy
obs: 交互前的obs, s_t
action: 本次交互选择的action, a_t
reward: 本次动作获得的奖励r
next_obs: 本次交互后的obs, s_t+1
done: episode是否结束
"""
predict_Q = self.Q[obs, action]
if done:
target_Q = reward # 没有下一个状态了
else:
target_Q = reward + self.gamma * np.max(self.Q[next_obs, :]) # Q-learning
# 软更新:使用学习率,每次更新一点点
# self.Q[obs, action] += self.lr * (target_Q - predict_Q) # 修正q
# 硬更新:这里可以直接更新Q表,收敛更快(一定会收敛)
self.Q[obs, action] = target_Q
五、DQN
- 使用函数
f
Q
f_Q
fQ来近似Q-table, 在传统Q-learning中,table可以看做特殊的函数映射。DQN使用神经网络来学习这个函数。
- 可以使用有限参数存储更多的Q值
- 具有更好的泛化性
5.1 经验回放
用于解决序列决策的样本的关联,提高样本利用率。
- 每个样本sample(s, a, s_nxt, r)
- 使用一个样本池replayMemory,每次用样本池中随机(不删除的)采样一个batch样本,而不是用完就丢。
5.2 固定Q目标
由于Q的更新公式中含有递归,即为了更新当前Q, 需要获取targetQ ,而这两个值都需要从 f Q f_Q fQ中获取,由于神经网络在不断变化,会导致训练不稳定。
- 使用两个孪生的Q网络,其中一个作为targetQ的网络,另一个作为实时更新的Q网络。训练过程中定期将Q的参数值同步到targetQ。
- Loss函数: L = M S E ( Q ( s a m p l e ) − Q t a r g e t ( s a m p l e ) ) L=MSE(Q^{(sample) }- Q_{target}^{(sample)}) L=MSE(Q(sample)−Qtarget(sample))
六、策略梯度方法与DQN对比
- 前面的方法都是value-based方法:
- 其解决问题的思路为:训练Q网络-找到当前状态下Q最大的action-输出action
- 训练过程主要是学习 f Q f_Q fQ
- 当输入状态s相同时,输出的action一定相同。
- 目标函数: L = M S E ( Q θ ( s a m p l e ) − Q t a r g e t ( s a m p l e ) ) L=MSE(Q_{\theta}^{(sample) }- Q_{target}^{(sample)}) L=MSE(Qθ(sample)−Qtarget(sample))
- 训练输入样本为一个step。(时序差分)
- 神经网络结构:
- 输入:环境状态
- 输出:各action的Q值
- 作用:代替Q-table,通过预测Q值间接决定行为序列
- 策略梯度为policy-based方法
- 解决问题的思路为通过模型和输入的状态,直接预测输出action。
- 训练目标为学习映射函数 π θ ( a t ∣ s t ) \pi_{\theta}(a_t|s_t) πθ(at∣st)
- 目标函数最大化期望回报,(实际上最最大化探索的所有序列中期望回报较高的序列的概率)
R ˉ θ = ∑ τ R ( τ ) p θ ( τ ) ≈ 1 N ∑ n = 1 N R ( τ ) \bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau) \approx \frac{1}{N} \sum_{n=1}^{N} R(\tau) Rˉθ=τ∑R(τ)pθ(τ)≈N1n=1∑NR(τ)这里的 p θ ( τ ) p_{\theta}(\tau) pθ(τ)是每个episode发生的概率:
p θ ( τ ) = p ( s 1 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) p_{\theta}(\tau)=p\left(s_{1}\right) \pi_{\theta}\left(a_{1} \mid s_{1}\right) p\left(s_{2} \mid s_{1}, a_{1}\right) \pi_{\theta}\left(a_{1} \mid s_{1}\right) p\left(s_{2} \mid s_{1}, a_{1}\right) pθ(τ)=p(s1)πθ(a1∣s1)p(s2∣s1,a1)πθ(a1∣s1)p(s2∣s1,a1)
但我们不知道环境转移的先验概率 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t, a_t) p(st+1∣st,at),所以实际训练时,通过与环境交互采样,生成很多个episode样本数据,当样本数量足够大时,优化总体reward(R公式约等号右边)即可逼近真实reward。 - 训练输入样本为完整的episode的(s1, a1,s2,a2 …)交互序列以及对应的未来期望reward。episode即从初始状态到结束状态。
- 神经网络的结构:
- 输入:环境状态
- 输出:各action的概率分布
- 作用:根绝环境直接预测行为概率分布,当环境固定时,相当于预测输出奖励最大的行为序列
6.1 策略梯度公式推导
- 通过采样消除外层
p
θ
p_{\theta}
pθ, 通过引入log消除内层
p
θ
p_{\theta}
pθ中的环境转移概率
6.2 对R标准化(添加baseline)
避免所有episode的reward都是正的,使得在训练过程中只有正向的概率上升,不易训练。可以在训练过程中维护一个R平均值作为baseline。
七、TD(时序查分) vs MC(蒙特卡洛)
- MC and TD methods learn directly from episodes of experience without knowledge of MDP model. TD method can learn after every step, while MC method requires a full episode to update value evaluation.