A. 神經網路具體是什麼
神經網路由大量的神經元相互連接而成。每個神經元接受線性組合的輸入後,最開始只是簡單的線性加權,後來給每個神經元加上了非線性的激活函數,從而進行非線性變換後輸出。每兩個神經元之間的連接代表加權值,稱之為權重(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,輸出都是輸入的線性變換。後來實際應用中發現,線性激活函數太過局限,於是引入了非線性激活函數。
B. 神經網路參數如何確定
神經網路各個網路參數設定原則:
①、網路節點 網路輸入層神經元節點數就是系統的特徵因子(自變數)個數,輸出層神經元節點數就是系統目標個數。隱層節點選按經驗選取,一般設為輸入層節點數的75%。如果輸入層有7個節點,輸出層1個節點,那麼隱含層可暫設為5個節點,即構成一個7-5-1 BP神經網路模型。在系統訓練時,實際還要對不同的隱層節點數4、5、6個分別進行比較,最後確定出最合理的網路結構。
②、初始權值的確定 初始權值是不應完全相等的一組值。已經證明,即便確定 存在一組互不相等的使系統誤差更小的權值,如果所設Wji的的初始值彼此相等,它們將在學習過程中始終保持相等。故而,在程序中,我們設計了一個隨機發生器程序,產生一組一0.5~+0.5的隨機數,作為網路的初始權值。
③、最小訓練速率 在經典的BP演算法中,訓練速率是由經驗確定,訓練速率越大,權重變化越大,收斂越快;但訓練速率過大,會引起系統的振盪,因此,訓練速率在不導致振盪前提下,越大越好。因此,在DPS中,訓練速率會自動調整,並盡可能取大一些的值,但用戶可規定一個最小訓練速率。該值一般取0.9。
④、動態參數 動態系數的選擇也是經驗性的,一般取0.6 ~0.8。
⑤、允許誤差 一般取0.001~0.00001,當2次迭代結果的誤差小於該值時,系統結束迭代計算,給出結果。
⑥、迭代次數 一般取1000次。由於神經網路計算並不能保證在各種參數配置下迭代結果收斂,當迭代結果不收斂時,允許最大的迭代次數。
⑦、Sigmoid參數 該參數調整神經元激勵函數形式,一般取0.9~1.0之間。
⑧、數據轉換。在DPS系統中,允許對輸入層各個節點的數據進行轉換,提供轉換的方法有取對數、平方根轉換和數據標准化轉換。
(2)神經網路如何理解數字的概念擴展閱讀:
神經網路的研究內容相當廣泛,反映了多學科交叉技術領域的特點。主要的研究工作集中在以下幾個方面:
1.生物原型
從生理學、心理學、解剖學、腦科學、病理學等方面研究神經細胞、神經網路、神經系統的生物原型結構及其功能機理。
2.建立模型
根據生物原型的研究,建立神經元、神經網路的理論模型。其中包括概念模型、知識模型、物理化學模型、數學模型等。
3.演算法
在理論模型研究的基礎上構作具體的神經網路模型,以實現計算機模擬或准備製作硬體,包括網路學習演算法的研究。這方面的工作也稱為技術模型研究。
神經網路用到的演算法就是向量乘法,並且廣泛採用符號函數及其各種逼近。並行、容錯、可以硬體實現以及自我學習特性,是神經網路的幾個基本優點,也是神經網路計算方法與傳統方法的區別所在。
C. 一文讀懂神經網路
要說近幾年最引人注目的技術,無疑的,非人工智慧莫屬。無論你是否身處科技互聯網行業,隨處可見人工智慧的身影:從 AlphaGo 擊敗世界圍棋冠軍,到無人駕駛概念的興起,再到科技巨頭 All in AI,以及各大高校向社會輸送海量的人工智慧專業的畢業生。以至於人們開始萌生一個想法:新的革命就要來了,我們的世界將再次發生一次巨變;而後開始焦慮:我的工作是否會被機器取代?我該如何才能抓住這次革命?
人工智慧背後的核心技術是深度神經網路(Deep Neural Network),大概是一年前這個時候,我正在回老家的高鐵上學習 3Blue1Brown 的 Neural Network 系列視頻課程,短短 4 集 60 多分鍾的時間,就把神經網路從 High Level 到推導細節說得清清楚楚,當時的我除了獲得新知的興奮之外,還有一點新的認知,算是給頭腦中的革命性的技術潑了盆冷水:神經網路可以解決一些復雜的、以前很難通過寫程序來完成的任務——例如圖像、語音識別等,但它的實現機制告訴我,神經網路依然沒有達到生物級別的智能,短期內期待它來取代人也是不可能的。
一年後的今天,依然在這個春運的時間點,將我對神經網路的理解寫下來,算是對這部分知識的一個學習筆記,運氣好的話,還可以讓不了解神經網路的同學了解起來。
維基網路這樣解釋 神經網路 :
這個定義比較寬泛,你甚至還可以用它來定義其它的機器學習演算法,例如之前我們一起學習的邏輯回歸和 GBDT 決策樹。下面我們具體一點,下圖是一個邏輯回歸的示意圖:
其中 x1 和 x2 表示輸入,w1 和 w2 是模型的參數,z 是一個線性函數:
接著我們對 z 做一個 sigmod 變換(圖中藍色圓),得到輸出 y:
其實,上面的邏輯回歸就可以看成是一個只有 1 層 輸入層 , 1 層 輸出層 的神經網路,圖中容納數字的圈兒被稱作 神經元 ;其中,層與層之間的連接 w1、w2 以及 b,是這個 神經網路的參數 ,層之間如果每個神經元之間都保持著連接,這樣的層被稱為 全連接層 (Full Connection Layer),或 稠密層 (Dense Layer);此外,sigmoid 函數又被稱作 激活函數 (Activation Function),除了 sigmoid 外,常用的激活函數還有 ReLU、tanh 函數等,這些函數都起到將線性函數進行非線性變換的作用。我們還剩下一個重要的概念: 隱藏層 ,它需要把 2 個以上的邏輯回歸疊加起來加以說明:
如上圖所示,除輸入層和輸出層以外,其他的層都叫做 隱藏層 。如果我們多疊加幾層,這個神經網路又可以被稱作 深度神經網路 (Deep Neural Network),有同學可能會問多少層才算「深」呢?這個沒有絕對的定論,個人認為 3 層以上就算吧:)
以上,便是神經網路,以及神經網路中包含的概念,可見,神經網路並不特別,廣義上講,它就是
可見,神經網路和人腦神經也沒有任何關聯,如果我們說起它的另一個名字—— 多層感知機(Mutilayer Perceptron) ,就更不會覺得有多麼玄乎了,多層感知機創造於 80 年代,可為什麼直到 30 年後的今天才爆發呢?你想得沒錯,因為改了個名字……開個玩笑;實際上深度學習這項技術也經歷過很長一段時間的黑暗低谷期,直到人們開始利用 GPU 來極大的提升訓練模型的速度,以及幾個標志性的事件:如 AlphaGo戰勝李世石、Google 開源 TensorFlow 框架等等,感興趣的同學可以翻一下這里的歷史。
就拿上圖中的 3 個邏輯回歸組成的神經網路作為例子,它和普通的邏輯回歸比起來,有什麼優勢呢?我們先來看下單邏輯回歸有什麼劣勢,對於某些情況來說,邏輯回歸可能永遠無法使其分類,如下面數據:
這 4 個樣本畫在坐標系中如下圖所示
因為邏輯回歸的決策邊界(Decision Boundary)是一條直線,所以上圖中的兩個分類,無論你怎麼做,都無法找到一條直線將它們分開,但如果藉助神經網路,就可以做到這一點。
由 3 個邏輯回歸組成的網路(這里先忽略 bias)如下:
觀察整個網路的計算過程,在進入輸出層之前,該網路所做的計算實際上是:
即把輸入先做了一次線性變換(Linear Transformation),得到 [z1, z2] ,再把 [z1, z2] 做了一個非線性變換(sigmoid),得到 [x1', x2'] ,(線性變換的概念可以參考 這個視頻 )。從這里開始,後面的操作就和一個普通的邏輯回歸沒有任何差別了,所以它們的差異在於: 我們的數據在輸入到模型之前,先做了一層特徵變換處理(Feature Transformation,有時又叫做特徵抽取 Feature Extraction),使之前不可能被分類的數據變得可以分類了 。
我們繼續來看下特徵變換的效果,假設 為 ,帶入上述公式,算出 4 個樣本對應的 [x1', x2'] 如下:
再將變換後的 4 個點繪制在坐標系中:
顯然,在做了特徵變換之後,這兩個分類就可以很容易的被一條決策邊界分開了。
所以, 神經網路的優勢在於,它可以幫助我們自動的完成特徵變換或特徵提取 ,尤其對於聲音、圖像等復雜問題,因為在面對這些問題時,人們很難清晰明確的告訴你,哪些特徵是有用的。
在解決特徵變換的同時,神經網路也引入了新的問題,就是我們需要設計各式各樣的網路結構來針對性的應對不同的場景,例如使用卷積神經網路(CNN)來處理圖像、使用長短期記憶網路(LSTM)來處理序列問題、使用生成式對抗網路(GAN)來寫詩和作圖等,就連去年自然語言處理(NLP)中取得突破性進展的 Transformer/Bert 也是一種特定的網路結構。所以, 學好神經網路,對理解其他更高級的網路結構也是有幫助的 。
上面說了,神經網路可以看作一個非線性函數,該函數的參數是連接神經元的所有的 Weights 和 Biases,該函數可以簡寫為 f(W, B) ,以手寫數字識別的任務作為例子:識別 MNIST 數據集 中的數字,數據集(MNIST 數據集是深度學習中的 HelloWorld)包含上萬張不同的人寫的數字圖片,共有 0-9 十種數字,每張圖片為 28*28=784 個像素,我們設計一個這樣的網路來完成該任務:
把該網路函數所具備的屬性補齊:
接下來的問題是,這個函數是如何產生的?這個問題本質上問的是這些參數的值是怎麼確定的。
在機器學習中,有另一個函數 c 來衡量 f 的好壞,c 的參數是一堆數據集,你輸入給 c 一批 Weights 和 Biases,c 輸出 Bad 或 Good,當結果是 Bad 時,你需要繼續調整 f 的 Weights 和 Biases,再次輸入給 c,如此往復,直到 c 給出 Good 為止,這個 c 就是損失函數 Cost Function(或 Loss Function)。在手寫數字識別的列子中,c 可以描述如下:
可見,要完成手寫數字識別任務,只需要調整這 12730 個參數,讓損失函數輸出一個足夠小的值即可,推而廣之,絕大部分神經網路、機器學習的問題,都可以看成是定義損失函數、以及參數調優的問題。
在手寫識別任務中,我們既可以使用交叉熵(Cross Entropy)損失函數,也可以使用 MSE(Mean Squared Error)作為損失函數,接下來,就剩下如何調優參數了。
神經網路的參數調優也沒有使用特別的技術,依然是大家剛接觸機器學習,就學到的梯度下降演算法,梯度下降解決了上面迭代過程中的遺留問題——當損失函數給出 Bad 結果時,如何調整參數,能讓 Loss 減少得最快。
梯度可以理解為:
把 Loss 對應到 H,12730 個參數對應到 (x,y),則 Loss 對所有參數的梯度可以表示為下面向量,該向量的長度為 12730:
$$
abla L(w,b) = left[
frac{partial L}{partial w_1},
frac{partial L}{partial w_2},...,
frac{partial L}{partial b_{26}}
ight] ^ op
$$
所以,每次迭代過程可以概括為
用梯度來調整參數的式子如下(為了簡化,這里省略了 bias):
上式中, 是學習率,意為每次朝下降最快的方向前進一小步,避免優化過頭(Overshoot)。
由於神經網路參數繁多,所以需要更高效的計算梯度的演算法,於是,反向傳播演算法(Backpropagation)呼之欲出。
在學習反向傳播演算法之前,我們先復習一下微積分中的鏈式法則(Chain Rule):設 g = u(h) , h = f(x) 是兩個可導函數,x 的一個很小的變化 △x 會使 h 產生一個很小的變化 △h,從而 g 也產生一個較小的變化 △g,現要求 △g/△x,可以使用鏈式法則:
有了以上基礎,理解反向傳播演算法就簡單了。
假設我們的演示網路只有 2 層,輸入輸出都只有 2 個神經元,如下圖所示:
其中 是輸入, 是輸出, 是樣本的目標值,這里使用的損失函數 L 為 MSE;圖中的上標 (1) 或 (2) 分別表示參數屬於第 (1) 層或第 (2) 層,下標 1 或 2 分別表示該層的第 1 或 第 2 個神經元。
現在我們來計算 和 ,掌握了這 2 個參數的偏導數計算之後,整個梯度的計算就掌握了。
所謂反向傳播演算法,指的是從右向左來計算每個參數的偏導數,先計算 ,根據鏈式法則
對左邊項用鏈式法則展開
又 是輸出值, 可以直接通過 MSE 的導數算出:
而 ,則 就是 sigmoid 函數的導數在 處的值,即
於是 就算出來了:
再來看 這一項,因為
所以
注意:上面式子對於所有的 和 都成立,且結果非常直觀,即 對 的偏導為左邊的輸入 的大小;同時,這里還隱含著另一層意思:需要調整哪個 來影響 ,才能使 Loss 下降得最快,從該式子可以看出,當然是先調整較大的 值所對應的 ,效果才最顯著 。
於是,最後一層參數 的偏導數就算出來了
我們再來算上一層的 ,根據鏈式法則 :
繼續展開左邊這一項
你發現沒有,這幾乎和計算最後一層一摸一樣,但需要注意的是,這里的 對 Loss 造成的影響有多條路徑,於是對於只有 2 個輸出的本例來說:
上式中, 都已經在最後一層算出,下面我們來看下 ,因為
於是
同理
注意:這里也引申出梯度下降的調參直覺:即要使 Loss 下降得最快,優先調整 weight 值比較大的 weight。
至此, 也算出來了
觀察上式, 所謂每個參數的偏導數,通過反向傳播演算法,都可以轉換成線性加權(Weighted Sum)計算 ,歸納如下:
式子中 n 代表分類數,(l) 表示第 l 層,i 表示第 l 層的第 i 個神經元。 既然反向傳播就是一個線性加權,那整個神經網路就可以藉助於 GPU 的矩陣並行計算了 。
最後,當你明白了神經網路的原理,是不是越發的認為,它就是在做一堆的微積分運算,當然,作為能證明一個人是否學過微積分,神經網路還是值得學一下的。Just kidding ..
本文我們通過
這四點,全面的學習了神經網路這個知識點,希望本文能給你帶來幫助。
參考:
D. bp神經網路數字識別,是一個網路識別所有0~9還是一個網路一個數字,或者通過連接來分組
單個網路就能識別所有數字,不是每個數字訓練一個網路,而是所有數字的訓練樣本來訓練一個網路,訓練後的網路就能反映出這些數字的特徵。
文字識別一般包括文字信息的採集、信息的分析與處理、信息的分類判別等幾個部分。信息採集 將紙面上的文字灰度變換成電信號,輸入到計算機中去。信息採集由文字識別機中的送紙機構和光電變換裝置來實現,有飛點掃描、攝像機、光敏元件和激光掃描等光電變換裝置。信息分析和處理 對變換後的電信號消除各種由於印刷質量、紙質(均勻性、污點等)或書寫工具等因素所造成的噪音和干擾,進行大小、偏轉、濃淡、粗細等各種正規化處理。信息的分類判別 對去掉雜訊並正規化後的文字信息進行分類判別,以輸出識別結果。
E. 什麼是神經網路的節點數
某層的神經元個數與節點數是一個意思。按你的假設:雖是3層神經網路,但是去叫做兩層BP網路,因為輸入層一般不算做一層。按你的假設,n就該取2,s1就是隱含層節點數,選取的公式是Hornik
提出的公式,可以算的s1取值范圍,到時自己選取合適職,s2就是你輸出層節點數,也就是輸出維數。
如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!