強化學習入門之智慧走迷宮-策略迭代演算法

0x00 機器學習基礎

機器學習可分為三類

  • 監督學習
  • 無監督學習
  • 強化學習

三種學習類別的關鍵點

  • 監督學習需要人為設置參數,設置好標籤,然後將數據集分配到不同標籤。
  • 無監督學習同樣需要設定參數,對無標籤的數據集進行分組。
  • 強化學習需要人為設置初始參數,然後通過數據的回饋,不斷修改參數,使得函數出現最優解,也即我們認為最完美的策略。

機器學習的原理

  • 向系統提供數據(訓練數據或者學習數據) 並通過數據自動確定系統的參數。

機器學習常見演算法有很多,比如

  • 邏輯回歸
  • 支援向量機
  • 決策樹
  • 隨機森林
  • 神經網路

但是是否真的需要按照概率論->線性代數->高等數學->機器學習->深度學習->神經網路這個順序去學呢?

  • 不一定,因為等你學完,可能會發現自己真正需要的一些東西學的不夠清楚,反倒是學了一堆只是看過一次之後就不會用到的知識點。

0x01 強化學習背景

  強化學習剛出現時非常火爆,但是之後卻逐漸變冷。主要原因在於強化學習不能很好的解決狀態縮減表示,智慧體主要存在著狀態和動作,比如狀態可看作人類在地球的某個位置,動作可看作人類走路,如果我們很清楚人類的位置和動作其實就能預測出人的下一個狀態和動作,但是事實上智慧體需要通過枚舉的方式將所有可能的狀態彙集到一張表中,而就我們這個例子來說,一個人的下一個狀態實在是太多了,比如現在我位於北京,我下一步飛到上海,飛到南京,沒有誰清楚我到底飛哪裡。為什麼AI不能突破到強人工智慧?我認為主要還是算力不夠,沒辦法把智慧體的所有狀態都列舉出來。現今因為深度學習可以對大量的數據進行降維處理,使得數據集保有了特徵的同時縮小了體積,使得同樣的算力情況下,強化學習能夠收集到智慧體更多的狀態用來獲得最優解,所以出現了新的概念,叫做深度強化學習,它是將深度學習與強化學習結合的強化學習的加強版,這種學習可以完成對於人類來說非常困難的任務。

0x02 迷宮的建立

import numpy as np
import matplotlib.pyplot as plt

fig=plt.figure(figsize=(5,5))
ax=plt.gca()
# 畫牆壁
plt.plot([1,1],[0,1],color='red',linewidth=3)
plt.plot([1,2],[2,2],color='red',linewidth=2)
plt.plot([2,2],[2,1],color='red',linewidth=2)
plt.plot([2,3],[1,1],color='red',linewidth=2)
# 畫狀態
plt.text(0.5,2.5,'S0',size=14,ha='center')
plt.text(1.5,2.5,'S1',size=14,ha='center')
plt.text(2.5,2.5,'S2',size=14,ha='center')
plt.text(0.5,1.5,'S3',size=14,ha='center')
plt.text(1.5,1.5,'S4',size=14,ha='center')
plt.text(2.5,1.5,'S5',size=14,ha='center')
plt.text(0.5,0.5,'S6',size=14,ha='center')
plt.text(1.5,0.5,'S7',size=14,ha='center')
plt.text(2.5,0.5,'S8',size=14,ha='center')
plt.text(0.5,2.5,'S0',size=14,ha='center')
plt.text(0.5,2.3,'START',ha='center')
plt.text(2.5,0.3,'END',ha='center')
# 設置畫圖範圍
ax.set_xlim(0,3)
ax.set_ylim(0,3)
plt.tick_params(axis='both',which='both',bottom='off',top='off',labelbottom='off',right='off',left='off',labelleft='off')
# 當前位置S0用綠色圓圈
line,=ax.plot([0.5],[2.5],marker="o",color='g',markersize=60)
# 顯示圖
plt.show()

運行結果

0x03 策略迭代演算法

  對於我們人類而言,一眼就可以看出怎麼從START走到END S0->S3->S4->S7-S8
那麼對於機器而言,我們正常套路是通過編程直接寫好路線解決這種問題,不過這樣的程式依賴的主要是我們自己的想法了,現在我們要做的是強化學習,是讓機器自己根據數據學習怎麼走路線。

基本概念

  • 強化學習中定義智慧體的行為方式的規則稱為策略 policy 策略 使用 Πθ(s,a)來表示 ,意思是在狀態s下採取動作a的概率遵循由參數θ決定的策略Π。

在這裡,狀態指的是智慧體在迷宮的位置,動作指的是向上、右、下、左的四種移動方式。
Π可用各種方式表達,有時是函數的形式。
這裡可通過表格的方式,行表示狀態,列表示動作,對應的值表示概率來清楚的表示智慧體下一步運動的概率。

若Π是函數,則θ是函數中的參數,在這裡表格中,θ表示一個值,用來轉換在s狀態下採取a的概率。

定義初始值

theta_0=np.array([[np.nan,1,1,np.nan], #S0
                      [np.nan,1,np.nan,1], #S1
                      [np.nan,np.nan,1,1], #S2
                      [1,1,1,np.nan], #S3
                      [np.nan,np.nan,1,1], #S4 
                      [1,np.nan,np.nan,np.nan], #S5
                      [1,np.nan,np.nan,np.nan], #S6
                      [1,1,np.nan,np.nan],  #S7
                      ])   # S8位目標 不需要策略

運行結果