標籤:

從下往上看--新皮層資料的讀後感 第七部分 General feed-forward networks-不求甚解之路

這章儘管公式多,但都不用算,勿恐。

這章我們來看看ANN的情況,這是一片神奇的大陸,不知為何現在很大學已經把這部分內容從教學課程裡面拿到。它走了和perceptron不同的路子,在整體連接上尋求能力的擴張。這一類的神經網路其實也做出來很多不錯的成果。先從基本的前饋網路(General feed-forward networks)開始,其他的我們挑幾個有趣的分開幾個章節分別都摸一下。

perceptron用了MPN的分類特性,前饋網路一般用最MLP的結構連接,但注意這裡不再使用分類特性,這裡要用到的是傳輸特性。儘管是MLP結構,但是下面的思考邏輯已經和前幾章的內容已經沒有半毛錢關係。忘記它,我們重頭來個最簡單的MLP.

先用代數公式表示一下。右上角的括弧表示第幾列。最底下的+1是用來設置b(threshold)的。

看下標有點暈,用向量簡化一下(coding時相乘的左右別亂挪,這是矩陣和向量)。這就是所謂網路矩陣化,其實就是把代數式換個表達方式。優點是方便好記,計算時還可以用數學的庫。

好了到這裡基本看出規律吧,添加層次就直接把第一個複製一下標改下。好了,計算單元準備完畢,拿py或octave直接可以寫出來了,只要設定一套W和b就可以用X輸出Y。這套結構也是個計算框架,同樣不具備學習能力。因此參考我們前面第五章的邏輯,下面需要用調參的方式來對其編程。和向量機遇到的問題一樣,如果我們有一個確定的樣本,對這個結構編程就是通過一個確定的方法在參數空間內找出一個符合F(x)=y的參數設定。一切都一樣,唯有兩點。

1.系統結構複雜,General feed-forward networks的起步費一般在四層以上(4層含輸入輸出),相比SVM在單細胞也能工作的很好。

2.目標函數不同,SVM和感知機使用分割的質量作為目標函數,正向NN直接比較最終輸出和樣本內容。

關於結構從4層起步的問題,IN/OUT各佔一層需要至少2個層來處理XOR的計算問題。

對單層結構XOR是無法實現的,在利用傳輸特性時,本質是面向時不變的代數計算,因此計算完備性是至關重要的。上圖是演示用MPN構建數字邏輯的基本結構。總之就是這玩意大於等於數字計算機,能構建邏輯功能也有數值的計算能力。可以看到perceptron和前饋網路使用完全相同的結構,perceptron關注分類,所以使用其幾何特性。而對於前饋網路利用的是其傳輸特性(整體網路傳輸特性)。在使用非線性MP神經元後直接回引入非線性特性作為其計算機構的基本支撐。在考察一個MLP時,MP神經元傳輸函數的選擇會使得在相同演算法下的不同表現。而同時選定一個演算法(網路結構和優化方法)時也會約束僅能選擇有限類型的傳輸函數。

關於MLP下的參數搜索空間:到這裡數學直接寫傳遞函數對我來說太累了,需要建立一個基本的簡化思路,這個思路後面一直用。對上面的公式來說,W1,W2是一個層前後的上的權值矩陣。在訓練過程中當產生的J是個向量。剩下的東西在每一步帶入以後都是確定的。所以我可以認為在一組訓練值的前提下,W1,W2能決定一個確定的J-正饋網路的目標函數。構成一個平面。所以要做的事情就是具體的W在的空間內[W1,W2所在]的移動,那若問複雜層次的情況,只是在搜索空間的維度上做提升而已,儘管4維以上不明白其直觀的幾何意義,同樣也可用搜索的方式理解參數標定過程。基本的搜索方法全部按照梯度下降來考慮,作為這次的基本參數搜索方法,再此方法之上再考慮優化器。頓時感覺直觀了,至於嚴格不嚴格就先這樣吧。

總之,這個問題就變成曲面上搜索拐點的問題。b跑哪兒去了?b作為一個節點被拉入到W的矩陣里了,b是個特殊的w而已。熱愛生命,拒絕代數。

