為什麼都說神經網路是個黑箱?

接觸深度學習領域不到兩年,還沒有什麼很深刻的經驗,但是個人感覺神經網路在很大程度上近似於複合函數,back propagation 也差不多就是鏈式求導,相對於logistic regression,decision tree這一類演算法,應該更加直觀和便於理解。然而在工業中,大家似乎都默認ANN不具有可解釋性,是個黑盒子。為什麼相對傳統演算法,ANN會更不具有解釋性?當我們說一個演算法的可解釋性時,我們是在解釋什麼?


沒做過實際的數據挖掘項目,不過我覺得,可解釋性應該指的是對於數據的可解釋性。

比如你老闆讓你做一個預測房價的問題。給了你歷年的房屋售價,和該房子的面積、地段、類型、建造年限、裝修情況等特徵。然後你把這些特徵丟進一個機器學習模型去訓練。訓練好之後,用模型預測一下明年的房價,彙報給老闆。

然後問題就解決了?

沒有解決,因為你的老闆會問你,為什麼?為什麼房價會上升(下降)?

這時,

如果你用的是logistic regression,你就可以自信滿滿地指著p-value最小的那些變數,跟老闆說,「因為這些變數變大(變小)了,所以明年房價會上升(下降)」

如果你用的是decision tree,你就可以自信滿滿地指著決策樹最頂端的結點,跟老闆說,「因為這些變數變大(變小)了,所以明年房價會上升(下降)」

如果你用的是NN,你就可以(自信滿滿?)地跟老闆說,……


Han Yang 的答案說「可解釋性應該指的是對於數據的可解釋性」,我覺得可解釋性應該指的是對於「結構」的可解釋性。

以分類問題舉例,對於一些簡單的分類問題,我們可以主動設計出一個解決演算法,也就是某種結構,並通過測試數據來優化或者糾正這個結構,最重要的是,這個結構可以被人分析、理解和抽象——它最終可以還原為某種流程圖,乃至一個邏輯代數的公式。但用神經網路來解決同樣的問題,最終訓練而來的模型同樣是某種結構,卻好像是「生長」出來的,沒辦法把它還原成更抽象的東西,甚至沒有太多道理可以講。

我感覺傳統演算法比較像傳統機器製造業。假如我要做一個硬幣分類器,我可以設計一個斜坡,從上到下開由小到大的孔,然後讓硬幣滑過斜坡,小硬幣會先滑落,大硬幣會最後滑落,這個結構是可以理解的(並且 predictable)。而神經網路比較像養蠱:我在一個粗大的垂直玻璃管中間放個架子,鋪上幾層有活性的膠狀微粒。然後從玻璃管上方不停往下倒硬幣,這些硬幣會沉入膠狀微粒層,從而改變掉落的方向。如果微粒層使得硬幣按照大小分別接近指定落點,我就給這些膠狀微粒投點營養劑,如果離遠了,我就投點毒。倒了幾百萬個硬幣之後,這些膠狀物自己固化出來了一個結構,可以把我扔進去的硬幣分別掉落到指定落點,而我卻(接近於完全)不知道這些微粒生成出來的這個結構為什麼能做到這件事(即便我知道單個微粒的工作原理,能調整每一個微粒,也可以改變微粒的層數,或者投放的營養液的劑量),也不知道這些微粒子為什麼會生成這樣一個結構。


說神經網路是個黑箱,大致有兩層意思。一個是說,我們不能刻畫網路具體是在做什麼(比如在每一層提取什麼樣的特徵)。另一個是說,我們不知道它為什麼在做這些,為什麼會有效。回答前一個問題就是研究神經網路的「可解釋性」。不過在俺看來後者更重要,更本質。

有些人似乎認為,這兩個問題都不重要。一種思潮是說只要好用就行,管它為什麼工作、怎麼工作的。還有一種思潮是認為這兩個問題都是根本回答不了的。俺以為,這兩種觀點都是短視的。

深度學習顯然是做對了something, 在某個角度觸碰到了真理,但如果不打開黑箱,我們無法知道它到底做對了什麼,真理是什麼。在牛頓之前,大家都見到了蘋果落地。但在當時人們的視角中他們一定認為,蘋果落地不是很自然的嗎,需要解釋、需要知道為什麼嗎?當時的人們也會認為解釋這種現象簡直無從下手。跟今天的深度學習有點像吧?但是當牛頓告訴我們為什麼蘋果會落地之後,世界從此就不一樣了。

今天的機器學習在某種意義上好像物理學。深度學習目前就好比實驗物理,有很多實驗觀察,但沒有理論能夠解釋。也跟物理學的發展一樣,實驗總是走在前面。沒有Michelson/Morley 的實驗觀察,也就沒有愛因斯坦的狹義相對論。

