Schwertlilien
As a recoder: notes and ideas.

2025-3-28/29-RL简介

3.28:

难绷,一直在补坑。。。

这个补完了:AI Agent介绍

3.29:

这几天一直在看Reinforcement Learning。是的,我的框架还没搭好,原因是看的太浅了,不了解RL的一些执行细节,虽然之前有看过Markov Process,但是又是一段时间过去了,忘的都差不多了。

于是来写RL的一些东西。参考来自于李宏毅的RL介绍。

Reinforcement Learning

一句话介绍:不知道正确的答案,借由与环境互动、根据得到的奖励知道:什么是好的、什么是不好的。

区分ML/RL:

  • ML:找一个function(映射输入/输出)-->定义loss函数-->最优化
  • RL:代理或是叫智能体(Agent)与环境(Env)互动(Observation/Action),相互影响(Reward)
RL最初用于做游戏比较多

介绍一些术语

Actor/Agent:执行动作的主体,叫做代理或是智能体(下文都称之为智能体)。

Environment:外部的环境。既会影响智能体的行为、又会被智能体执行的行为所影响。

Observation/State:智能体通过环境得到现在的外部的状态、或许还包括了过去对外部状态的观测。

Action:智能体决定执行的动作、会影响到外部的环境。

Policy:智能体A不同于其他智能体B,对于智能体如何决定执行的动作、以及动作又会怎么影响环境(Reward)的整体。可以说是整个模型。通过Reward的optimization可以更新。

Episode:一个episode指的是一句游戏从开始到结束、其中经过的所有的状态以及动作的时间。可以得到一系列\(\{s,a\}\)(状态-动作)的集合。

Trajectory:指一个智能体在环境中进行了一系列动作是所经历的状态、动作、奖励的序列。一般是一个episode可以得到的一系列\(\{s,a\}\)的集合是一个Trajectory。用于训练智能体、学习从状态到动作、最终最大化总体奖励。

Reward:抽象的程度比较高,总的来说就是批判智能体执行当前动作的评价标准。与此相关的概念有:

  1. discount cumculated function: 在状态\(s\)下采取动作\(a\)后,期望获得多少的奖励。
  2. value function:在状态\(s\)下,无论采取什么动作,期望的奖励是多少(对于当前状态的评估,一般是平均期望奖励)。
  3. Advantage function:\(A(s,a)\)表示某个特定动作\(a\)相对于其他动作的优劣程度。

RL与ML之间的联系

对于强化学习来说,实际上比较类似于分类任务,对于给定的输入in:Env-->Observation/State,预测out:Action。并给出不同Action的置信度(然后Agent按照不同Action得到的置信度sample、从Action的distribution中sample)。

要是输入是img,那么和ML也没什么不同。

\[ \text{Action}=f(\text{Observation}) \]

目标: 找到最佳policy(model),\(\max\text{Reward}\)

对于\(f\),假如输入是图片、那么需要使用CNN/ViT提取特征;

假如我们想更进一步看到历史的图片,那么可能会选取RNN提取特征。

定义loss

对于RL:经过observation: \(s_1,s_2,\dots,s_T\)(\(T\)时间游戏结束),在时间\(t\)下施加动作\(a_t\),得到奖励\(r_t\)

计算总奖励: \(R=\sum^T_{t=1}r_t\), 目标(loss func): \(\max R\)

最优化:根据R的值,例如梯度下降更新policy。

image-20250331233352045

此过程中存在的问题?为什么RL那么难训看人品?

  1. sample具有随机性:动作必须要随机sample,要保证会有没出现过的动作,
  2. Env,Reward,是黑盒(里面是什么不知道):Env给出对应回应,Reward给出分数,不知道依据什么给出回应。
  3. Env/Reward也具有随机性(随着Action的随机)
  4. 重点:如何求解最优化问题?

RL的过程会有点像GAN:

  • Env: Discriminator
  • Agent: Generator

如何操控Agent输出

在给定的State下,有两种可能行为:

  • 一定采取行动\(a\)
  • 一定不要采取行动\(a\)

