第三部《強化學習》59/100 實作練習:LunarLander with Actor-Critic 🌙 火箭著陸不是

更新 發佈閱讀 10 分鐘

AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》

59/100 第六週:📌 策略梯度與 Actor-Critic 架構

59. 實作練習:LunarLander with Actor-Critic 🌙 火箭著陸不是夢!

_______________________________________

🎯 單元目標

學會使用 Actor-Critic(演員-評論員)演算法 來解決經典強化學習環境 —— LunarLander-v2。

這是一個模擬太空船降落月球的挑戰,我們要讓火箭安全降落在地面,靠的是 AI 自己學會如何噴射推進器。

________________________________________

🧠 一、環境簡介:LunarLander-v2

狀態空間(State): 8 維連續值,包括座標、速度、角度與兩側著陸腳的接觸情況

動作空間(Action): 4 離散動作(不推、主引擎、左噴、右噴)

獎勵機制:

o 成功著陸:+100~140

o 摔壞機體:-100

o 維持平衡靠近中央、腳先著地也會給正獎勵

o 每用一次引擎會被懲罰(-0.03)

________________________________________

🧮 二、Actor-Critic 架構回顧

組件 功能描述

🎭 Actor 負責輸出「行動策略」π(s),給出某狀態下的行動機率分佈

🧾 Critic 負責估算「狀態價值」V(s),用來幫助 Actor 調整策略方向

🧩 損失函數 Actor 根據 TD 誤差更新策略,Critic 根據 TD 誤差更新價值

________________________________________

🔧 三、實作步驟與架構

🧱 1. 安裝環境

pip install gym[box2d] torch

🧠 2. 定義 Actor 和 Critic 網路

python

import torch

import torch.nn as nn

import torch.optim as optim

import gym

import numpy as np

env = gym.make("LunarLander-v2")

class Actor(nn.Module):

def __init__(self, input_dim, output_dim):

super().__init__()

self.model = nn.Sequential(

nn.Linear(input_dim, 128), nn.ReLU(),

nn.Linear(128, output_dim), nn.Softmax(dim=-1)

)

def forward(self, x):

return self.model(x)

class Critic(nn.Module):

def __init__(self, input_dim):

super().__init__()

self.model = nn.Sequential(

nn.Linear(input_dim, 128), nn.ReLU(),

nn.Linear(128, 1)

)

def forward(self, x):

return self.model(x)

這段程式定義了 Actor-Critic 架構 用於 LunarLander-v2 環境,其中 Actor 類別是一個策略網路,將輸入的狀態向量透過兩層全連接層(Linear + ReLU)轉換成動作機率分布(Softmax 輸出),學習策略 𝜋(𝑎∣𝑠);而 Critic 類別則是價值網路,透過類似的兩層結構,輸出狀態價值 𝑉(𝑠),用來評估當前狀態的長期回報,提供 Actor 更新時的基準參考(baseline)。

🔁 3. 互動與更新策略

python

actor = Actor(8, 4)

critic = Critic(8)

optimizerA = optim.Adam(actor.parameters(), lr=1e-3)

optimizerC = optim.Adam(critic.parameters(), lr=1e-3)

gamma = 0.99

for episode in range(1000):

state = env.reset()

episode_reward = 0

for t in range(1000):

state_tensor = torch.FloatTensor(state)

probs = actor(state_tensor)

dist = torch.distributions.Categorical(probs)

action = dist.sample()

next_state, reward, done, _ = env.step(action.item())

next_state_tensor = torch.FloatTensor(next_state)

# Critic 計算 TD 誤差

value = critic(state_tensor)

next_value = critic(next_state_tensor)

td_target = reward + gamma * next_value * (1 - int(done))

td_error = td_target - value

# 更新 Critic

critic_loss = td_error.pow(2)

optimizerC.zero_grad()

critic_loss.backward()

optimizerC.step()

# 更新 Actor(使用 TD 誤差作為優勢)

actor_loss = -dist.log_prob(action) * td_error.detach()

optimizerA.zero_grad()

actor_loss.backward()

optimizerA.step()

state = next_state

episode_reward += reward

if done:

break

print(f"Episode {episode} | Reward: {episode_reward}")

