強人工智能基本問題:神經網絡分層仍是不分層

版本:0.1算法

 

現代的大部分機器學習的算法將神經元分出了清晰的層次。所謂分層,即將神經元分爲幾層(也可認爲是幾組)。每層內的神經元沒有聯繫,相鄰的層與層之間的神經元會有兩兩的聯繫,從而造成一個關係矩陣。非相鄰層的神經元之間沒有聯繫。這裏的相鄰指的是神經元層次之間的關係,每層神經元有一層或者先後兩層相鄰。網絡

通常神經網絡的算法的神經元層數是有限的,通常是兩三層。在理論上,三層神經元(包括輸入、輸出和隱含層,除去輸入輸出,也可算作只有一層)就足以解決全部問題了,由於中間的隱含層可以表達全部函數。但這只是數學上的可能性,實際中若是隻用一個隱含層來實現人類智能,須要的節點數量估計近似於無窮。機器學習

增長神經網絡的層數,如同從加法到乘法、指數同樣,抽象出相似的層次,進行概括,從而減少問題的計算複雜性。人的大腦對信息的加工其實也是分層次的。好比對語言的聽覺處理,先有有種頻率,振幅的層次,而後是頻率的變化,不一樣頻率的組合的層次,再日後是音節層次,隨後到了詞彙層次。最後產生到咱們能感受到的信息層次和粒度,包括誰在說話,說的什麼意思,心情如何等。底層的過濾甚至會讓咱們忽視對方用的是什麼方言和語言。到了深度學習,神經網絡的層次纔到了真正的多層結構。其實你們一直就知道多層好,但苦於不知道怎麼訓練多層的模型,從而沒法應用。深度學習給出了一個切實可行的多層訓練方案,因此多層模型也開始普遍的應用了。函數

 

解決具體問題時,並非層數越多越好,對於不一樣問題,須要的層數是不同的。爲了可以實際的解決問題,須要的也不必定是更多的層數,有時候須要某一層有更多的神經元來解決複雜的問題。好比,一萬個神經元的系統,若是效率不高,只能表達一個簡單的數學函數。提升效率後,也許能達到一個昆蟲的智商。人類若是可以理解智能產生的結構,必定可以創造出比天然界生成的神經網絡更高效的智能網絡。學習

到這裏,答案彷佛已經明顯了。要產生智能,神經網絡彷佛必然是分層的。那麼大腦中是否是也有層次呢?答案並不是簡單的是或否。從比較宏觀的角度來看,大腦是分層的,好比感受神經、小腦、大腦都是比較清晰的層次。特別是在小腦中,神經元排布很是規律。具體到大腦,也是通常說的產生智能的新腦中,也發現了宏觀上的層次,好比視覺的處理,大概有平方釐米級的分層。因此宏觀上的分層是大腦處理信息的方式。在神經網絡微觀的神經元層次,並無清晰的分層的效果。大腦中的神經網絡就像是一團亂麻。神經網絡就像是電路同樣,用不少電線將元件聯繫起來。神經網絡走線的方式從很差的方面來講,走線是很是亂的,就像一個電路設計的初學者,實現了功能,但電路毫無規律和可讀性。從好的方面來看,神經網絡是三維的走線方式,對空間的利用率很是高。在電路設計中,即便是三維的走線方式,電路也是分層的,各層之間有鏈接點,這樣的電路設計纔是可複製的。spa

因此,大腦宏觀上是有層次的,但在微觀上是沒有清晰的層次的。現代的神經網絡算法中的層次都是爲了簡化模型的複雜度而存在的。但在簡化複雜度的同時,失去了靈活性。設計

 

不分層並不表示只有一層,而是構建一個自由連通的神經網絡,不用層次來約束它。這裏說的自由連通,不等於全連通。全連通的意思表示全部節點之間都有兩兩間的聯繫。一方面這個規模太大,近似於無窮。另外一方面從信息的處理角度來講,也沒有必要全連通。現代的神經網絡算法有不少將神經元之間的鏈接做爲稀疏矩陣來處理,也是相似的道理。不分層的系統在宏觀上仍然有可能表達出清晰的層次。在微觀上,直接連到輸入輸出上的神經元可稱爲第一層,這一層的神經元有可能鏈接到別的神經元,也有可能鏈接到本層,甚至有些神經元鏈接到本身上。深度學習

 

經過分層來理解世界是一個頗有效的模型。世界是由同樣的天然規律構成的,一方面不少相同的規律做用在了不一樣的物體上,另外一方面,天然規律在不一樣層次上也有不一樣的表現。好比原子、納米、更大尺度的物理,經典力學和量子力學都說明了不一樣層次上的規律的不一樣。數學

那麼不分層到底有什麼好處呢?有時候咱們的知識雖然能解決問題了,但並無掌握正確的層次關係,這時候就須要模糊的處理。另外,有些模式能夠跨越層次共享,這樣除了能夠進一步節省空間,也能進一步發現規律。另外,對於同一個輸入來講,通常不是全部的信息都能分出一樣多的層數。好比視覺中處理輪廓、顏色、對比度的模式就很難用一樣多的層數來處理。這時候,在初期分化出不一樣的處理模式後,它們各自的分層路徑就有區別了。效率

 

