1. 神經網路的工作原理
「人腦是如何工作的?」
「人類能否製作模擬人腦的人工神經元?」
多少年以來,人們從醫學、生物學、生理學、哲學、信息學、計算機科學、認知學、組織協同學等各個角度企圖認識並解答上述問題。在尋找上述問題答案的研究過程中,逐漸形成了一個新興的多學科交叉技術領域,稱之為「神經網路」。神經網路的研究涉及眾多學科領域,這些領域互相結合、相互滲透並相互推動。不同領域的科學家又從各自學科的興趣與特色出發,提出不同的問題,從不同的角度進行研究。
人工神經網路首先要以一定的學習准則進行學習,然後才能工作。現以人工神經網路對於寫「A」、「B」兩個字母的識別為例進行說明,規定當「A」輸入網路時,應該輸出「1」,而當輸入為「B」時,輸出為「0」。
所以網路學習的准則應該是:如果網路作出錯誤的判決,則通過網路的學習,應使得網路減少下次犯同樣錯誤的可能性。首先,給網路的各連接權值賦予(0,1)區間內的隨機值,將「A」所對應的圖象模式輸入給網路,網路將輸入模式加權求和、與門限比較、再進行非線性運算,得到網路的輸出。在此情況下,網路輸出為「1」和「0」的概率各為50%,也就是說是完全隨機的。這時如果輸出為「1」(結果正確),則使連接權值增大,以便使網路再次遇到「A」模式輸入時,仍然能作出正確的判斷。
普通計算機的功能取決於程序中給出的知識和能力。顯然,對於智能活動要通過總結編製程序將十分困難。
人工神經網路也具有初步的自適應與自組織能力。在學習或訓練過程中改變突觸權重值,以適應周圍環境的要求。同一網路因學習方式及內容不同可具有不同的功能。人工神經網路是一個具有學習能力的系統,可以發展知識,以致超過設計者原有的知識水平。通常,它的學習訓練方式可分為兩種,一種是有監督或稱有導師的學習,這時利用給定的樣本標准進行分類或模仿;另一種是無監督學習或稱無為導師學習,這時,只規定學習方式或某些規則,則具體的學習內容隨系統所處環境 (即輸入信號情況)而異,系統可以自動發現環境特徵和規律性,具有更近似人腦的功能。
神經網路就像是一個愛學習的孩子,您教她的知識她是不會忘記而且會學以致用的。我們把學習集(Learning Set)中的每個輸入加到神經網路中,並告訴神經網路輸出應該是什麼分類。在全部學習集都運行完成之後,神經網路就根據這些例子總結出她自己的想法,到底她是怎麼歸納的就是一個黑盒了。之後我們就可以把測試集(Testing Set)中的測試例子用神經網路來分別作測試,如果測試通過(比如80%或90%的正確率),那麼神經網路就構建成功了。我們之後就可以用這個神經網路來判斷事務的分類了。
神經網路是通過對人腦的基本單元——神經元的建模和聯接,探索模擬人腦神經系統功能的模型,並研製一種具有學習、聯想、記憶和模式識別等智能信息處理功能的人工系統。神經網路的一個重要特性是它能夠從環境中學習,並把學習的結果分布存儲於網路的突觸連接中。神經網路的學習是一個過程,在其所處環境的激勵下,相繼給網路輸入一些樣本模式,並按照一定的規則(學習演算法)調整網路各層的權值矩陣,待網路各層權值都收斂到一定值,學習過程結束。然後我們就可以用生成的神經網路來對真實數據做分類。
2. 有人可以介紹一下什麼是"神經網路"嗎
由於神經網路是多學科交叉的產物,各個相關的學科領域對神經網路
都有各自的看法,因此,關於神經網路的定義,在科學界存在許多不同的
見解。目前使用得最廣泛的是T.Koholen的定義,即"神經網路是由具有適
應性的簡單單元組成的廣泛並行互連的網路,它的組織能夠模擬生物神經
系統對真實世界物體所作出的交互反應。"
如果我們將人腦神經信息活動的特點與現行馮·諾依曼計算機的工作方
式進行比較,就可以看出人腦具有以下鮮明特徵:
1. 巨量並行性。
在馮·諾依曼機中,信息處理的方式是集中、串列的,即所有的程序指
令都必須調到CPU中後再一條一條地執行。而人在識別一幅圖像或作出一項
決策時,存在於腦中的多方面的知識和經驗會同時並發作用以迅速作出解答。
據研究,人腦中約有多達10^(10)~10^(11)數量級的神經元,每一個神經元
具有103數量級的連接,這就提供了巨大的存儲容量,在需要時能以很高的
反應速度作出判斷。
2. 信息處理和存儲單元結合在一起。
在馮·諾依曼機中,存儲內容和存儲地址是分開的,必須先找出存儲器的
地址,然後才能查出所存儲的內容。一旦存儲器發生了硬體故障,存儲器中
存儲的所有信息就都將受到毀壞。而人腦神經元既有信息處理能力又有存儲
功能,所以它在進行回憶時不僅不用先找存儲地址再調出所存內容,而且可
以由一部分內容恢復全部內容。當發生"硬體"故障(例如頭部受傷)時,並
不是所有存儲的信息都失效,而是僅有被損壞得最嚴重的那部分信息丟失。
3. 自組織自學習功能。
馮·諾依曼機沒有主動學習能力和自適應能力,它只能不折不扣地按照
人們已經編制好的程序步驟來進行相應的數值計算或邏輯計算。而人腦能夠
通過內部自組織、自學習的能力,不斷地適應外界環境,從而可以有效地處
理各種模擬的、模糊的或隨機的問題。
神經網路研究的主要發展過程大致可分為四個階段:
1. 第一階段是在五十年代中期之前。
西班牙解剖學家Cajal於十九世紀末創立了神經元學說,該學說認為神經
元的形狀呈兩極,其細胞體和樹突從其他神經元接受沖動,而軸索則將信號
向遠離細胞體的方向傳遞。在他之後發明的各種染色技術和微電極技術不斷
提供了有關神經元的主要特徵及其電學性質。
1943年,美國的心理學家W.S.McCulloch和數學家W.A.Pitts在論文《神經
活動中所蘊含思想的邏輯活動》中,提出了一個非常簡單的神經元模型,即
M-P模型。該模型將神經元當作一個功能邏輯器件來對待,從而開創了神經
網路模型的理論研究。
1949年,心理學家D.O. Hebb寫了一本題為《行為的組織》的書,在這本
書中他提出了神經元之間連接強度變化的規則,即後來所謂的Hebb學習法則。
Hebb寫道:"當神經細胞A的軸突足夠靠近細胞B並能使之興奮時,如果A重
復或持續地激發B,那麼這兩個細胞或其中一個細胞上必然有某種生長或代
謝過程上的變化,這種變化使A激活B的效率有所增加。"簡單地說,就是
如果兩個神經元都處於興奮狀態,那麼它們之間的突觸連接強度將會得到增
強。
五十年代初,生理學家Hodykin和數學家Huxley在研究神經細胞膜等效電
路時,將膜上離子的遷移變化分別等效為可變的Na+電阻和K+電阻,從而建
立了著名的Hodykin-Huxley方程。
這些先驅者的工作激發了許多學者從事這一領域的研究,從而為神經計
算的出現打下了基礎。
2. 第二階段從五十年代中期到六十年代末。
1958年,F.Rosenblatt等人研製出了歷史上第一個具有學習型神經網路
特點的模式識別裝置,即代號為Mark I的感知機(Perceptron),這一重
大事件是神經網路研究進入第二階段的標志。對於最簡單的沒有中間層的
感知機,Rosenblatt證明了一種學習演算法的收斂性,這種學習演算法通過迭代
地改變連接權來使網路執行預期的計算。
稍後於Rosenblatt,B.Widrow等人創造出了一種不同類型的會學習的神經
網路處理單元,即自適應線性元件Adaline,並且還為Adaline找出了一種有
力的學習規則,這個規則至今仍被廣泛應用。Widrow還建立了第一家神經計
算機硬體公司,並在六十年代中期實際生產商用神經計算機和神經計算機軟
件。
除Rosenblatt和Widrow外,在這個階段還有許多人在神經計算的結構和
實現思想方面作出了很大的貢獻。例如,K.Steinbuch研究了稱為學習矩陣
的一種二進制聯想網路結構及其硬體實現。N.Nilsson於1965年出版的
《機器學習》一書對這一時期的活動作了總結。
3. 第三階段從六十年代末到八十年代初。
第三階段開始的標志是1969年M.Minsky和S.Papert所著的《感知機》一書
的出版。該書對單層神經網路進行了深入分析,並且從數學上證明了這種網
絡功能有限,甚至不能解決象"異或"這樣的簡單邏輯運算問題。同時,他們
還發現有許多模式是不能用單層網路訓練的,而多層網路是否可行還很值得
懷疑。
由於M.Minsky在人工智慧領域中的巨大威望,他在論著中作出的悲觀結論
給當時神經網路沿感知機方向的研究潑了一盆冷水。在《感知機》一書出版
後,美國聯邦基金有15年之久沒有資助神經網路方面的研究工作,前蘇聯也
取消了幾項有前途的研究計劃。
但是,即使在這個低潮期里,仍有一些研究者繼續從事神經網路的研究工
作,如美國波士頓大學的S.Grossberg、芬蘭赫爾辛基技術大學的T.Kohonen
以及日本東京大學的甘利俊一等人。他們堅持不懈的工作為神經網路研究的
復興開辟了道路。
4. 第四階段從八十年代初至今。
1982年,美國加州理工學院的生物物理學家J.J.Hopfield採用全互連型
神經網路模型,利用所定義的計算能量函數,成功地求解了計算復雜度為
NP完全型的旅行商問題(Travelling Salesman Problem,簡稱TSP)。這
項突破性進展標志著神經網路方面的研究進入了第四階段,也是蓬勃發展
的階段。
Hopfield模型提出後,許多研究者力圖擴展該模型,使之更接近人腦的
功能特性。1983年,T.Sejnowski和G.Hinton提出了"隱單元"的概念,並且
研製出了Boltzmann機。日本的福島邦房在Rosenblatt的感知機的基礎上,
增加隱層單元,構造出了可以實現聯想學習的"認知機"。Kohonen應用3000
個閾器件構造神經網路實現了二維網路的聯想式學習功能。1986年,
D.Rumelhart和J.McClelland出版了具有轟動性的著作《並行分布處理-認知
微結構的探索》,該書的問世宣告神經網路的研究進入了高潮。
1987年,首屆國際神經網路大會在聖地亞哥召開,國際神經網路聯合會
(INNS)成立。隨後INNS創辦了刊物《Journal Neural Networks》,其他
專業雜志如《Neural Computation》,《IEEE Transactions on Neural
Networks》,《International Journal of Neural Systems》等也紛紛
問世。世界上許多著名大學相繼宣布成立神經計算研究所並制訂有關教育
計劃,許多國家也陸續成立了神經網路學會,並召開了多種地區性、國際性
會議,優秀論著、重大成果不斷涌現。
今天,在經過多年的准備與探索之後,神經網路的研究工作已進入了決
定性的階段。日本、美國及西歐各國均制訂了有關的研究規劃。
日本制訂了一個"人類前沿科學計劃"。這項計劃為期15-20年,僅
初期投資就超過了1萬億日元。在該計劃中,神經網路和腦功能的研究佔有
重要地位,因為所謂"人類前沿科學"首先指的就是有關人類大腦以及通過
借鑒人腦而研製新一代計算機的科學領域。
在美國,神經網路的研究得到了軍方的強有力的支持。美國國防部投資
4億美元,由國防部高級研究計劃局(DAPRA)制訂了一個8年研究計劃,
並成立了相應的組織和指導委員會。同時,海軍研究辦公室(ONR)、空軍
科研辦公室(AFOSR)等也紛紛投入巨額資金進行神經網路的研究。DARPA認
為神經網路"看來是解決機器智能的唯一希望",並認為"這是一項比原子彈
工程更重要的技術"。美國國家科學基金會(NSF)、國家航空航天局(NASA)
等政府機構對神經網路的發展也都非常重視,它們以不同的形式支持了眾多
的研究課題。
歐共體也制訂了相應的研究計劃。在其ESPRIT計劃中,就有一個項目是
"神經網路在歐洲工業中的應用",除了英、德兩國的原子能機構外,還有多
個歐洲大公司卷進這個研究項目,如英國航天航空公司、德國西門子公司等。
此外,西歐一些國家還有自己的研究計劃,如德國從1988年就開始進行一個
叫作"神經資訊理論"的研究計劃。
我國從1986年開始,先後召開了多次非正式的神經網路研討會。1990年
12月,由中國計算機學會、電子學會、人工智慧學會、自動化學會、通信學
會、物理學會、生物物理學會和心理學會等八個學會聯合在北京召開了"中
國神經網路首屆學術會議",從而開創了我國神經網路研究的新紀元。
3. 神經網路淺談
人工智慧技術是當前炙手可熱的話題,而基於神經網路的深度學習技術更是熱點中的熱點。去年穀歌的Alpha Go 以4:1大比分的優勢戰勝韓國的李世石九段,展現了深度學習的強大威力,後續強化版的Alpha Master和無師自通的Alpha Zero更是在表現上完全碾壓前者。不論你怎麼看,以深度學習為代表的人工智慧技術正在塑造未來。
下圖為英偉達(NVIDIA)公司近年來的股價情況, 該公司的主要產品是「圖形處理器」(GPU),而GPU被證明能大大加快神經網路的訓練速度,是深度學習必不可少的計算組件。英偉達公司近年來股價的飛漲足以證明當前深度學習的井噴之勢。
好,話不多說,下面簡要介紹神經網路的基本原理、發展脈絡和優勢。
神經網路是一種人類由於受到生物神經細胞結構啟發而研究出的一種演算法體系,是機器學習演算法大類中的一種。首先讓我們來看人腦神經元細胞:
一個神經元通常具有多個樹突 ,主要用來接受傳入信息,而軸突只有一條,軸突尾端有許多軸突末梢,可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號。
下圖是一個經典的神經網路(Artificial Neural Network,ANN):
乍一看跟傳統互聯網的拓撲圖有點類似,這也是稱其為網路的原因,不同的是節點之間通過有向線段連接,並且節點被分成三層。我們稱圖中的圓圈為神經元,左邊三個神經元組成的一列為輸入層,中間神經元列為隱藏層,右邊神經元列為輸出層,神經元之間的箭頭為權重。
神經元是計算單元,相當於神經元細胞的細胞核,利用輸入的數據進行計算,然後輸出,一般由一個線性計算部分和一個非線性計算部分組成;輸入層和輸出層實現數據的輸入輸出,相當於細胞的樹突和軸突末梢;隱藏層指既不是輸入也不是輸出的神經元層,一個神經網路可以有很多個隱藏層。
神經網路的關鍵不是圓圈代表的神經元,而是每條連接線對應的權重。每條連接線對應一個權重,也就是一個參數。權重具體的值需要通過神經網路的訓練才能獲得。我們實際生活中的學習體現在大腦中就是一系列神經網路迴路的建立與強化,多次重復的學習能讓迴路變得更加粗壯,使得信號的傳遞速度加快,最後對外表現為「深刻」的記憶。人工神經網路的訓練也借鑒於此,如果某種映射關系出現很多次,那麼在訓練過程中就相應調高其權重。
1943年,心理學家McCulloch和數學家Pitts參考了生物神經元的結構,發表了抽象的神經元模型MP:
符號化後的模型如下:
Sum函數計算各權重與輸入乘積的線性組合,是神經元中的線性計算部分,而sgn是取符號函數,當輸入大於0時,輸出1,反之輸出0,是神經元中的非線性部分。向量化後的公式為z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。
但是,MP模型中,權重的值都是預先設置的,因此不能學習。該模型雖然簡單,並且作用有限,但已經建立了神經網路大廈的地基
1958年,計算科學家Rosenblatt提出了由兩層神經元組成(一個輸入層,一個輸出層)的神經網路。他給它起了一個名字–「感知器」(Perceptron)
感知器是當時首個可以學習的人工神經網路。Rosenblatt現場演示了其學習識別簡單圖像的過程,在當時引起了轟動,掀起了第一波神經網路的研究熱潮。
但感知器只能做簡單的線性分類任務。1969年,人工智慧領域的巨擘Minsky指出這點,並同時指出感知器對XOR(異或,即兩個輸入相同時輸出0,不同時輸出1)這樣的簡單邏輯都無法解決。所以,明斯基認為神經網路是沒有價值的。
隨後,神經網路的研究進入低谷,又稱 AI Winter 。
Minsky說過單層神經網路無法解決異或問題,但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。
下圖為兩層神經網路(輸入層一般不算在內):
上圖中,輸出層的輸入是上一層的輸出。
向量化後的公式為:
注意:
每個神經元節點默認都有偏置變數b,加上偏置變數後的計算公式為:
同時,兩層神經網路不再使用sgn函數作為激勵函數,而採用平滑的sigmoid函數:
σ(z)=1/(1+e^(-z) )
其圖像如下:
理論證明: 兩層及以上的神經網路可以無限逼近真實的對應函數,從而模擬數據之間的真實關系 ,這是神經網路強大預測能力的根本。但兩層神經網路的計算量太大,當時的計算機的計算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的復雜計算量問題,帶動了業界使用兩層神經網路研究的熱潮。
但好景不長,演算法的改進僅使得神經網路風光了幾年,然而計算能力不夠,局部最優解,調參等一系列問題一直困擾研究人員。90年代中期,由Vapnik等人發明的SVM(Support Vector Machines,支持向量機)演算法誕生,很快就在若干個方面體現出了對比神經網路的優勢:無需調參;高效;全局最優解。
由於以上原因,SVM迅速打敗了神經網路演算法成為主流。神經網路的研究再一次進入低谷, AI Winter again 。
多層神經網路一般指兩層或兩層以上的神經網路(不包括輸入層),更多情況下指兩層以上的神經網路。
2006年,Hinton提出使用 預訓練 」(pre-training)和「微調」(fine-tuning)技術能優化神經網路訓練,大幅度減少訓練多層神經網路的時間
並且,他給多層神經網路相關的學習方法賦予了一個新名詞–「 深度學習 」,以此為起點,「深度學習」紀元開始了:)
「深度學習」一方面指神經網路的比較「深」,也就是層數較多;另一方面也可以指神經網路能學到很多深層次的東西。研究發現,在權重參數不變的情況下,增加神經網路的層數,能增強神經網路的表達能力。
但深度學習究竟有多強大呢?沒人知道。2012年,Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點,充分證明了多層神經網路識別效果的優越性。
同時,科研人員發現GPU的大規模並行矩陣運算模式完美地契合神經網路訓練的需要,在同等情況下,GPU的速度要比CPU快50-200倍,這使得神經網路的訓練時間大大減少,最終再一次掀起了神經網路研究的熱潮,並且一直持續到現在。
2016年基於深度學習的Alpha Go在圍棋比賽中以4:1的大比分優勢戰勝了李世石,深度學習的威力再一次震驚了世界。
神經網路的發展歷史曲折盪漾,既有被捧上神壇的高潮,也有無人問津的低谷,中間經歷了數次大起大落,我們姑且稱之為「三起三落」吧,其背後則是演算法的改進和計算能力的持續發展。
下圖展示了神經網路自發明以來的發展情況及一些重大時間節點。
當然,對於神經網路我們也要保持清醒的頭腦。由上圖,每次神經網路研究的興盛期持續10年左右,從最近2012年算起,或許10年後的2022年,神經網路的發展將再次遇到瓶頸。
神經網路作為機器學習的一種,其模型訓練的目的,就是使得參數盡可能的與真實的模型逼近。理論證明,兩層及以上的神經網路可以無限逼近真實的映射函數。因此,給定足夠的訓練數據和訓練時間,總能通過神經網路找到無限逼近真實關系的模型。
具體做法:首先給所有權重參數賦上隨機值,然後使用這些隨機生成的參數值,來預測訓練數據中的樣本。假設樣本的預測目標為yp ,真實目標為y,定義值loss,計算公式如下:
loss = (yp -y) ^2
這個值稱之為 損失 (loss),我們的目標就是使對所有訓練數據的損失和盡可能的小,這就轉化為求loss函數極值的問題。
一個常用方法是高等數學中的求導,但由於參數不止一個,求導後計算導數等於0的運算量很大,所以常用梯度下降演算法來解決這樣的優化問題。梯度是一個向量,由函數的各自變數的偏導數組成。
比如對二元函數 f =(x,y),則梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函數值上升最快的方向。梯度下降演算法每次計算參數在當前的梯度,然後讓參數向著梯度的反方向前進一段距離,不斷重復,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。下圖為梯度下降的大致運行過程:
在神經網路模型中,由於結構復雜,每次計算梯度的代價很大。因此還需要使用 反向傳播 (Back Propagation)演算法。反向傳播演算法利用了神經網路的結構進行計算,不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接著是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個參數矩陣的梯度就都有了。當然,梯度下降只是其中一個優化演算法,其他的還有牛頓法、RMSprop等。
確定loss函數的最小值後,我們就確定了整個神經網路的權重,完成神經網路的訓練。
在神經網路中一樣的參數數量,可以用更深的層次去表達。
由上圖,不算上偏置參數的話,共有三層神經元,33個權重參數。
由下圖,保持權重參數不變,但增加了兩層神經元。
在多層神經網路中,每一層的輸入是前一層的輸出,相當於在前一層的基礎上學習,更深層次的神經網路意味著更深入的表示特徵,以及更強的函數模擬能力。更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。
如上圖,第一個隱藏層學習到「邊緣」的特徵,第二個隱藏層學習到「邊緣」組成的「形狀」的特徵,第三個隱藏層學習到由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到由「圖案」組成的「目標」的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。
前面提到, 明斯基認為Rosenblatt提出的感知器模型不能處理最簡單的「異或」(XOR)非線性問題,所以神經網路的研究沒有前途,但當增加一層神經元後,異或問題得到了很好地解決,原因何在?原來從輸入層到隱藏層,數據發生了空間變換,坐標系發生了改變,因為矩陣運算本質上就是一種空間變換。
如下圖,紅色和藍色的分界線是最終的分類結果,可以看到,該分界線是一條非常平滑的曲線。
但是,改變坐標系後,分界線卻表現為直線,如下圖:
同時,非線性激勵函數的引入使得神經網路對非線性問題的表達能力大大加強。
對於傳統的樸素貝葉斯、決策樹、支持向量機SVM等分類器,提取特徵是一個非常重要的前置工作。在正式訓練之前,需要花費大量的時間在數據的清洗上,這樣分類器才能清楚地知道數據的維度,要不然基於概率和空間距離的線性分類器是沒辦法進行工作的。然而在神經網路中,由於巨量的線性分類器的堆疊(並行和串列)以及卷積神經網路的使用,它對雜訊的忍耐能力、對多通道數據上投射出來的不同特徵偏向的敏感程度會自動重視或忽略,這樣我們在處理的時候,就不需要使用太多的技巧用於數據的清洗了。有趣的是,業內大佬常感嘆,「你可能知道SVM等機器學習的所有細節,但是效果並不好,而神經網路更像是一個黑盒,很難知道它究竟在做什麼,但工作效果卻很好」。
人類對機器學習的環節干預越少,就意味著距離人工智慧的方向越近。神經網路的這個特性非常有吸引力。
1) 谷歌的TensorFlow開發了一個非常有意思的神經網路 入門教程 ,用戶可以非常方便地在網頁上更改神經網路的參數,並且能看到實時的學習效率和結果,非常適合初學者掌握神經網路的基本概念及神經網路的原理。網頁截圖如下:
2) 深度學習領域大佬吳恩達不久前發布的《 神經網路和深度學習 》MOOC,現在可以在網易雲課堂上免費觀看了,並且還有中文字幕。
3) 《神經網路於深度學習》(Michael Nielsen著)、《白話深度學習與TensorFlow》也是不錯的入門書籍。
4. 神經網路具體是什麼
神經網路由大量的神經元相互連接而成。每個神經元接受線性組合的輸入後,最開始只是簡單的線性加權,後來給每個神經元加上了非線性的激活函數,從而進行非線性變換後輸出。每兩個神經元之間的連接代表加權值,稱之為權重(weight)。不同的權重和激活函數,則會導致神經網路不同的輸出。 舉個手寫識別的例子,給定一個未知數字,讓神經網路識別是什麼數字。此時的神經網路的輸入由一組被輸入圖像的像素所激活的輸入神經元所定義。在通過非線性激活函數進行非線性變換後,神經元被激活然後被傳遞到其他神經元。重復這一過程,直到最後一個輸出神經元被激活。從而識別當前數字是什麼字。 神經網路的每個神經元如下
基本wx + b的形式,其中 x1、x2表示輸入向量 w1、w2為權重,幾個輸入則意味著有幾個權重,即每個輸入都被賦予一個權重 b為偏置bias g(z) 為激活函數 a 為輸出 如果只是上面這樣一說,估計以前沒接觸過的十有八九又必定迷糊了。事實上,上述簡單模型可以追溯到20世紀50/60年代的感知器,可以把感知器理解為一個根據不同因素、以及各個因素的重要性程度而做決策的模型。 舉個例子,這周末北京有一草莓音樂節,那去不去呢?決定你是否去有二個因素,這二個因素可以對應二個輸入,分別用x1、x2表示。此外,這二個因素對做決策的影響程度不一樣,各自的影響程度用權重w1、w2表示。一般來說,音樂節的演唱嘉賓會非常影響你去不去,唱得好的前提下 即便沒人陪同都可忍受,但如果唱得不好還不如你上台唱呢。所以,我們可以如下表示: x1:是否有喜歡的演唱嘉賓。x1 = 1 你喜歡這些嘉賓,x1 = 0 你不喜歡這些嘉賓。嘉賓因素的權重w1 = 7 x2:是否有人陪你同去。x2 = 1 有人陪你同去,x2 = 0 沒人陪你同去。是否有人陪同的權重w2 = 3。 這樣,咱們的決策模型便建立起來了:g(z) = g(w1x1 + w2x2 + b ),g表示激活函數,這里的b可以理解成 為更好達到目標而做調整的偏置項。 一開始為了簡單,人們把激活函數定義成一個線性函數,即對於結果做一個線性變化,比如一個簡單的線性激活函數是g(z) = z,輸出都是輸入的線性變換。後來實際應用中發現,線性激活函數太過局限,於是引入了非線性激活函數。
5. 神經網路是什麼
神經網路是一種以人腦為模型的機器學習,簡單地說就是創造一個人工神經網路,通過一種演算法允許計算機通過合並新的數據來學習。
神經網路簡單說就是通過一種演算法允許計算機通過合並新的數據來學習!
6. 如何訓練神經網路
1、先別著急寫代碼
訓練神經網路前,別管代碼,先從預處理數據集開始。我們先花幾個小時的時間,了解數據的分布並找出其中的規律。
Andrej有一次在整理數據時發現了重復的樣本,還有一次發現了圖像和標簽中的錯誤。所以先看一眼數據能避免我們走很多彎路。
由於神經網路實際上是數據集的壓縮版本,因此您將能夠查看網路(錯誤)預測並了解它們的來源。如果你的網路給你的預測看起來與你在數據中看到的內容不一致,那麼就會有所收獲。
一旦從數據中發現規律,可以編寫一些代碼對他們進行搜索、過濾、排序。把數據可視化能幫助我們發現異常值,而異常值總能揭示數據的質量或預處理中的一些錯誤。
2、設置端到端的訓練評估框架
處理完數據集,接下來就能開始訓練模型了嗎?並不能!下一步是建立一個完整的訓練+評估框架。
在這個階段,我們選擇一個簡單又不至於搞砸的模型,比如線性分類器、CNN,可視化損失。獲得准確度等衡量模型的標准,用模型進行預測。
這個階段的技巧有:
· 固定隨機種子
使用固定的隨機種子,來保證運行代碼兩次都獲得相同的結果,消除差異因素。
· 簡單化
在此階段不要有任何幻想,不要擴增數據。擴增數據後面會用到,但是在這里不要使用,現在引入只會導致錯誤。
· 在評估中添加有效數字
在繪制測試集損失時,對整個測試集進行評估,不要只繪制批次測試損失圖像,然後用Tensorboard對它們進行平滑處理。
· 在初始階段驗證損失函數
驗證函數是否從正確的損失值開始。例如,如果正確初始化最後一層,則應在softmax初始化時測量-log(1/n_classes)。
· 初始化
正確初始化最後一層的權重。如果回歸一些平均值為50的值,則將最終偏差初始化為50。如果有一個比例為1:10的不平衡數據集,請設置對數的偏差,使網路預測概率在初始化時為0.1。正確設置這些可以加速模型的收斂。
· 人類基線
監控除人為可解釋和可檢查的損失之外的指標。盡可能評估人的准確性並與之進行比較。或者對測試數據進行兩次注釋,並且對於每個示例,將一個注釋視為預測,將第二個注釋視為事實。
· 設置一個獨立於輸入的基線
最簡單的方法是將所有輸入設置為零,看看模型是否學會從輸入中提取任何信息。
· 過擬合一個batch
增加了模型的容量並驗證我們可以達到的最低損失。
· 驗證減少訓練損失
嘗試稍微增加數據容量。
7. 神經網路演算法是用來干什麼的
神經網路演算法是由多個神經元組成的演算法網路。
邏輯性的思維是指根據邏輯規則進行推理的過程;它先將信息化成概念,並用符號表示,然後,根據符號運算按串列模式進行邏輯推理;這一過程可以寫成串列的指令,讓計算機執行。然而,直觀性的思維是將分布式存儲的信息綜合起來,結果是忽然間產生的想法或解決問題的辦法。這種思維方式的根本之點在於以下兩點:
1、信息是通過神經元上的興奮模式分布儲在網路上。
2、信息處理是通過神經元之間同時相互作用的動態過程來完成的。
思維學普遍認為,人類大腦的思維分為抽象(邏輯)思維、形象(直觀)思維和靈感(頓悟)思維三種基本方式。
8. 人工神經網路是怎麼學習的呢
1、神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路里的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜索演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等)。 2、這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜索方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函數的輸出(在神經網路中就是預測誤差)下降。 3、然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函數(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函數(預測誤差)比較小。 4、而在尋解過程中,步長太大,就會搜索得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設置適當非常重要。 5、學習率對原步長(在梯度下降法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度, 6、而在matlab神經網路工具箱里的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智能的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函數帶來的效果來對學習率作調整,再根據學習率決定步長。
9. 神經網路是什麼
神經網路可以指向兩種,一個是生物神經網路,一個是人工神經網路。
生物神經網路:一般指生物的大腦神經元,細胞,觸點等組成的網路,用於產生生物的意識,幫助生物進行思考和行動。
人工神經網路(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經網路(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
人工神經網路:是一種應用類似於大腦神經突觸聯接的結構進行信息處理的數學模型。在工程與學術界也常直接簡稱為「神經網路」或類神經網路。