這段程式以 Actor-Critic 演算法訓練 LunarLander-v2,其中每回合透過 Actor 網路計算動作機率並抽樣執行,Critic 預測當前與下一狀態的價值,計算 TD 目標與 TD 誤差;Critic 使用 TD 誤差平方作為損失更新價值網路,Actor 則以 TD 誤差作為 Advantage,透過策略梯度公式 −log𝜋(𝑎∣𝑠)×TD誤差−logπ(a∣s) 反向更新策略網路,藉此穩定地提升整體行為策略,每回合完成後輸出累積回報。

________________________________________

📌 四、小技巧與調參建議

若學習不穩定,考慮加入 狀態正規化。

嘗試不同隱藏層大小,例如 64, 128, 256。

如果發現動作機率學不穩定,可以用 entropy bonus 來鼓勵探索。

想進一步優化,可升級為 Advantage Actor-Critic (A2C) 或 GAE(Generalized Advantage Estimation)。

________________________________________

🚀 五、總結

重點 說明

Actor 輸出策略 π(a s)

Critic 預測 V(s) 幫我們判斷當下做得好不好

TD 誤差 作為 Actor 和 Critic 同步學習的關鍵信號

火箭學會降落 🎯 強化學習真正從實驗中學習決策!



留言
avatar-img
留言分享你的想法!
avatar-img
Hansen W的沙龍
9會員
274內容數
AIHANS沙龍是一個結合AI技術實戰、產業策略與自我成長的知識平台,主題涵蓋機器學習、生成式AI、創業經驗、財務規劃及哲學思辨。這裡不只提供系統化學習資源與實作案例,更強調理性思維與行動力的結合。無論你是AI初學者、創業者,還是追求人生升維的行者,都能在這裡找到前進的方向與志同道合的夥伴。
Hansen W的沙龍的其他內容
2025/09/25
熵正則化在強化學習中透過增加策略的不確定性,避免模型過早收斂於單一路徑,促進探索並提升長期表現。調整 β 參數能平衡探索與收斂,應用於遊戲、自駕車、多目標學習等場景,提升穩定性與適應力。
2025/09/25
熵正則化在強化學習中透過增加策略的不確定性,避免模型過早收斂於單一路徑,促進探索並提升長期表現。調整 β 參數能平衡探索與收斂,應用於遊戲、自駕車、多目標學習等場景,提升穩定性與適應力。
2025/09/25
A2C 是 Actor-Critic 的強化版,透過 Advantage 函數減少方差,提升學習穩定性與效率。它結合 Actor 策略學習與 Critic 價值估計,適用於遊戲、自駕與對話系統,常優於 REINFORCE,能更精確聚焦「比預期更好」的行動。
2025/09/25
A2C 是 Actor-Critic 的強化版,透過 Advantage 函數減少方差,提升學習穩定性與效率。它結合 Actor 策略學習與 Critic 價值估計,適用於遊戲、自駕與對話系統,常優於 REINFORCE,能更精確聚焦「比預期更好」的行動。
2025/09/25
Baseline 是策略梯度中的穩定化技巧,透過扣除基準值(常用 V(s))減少方差,使學習更穩定快速。它不改變期望,只降低噪音影響,常與 Advantage 結合。應用於投資、控制等任務,可專注於「超越平均」的行為,提升策略效果。
2025/09/25
Baseline 是策略梯度中的穩定化技巧,透過扣除基準值(常用 V(s))減少方差,使學習更穩定快速。它不改變期望,只降低噪音影響,常與 Advantage 結合。應用於投資、控制等任務,可專注於「超越平均」的行為,提升策略效果。
看更多
你可能也想看
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型,並在 AI說書 - 從0開始 - 115 載入權重並執行 Tokenizing,現
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在 AI說書 - 從0開始 - 114 建立了 Transformer 模型,並在 AI說書 - 從0開始 - 115 載入權重並執行 Tokenizing,現
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 可以透過繼承預訓練模型 (Pretrained Model) 來微調 (Fine-Tune) 以執行下游任務。 Pretrained Mo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformer 可以透過繼承預訓練模型 (Pretrained Model) 來微調 (Fine-Tune) 以執行下游任務。 Pretrained Mo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformers for Natural Language Processing and Computer Vision, 2024 這本書中講 Trainin
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Transformers for Natural Language Processing and Computer Vision, 2024 這本書中講 Trainin
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 先做個總回顧: Transformer 架構總覽:AI說書 - 從0開始 - 39 Attention 意圖說明:AI說書 - 從0開始 - 40 Transfo
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 先做個總回顧: Transformer 架構總覽:AI說書 - 從0開始 - 39 Attention 意圖說明:AI說書 - 從0開始 - 40 Transfo
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News