注意:是会采取行动\(a\),也会采取行动\(b\);明晰此处的不要采取行动\(a\),说明会采取\(a\)以外动作的可能性。

这是我们能够得到的训练数据(收敛了在不同\(s\)下采取了动作\(a\)/以及不想采取某动作)

Q: 如何收集训练数据?

A: 无论开始状态是什么,我们都跑很多个episodes,记录下对应的、多组\(\{s_1,a_1\},\{s_2,a_2\},\dots,\{s_t,a_t\},\dots\)

第一阶段:行为克隆(Behavior Cloning)——像监督学习一样训练

image-20250401000256422

对于Agent,输入State \(s\),输出Action \(a\)。以此可以收集大量的训练数据: \(\{s_1,\hat a_1\},\{s_2,\hat a_2\},\ldots,\{s_N,\hat a_N\}\),输出动作与Ground truth之间可以计算交叉熵,这样就有loss,再对loss求梯度下降。

这个过程,我们其实在做的是 模仿学习(Imitation Learning),尤其是其中的 行为克隆(Behavior Cloning)。这时我们有 expert 给的 “正确动作” \(\hat{a}\),可以直接用交叉熵 loss: \[ \mathcal{L}_{\text{BC}} = -\log \pi_{\theta}(\hat{a} | s) \] ✅ 这是纯监督学习:用 expert 数据模仿他该怎么做,不涉及任何 reward、Q value、优势函数之类的强化学习概念。

第二阶段:从模仿走向强化学习

但问题是 —— 行为克隆有局限性

  • 如果 expert 数据少、分布不够全,Agent 在训练中可能从没见过某些 state,就不知道该如何决策。
  • 没法根据环境反馈进一步“变得更强”,只能学 expert 的行为,无法超越。

于是,我们从“模仿”走向“试错 + 奖励驱动”的强化学习。这时:

  • 没有 ground truth 动作了(只有 Agent 自己选择的 a)
  • 我们只知道这个动作带来了多少 reward
  • 所以,我们要优化的,不是“像 expert 一样”,而是“动作好就多选它,动作差就少选它”

这时候就引入了策略梯度: \[ \mathcal{L}_{\text{PG}} = - \log \pi_{\theta}(a | s) \cdot R \] 进一步为了减小方差,引入了优势函数: \[ \mathcal{L}_{\text{PG}} = - \log \pi_{\theta}(a | s) \cdot A(s,a) \]

阶段 方式 数据来源 优化目标 是否需要 Advantage
模仿学习 行为克隆(交叉熵) expert 提供的 \(\hat{a}\) 拟合 expert 的行为 ❌ 不需要
强化学习 策略梯度(REINFORCE) Agent 自己采样的 \(a\) 最大化 reward ✅ 需要

这种从行为克隆(交叉熵)到策略梯度(交叉熵 + Advantage 权重)的逻辑演化,是许多强化学习算法的实际路径。例如:

  • 初期 warm-up 用行为克隆
  • 后期切到策略梯度微调,用 Advantage 来权衡每个动作的好坏

优势函数的提出

Agent对于不同的动作会有不同程度的偏向,我们要显化这种偏向,使用优势函数。

优势函数:期望\(s_1\)下做动作\(\hat a_1\),在\(s_2\)下不做动作\(\hat a_2\)期望的程度是不同的。 \[ A(s,a)=Q(s,a)-V(s) \]

  • \(A(s,a)\): Advantage Function。表示某个特定动作\(a\)相对于其他动作的优劣程度。
  • \(Q(s,a)\): Discounted Cumulative Reward。在状态\(s\)下采取动作\(a\)后,期望获得多少奖励。
  • \(V(s)\): Value Function。在状态\(s\)下,无论采取什么动作,期望的奖励是多少。(当前状态的期望reward)

\[ A(s,a)=\begin{cases} >0,&动作a在状态s下比平均水平好\\ <0,&动作a在状态s下比平均水平差 \end{cases} \]

搜索
匹配结果数:
未搜索到匹配的文章。