反饋式類神經網路通當使用在具備有明確目標的學習運算上面,或是稱之為「監督式學習」;但是,如何可以讓學習的機制可以不斷的進步,或者是否可以達到自我學習的地步呢?「強化式學習」(Reinforcement Learning) 就是一種可能的方法。
強化式學習是透過學習機器 (agent) 與環境 (environment) 的互動,利用觀察 (observation) 學習機器行為 (action) 與環境互動結果的積分 (reward) 大小來逐步加強學習機器的能力。
當然,我們也可以使用 python 在 nVidia Jetson Orin Nano 的機器來完成「強化學習」的實作。在OpenAI Gym 這裏提供了 python 使用者多個強化學習的環境,讓大家有一個共同的環境可以測試自己的強化學習演算法以及學習機器的能力,而不用花時間去搭建自己的測試環境;在這裏我們先實作利用強化學習進行一個叫做「Frozen Lake」的題目。
首先,先安裝 OpneAI Gym 的 python 程式庫
pip install gymnasium
然後安裝文字遊戲 (toy-text) 套件
pip install gymnasium[toy-text]
這個題目的目標是從起始狀態 (S) 移動到目標狀態 (G),只能在冰凍的地磚 (F) 上行走,並避開洞穴 (H);可以由以下的圖形示意。
一開始,從左上角的家出發,目標是右下角可以獲得禮物的地方,在中晚會有設定幾個障礙,也就是上圖中結冰的洞;每次移動一格 (Action),系統會回傳目前的位置 (Observation),如果掉進障礙就結束 (Terminated),如果到達目標,分數 (Reward) 就會加一分給奬勵並且結束 (Terminated);強化學習的使用就是透過這樣的學習機置達到學習完成目標的路徑。
首先,OpenAI Gym 已經定義了利用 action 的數字代表移動的方向:
同時也把目前的狀況用文字定義出來:
所以,我們可以先把一開始的狀態用程式描述出來。
import gymnasium as gym
env=gym.make('FrozenLake-v1', is_slippery=False,render_mode='ansi')
env.reset()
print(env.render())
紅色的部份就是目前的位置;當然,我們可以用人工的方式很容易看出來,如果我們移動的順序是「右/右/下/下/下/右」那麼就可以完成這個題目,在程式上就是:
env.reset()
env.step(2)
env.step(2)
env.step(1)
env.step(1)
env.step(1)
observation, reward, terminated,_,_=env.step(2)
print(env.render())
print('location:',observation)
print('reward:',reward)
print('If terminated?',terminated)
在每一步移動 (Action) ,OpenAI Gym 這個「Frozen Lake」的環境都會回傳目前的位置 (Observation)、奬勵分數分數 (Reward) 以及是否結束 (Terminated),來提供接下來學習機制程式的撰寫。