以AlphaGo為例,如何理解神經網路的存儲容量(storage capacity)?
監督學習策略網路(SL Policy Network)是AlphaGo的重要組成部分。AlphaGo決策時,總是由策略網路提供一個先驗概率,並作為決策的依據之一。然而,策略網路p(a|s)(其中a=action,s=state)的容量實際上極大。已知圍棋的總合法局面(state)數為~10^170, a~10^2, 因此|p(a|s)|~10^172. 這無疑是一個天文數字。請問深度卷積神經網路是如何「存儲」,並在需要時及時提取這些信息?
自答一個。 @Tattletale 答主說得很好,不過沒有深入到我最想要的方面。我希望能再探討一下。
換句話說,AlphaGo的策略能夠以10^7個訓練樣本,確定12k^2, 約為5*10^5個參數,能夠正確識別10^170個潛在樣本中的絕大多數(至少現在看來是如此)。這在我看來也是很神奇的。
我想要的答案是,對於某一類神經網路,能否給出一個漸近公式O(f(n)),使得我們在知道參數總數n的情況下,估計該神經網路能夠正確識別樣本數的下限?神經網路有泛化(generalization)能力。用通俗的語言說,神經網路記住的是規律,而不是訓練集里所有局面下的應法,更不是任何局面下的最佳應法。
如果神經網路(相對於訓練集)太小,會發生underfitting,也就是說找到的規律太粗疏。
如果神經網路(相對於訓練集)太大,會發生overfitting,也就是說記住的規律太多太具體,更像是死板地記住了訓練集里局面與應法的一一映射,不夠抽象。
做圍棋AI的運氣好,拿kgs上(也許再加上gogod和tygem)區區幾十萬局遊戲當訓練集,就可以用一個適當大小的神經網路提取出足夠多的規律。如果我們在公元1800年想做圍棋AI,那麼肯定會碰到數據不夠的情況,必須減小神經網路的規模才能有效訓練,而神經網路規模小了,可以存儲的規律也就少了。
把應用範圍推廣,判斷什麼東西是可以有效訓練的,什麼樣的tuning方法才可以有效訓練,以及訓練集與神經網路大小的關係,都還是算命和鍊金術,離science的程度還有點遠。
補充一個例子:google translate的神經網路版更新,個人估計在碰到小語種的時候會有麻煩,因為小語種的文字資料不夠神經網路塞牙縫的。這就是為什麼他們想方設法要弄zero shot learning,重用大語種的訓練結果,把現成結果硬拿給小語種用。
神經網路當然沒有存儲所有局面的情況。它學習的人類棋譜和它的自我對局共同組成了它的經驗,至於經驗以外的局面怎麼應對要靠舉一反三,也就是泛化。
不過神經網路的存儲容量是個很有意思的問題。比如說,可以考慮一定規模的神經網路,可以學習多大容量的訓練數據。當訓練好的神經網路受到一定損傷,又會失去多少習得的規矩。這些都是值得研究的課題。直接存儲肯定是不行的。如果有足夠大的存儲和運算速度,計算機靠硬算就能贏了人類了。
所有的技巧和演算法都在於,怎麼在有限的存儲和有限的計算資源下,取得最大概率的勝利,這時,壓縮存儲,省略調無用和重複的信息就是一直在研究的工作。
推薦閱讀:
※機器學習怎麼應用於流行病學研究?
※如何評價微軟在Build 2015上發布的Project Oxford?
※factorization machine和logistic regression的區別?
※為什麼工業界喜歡用LR模型?
※打劫對於AlphaGo來說,真的增加了難度嗎(周志華的觀點正確嗎)?