如果感興趣深度學習的科研,你可以選擇成為下一個 Michelson/Morley, 也可以選擇成為下一個愛因斯坦。當然,大多數人都是坐在樹下吃那些天經地義要掉下來的蘋果,呵呵。


那麼請解釋一下每層函數都是幹啥的好不好


如果效果好,要求你解釋的人就會變少。

解釋無非就是有的人不懂模型的原理,卻想用人的思想去理解模型。這本身就是理解上的偏差。

一些簡單的模型因為參數少,相關度低,尚可以全面分析做個解釋,比如簡單的LR、DT。但理解到這個程度,其實跑模型僅僅是做了個數據統計罷了。對於複雜問題,一般需要更複雜的模型,更強的擬合能力。

就算是LR,超大規模的模型中,加上組合特徵總共幾十億參數,人就很難看出哪個參數的影響更大了。

更何況圖像方面,傳統領域研究各種運算元各種規則判別方法研究了那麼多年,最終效果還沒有CNN好,你說CNN那海量的參數就算你看完了就真的好理解,人能駕馭的了那麼大量的數據嗎?如果真能找到一些簡單的規律,科學界很可能只用神經網路去探索規律,而總結的規律直接寫成效率更高的程序豈不美哉?要是能簡潔的解釋的那麼清楚,還要那麼複雜的模型幹嘛?

正是因為對於複雜問題的規則可能過於複雜,人無法駕馭,所以才要設計神經網路這樣的模型,省時省力的模型大多都希望做到端對端,直接面向需要解決的問題而不關心過程,因為人為的過程都有被優化的空間。拋棄對人的可解釋性就是為了讓模型更接近真理,人需要關心的是模型的原理,而不是試圖理解每個個例是如何被判別的。機器的預測也許會有一些規律彷彿有自己的眼光和風格,但這都是人主觀總結的經驗規律,並不是科學依據。

可解釋性是有代價的,當然這種需求也正常,畢竟企業除了追求效果也要把控風險,這個還靠技術的發展,不僅僅是神經網路的發展,也是機器學習行業的企業管理和工程管理問題。這與可控性較高的軟體工程不應該用同樣的方式去管理,很多公司這方面都差的很遠,以為就寫個程序就完事了,所以才造成了明明自己不了解,看不懂,卻要求可解釋。當初技術選型的時候可眼睛裡都是人工智慧,壓根沒考慮可解釋。

黑盒這個詞很好,很易懂,對於不打算或沒時間對其原理研究透徹的人來說,就把它當成黑盒吧,這麼說大家都能聽懂,在技術選型時也更能看清楚自己需要什麼,而不是一股腦的追求用前沿和熱門的方法去做。

(重新審題,發現原詞是黑箱 )


可解釋性我把它分成兩種。

一種是傻子要求的可解釋性,很多時候是個很可笑的需求,因為模型在估計一個概率,而可解釋性往往拿出一個單例來,問為什麼在這個單例上模型得出這個結果。

更可怕的是,這種可解釋性往往還要求不準用數學語言尤其是概率語言來解釋和描述。這種傻子要的可解釋性往往來自一些外行領導或某些水平較低的產品經理。

另一種是要求解釋評價函數為什麼會漲或降。這種時候神經網路往往只能靠猜想,比如看我這個trick可能是避免了什麼問題,而給不出有理有據的嚴密推導。

更可怕的是,即使不嚴密的解釋,也不那麼可解釋。比如同樣的trick,這次好使,下次類似的情況完全不好使了。這時候之前的「解釋」自然全部作廢,罔談可解釋性。


個人認為其實可解釋性還包括了模型的理論的可解釋性。比如說很多傳統模型的理論包含了在哪些數據假設下,模型能給出的預測精度是多少,以及如果違反了哪些條件,模型就不工作了。深度學習在這方面還欠缺很多,基本上就是停留在如果試試某些方法,沒準兒能提高模型效果的程度。如果有大神能夠站出來給出個理論說我這個網路結構在某種數據模型假設下,重複初始值M次,每次跑N個循環,能給出一個預測誤差分布收斂到0,且方差加偏差小於一個有關M,N,的函數,那麼即使這個網路有30萬個參數,我覺得也算是一定程度上可解釋的。


深度神經網路當然不是黑箱,當然是可以解釋的,只不過你理解不了而已。卷積神經網路為什麼知道貓是貓而不是狗?因為圖像裡面的各種特徵決定了呀。這些特徵可能是你看不懂、理解不了的,但這並不代表它無法被解釋。

