神經網路普遍性的直觀解釋
最近假期快結束了,因為compliance的顧慮給知乎改了這個名字,其實有點後悔,但看來至少得用180天了呵呵… 其他涉及公司話題的答案亦有所刪改:https://www.zhihu.com/people/dangyuanchu/answers。專欄一如往常:Finance Stuff - 知乎專欄。
這篇先不講金融和交易了。今天在網上看到一篇文章,感覺很有意思,給大家分享一下。
學過機器學習的朋友可能都知道,神經網路幾乎可以表現任何函數。這句話用嚴格的數學語言(普遍性定理)來講,就是以下這個結論:
(在一些關於激發函數的假設下)包含有限個神經元的單個隱含層構成的前饋式神經網路可以逼近定義在 緊性子集上的任意函數。
當然了,語言可以更數學一點,比如:
假設 是一個有界、單調遞增、且連續的非常數函數, 是 維的立方 , 代表 上的連續函數空間。對於任何 ,都存在一個 ,使得對於任何 ,都存在實數 ,以及實數向量 , ,使得 可以任意逼近 。即對於任何 , 。
定理的證明大概要用到Hahn-Banach定理, Riesz表示定理和一些傅里葉分析,但我當然不是來說這些的哈哈(前幾行打得已經很費勁了,我怎麼會吃飽了撐得再打那麼多數學符號:))。今天分享一個說明神經網路普遍性定理的直觀「證明」法。
有多直觀?看圖就能懂了。首先,針對一元函數的情況,我們需要證明如下的神經網路:
能夠刻畫出任何連續函數 ,比如:
首先,我們來看一個神經元的斜率 和截距 ,假設激發函數是S型生長曲線Sigmoid,一個神經元對最終輸出結果的貢獻大概是這樣:
通過增大斜率 ,右側的輸出函數會變得越來越「陡」;通過調整截距和斜率的比值 ,我們可以使函數「左右移動」。這些操作可以讓我們構造一個如下的階梯函數:
既然一個神經元可以拼湊出一個可控的階梯函數,那麼兩個神經元就可以疊加出這樣的分段常數函數:
如果把這樣的分段函數作為基本的單位,我們基本可以刻畫任何一個連續函數啦!比如下面:
多元函數也是同樣的思路,大家不妨自己考慮考慮。一些構造的提示就在下面:
當然啦,暴力的電腦是不會以這樣的分段常數函數為「基」來「考慮」問題,不過,這樣簡單清晰的構造卻為我們的直覺理解幫助極大!
Reference:
[1] Michael Nielsen, A Visual Proof that Neural Nets Can Compute Any Function. Neural Networks and Deep Learning, May 2017. http://neuralnetworksanddeeplearning.com/chap4.html
推薦閱讀:
※Python · NN(一) · 神經網路入門
※神經網路的學習 / 訓練過程
※第四周筆記:神經網路是什麼
※卷積神經網路(CNN)的參數優化方法