Schwertlilien
As a recoder: notes and ideas.

2025-4-4-训练数据的收集、与策略梯度操作

训练数据收集

初版:

  1. 一开始Agent是完全随机、乱给的$\{s,a\}$,记录下来;然后做很多的episodes,得到相当多的数据。

  2. 评价每个Action是好还是不好

  3. 以评价的结果训练Agent: $\{r_1,r_2,\dots,r_N\}$from$\{s_1,a_1\},\{s_2,a_2\},\dots,\{s_N,a_N\}$

缺点:

  1. 短视:你只奖励了当下表现,而忽略了某些“短期亏损但长期获利”的动作
  2. 断裂式因果链:$r_1$仅来自于$\{s_1,a_1\}$,$r_2$仅来自于$\{s_2,a_2\}$。在环境是有“状态转移”的情况下,动作 $a_t$ 会影响 $s_{t+1}$,从而影响后续的一系列 $r_{t+1}, r_{t+2}, \dots$,但初版完全忽略了这个“连锁反应”.

进化版:

  1. $a_1$不仅得到$r_1$,也会影响下次$r_2$(以及后续的rewards)
  2. 延迟奖励:牺牲短期利益、考虑长期利益

对于当前动作不仅影响当下的reward、也会影响后续的reward。因此提出了Cumulative Reward:

Cumulative Reward:$G_t=\sum^N_{n=t}r_n$

但这存在问题:这个“影响”会存续多久?$r_N$的功劳究竟有多少与$a_1$有关?

Discounted Cumulative Reward:在Cumulative Reward基础上添加了decay:

缺点:

  1. 好坏不分“相对”:$r = 10$ 看起来不错,但如果平均大家都拿 20,那你其实表现很差。

这就说明:只看 $G_t’$ 绝对值,不足以说明动作是否好。

  1. 高方差问题:有时 $G_t’$ 波动非常大(比如因为环境随机性),训练不稳定。

举个例子:两次相同状态 $s_t$,采取相同动作 $a_t$,但由于环境差异得到的 $G_t’$ 不一样。那我们到底该信谁?怎么训练才稳?

再次进化版:好坏是相对的。

提出优势函数,建立baseline:

Q: baseline如何确定?

value function的确定,见下集。

Policy Gradient操作

  1. 随机初始化Agent,得到$\pi_{\theta}^0$
  2. 进入训练迭代epoch: (i=1:T)
    1. 用$\pi_{\theta}^{i-1}$(Agent)与环境互动
    2. 得到序列数据$\{s_1,a_1\},\{s_2,a_2\},\dots,\{s_N,a_N\}$
    3. 计算$A_1,A_2,\dots,A_N$
    4. 计算loss $\mathcal{L}$
    5. 梯度下降:$\pi_{\theta}^{t}\leftarrow \pi_{\theta}^{t-1}-\eta\mathcal{L}$

注意:数据采集和训练是绑定

与传统监督学习不同,强化学习中:

  • 每一轮 epoch 都必须重新从环境中采集新数据(步骤 2.1–2.3 是无法跳过的)
  • 没有现成的 “训练集”,Agent 必须自己探索环境、生成样本
  • 因此训练开销很大,尤其在复杂环境中(如游戏、机器人等)

其中2.1、2.2、2.3步骤,每步的计算无法省略:在ML中此步骤在epoch外进行、RL在epoch内进行。也就是说每个epoch都要充头来过,重新收集训练数据。因此非常耗费时间。

Policy分类

  1. On-policy:训练的Agent与环境互动的Agent是同一个。训练使用的数据是由当前策略 $\pi_\theta$ 自己生成的。
    • 优点:数据和策略高度匹配
    • 缺点:每次训练都必须重新采样,样本浪费大
  2. Off-Policy:两者Agent分开,这样不用每步重新收集训练数据$\{s,a\}$,允许用其他策略生成的数据来训练当前策略。
    • PPO(Proximal Policy Optimization): 训练的Agent知道自己与环境交互的Agent不同$\rightarrow$”有些经验可以采纳、而有些不行”
    • 优点:可以重复利用旧数据,效率高
    • 缺点:训练会偏差,需要校正(如使用重要性采样)

PPO (Proximal Policy Optimization)

介于 on-policy 和 off-policy 之间的“近端优化”方法:

  • PPO 训练时,使用的是过去某个策略 $\pi_{\text{old}}$ 与环境交互的经验
  • 当前策略 $\pi_\theta$ 在更新时必须满足:“与旧策略不要差太多”
  • 用一个 信任区域或裁剪机制 控制每次更新步长,防止策略剧烈跳动

这样就能部分复用旧经验,又保持训练的可靠性。

如何处理只有结尾有 reward 的场景?

像围棋、象棋这类任务中:

  • 只有最终胜负才给出一个明确的 reward(如 +1 / -1)
  • 中间过程 $r_t = 0$,训练信号极度稀疏,极难学习

✅ 答案是:可以处理,但训练难度高。方法包括:

  1. 自定义中间 reward
    • 自己构造评估函数(例如局势估值)
    • 提前给予“启发式奖励”
  2. 使用 Value Network(Critic)来辅助
    • 借助值函数 $V(s)$ 估计未来期望回报
    • 使得中间状态也能“感知”后续可能发生的奖励
  3. 强化学习特化方法(如 AlphaGo)
    • 使用 Monte Carlo Tree Search 进行 rollout
    • 引入策略网络 + 值网络,进行监督学习 + 自我博弈训练
搜索
匹配结果数:
未搜索到匹配的文章。