簡單類比一下,蝙蝠能靠超聲波分辨周圍的環境,你能理解超聲波嗎?你不能。但這並不代表蝙蝠能發出超聲波並理解回波這件事是不可解釋的,只是這件事你無法做到,它能懂的東西你不懂,而已。


因為解釋不清楚,你就根本不知道它到底是在擬合還是在瞎掰。很多問機器學習在量化交易的題目在知乎上都找得到,裡面答主說的很清楚金融市場信噪比很低,用強學習機擬合出來的很有可能就是噪音。因此,如果說不清楚某個學習機器的原理,根本不能用在金融市場或者醫藥市場,萬一吃死人或者虧幾個億誰負責咧。


因為真正懂得底層原理的甚少,且大家只想知道怎麼應用就行了,所以就黑了。。。


在工程上,演算法設計的一個基本要求是穩定性。

但是,神經網路的求解過程是一種數值分析方法。

雖然在理論上,可以證明神經網路具有收斂性,但是,由於神經網路採用數值計算方式迭代求解,那麼其收斂過程受到各項子式和參數的影響。

尤其是工程上的問題的解空間不止一個解,當問題規模越大,解空間越大。

因此,你無法解釋子式、參數和結果之間的聯繫,比如,對於子式1,參數1,得到結果1,而子式2,參數1,得到結果2,子式1,參數2,得到結果3,......。這些結果很難表現出一種確定的規律來。


因為人類理解不了NN學出來的高維特徵。

PS:別人NN是通過分布學特徵的呢哪像你SIFT這麼死板非要說出個所以然

alphaGo zero能夠學出人類無法理解的定式,難道alphaGo就是個黑箱嗎?


你說「應該更加直觀和便於理解」指的是 back propagation 這個過程便於理解,而不是最後擬合出來的那個函數便於理解。很多人希望的是 hat{f} 的形式簡單並且便於理解(比如 hat{f} 是個線性函數)。

關於可解釋性,粗略地說你可以從兩個方面來理解。一方面,哪怕是沒有專門受過統計學訓練的人,看到一個線性模型(比如 	ext{income}=	ext{education}	imes3 )也能大概知道模型在說什麼。你要是讓一個沒有本科數理基礎的人去理解神經網路,是很困難的。另一方面,很多傳統的建模方法因為有了各種各樣的假設(有的假設可以很弱),我們就可以有各種各樣的定理,所以我們就有了更多的方法去理解最後出來的模型的性質(比如 confidence interval, p-value, convergence to true value, etc.). 神經網路這方面的結論似乎還比較少,而且即使有,可能業界裡面知道這些結論的人比較少,所以很多人說神經網路是個黑箱子。

想到一個例子。底下有個回答里的評論里說,「有人問你可解釋性,你就和老闆說這個模型在一個 independent 的 testing set 上測試效果很好就好了」。其實我以前有個同事是這麼和客戶解釋的,客戶當即表示,「那我現在給你一個 testing set,你能保證模型的誤差在某個範圍內嗎?你需要多大的 testing test?「所以,也不是所有的老闆/客戶都那麼好糊弄的……


給足夠多的神經元,兩層的神經網路就足夠擬合任意函數,不論你是parameter model(比如線性模型),還是non-parameter model(比如knn)。

評判一個模型的好壞,「性能」和「可解釋性」都非常重要。在學校里刷論文可能大家更多的關注性能方面,尤其在計算機視覺/語音識別 這種raw data,神經網路能提取到比傳統hand-crafted descriptor更好的特徵。

但是你沒有辦法知道深度神經網路它每層究竟學到了些啥,目前CV領域有做feature map可視化的,讓我們知道了低層學習紋理、輪廓,高層學習更抽象的特徵,比如臉蛋和鼻子。但這離最終的可解釋性還是差的比較遠。

工業項目中,比方說你要上線一個模型,他可能在測試集表現很好,但實際生產環境出了問題,問題出在哪兒,你就沒法兒明確知道了~


因為真的是個黑箱!!

我們在答辯前,是這樣描述它的:反正就是經過一堆這樣那樣這樣那樣亂七八糟不知道到底在幹啥的層之後就出了結果。


當我們說演算法可解釋的時候,其實是在說我們可以對數據建模。特別對監督學習,所謂可解釋,我理解成找一個數據到結果之間的模型形式。

這些模型或許很粗糙,比如邏輯回歸,但是至少你在嘗試通過數據是怎麼一步步推出結果的。

深度學習,是一個端到端演算法,不存在這個過程,或者說我們相對不在意這個過程。一個DNN可以執行一萬個任務。效果都不錯,但是你永遠不知道每個屬性到底有什麼用,也不知道你這個模型魯棒性怎麼樣

