劉俊利
(西南科技大學(xué)計算機科學(xué)與技術(shù)學(xué)院,綿陽 621000)
近年來,隨著科技的發(fā)展,人工智能在多個領(lǐng)域均取得了令人矚目的成就。其中AlphaGo[1]以3 比0 的總比分戰(zhàn)勝了世界圍棋冠軍柯潔就是其標志性成果之一,而關(guān)于這次勝利背后所運用到的技術(shù),強化學(xué)習(xí)是核心之一。強化學(xué)習(xí)的算法主要分為兩大類:一種是基于值的算法(Value-Based),另一種是基于策略的算法(Policy-Based)。基于值的算法是通過計算每一個狀態(tài)動作的價值,選擇價值最大的動作執(zhí)行;基于策略的算法直接對策略進行建模。兩者方式不同,但核心都是在行動-評價的環(huán)境中獲得學(xué)習(xí)信息并更新模型參數(shù),改進行動方案以適應(yīng)環(huán)境。Q-Learning 是強化學(xué)習(xí)中基于值的經(jīng)典算法之一,它能夠很好地體現(xiàn)強化學(xué)習(xí)的思想并且已經(jīng)得到了廣泛應(yīng)用。本文將分析Q-Learning 算法的原理及公式,然后借助TensorFlow訓(xùn)練框架的算力,最終完成該算法的運行與實現(xiàn)。
強化學(xué)習(xí)(Reinforcement Learning,RL)[2]是機器學(xué)習(xí)的一個重要分支。有別于其他傳統(tǒng)的機器學(xué)習(xí)模式,它受到行為主義心理學(xué)啟發(fā),模擬生物的學(xué)習(xí)過程,不要求預(yù)先給定任何數(shù)據(jù),也沒有監(jiān)督者,強調(diào)在給定情景下不斷試錯,最終學(xué)習(xí)得出最佳策略。強化學(xué)習(xí)有5 個核心概念,分別為:智能體(Agent)、環(huán)境(Environment)、行動(Action)、狀態(tài)(State)和獎勵(Reward)。智能體可以理解為機器人,用于完成學(xué)習(xí)任務(wù);環(huán)境是一個外部系統(tǒng),智能體存在于環(huán)境中;動作是智能體輸出的行為;狀態(tài)用于描述環(huán)境和智能體的關(guān)系,是做出決策的依據(jù);獎勵是環(huán)境提供給智能體的反饋信號,用于評價智能體某一行動的好壞。具體地,它們的關(guān)系如圖1 所示。
圖1 強化學(xué)習(xí)關(guān)系圖
t 表示t 時刻;St表示t 時刻的環(huán)境狀態(tài);rt表示t時刻環(huán)境對當前動作或者狀態(tài)的回報;αt表示t 時刻選擇的行為。智能體通過感知t 時刻的St和rt選擇執(zhí)行αt,αt執(zhí)行后影響環(huán)境,環(huán)境狀態(tài)立即由St變?yōu)镾t+1,同時新的環(huán)境立即給出回報rt+1反饋給智能體。直到新的環(huán)境狀態(tài)為結(jié)束狀態(tài),強化學(xué)習(xí)需要不斷循環(huán)這一過程。
Q-Learning 算法[3]是一種基于值的算法,Q-table和Q(s,a)函數(shù)是該算法的核心。Q-table 是一張存儲Q值的表格,用于指導(dǎo)智能體的行動,它的每一列代表一個動作,每一行表示一個狀態(tài)。Q(s,a)函數(shù)又稱動作值函數(shù)(action-value function),用于計算在s 狀態(tài)執(zhí)行了a 行為后的期望獎勵數(shù)值,計算所得即Q 值最終完成Q-table 單元格的填充。具體Q(s,a)函數(shù)公式如式(1),Q-table 表格如表1。
表1 Q-table 表格
由于Q-Learning 算法要實現(xiàn)智能體在環(huán)境中學(xué)習(xí),所以在算法執(zhí)行之前首先要完成環(huán)境的定義,完成環(huán)境的定義后開始Q-Learning 算法的具體流程:首先要對Q-table 進行初始化,在其所有單元格內(nèi)設(shè)定相同的初始值(大多數(shù)情況下是0)。然后智能體開始對環(huán)境進行探索,在不斷嘗試和接收反饋的過程中,Q-table通過迭代使用Bellman 方程[4]實現(xiàn)單元格內(nèi)Q(si,aj)值的更新,找到對于每個狀態(tài)來說的最佳動作,最終通過Q-table 得到最優(yōu)策略。具體流程如圖2 所示。
圖2 Q-Learning 算法流程
定義一個5 行9 列的迷宮地圖并將智能體的位置為作為狀態(tài),設(shè)置其具體位置為(self.x,self.y),self.x 和self.y 初始值均為1。智能體在迷宮中各種行為的表示是環(huán)境定義的重點,interact 函數(shù)中的action 屬性共有4 個取值:0,1,2,3,分別表示四個基本動作:向上、向下、向左、向右,每個動作的執(zhí)行環(huán)境都會判斷并給予相應(yīng)的回報。
def interact(self,action):
assert self.is_end is False
new_x=self.x+DX[action]#新的x 坐標
new_y=self.y+DY[action]#新的y 坐標
new_pos_char=self.map[new_x][new_y]#新的位置
self.step+=1#表示已經(jīng)走了幾步
if new_pos_char=='.':#如果走到墻壁
reward=0 #不改變位置且沒有獎勵
elif new_pos_char=='':#如果沒有寶藏
self.x=new_x
self.y=new_y
reward=0#走到新的位置但是沒有獎勵
elif new_pos_char=='o':#如果有寶藏
self.x=new_x
self.y=new_y#走到新的位置
self.map[new_x][new_y]='' #更新地圖
self.is_end=True #游戲結(jié)束
reward=100#獲得100 獎勵
self.total_reward+=reward
return reward
Q 函數(shù)是Q-Learning 算法的核心,首先定義Q函數(shù):
e=Env()#環(huán)境
Q= np.zeros((e.state_num,4))#e.state_num 表示狀態(tài)的總數(shù),4 表示可以執(zhí)行4 個動作
然后學(xué)習(xí)計算定義好的Q 函數(shù)的值,具體程序如下:
for i in range(200):#進行200 次游戲
e=Env()#每進行一次游戲都需要初始環(huán)境
while(e.is_end is False)and(e.step action = epsilon_greedy(Q,e.present_state)#依據(jù)Q 值和當前狀態(tài),利用ε-greedy 策略[5]挑選行動 state=e.present_state#當前狀態(tài) reward=e.interact(action)#當前回報 new_state=e.present_state#新的狀態(tài) Q[state,action]=(1-ALPHA)*Q[state,action]+ ALPHA *(reward + GAMMA * Q[new_state,:].max())#更新Q 值 其中更新Q 值對應(yīng)的公式具體如式(2): 利用深度學(xué)習(xí)框架TensorFlow[6]實現(xiàn)一個簡單的Q-Learning 算法示例:一個自動尋寶的機器人,運行效果如圖4 所示(運行結(jié)果太長,只能截取部分),效果非常直觀。其中A 表示智能體,o 表示迷宮里的寶藏,智能體一共玩了200 次這個游戲且每次游戲結(jié)束后運行界面均會顯示智能體的整個動作過程。在200 次的游戲過程中,明顯可以感受到智能體在不斷地“學(xué)習(xí)”且最終確實達到了以較少步驟獲得獎勵的目標,實現(xiàn)了Q-Learning 算法。 圖3 運行效果 本文首先介紹了強化學(xué)習(xí)的基本概念,之后給出了Q-Learning 算法的算法思想和算法流程,然后利用TensorFlow 搭建迷宮環(huán)境,定義并訓(xùn)練Q 函數(shù),最終實現(xiàn)Q-Learning 算法的一個簡單示例:一個自動尋寶的機器人。運行結(jié)果良好,在200 次的游戲中機器人確取得了較好的學(xué)習(xí)效果,實現(xiàn)了Q-Learning 算法,也證明了Q-Learning 算法確實可以實現(xiàn)在沒有任何監(jiān)督的情況下找到最優(yōu)策略。4 程序運行界面效果
5 結(jié)語