人工神經網路概念梳理與例項演示
引言
這段時間花了不少精力在瞭解人工神經網路(ANN),對其設計思想和基本演算法有了一定的瞭解,把相關知識整理如下,一方面梳理思路,增強理解,另一方面也希望對想了解ANN的人有點幫助。
1 時代大背景
首先,我們瞭解以下人工神經網路的發展歷史。
1943年,神經科學家和控制論專家Warren McCulloch和邏輯學家Walter Pitts基於數學和閾值邏輯演算法創造了一種神經網路計算模型; 1957年,心理學家Frank Rosenblatt創造了模式識別演算法感知機,用簡單的加減演算法實現了兩層的計算機學習網路; 1974年,Paul Werbos在博士論文中提出了用誤差反向傳導來訓練人工神經網路有效解決了異或迴路問題,使得訓練多層神經網路稱為可能; 1985年,Rumelhart和McClelland提出了BP網路誤差反向傳播學習演算法; 1998年,以Yann Lecun為首的研究人員實現了一個七層的卷積神經網路LeNet-5識別手寫數字; 2006年,以Geoffrey Hinton為代表的加拿大高等研究院附屬機構的研究人員開始將人工神經網路/聯結主義重新包裝為深度學習並進行推廣; 2009-2012年,瑞士人工智慧實驗室IDSIA發展了遞迴神經網路和深前饋神經網路; 2012年,Geoffrey Hinton組的研究人員在ImageNet2012上奪冠,他們的影象分類效果遠遠超過了第二名,深度學習熱潮由此開始一直持續到現在;
備註:ImageNet 是一個計算機視覺系統識別專案, 是目前世界上影象識別最大的資料庫。
由此可知,對神經網路的研究是由來已久,50年代就有了感知機模型,是一種兩層神經網路,90年代開始出現卷積神經網路,但是直到最近,隨著網際網路和大資料時代的到來,深度學習及神經網路的研究和應用得到廣泛的關注,越來越多的公司企業在投入這項事業。
資料爆炸
我們正身處資料爆炸的時代漩渦。網際網路公司每天的業務日誌、系統日誌都是PB級的。醫院裡的病例資料,每天的交通資料,運營商裡的通訊資料,智慧手機使用者的位置資料,甚至城市裡無處不在的監控資料。
但是,資料並不等於資訊!
沒有整理、清洗、分析處理、展示的資料,是沒有價值的,是無用的。因此,如何將資料轉化為資訊,進而轉化為知識,成為我們這個時代最迫切的需求之一。
在資料中獲取資訊的技術便是資料探勘——Data Mining!
越來越多的公司,從不同的維度,不同的切入點,進行資料探勘技術的研究,推進了不同技術的發展。SPSS、SAS是比較傳統的資料探勘工具,主要是從傳統統計學領域進行資料的整理和分析。Pentaho是個很好用的開源BI框架,能方便構建自己的商業決策系統。還有OLAP,OLTP技術。在儲存領域,分散式、並行處理資料庫,在近些年也如火如荼的發展,為大資料儲存和計算提供底層保障。還有資料倉庫技術。
而機器學習,則是從計算機模擬人類行為的角度,去推進資料探勘技術的發展。機器學習是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。除了資料探勘,還應用於計算機視覺、自然語言處理、生物特徵識別、搜尋引擎、醫學診斷、檢測信用卡欺詐、證券市場分析、DNA序列測序、語音和手寫識別、戰略遊戲和機器人運用等。
機器學習演算法
機器學習的演算法,主要可分為以下三類:
資訊理論:計算資料中屬性的資訊量,以資訊增量作為決策依據;決策樹演算法為代表,如ID3,IBLE演算法;(資訊量是概率倒數的對數)
集合論:聚類分析,相似度,距離演算法;
仿生物技術:把生物體的運轉過程轉換成數學模型,再用數學模型去解決現實世界的非生物問題,如神經網路、遺傳演算法!
總結
這就我們所處的時代背景——資料爆炸,怎麼樣去從資料裡獲得資訊呢?就需要進行資料探勘!資料探勘的需求催生了不同領域的技術進步,如統計工具,決策系統,資料儲存,機器學習演算法等!
而神經網路則是機器學習領域的重要演算法之一。
2 人工神經網路
人工神經網路(Artificial Neural Networks)是一種模仿生物神經網路行為特徵,進行分散式並行資訊處理的演算法數學模型。這種網路依靠系統的複雜程度,通過調整內部大量節點(神經元)之間相互連線的權重,從而達到處理資訊的目的。
生物,或者說人類,真的是被設計的無比精妙,有時候,會懷疑進化論的真實性,人類太複雜了,從猴子變成人,只用了幾百萬年?真的不可思議。
神經元結構
一個神經元可以通過軸突作用於成千上萬的神經元,也可以通過樹突從成千上萬的神經元接受資訊。
上級神經元的軸突在有電訊號傳導時釋放出化學遞質,作用於下一級神經元的樹突,樹突受到遞質作用後產生出電訊號,從而實現了神經元間的資訊傳遞。
化學遞質可以使下一級神經元興奮或抑制。
人工神經網路的重要概念:
1 權值矩陣:相當於神經網路的記憶!在訓練的過程中,動態調整和適應。
如巴普洛夫狗與鈴聲的實驗,神經記憶是可以訓練的。我們都應該有過這樣的經歷,某段時間心情不好,失戀了,一週或者一個月的時間,一直在聽某幾首歌。過了很久,或許幾年後,當再聽到那首歌的時候,竟能喚醒自己當時的記憶和感受。
神經網路,是非線性的,“因”與“果”非直接相關。貓可愛,所以愛貓,這是直接因果;但愛屋及烏,因為愛一個姑娘,也愛上了她的貓,就是間接相關了。神經網路非常善於處理這樣隱晦的關係。
《扁鵲見蔡桓公》中“君之疾在腠理,湯熨之所及也;在肌膚,針石之所及也;在腸胃,火齊之所及也;在骨髓,司命之所屬,無奈何也。今在骨髓,臣是以無請也”
扁鵲的大腦裡有一套面向醫理的神經網路,他可以預見生死!現代醫學,基本上是直來直去,拍個片,頭痛醫頭腳痛醫腳。問題是,不是所有的病都有症有狀。
可以這麼說,每個老中醫都是自帶一套神經網路在行醫,很玄乎,但是能治病,當然也容易渾水摸魚。
人工神經網路,真的就是很玄乎,能改變你認知世界和處理問題的方式!
2 激勵函式:
-- 非線性:
-- 可微性:能使用梯度下降法求極值!
-- 單調性:凸函式,嚴格凸函式最多有一個最小值!
-- f(x) x
-- 輸出範圍:輸出值控制在有限區間,
激勵函式很重要,無論是對建立神經網路的模型,還是理解神經網路。首先要了解,它有以下幾個影響:
1 如何能更好的求解目標函式的極值!——高等數學中求解函式極值的知識!可微,單調!
2 如何提升訓練效率,讓梯度的優化方法更穩定;
3 權值的初始值,不影響訓練結果!
BP神經網路的結構
BP神經網路,利用輸出後的誤差來估計輸出層的直接前導層的誤差,在用這個誤差估計更前一層的誤差,最終獲得所有各層的誤差估計。
與感知機不同,這是一個多層(>=3)的全連線(FC:Fully-Connected)網路。所謂的全連線,是指所有神經元節點,都與其上一層或下一層的所有節點都有連線!
目標函式,又稱為損失函式,用於衡量權值矩陣的誤差。當目標函式取極小值時,對應的權值矩陣最為理想,因此通過梯度下降法求多元目標函式極小值。
得到重要結論:每個權重的梯度都等於與其相連的前一層節點的輸出乘以與其相連的後一層的反向傳播的輸出。
求得權重的梯度後,就可以對權重矩陣進行修正,然後進行下一次的訓練!
通過該演示,可以直觀的感受到神經網路的魔力了!
概念
1 epoch:所有資料樣本完整的訓練一次;
2 batch:一次訓練使用的樣本數,batch_size * times = epoch_size,batch_size 會影響到模型的優化程度和速度,正確選擇batch_size 讓程式在記憶體效率和記憶體容量之間達到最佳平衡。
3 learning rate:學習率,梯度乘以學習率就是權值的修正值,學習率太小的話會訓練的慢,太大的或就不平滑;
注意觀察權值的變化,也就是連線線的粗細變化。很有意思,改變訓練模型,會發現不同的輸入元素的重要性也發生了變化。
很像中醫,不同的醫生開了不同的方子,卻可以治同樣的病。隨著神經網路研究的深入,或許未來某一天,人類可以發明一個機器神醫。人出生後,會通過穿戴裝置或晶片,收集所有的狀態資訊,溫度、血液中各成分濃度、情緒、飲食等等等等。以這樣一個全量資訊,去訓練機器醫生,怎麼樣?
聽人家說,老中醫帶徒弟,跟醫學院完全不同,就是手把手教,來了個孕婦,自己號完脈,再教徒弟號,記住了啊,這就是喜脈。
卷積與傅立葉變換
理解卷積之前,需要搞明白幾個概念: 時域,頻域,傅立葉變換,卷積定理。
大學時,學習工程數學、泛函分析、數字資訊,學的糊里糊塗,只為了應付考試,也不知道有什麼用,這段時間學習ANN,才感覺到數學基礎不夠用了。
頻域:橫座標頻率,縱座標振幅!!!!
時域:橫座標時間,縱座標投影!!!!
傅立葉變換:時域與頻域變換,將原來難以處理的時域訊號轉換成了易於分析的頻域訊號(訊號的頻譜),可以利用一些工具對這些頻域訊號進行處理、加工.最後還可以利用傅立葉反變換將這些頻域訊號轉換成時域訊號.
卷積定理:函式卷積的傅立葉變換是函式傅立葉變換的乘積,也就是說,在一個域中的卷積相當於另一個域中的乘積,例如時域中的卷積就對應與頻域中的乘積!
想有更多瞭解請參考: http://daily.zhihu.com/story/3935067
時域和頻域是一個很有意思的概念,時域是線性的,隨著時間這條線波動,而頻域是靜態。比如音樂,我們聽到的聲音是線性的,我們可以理解和感受音樂,而樂譜是靜態的,它描述了音樂的一切,從開始到結束。
去年有部電影叫《降臨》,裡面的外星人就是非線性思維,他們能預測未來,彷彿可以看到生命的頻譜。女主角在研究外星人的語言時,也漸漸獲得了這種能力。在她們看來,生命不再是一次探索,不再簡簡單單為了榮華富貴,而是像一首音樂,一首歌,明知道樂譜中描述了一切,還是安靜的欣賞,而不是去改變。
女主角,明知道女兒出生後會夭折,也仍然選擇按照預見的命運走完一生。不同的思維方式,決定了不同的行為方式!
卷積,也有一種魔力,就是可以讓我們在時域中做卷積運算,來達到變換頻域的效果。
卷積核與影象濾波
我們所看到的影象,均為空間域內的表現形式,我們無法辨識出影象的頻域形式。要進行頻域內的濾波器處理,首先就需要進行傅立葉變換,然後直接進行濾波處理,最後再用反傅立葉變換倒回到空間域內。
影象是一個二維的離散訊號,對影象卷積,就是求卷積核作用在影象後得到的影象對於卷積核的累加響應!
人看到一張影象,能瞬間獲取影象的資訊,但是計算機卻不能,計算機看到的影象是一個由畫素點組成的數字矩陣!如何從巨量的畫素矩陣資料中提取資訊呢?怎樣讓計算機理解影象的內容,識別影象呢?
對影象進行卷積,就是為了提取影象特徵!
先看看卷積的效果吧:
對兩個人像進行卷積:
卷積神經網路的結構示意圖:
經典的神經網路模型:
Lenet,1986年
Alexnet,2012年
GoogleNet,2014年
VGG,2014年
Deep Residual Learning,2015年
機器學習開源框架:
Caffe
Microsoft Cognitive Toolkit
MXNet
Scikit-learn
Spark Mllib
TensorFlow
Theano
Keras
DeepLearning4j
3 Keras 介紹與例項:
Keras是一個高層神經網路庫,Keras由純Python編寫而成並基Tensorflow或Theano;