這種東西,怎麼能叫做智能呢


當然是解釋產生或導致某種結果的原因了,讓人容易理解的原因。給你一個x(input),你的演算法可以產生一個y(output),為什麼這樣的x就能產生這樣一個y而不是別的y呢?這就是可解釋性!

舉個例子,說喝牛奶可以長高,演算法A可能會告訴你,牛奶裡面含大量蛋白質和鈣,蛋白質是肌肉生長所需要的,鈣是骨骼生長所需要的,所以喝牛奶可以長高,這樣你就會推斷,我食用其他的食物,只要含大量蛋白質和鈣應該也能長高;而演算法B只會告訴你喝牛奶可以長高,喝白開水不能長高,但是它不能告訴為什麼喝牛奶可以長高而喝白開水不能,所以你很難去做類似的推斷。顯然,演算法A可解釋性比演算法B強,演算法B就像個黑箱子。

其實傳統的統計學和現在的機器學習很大一個區別就在於可解釋性。統計學會研究產生某種結果的原因,像主成分分析、因子分析、方差分析、概率分布,都是試圖解答各個變數對結果的貢獻程度;而機器學習更像一個黑箱子,你給一個輸入,我就給你一個輸出,我不在乎究竟是什麼原因導致這個輸出,只在乎預測是否準確。

而神經網路相對於logistic regression,decision tree這一類演算法,解釋性更差,應該是可以理解的。線性回歸、邏輯回歸你能看的到每一個變數的係數(權重),決策樹就更直觀了,樹的每一個分枝都代表一個取值(範圍)啊(男、女,年齡&>30、年齡&<30等);神經網路,特別是多層神經網路,解決線性不可分的問題,你很難解釋每一層代表什麼,每一個神經元代表什麼,前向傳遞的係數又代表什麼,這些應該不容易解釋吧。例如,一個只有10個特徵的問題,每一個特徵都對應一個現實的屬性(性別、收入、身高、體重等),神經網路把它映射到一個20維的空間(20個神經元),你能解釋映射後的這20個特徵分別代表什麼嗎?恐怕很難吧!鏈式求導只是單純從解決一個數學問題上可以理解,但並不能對應到現實可描述的東西,所以可解釋性差,是黑箱子。不知道我這樣解釋能不能理解。


樹是每個分叉點都能用人類語言解釋這個分叉點幹啥了。NN是每個權值都沒法解釋它具體的含義。

這個是幾百年前的概念,現在人們早就不那麼說了吧……


關於所謂「黑箱」,就是指那些既不能打開,又不能從外部直接觀察其內部狀態的系統,比如人們的大腦只能通過信息的輸入輸出來確定其結構和參數。「黑箱方法」從綜合的角度為人們提供了一條認識事物的重要途徑,尤其對某些內部結構比較複雜的系統,對迄今為止人們的力量尚不能分解的系統,黑箱理論提供的研究方法是非常有效的。

而神經網路的黑箱問題決定於以下幾點:

1。中間過程無法描述,也就是常說的可解釋性不強,這一點其實並不好說,因為貝葉斯也可以用來構建神經網路,而貝葉斯的可解釋性很強,因此,我們常說的可解釋不強,是指的大規模網路中的中間過程。

2。神經網路本身就是一個近似表達,其目的是將一個非顯式的一個目標用一個顯示的目標函數近似表達,所以我們看到的幾乎都是神經網路可以逼近眸中表達方式。所以其整個的訊訓練過程都可以看做是一個黑箱過程。


可解釋性說的是「這個模型是怎麼來的,我這麼調參為什麼會導致評價有這樣的變化」,而不是高票說的從數據到結果的可解釋性。

解釋不了從數據到結果是怎麼一回事,並不一定是模型/方法的問題,有可能這個問題本身就沒法解釋。

比如根本就沒人明白人能認出十個數字是怎麼回事。你說LR有這種「從數據到結果的可解釋性」,那你用LR跑跑MNIST解釋解釋唄,搞認知科學的人要高興死。

說LR有可解釋性是指,和NN不一樣,我能解釋出這個LR模型是怎麼「長」出來的,而不是像NN一樣去強行擬合某個函數。


推薦閱讀:

為什麼人工智慧的研究都是基於演算法,而不是基於「硬體」?
人工智慧是根據什麼原理來設計和製造的?
有關神經網路和遺傳演算法?
不擅長編程,有運籌學基礎,該怎麼學習智能演算法?
吳恩達為什麼離開谷歌?

TAG:人工智慧 | 機器學習 | 神經網路 | 深度學習DeepLearning |