回到第五章的框架上,確定了系統模型和目標函數,下面就需要來具體訓練方法。在參數空間內直接全範圍搜索是行不通的,在原來感知機的模式下,起碼還可以沿著點搜索,正向NN的網路層次更高參數向量複雜度也隨之提升,而且這個搜索空間是全向的自由度(又是VC維,忍住先),同時由於前饋網路本身的非線性特徵使其在參數的搜索空間內可能存在局部奇點的可能性非常大,這一直是限制ANN發展的核心問題。對於前面我們提到的梯度下降法,在這裡仍然適用,而且這裡所有的東西矩陣化了,直接調函數就可。只是搜索空間太大,需要在搜索策略上進行優化--這就是優化器。對大多情況而言,只能得到一個相對解。因此需要引入一個確定的參數標定演算法或者說是方法。而從目標函數的設定可以看到,典型的Generalfeed-forward networks面向的是函數擬合,而不是分類。所以通常目標都是直接使得F(x)和H(x)儘可能逼近。對比第五部分發現搜索參數還沒具體化,我就不在這裡浪費篇幅說梯度下降的基本故事了,你是否還記得那個「Hebbian learning」在這裡可以套用一下,過程自行腦補。

下面說一下正饋網路的常見問題:

第一個問題:具體一個應用應當有幾個層次?答案是自選,整體看越多越準確。通常是大於4層,層次越多,理論上可以提高擬合度。對於DL以外的結構通常網路不要大於7層。理由主要是參數標定難度。(實驗性的DL已經做到4000以上,理論上可以無限疊加)。呃。。。。

第二個問題,每個隱含層次應當選擇幾個神經元?答案也是自選。呃。。。。。

第三個問題,具體應用應用該選擇什麼函數作為f?答案是自選。呃。。。。。

第四個問題,能不能用SVM的kernel?可以,不必須,類型自選。呃。。。。。

第五個問題 ,w和b的初始化以什麼為依據? 看心情,喜歡手填就填,懶的就隨機。 呃。。。。。

第六個問題, 那是不是樣本產生的模型是確定的?看運氣,基本每次不一樣,有很多正確解 。 呃。。。。

第七個問題, 具體的參數空間內搜索的方法呢?請隨意,GD,牛頓巴拉巴拉,只要能找出相對較好的參數即可。 呃。。。。

第八個問題,是不是能算出來或者搜出來最優?這不是SVM,沒有最優,一般能找到局部優、 呃。。。。

這些問題都缺乏整體性的指導原則和確定的框架。當然也可以說一些按照樣本特徵設計的此類的話,這基本只是一個基於經驗和感覺的迷信式的邏輯,缺乏具體的行動步驟。裡面只有最大層次和kernel的選擇是有原則下限。實乃不求甚解之楷模也。正因如此即便在基本樣本完全相同的情況下每家的產品表現也會產生差異。而同樣的設計由於樣本大小也會產生差異。可見的未來DL迅速提高學習層次,會推動這種設計差異在很長一段時間內逐步縮小。

而樣本差異則是個雪球,好用的就用的人多,用的人越多它自己就變得越好用,這真適合大公司,用戶基數大=產品好,核心團隊挖走也沒用,雪球滾啊滾。這個角度看創業黨的最後窗口期已然不多了。

所以從正饋網路由於存在這種設計本身的自由度,在開始做一套實現時,必須確定問題列表的點才能具體的動手。作為工程師我們的核心目標是可以踐行,不是飄在天上的理論。需要引導思考和回答這些不確定環節的邏輯,就是他們說的演算法架構。比如Deep Learning就是一套回答這些問題的架構-如何再表徵和分類,而不僅僅是BP,CNN,RBM和SOFTMAX。這裡提一下,SVM和Deeplearning都只是一套框架,它們分別定義了最初的問題場景,事實上拓撲結構,演算法工具-優化工具,和再表徵工具,評估模式,大多是可以可以相互交叉使用的,例如:Deep這些年就有在引入SVM替代Softmax作為後篩選工具。所以實際拿到一個項目的代碼很難整體上從是這個或那個演算法的角度了解系統的全圖,每一塊都是要具體的分析才能得出結論的。

最後,這裡總結一下。這個基本的前饋網路是一系列神經網路演算法和架構的基礎計算框架。所以這玩意擬合一個數學函數的特性還是不錯的,有興趣可以用這個模型去嘗試接近sine之類的函數試試,必有啟發。下節我們開始看一下在關注傳輸函數的場景下如何使用BP演算法優化參數搜索過程。


推薦閱讀:

神經網路是如何學習的(中)
項目筆記(一):實驗——用神經網路實現midi音樂旋律音軌的確定
韓國有家公司挺牛!號稱開發出了全球第一款量產的神經元晶元?
從結構、原理到實現,Faster R-CNN全解析(原創)
告別PS,用神經網路給家裡的黑白老照片上色。

TAG:神經網路 |