? ? ? 強化學習(Reinforcement Learning, RL)與監督學習不同——你不需要預先準備訓練數據集,而是要設計環境、獎勵函數,讓智能體通過交互不斷探索和學習。
🎯 一、強化學習和訓練數據的關系
強化學習不依賴固定的數據集。它通過以下過程學習:
Agent(智能體) ?? Environment(環境)步驟:
1. Agent 發出動作(action)
2. 環境返回下一個狀態(state)和獎勵(reward)
3. Agent 更新策略(policy)或 Q 值(value function)
👉 所以“訓練數據”來自智能體 與環境的交互記錄,包括:
狀態(State) | 動作(Action) | 獎勵(Reward) | 下一狀態(Next State) |
---|---|---|---|
s? | a? | r? | s??? |
這些數據可以存儲在 replay buffer(經驗回放池) 中。
🚀 二、訓練強化學習模型的完整流程
以訓練一個 MuJoCo 機器人為例:
? 1. 搭建仿真環境(如 MuJoCo + dm_control 或 gym)
-
設置好狀態空間(如關節角度、速度)
-
定義動作空間(如施加的扭矩)
-
設計獎勵函數(鼓勵目標行為,例如走得遠、站得穩)
? 2. 選擇強化學習算法
常見算法有:
算法 | 類型 | 適合場景 |
---|---|---|
DQN | 離散動作 | 簡單游戲、控制任務 |
PPO(常用) | 連續動作 | 機器人、復雜控制任務 |
SAC | 連續動作 | 收斂快、表現更好 |
TD3 | 連續動作 | 高穩定性 |
建議使用:PPO(最穩定)或 SAC(高性能)
? 3. 訓練智能體
使用工具框架如:
-
Stable-Baselines3(推薦)
-
RLlib(可擴展)
-
CleanRL(輕量易懂)
例子(使用 Stable-Baselines3 訓練 PPO):
from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_envenv = make_vec_env("Humanoid-v3", n_envs=4) # 多環境并行
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=1_000_000)
model.save("ppo_humanoid")
📦 三、Replay Buffer 是“數據容器”
-
在 off-policy 方法(如 DQN、SAC)中,agent 會把每個
(s, a, r, s')
存入經驗池中,再抽樣訓練。 -
在 on-policy 方法(如 PPO)中,agent 每輪采樣最新數據,不重復使用。
📊 四、獎勵函數的設計建議
-
稀疏獎勵(sparse reward)難訓練,盡量提供細粒度獎勵。
-
結合多個因素(如“走路快 + 身體穩定”)用加權和。
-
獎勵平滑、非爆炸。
示例(走路):
reward = 1.0 * velocity_forward - 0.1 * energy_used - 5.0 * is_fallen
🧠 五、訓練技巧
項目 | 建議 |
---|---|
并行環境 | 用 VecEnv 加速樣本采集 |
reward shaping | 獎勵設計更細致、鼓勵期望行為 |
normalize obs / reward | 歸一化更易于收斂 |
curriculum learning | 從簡單任務逐步提升難度 |
checkpointing | 定期保存模型,防止崩掉 |
🛠 六、可視化訓練過程
-
使用 TensorBoard
-
使用 Stable-Baselines3 的 logger 自動記錄
tensorboard --logdir logs/
? 七、模型保存
RL?訓練會保存?actor.pt、critic.pt?和?experiment.pkl?這幾個文件,以及它們各自的作用。
1.?actor.pt
- 作用:保存了策略網絡(Policy?Network)的參數。
- 內容:通常是一個 PyTorch 的神經網絡模型(即 policy),它根據觀測(observation)輸出動作(action)。
- 用途:在評估、部署或繼續訓練時,直接加載該文件即可恢復智能體的決策能力。
2.?critic.pt
- 作用:保存了價值網絡(Value Network)的參數。
- 內容:同樣是一個 PyTorch 神經網絡模型,用于評估當前狀態(或狀態-動作對)的價值(value)。
- 用途:在訓練時用于計算優勢函數(advantage),幫助策略網絡更好地學習。評估時有時也會用到。
3.?experiment.pkl
- 作用:保存了實驗的超參數、配置和訓練參數。
- 內容:通常是一個?Python?字典,包含訓練時用到的所有參數(如學習率、環境名、網絡結構、采樣步數等)。
- 用途:方便后續復現實驗、評估模型時自動加載一致的參數,或繼續訓練時恢復原始設置。
4. 為什么要分開保存?
- 可復現性:分開保存可以讓你隨時恢復訓練、評估或部署,且能追溯訓練時的所有細節。
- 靈活性:你可以只加載 policy(actor)做推理,也可以加載全部繼續訓練。
- 兼容性:不同?RL?算法可能只需要其中一部分(如無?critic?的算法只保存?actor)。
5. 示例
###Apply to requirements...path_to_actor?=?Path(args.path,?"actor.pt")path_to_critic?=?Path(path_to_actor.parent,?"critic"?+?str(path_to_actor).split('actor')[1])path_to_pkl?=?Path(path_to_actor.parent,?"experiment.pkl")#?加載參數run_args?=?pickle.load(open(path_to_pkl,?"rb"))policy?=?torch.load(path_to_actor,?weights_only=False)critic?=?torch.load(path_to_critic,?weights_only=False)
評估時會自動加載這三個文件,確保模型和參數與訓練時完全一致。例如?stable-baselines3、RLlib?等主流庫也會分別保存 policy、value、config/checkpoint 等文件。總結如下:
- actor.pt:保存策略網絡(決策用)
- critic.pt:保存價值網絡(訓練用)
- experiment.pkl:保存實驗參數(復現/繼續訓練用)
這樣設計是為了方便復現、靈活部署和高效管理實驗。
? 八、小結:訓練RL你要準備的是這些
-
一個環境(可仿真)
-
狀態、動作、獎勵函數設計好
-
選擇合適的 RL 算法(如 PPO)
-
使用 RL 框架訓練(如 Stable-Baselines3)
-
讓 agent 不斷與環境交互生成數據,而不是喂靜態數據集