※ 引述《nnlisalive (nnlisalive)》之銘言:
: 我覺得要從程式碼方面下手了
: 首先就是阿發狗所謂的"勝率"是怎計算出來的?
: 不外乎用盤面上所得到的資訊轉換成數據
: 再代入勝率函數得到每一點的勝率
: 那這個函數適用於任何盤面嗎? 沒有任何邏輯漏洞和盲點?
: 算出來的勝率沒有誤差? 如果有個點勝率是70%
: 具體來說應該是下了這個點跑到結束N次 有0.7*N次會贏
: 但明明就還沒下完 也不知道對方會怎下
: 所以只要能騙過電腦 讓他一直下到誤判勝率的棋
其實看很多人對AlphaGo演算法的看法好像還在以前
把作法寫死在程式裡跑Funciton的想法
所以才會說找Bug和騙電腦之類的
這就讓我想到昨天第二局騰訊那個轉播,較前面兩個解說來賓
(名字我就不曉得了,畢竟個人也沒啥圍棋經驗)
右邊那位來賓也是停留在改Code,修原始碼之類的舊式理解
左邊那位就對AlphaGo的作法,神經網路的東西理解很深
以下是個人粗淺的理解,畢竟以前沒深入研究過NN且Nature那篇也還沒看完
AlphaGo並不是把規則寫在Code裡面,而是把盤面的資料丟到一個
Model中,在Model中經過計算後吐出來一個結果來
以Policy Network來說就是吐出各點的下子可能機率
而Value Network就是該盤面的可能勝率
也就是像這樣:
Input Model Output
盤面上各點的資料
共19*19 = 361維
[1, 2, ..., 361] -> Policy Network -> 各點下子可能機率
Value Network -> 盤面的可能值
真正重要的是Model中的計算參數(而且可能有非常多個)
才是決定這麼Model好壞的關鍵
當然這個關鍵是不用人手去調的,而是以過去的資料去對Model進行"訓練"
也就是參數的調整,讓這個網路能越來越符合我們要的結果
就是在之前討論或文章中作SL(Supervisor Learning)的部分
但這要有過去的資料才能作到,因此AlphaGo還多了一步
是在過去的資料上繼續自己創造資料與結果
也就是RL(Reinforcement Learning),來不斷的自我訓練
不斷的加強自身強度
所以常常看到有人說找Bug和對原始碼下手,但其實這是不對的
這個計算系統是隨時隨地在變動的
如果有一般人所謂的Bug(系統實作上的問題)也早就找出來了
要也是要對Model和系統本身的弱點來下手,但NN會在不斷的訓練逐漸趨近最佳解
所以要"騙"或找Bug是非常困難的甚至沒意義的