type
status
date
slug
summary
tags
category
icon
password
#深度学习 #Intro2DL

三种学习问题

上节课已经梳理过了前两种学习: 监督学习 Supervised Learning, 无监督学习 Unsupervised Learning [[Lecture 4 - Deep Generative Modeling]] 这节课直接来看第三种学习: 强化学习 Reinforcement Learning

强化学习

基本信息

数据

一对数据, 包括状态 state 和行动 action

目标

使多个时间步下的未来收益最大化

重要概念

notion image

智能体 Agent

智能体是基于环境/状态做出动作决策的一个主体

环境 Environment

这里的环境在我的理解中和 state 其实是一回事, 表示智能体所处空间的状态

行为 Action

智能体基于状态做出的行为决策

奖励 Reward

基于智能体的动作, 给予的反馈 (根据动作后是否达到目标)

奖励函数

总奖励函数 Total Reward

$$ R_t = \sum^{\infty}_{i=t} r_i $$ 对每一步的奖励函数累加求和

衰减总奖励函数 Discounted Total Reward

$$ R_t = \sum^{\infty}_{i=t} \gamma^i r_i $$ 对于等值的奖励, 当下获得与很久以后获得的价值肯定有所不同, 因此我们需要引入一些量对奖励函数做一些调整 我们引入 γ , 作为一个"衰减因数", 以指数衰减的形式控制着后面时间步对于当下奖励值的影响 这里的 γ 在 (0,1) 区间内
γ 反映了智能体对未来奖励的耐心程度(γ越大,越重视长期奖励;γ越小,越急功近利)。

Q 函数

定义 Q 函数

我们引入 Q 函数, 它表示当前状态 s 下做出动作 a 得到的总奖励函数的期望 $$ Q(s_{t},a_{t}) = \mathbb{E}[R_{t} \mid s_{t},a_{t}] $$ Q 函数接受状态 s, 动作 a, 返回值表示从 t 时间步开始计算的总奖励

基于 Q 函数采取行动

通过 Q 函数, 我们可以根据 s 和 a 得到 R 的期望 不过回到最初的问题, 我们是需要选择一个 a. 因此, 需要制定一个策略 policy, 用于选择行动 action 把这个策略记为π, 其接受 s 作为参数 $$ \pi^*(s) = \arg\max_a Q(s, a) $$ 这里表示: 对于当前状态 s, 我们选择让 Q 函数值最大的那个 a 由此, 引申出了强化学习的两种算法

强化学习算法

notion image

价值学习 Value Learning

这种算法不直接学习策略本身, 而是强调先构建并优化 Q 值函数, 然后再基于状态 s , 根据 Q 函数选择最佳的行动 a

深度 Q 网络 Deep Q Network

notion image
现在我们把深度神经网络和 Q 学习结合, 可以有两种 DQN 的架构

接受 (s, a) 作为输入

如左图, 网络接受状态 s, 动作 a, 经过网络后返回一个基于 s 和 a 的 Q 值 这种网络只输出特定动作, 因此如果想要找到最佳 a, 需要把所有的 a 输入后比较每次的 Q 值

优点

  • 比较灵活, 可以处理动作是连续空间的情况 (由于动作作为输入,网络本身不关心动作的离散或连续,只要输入合法即可)

缺点

  • 然而, 对于连续情况, 不太好找最佳情况对应的 a, 因此连续情况还是优先选择 policy learning
  • 如果可能的动作很多, 则需要跑很多次正向传播, 速度很慢
  • 每次都需要制定动作 a 作为输入, 不够高效

接受 s 作为输入

右图中, 网络只接受 s, 然后把当下 s 条件下所有 a 对应的 Q 值全部输出

优点

  • 高效, 只需要一次forward,就知道所有动作的Q值
  • 适合离散动作空间(动作数量有限,比如上/下/左/右)
  • 原版DQN(Nature 2015)就是用的这种设计

缺点

不适合连续动作的情况 (因为动作集合是连续且无穷的, 无法枚举所有 Q 值)

训练

定义 loss 函数 $$ Loss=(target−predicted)^2 $$ 这里其实就是对 target 和 predicted 采用 MSELoss, 把对应的数代入, 得到: $$ \mathcal{L} = \mathbb{E}\left[ \left( r + \gamma \max_{a'} Q(s',a') - Q(s,a) \right)^2 \right]
$$ 其中:
  • r:当前时间步获得的即时奖励(reward)
  • $γ \max_a′ Q(s′,a′)$:在下一状态 s′ 中,所有可能动作中最大的 Q 值,经过折扣因子 γ 调整后的未来期望回报
  • Q(s,a):当前网络预测的状态-动作值(predicted) 这个 loss 被称为 Q-Loss

Q 学习的缺点

复杂性

  • 能对小且离散的动作空间进行建模
  • 不能处理连续动作空间的场景

灵活性

  • 策略是选择使 Q 函数值最大的 a, 因此不能学习具有一定随机性的策略 其实和经典的"贪心问题"的困境一样, 由于关注当下利益, 忽略一些对其他可能动作的尝试

策略学习 Policy Learning

直接学习策略 π(a∣s),而不是先学Q函数

Policy Gradient 策略梯度

notion image

基本思想

从结构上看,Policy Gradient的方法与DQN中「输入状态 s、输出动作相关量」的设计类似,但两者本质目标完全不同
  • DQN中,网络输出的是每个动作对应的Q值(动作的价值分数),然后通过取最大值来选择动作;
  • 在Policy Gradient中,网络输出的是动作的概率分布 π(a∣s),
    • 每个动作对应一个概率,表示在当前状态下选择该动作的倾向性大小。 最终:
  • 动作 a 是通过对输出的概率分布进行采样得到的,
  • 不是简单取最大概率动作(可以采样到各种动作,增加了探索性和灵活性)。

我的思考: 这里得到的分布为何不需要写成线性形式?

看到 policy learning 中 s 经过网络得到了用于表示概率分布的均值和方差, 让我想起了 VAE 中第一个用于压缩的网络 在 VAE 中, 我们把对分布的采样写成了一个线性形式, 为了反向传播中计算梯度 (概率分布没法算梯度) 然而, 在 PG 中, 直接压缩成两个值: 均值和方差, 然后再对这个分布进行采样即可, 不需要改写成线性形式

为什么不需要改写成线性?

在 VAE 网络中, 我们是对重构的数据和原始数据计算 loss, 因此在根据计算图进行反向传播时不可避免地要涉及到"采样"的这个过程, 因此必须要改成线性方程 而对于 PG, 其 loss 函数只涉及奖励 R 以及对应的策略π, 并不涉及采样过程

训练策略梯度

  1. 初始化智能体
  1. 执行策略, 直至终止
  1. 记录所有状态 s, 行动 a, 奖励 r
  1. 对于那些导致低奖励的行动, 降低其概率
  1. 对于那些导致高奖励的行动, 提升其概率

损失函数

$$ loss = -logP(a_t \mid s_t)R_{t} $$
Lec 1 - Intro and Word VectorsLecture 4 - Deep Generative Modeling
Loading...