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

Dark1nt發表於2021-06-07

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位目標 不需要策略

執行結果

asd

相關文章