**原文:
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 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...