深度卷積網路的 BUG 一例:「絕藝」最近被人類棋手找到了一個有趣的缺陷
細看棋譜,職業棋手很有想法,確實找到了電腦的一個比較本質的缺陷。例如這盤,電腦持白,對持黑的潛伏(柯潔九段):
白棋的大龍從右下被黑棋緊盯著殺到中腹,最後竟然做不出兩眼,鬱郁而亡。其餘幾盤也均是以電腦大龍被殺告終。
這是深度卷積網路的一個 BUG:電腦對於局部的死活很敏感,但是對於大龍的死活不一定看得清。最近我在訓練網路時也發現,深度卷積網路在此有一個"信息傳遞困難症"。這首先有兩個原因:
第一,AlphaGo v13 的網路層數實際是不夠的。如果按照 AlphaGo v13 的架構,5x5往上面長11層3x3,相當於27x27,看上去夠大了吧?錯,這樣的半徑只有14。因此,如果大龍的長或寬超出14,那麼它的尾就和頭沒有任何直接聯繫了。實際上,卷積核要至少長到37x37才保險,也就是16層3x3才夠。
第二,由於網路的結構是往上一層層生長,如果只長几層,一般不會丟失重要信息,但如果一直長上去,就會越來越容易出現問題。所以,大龍甚至都不用長到14,電腦就已經不一定"知道"自己的大龍是一條聯通的大龍了。
舉個與之相關的例子:按照 AlphaGo v13 的架構,如果大龍只在一端有兩個真眼,另一端就甚至不一定知道自己已經活了(它只會知道自己有兩口氣,而這是網路輸入告訴它的)...... 不可思議吧,我自己訓練時看到這個現象也很驚訝,然後一想確實是這樣。
以上這兩個問題,電腦換成足夠深的殘差網路或許就可以基本解決,不過意味著要重新訓練。
但實際還有兩個問題:
第三,如果仔細看網路本身輸入的特徵設計,會發現網路容易被帶入一個誤區:它會傾向於認為氣很多的棋塊就是活的。對於局部死活,這沒有問題,但對於大龍死活,這是不足夠的。網路實際並沒有清晰的眼位概念。
第四,這裡的局面在人人對局中少見,在電腦自我對局中也會同樣少見。關鍵在於,棋塊小的時候,可能出現的形狀不多,而且許多形狀經常在對局中出現,因此容易被神經網路學會。而大龍越大,其可能出現的形狀就越多,網路不一定能學會。事實上,目前的深度卷積網路並不擅長學會拓撲概念。細長的大龍、分叉的大龍、捲曲的大龍,會尤其是它的弱點。棋手可以多嘗試讓電腦或自己的棋變成這樣,電腦就會更容易看不清死活。
以上兩個問題,電腦也可以通過有針對性的訓練改善自己。具體效果如何,我們看「絕藝」上線後的表現。順便一提,如果讀者對於 AlphaGo 與圍棋 AI 感興趣,我正在寫一個系列,其它幾篇的傳送門:
- (1) : 圍棋 AI 基礎 知乎專欄
- (2) : 安裝 MXNet 搭建深度學習環境 知乎專欄
- (3) : 訓練策略網路,真正與之對弈 知乎專欄
- (4) : 對於策略網路的深入分析(以及它的弱點所在) 知乎專欄
- (4.5):後文預告(Or 為什麼你應該試試 Batch Normalization 和 ResNet)知乎專欄
- (5):結合強化學習與深度學習的 Policy Gradient(左右互搏自我進化的基礎) 知乎專欄
推薦閱讀:
※關於AI的胡說八道
※2017 ? AI晶元元年
※【教程】專知-PyTorch手把手深度學習教程系列完整版
※人工智慧(AI)能幫助市場營銷做什麼,看了這篇行業白皮書你就知道了
TAG:AlphaGo | 深度学习DeepLearning | 人工智能 |