很明顯,一個不用分層的系統固然能夠解決更復雜的問題,但不分層的系統還有不少問題須要研究,好比:

  1. 信號收斂

投入應用的神經網絡都是能解決實際問題的,好的機器學習算法應該是能有效收斂的。這裏的收斂有兩方面,一方面,在可接受的訓練時間內神經網絡內的變化應該接近於穩定,另外一方面,神經網絡內的值不該都成爲極值(無窮大、無窮小、或者全0,全1)。對於分層的算法,在建模的過程當中有可能不收斂。因爲層次的限制,若是某一層在訓練中產生了振盪或者沒法收斂,就說明這一層要麼輸入輸出有問題,要麼算法、參數有問題。換句話說,問題在這一層,別的層不須要改動。在定位了這一層以後,就能夠試驗各類變化來穩定輸出。在不分層的結構中,若是產生了振盪,或者不收斂的狀況,很難看出是哪裏出了問題,應該如何修復。

人腦因爲能量供給總量有限,很難產生大規模的振盪。人腦內進行的能夠說都是化學反應,須要物質的轉化,雖然有些過程是可逆的,反應過程是須要能量的,因此若是神經元響應太頻繁,其能量消耗過多,就會減少其反應頻率。這是生物學上的特色,這對神經網絡的智能是促進仍是削弱還很難知道。但從如今的神經網絡研究來看,這些特性正好能解決信號振盪的問題。

這方面的研究有一個已有的方案:在小範圍內選舉出最活躍的神經元成爲激活的神經元,從而在大規模上產生簡化的特徵值。這樣,一方面能防止局部影響全局,另外一方面,每次激活的神經元總數有限,就不容易產生振盪。

另外,還有兩個方向,一種是肯定總的能激活的神經元數量,好比10%。上面的小範圍內選出活躍神經元是限制激活總數的一種方法。這個方案的挑戰是如何肯定這10%是有效的。另外一種,每一個神經元抑制本身的振盪,輸出的不僅是當前整合的結果還和歷史輸出值有關係。好比神經元可控制本身必定時間內的響應次數,若是必定時間內響應次數太多,則調整輸出的閾值,以減小單位時間內響應次數。

 

  1. 訓練方法

和信號收斂是相似的。在分層的系統中,要麼是BP的偏差往回一層層傳播,要麼是深度學習,一層一層的疊加訓練。這兩個方法看起來很不同,都能有效的解決如何調整神經網絡權重的問題。這兩個方法的相同之處是其訓練、調整是個往復交替過程,每一個訓練、調整的過程是相對獨立的。雖然前面的訓練結果產生的調整會影響後面的訓練,但每次調整都一次到位。

在不分層的系統中,訓練和調整能夠是往復交替的,也能夠是混合的。假設已經有了一個可以像人腦同樣徹底並行的系統。在第一個信號輸入以後,會到達和其直接相連的一組神經元,這時候是第一級神經元。等第一級神經元完成計算後,有些信號會傳播到下一級神經元,有些會還在第一級傳播,還有些甚至會傳播回本身。到第二個信號輸入以後,有些第一個信號的信息還存在於第一級神經元中,這些第一級神經元會直接完成先後兩個信號的整合。這一點對於時域的信號整合是很是有意義的。(關於時域上信號的整合,會有專門的討論。)

 

最後討論的問題是神經網絡是如何生成的。在現代的神經網絡算法中,網絡都是開始估計一個初值,在不斷地試驗中,肯定一個比較合適的規模。而生物的生長是從一個細胞開始分化的。人腦也並非一會兒產生了一個巨大的網絡,在這個過程當中,神經細胞應該也是很早就開始了不停的活動,DNA和人的生長過程共同決定了人腦的結構,而不只僅是DNA。好比,小腦的造成多是由於其處於身體和大腦之間,因爲生長過程當中感受和運動神經末梢不停的刺激,才造成了其獨特的結構。在大腦中,因爲子宮環境比較簡單,大腦能獲得的信息單一,但也創建了基本輸入輸出的反射。因此,初生嬰兒就能對聲音和顏色有反應。隨着出生後輸入信息量的增多,嬰兒開始一層層的構建模式,最後一步步產生了智能。由此,神經網絡的層次及模式不是一開始就肯定的,是根據輸入、輸出的信息來決定的。是一個一邊訓練,一邊調整網絡結構、層次的過程。當前設計的系統都是有目的性的,因此可以根據全局的目標函數來調整和訓練模型。人類的智能的目的雖然尚未共識,但能夠先認爲人類智能是沒有目的的。人類智能的產生是一個自適應的過程,而不是由全局的目標函數來訓練的。僅依靠全局的信息,沒法指導微觀上每一個部分的分化,網絡的神經元分化和鏈接的調整都應該主要依賴於其局部信息。

相關文章
相關標籤/搜索