演算法學習(五) alphago Zero模型

2021-10-14 05:22:24 字數 1323 閱讀 7422

**原文:

github上的復現,膜拜大神:

alphago zero模型的理解:

0.應用場景:完美資訊零和博弈遊戲。

1.不再使用監督資料對模型進行訓練,使用自博弈的方式,自動生成資料,學習圍棋的知識。

2.前向搜尋很有用,使用前向搜尋的alphago zero得分5185,使用裸網路的得分為3055,打不過alphago,這說明mcts的思路很有用

3.mcts參與訓練,這在之前是沒有的,具體怎麼實現的?

4.alphago zero 所使用的卷積神經網路的輸入是 19 × 19 × 17 的張量

具體實現小技巧:

a = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 0]])  # 棋盤

b = np.array([0, 2, 4, 6]) # 有子的位置

a[b // a.shape[0], b % a.shape[1]] = 1 # 長和寬

print(a)

[[1 0 1]

[0 1 0]

[1 0 0]]

在復現程式中,使用了4層,分別為己方位置、敵方位置、上一步的動作、當前顏色。上一步動作只在棋盤上畫乙個點。

5.勝率超過55%,替換新的模型

6.在蒙特卡洛樹搜尋中,將dirichlet雜訊新增到根節點(板狀態)的先驗概率上,保證可以嘗試所有動作,但是搜尋可能仍會否決不良動作。什麼意思,類似ε-greedy策略嗎?

7.估值網路的結構:

使用包含40個殘差結構的網路,效果很好。在有監督學習中,準確性也比之前的好。

這種兩頭的結構有什麼優勢?

這個網路輸出兩個值,一是對當前節點的評估值,方便選擇己方的下一步落子,二是下一步可能的落子位置的概率序列,方便mcts使用。

8.損失函式:

l=(z−v)2−πtlog(p)+c||θ||2

訓練的目的是對於每個輸入ss, 神經網路輸出的p,vp,v和我們訓練樣本中的π,zπ,z差距盡可能的少。

損失函式由三部分組成,第一部分是均方誤差損失函式,用於評估神經網路**的勝負結果和真實結果之間的差異。第二部分是交叉熵損失函式,用於評估神經網路的輸出策略和我們mcts輸出的策略的差異。第三部分是l2正則化項。

9.訓練模型的時候,對自博弈資料進行拓展,因為圍棋有對稱平移不變形,算是個訓練小技巧。

疑惑:1.神經網路的雙頭結構的有什麼好處?理論基礎呢?

2.損失函式的第二項為什麼和原來的策略越接近越好?有什麼依據?

演算法學習(五) 基本排序演算法總結

前幾天學習幾個基本的排序演算法,下面來總結一下 在維基百科上有排序演算法的一張圖,紅線是我之前總結學習的。從我們學習的排序演算法中可以分為兩類 簡單排序有冒泡 選擇 插入排序 改進演算法有希爾 堆排序 歸併排序和快速排序。快速排序是冒泡的公升級版,屬於交換排序 希爾排序是直接插入排序的公升級,屬於插...

演算法學習總結 五 快速排序

一 演算法簡介 快速排序 quicksort 是對氣泡排序的一種改進。它的基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。二 演算法描述...

演算法學習 Union Find演算法

union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...