在昨天我們有提到,增強式學習中有四大步驟,那今天我們就開始來逐一說明、建構各個步驟。
增強式學習(RL)允許環境初始化其內部狀態。以下方程式碼為例,我們將環境狀態定義為一個計數器,它限制訓練的對象(agent)與環境(environment)互動所允許的時間步數:
class Environment:
def __init__(self):
self.steps_left = 10
訓練的對象(agent)包含兩個方法:建構函式
和在環境中執行一步(step)
的方法:
class Agent:
def __init__(self):
self.total_reward = 0.0
def step(self, env):
current_obs = env.get_observation()
actions = env.get_actions()
reward = env.action(random.choice(actions))
self.total_reward += reward
get_observation() 方法會將目前環境的觀察結果傳回給訓練的對象(agent)。 get_observation() 通常是作為環境內部狀態的某些函數來實現。 在下方程式碼中,觀察(observation)向量全為零,代表環境基礎沒有內部狀態:
def get_observation(self):
return [0.0, 0.0, 0.0]
get_actions() 方法允許訓練的對象(agent)查詢它可以執行的動作(action)集合。 通常,訓練的對象(agent)可以執行的動作集不會隨著時間的推移而改變,但某些動作在不同的狀態下可能變得不可能執行(例如,在圍棋遊戲的任何位置中,並非每個動作都是可能的)。以下方程式碼為例,訓練的對象(agent)有兩種可執行的動作(action),並以整數 0 和 1 進行編碼:
def get_actions(self):
return [0, 1]
action()有兩項主要的任務:處理訓練的對象(agent)的動作(action)
並返回該操作的獎勵(reward)
。
def action(self, action):
if self.is_done(): ## 結束訊號
raise Exception("Game is over")
self.steps_left -= 1
return random.random()
下方程式碼,is_done()表示訓練的對象(agent)發出事件結束的訊號。 強化學習(RL)為系統環境(environment)與訓練的對象(agent)之間的互動,切分一系列的學習、訓練步驟。但是在面對不同事件,訓練的對象(agent)的學習有有限的
、無限的
兩種情況(舉例說明:象棋、圍棋遊戲,就是為有限的學習情況;機器人面對的人事物,就是為無限的學習情況)。因此,為了涵蓋有限與無限的兩種情況,可透過is_done()來檢測增強式學習是否結束:
def is_done(self):
return self.steps_left == 0
訓練對象的步驟,可分為以下四大步驟,以達成增強式學習的目標:
if __name__ == "__main__":
env = Environment()
agent = Agent()
while not env.is_done():
agent.step(env)
print("Total reward got: %.4f" % agent.total_reward)
每天都在為明天的內容煩惱XD
最近看了一本書寫到,人在成長落落大方的年紀,就是需要去經歷、去碰壁吧,每個人都有自己成長的軌跡,要好好的向前進,即使休息一下或是走慢一點也沒關係,這些過程你都還是在前進,每一步都是未來成長的養分。
(增強式學習(RL)就跟人的成長過程一樣,學習、成長前進www)