iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

強化學習概論

讓智慧型代理人/智慧體/智能體(intelligent agent)通過與環境的交互學習如何做出決策,以最大化一個獎勵信號。它通常涉及到Agent採取一系列行動,觀察環境的狀態,然後根據獎勵信號來調整策略。

強化學習的基本概念

  • 智慧型代理人(Agent):學習做出決策的主體,可以是機器人、遊戲玩家等。
  • 環境(Environment):智慧型代理人操作的場景,包括一系列可能的狀態和行動。
  • 策略(Policy):智慧型代理人的行動策略,描述了在不同狀態下如何選擇行動。
  • 獎勵(Reward):環境為智慧型代理人的行動提供的反饋信號,用於評估行動的好壞。
  • 價值函數(Value Function):用於估計在某個狀態或狀態-行動對下的長期總獎勵。
  • 行動(Action):智慧型代理人在狀態下可以執行的操作或決策。

值估算問題

  • 狀態值估算(State-Value Estimation):預測在特定狀態下的預期回報,稱為狀態值函數(V)。
  • 動作值估算(Action-Value Estimation):預測在特定狀態和行動組合下的預期回報,稱為動作值函數(Q)。

強化學習演算法 Q-learning

  • 基於值迭代的強化學習算法,用於學習最佳策略。
  • 通過更新狀態-行動對應Q值,以選擇最佳行動。

Q(state, action) = (1 - learning_rate) * Q(state, action) + learning_rate * (reward + discount_factor * max(Q(next_state, all_actions)))

強化學習應用

  • 自動駕駛
  • 遊戲
  • 金融交易
  • 自動控制

常見問題

  • 探索與利用之間的權衡:智慧型代理人需要在探索未知行動和利用已知訊息之間取得平衡。
  • 獎勵稀疏性:某些環境中,正確的行動可能長時間不會受到任何獎勵。
  • 擴展性:處理大型狀態空間和行動空間的問題需要高效的算法和近似方法。
  • 訓練穩定性:某些算法在訓練過程中可能不穩定,需要謹慎調整參數。

近端策略優化(Proximal Policy Optimization,PPO)

  • OpenAI公司於2017年開發的一系列無模型強化學習算法
  • 策略梯度算法
  • 通過在每一步中更新策略,來不斷提高策略的性能

置信域/信賴域方法(Trust-region methods)

  • 訓練強化學習代理時限制策略更新的大小,以確保穩定的訓練過程。
  • 在每一步中計算一個置信域,並確保策略更新在這個置信域內

時序差分學習(Temporal difference learning,TD learning)

  • 一類無模型強化學習方法的統稱
  • 通過不斷地估計狀態值函數或動作值函數來學習最優策略
  • 蒙特卡羅方法、統計類比方法

蒙特卡羅/統計類比方法

  • 通過採樣軌跡來計算期望獎勵,從而更新值函數和策略。

範例

import numpy as np

# 定義簡化的迷宮地圖
# 0 表示空格,1 表示障礙物,2 表示目標
maze = np.array([
    [0, 0, 0],
    [1, 1, 0],
    [0, 0, 2]
])

# 定義Q-table,初始化為0
num_states = maze.size
num_actions = 4  # 上、下、左、右四個動作
q_table = np.zeros((num_states, num_actions))

# 定義參數
# 學習速率
learning_rate = 0.5
# 用於衡量未來獎勵的重要性,通常介於0和1之間
discount_factor = 0.9
#  在ε-greedy策略中用於控制隨機探索的機率
exploration_prob = 0.2
# 指定訓練Q-learning的總次數
num_episodes = 1


# 定義狀態轉換函數
def get_next_state(state, action):
    row, col = np.where(maze == state)
    row, col = row[0], col[0]
    if action == 0:  # 上
        new_row, new_col = max(row - 1, 0), col
    elif action == 1:  # 下
        new_row, new_col = min(row + 1, maze.shape[0] - 1), col
    elif action == 2:  # 左
        new_row, new_col = row, max(col - 1, 0)
    else:  # 右
        new_row, new_col = row, min(col + 1, maze.shape[1] - 1)
    return maze[new_row, new_col]


# 簡化的Q-learning主循環
for episode in range(num_episodes):
    state = maze[0, 0]  # 初始狀態
    done = False
    while not done:
        # ε-greedy策略
        if np.random.rand() < exploration_prob:
            action = np.random.randint(num_actions)  # 隨機選擇動作
        else:
            action = np.argmax(q_table[state])  # 選擇具有最高Q值的動作
        next_state = get_next_state(state, action)
        reward = -1 if next_state != 2 else 10  # 目標狀態獎勵為10,其他狀態獎勵為-1
        # Q值更新
        q_table[state, action] = q_table[state, action] + learning_rate * (
            reward + discount_factor *
            np.max(q_table[next_state]) - q_table[state, action]
        )
        state = next_state
        if state == 2:  # 到達目標狀態
            done = True

# 測試學習後的策略
state = maze[0, 0]  # 重新回到起始狀態
path = [state]
while state != 2:
    action = np.argmax(q_table[state])
    next_state = get_next_state(state, action)
    path.append(next_state)
    state = next_state

print("最優路徑:", path)


上一篇
[DAY23] 機器學習 - 分群與分類(三) 監督學習
下一篇
[DAY25] 機器學習 - 決策樹(一)
系列文
關於我從基礎程設轉職到人工智慧入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言