-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
神經網絡的概念(神經網絡的概念,給人工智能帶來的有利條件有哪些)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于神經網絡的概念的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端
創(chuàng)意嶺作為行業(yè)內優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、halcon第十七講,神經網絡
一、神經網絡是什么
[圖片上傳中...(image-432d8f-1641287520063-0)]
<colgroup><col style="width: 310px;"><col style="width: 310px;"></colgroup>
|
生物神經元
|
人工神經元
|
|
細胞核
|
神經元
|
|
樹突
|
輸入
|
|
軸突
|
輸出
|
|
突觸
|
權重
|
二、神經網絡的相關概念
[圖片上傳中...(image-269e67-1641287555263-8)]
[圖片上傳中...(image-ba78ce-1641287555263-7)]
[圖片上傳中...(image-5dedce-1641287555263-6)]
[圖片上傳中...(image-d4aadb-1641287555263-5)]
[圖片上傳中...(image-eef949-1641287555263-4)]
[圖片上傳中...(image-fcd341-1641287555263-3)]
[圖片上傳中...(image-d0711b-1641287555263-2)]
[圖片上傳中...(image-a37d38-1641287555263-1)]
[圖片上傳中...(image-eb49a1-1641287555263-0)]
二、BP神經網絡的梳理
BP神經網絡被稱為“深度學習之旅的開端”,是神經網絡的入門算法。
各種高大上的神經網絡都是基于BP網絡出發(fā)的,最基礎的原理都是由BP網絡而來 [1] ,另外由于BP神經網絡結構簡單,算法經典, 是神經網絡中應用最廣泛的一種。
BP神經網絡(back propagation neural network)全稱是反向傳播神經網絡。
神經網絡發(fā)展部分背景如下 [2] :
為解決非線性問題,BP神經網絡應運而生。
那么什么是BP神經網絡?稍微專業(yè)點的解釋要怎么說呢?
很喜歡 最簡單的神經網絡--Bp神經網絡 一文對算法原理的解釋,語言活潑,案例簡單,由淺入深。
文中提到所謂的 AI 技術,本質上是一種數據處理處理技術,它的強大來自于兩方面:1.互聯網的發(fā)展帶來的海量數據信息;2.計算機深度學習算法的快速發(fā)展。AI 其實并沒有什么神秘,只是在算法上更為復雜 [3] 。
我們從上面的定義出發(fā)來解釋BP神經網絡的原理。
BP神經網絡整個網絡結構包含了:一層輸入層,一到多層隱藏層,一層輸出層。
一般說L層神經網絡,指的是有L個隱層,輸入層和輸出層都不計算在內的 [6] 。
BP神經網絡模型訓練的學習過程由信號的 正向傳播 和誤差的 反向傳播 兩個過程組成。
什么是信號的正向傳播?顧名思義,就是結構圖從左到右的運算過程。
我們來看看結構圖中每個小圓圈是怎么運作的。我們把小圈圈叫做神經元,是組成神經網絡的基本單元。
正向傳播就是輸入數據經過一層一層的神經元運算、輸出的過程,最后一層輸出值作為算法預測值y'。
前面正向傳播的時候我們提到權重w、偏置b,但我們并不知道權重w、偏置b的值應該是什么。關于最優(yōu)參數的求解,我們在 線性回歸 、 邏輯回歸 兩章中有了詳細說明。大致來講就是:
BP神經網絡全稱 back propagation neural network,back propagation反向傳播是什么?
反向傳播的建設本質上就是尋找最優(yōu)的參數組合,和上面的流程差不多,根據算法預測值和實際值之間的損失函數L(y',y),來反方向地計算每一層的z、a、w、b的偏導數,從而更新參數。
對反向傳播而言,輸入的內容是預測值和實際值的誤差,輸出的內容是對參數的更新,方向是從右往左,一層一層的更新每一層的參數。
BP神經網絡通過先正向傳播,構建參數和輸入值的關系,通過預測值和實際值的誤差,反向傳播修復權重;讀入新數據再正向傳播預測,再反向傳播修正,...,通過多次循環(huán)達到最小損失值,此時構造的模型擁有最優(yōu)的參數組合。
以一個簡單的BP神經網絡為例,由3個輸入層,2層隱藏層,每層2個神經元,1個輸出層組成。
【輸入層】傳入
【第一層隱藏層】
對于 神經元而言,傳入 ,加權求和加偏置激活函數處理后,輸出 ;
對于 神經元而言,傳入 ,加權求和加偏置函數處理后,輸出 ;
輸出:
【第二層隱藏層】
對于 神經元而言,傳入 ,加權求和加偏置激活函數處理后,輸出 ;
對于 神經元而言,傳入 ,加權求和加偏置激活函數處理后,輸出 ;
輸出:
【輸出層】
對于輸出層神經元而言,輸入 ,加權求和加偏置激活函數處理后,輸出 ,輸出的是一個值
第一次運行正向傳播這個流程時隨用隨機參數就好,通過反向傳播不斷優(yōu)化。因此需要在一開始對 設置一個隨機的初始值。
首先計算正向傳播輸出值 與實際值的損失 ,是一個數值。所謂反向是從右到左一步步來的,先回到 ,修正參數 。
以此類推,通過對損失函數求偏導跟新參數 ,再跟新參數 。這時又回到了起點,新的數據傳入又可以開始正向傳播了。
keras可以快速搭建神經網絡,例如以下為輸入層包含7129個結點,一層隱藏層,包含128個結點,一個輸出層,是二分類模型。
神經網絡反向傳播的優(yōu)化目標為loss,可以觀察到loss的值在不斷的優(yōu)化。
可以通過model.get_layer().get_weights()獲得每一層訓練后的參數結果。通過model.predict()預測新數據。
至此,BP神經網絡的整個運算流程已經過了一遍。之前提到BP神經網絡是為解決非線性問題應運而生的,那么為什么BP神經網絡可以解決非線性問題呢?
還記得神經元里有一個激活函數的操作嗎?神經網絡通過激活函數的使用加入非線性因素。
通過使用非線性的激活函數可以使神經網絡隨意逼近復雜函數,從而使BP神經網絡既可以處理線性問題,也可以處理非線性問題。
為什么激活函數的使用可以加入非線性因素 [7] ?
其實邏輯回歸算法可以看作只有一個神經元的單層神經網絡,只對線性可分的數據進行分類。
輸入參數,加權求和,sigmoid作為激活函數計算后輸出結果,模型預測值和實際值計算損失Loss,反向傳播梯度下降求編導,獲得最優(yōu)參數。
BP神經網絡是比 Logistic Regression 復雜得多的模型,它的擬合能力很強,可以處理很多 Logistic Regression處理不了的數據,但是也更容易過擬合。
具體用什么算法還是要看訓練數據的情況,沒有一種算法是使用所有情況的。
常見的前饋神經網絡有BP網絡,RBF網絡等。
BP神經網絡的一個主要問題是:結構不好設計。
網絡隱含層的層數和單元數的選擇尚無理論上的指導,一般是根據經驗或者通過反復實驗確定。
但是BP神經網絡簡單、易行、計算量小、并行性強,目前仍是多層前向網絡的首選算法。
[1] 深度學習開端---BP神經網絡: https://blog.csdn.net/Chile_Wang/article/details/100557010
[2] BP神經網絡發(fā)展歷史: https://zhuanlan.zhihu.com/p/47998728
[3] 最簡單的神經網絡--Bp神經網絡: https://blog.csdn.net/weixin_40432828/article/details/82192709
[4] 神經網絡的基本概念: https://blog.csdn.net/jinyuan7708/article/details/82466653
[5] 神經網絡中的 “隱藏層” 理解: https://blog.csdn.net/nanhuaibeian/article/details/100183000
[6] AI學習筆記:神經元與神經網絡: https://www.jianshu.com/p/65eb2fce0e9e
[7] 線性模型和非線性模型的區(qū)別: https://www.cnblogs.com/toone/p/8574294.html
[8] BP神經網絡是否優(yōu)于logistic回歸: https://www.zhihu.com/question/27823925/answer/38460833
三、人工神經網絡概念梳理與實例演示
人工神經網絡概念梳理與實例演示
神經網絡是一種模仿生物神經元的機器學習模型,數據從輸入層進入并流經激活閾值的多個節(jié)點。
遞歸性神經網絡一種能夠對之前輸入數據進行內部存儲記憶的神經網絡,所以他們能夠學習到數據流中的時間依賴結構。
如今機器學習已經被應用到很多的產品中去了,例如,siri、Google Now等智能助手,推薦引擎——亞馬遜網站用于推薦商品的推薦引擎,Google和Facebook使用的廣告排名系統。最近,深度學習的一些進步將機器學習帶入公眾視野:AlphaGo 打敗圍棋大師李世石事件以及一些圖片識別和機器翻譯等新產品的出現。
在這部分中,我們將介紹一些強大并被普遍使用的機器學習技術。這當然包括一些深度學習以及一些滿足現代業(yè)務需求傳統方法。讀完這一系列的文章之后,你就掌握了必要的知識,便可以將具體的機器學習實驗應用到你所在的領域當中。
隨著深層神經網絡的精度的提高,語音和圖像識別技術的應用吸引了大眾的注意力,關于AI和深度學習的研究也變得更加普遍了。但是怎么能夠讓它進一步擴大影響力,更受歡迎仍然是一個問題。這篇文章的主要內容是:簡述前饋神經網絡和遞歸神經網絡、怎樣搭建一個遞歸神經網絡對時間系列數據進行異常檢測。為了讓我們的討論更加具體化,我們將演示一下怎么用Deeplearning4j搭建神經網絡。
一、什么是神經網絡?
人工神經網絡算法的最初構思是模仿生物神經元。但是這個類比很不可靠。人工神經網絡的每一個特征都是對生物神經元的一種折射:每一個節(jié)點與激活閾值、觸發(fā)的連接。
連接人工神經元系統建立起來之后,我們就能夠對這些系統進行訓練,從而讓他們學習到數據中的一些模式,學到之后就能執(zhí)行回歸、分類、聚類、預測等功能。
人工神經網絡可以看作是計算節(jié)點的集合。數據通過這些節(jié)點進入神經網絡的輸入層,再通過神經網絡的隱藏層直到關于數據的一個結論或者結果出現,這個過程才會停止。神經網絡產出的結果會跟預期的結果進行比較,神經網絡得出的結果與正確結果的不同點會被用來更正神經網絡節(jié)點的激活閾值。隨著這個過程的不斷重復,神經網絡的輸出結果就會無限靠近預期結果。
二、訓練過程
在搭建一個神經網絡系統之前,你必須先了解訓練的過程以及網絡輸出結果是怎么產生的。然而我們并不想過度深入的了解這些方程式,下面是一個簡短的介紹。
網絡的輸入節(jié)點收到一個數值數組(或許是叫做張量多維度數組)就代表輸入數據。例如, 圖像中的每個像素可以表示為一個標量,然后將像素傳遞給一個節(jié)點。輸入數據將會與神經網絡的參數相乘,這個輸入數據被擴大還是減小取決于它的重要性,換句話說,取決于這個像素就不會影響神經網絡關于整個輸入數據的結論。
起初這些參數都是隨機的,也就是說神經網絡在建立初期根本就不了解數據的結構。每個節(jié)點的激活函數決定了每個輸入節(jié)點的輸出結果。所以每個節(jié)點是否能夠被激活取決于它是否接受到足夠的刺激強度,即是否輸入數據和參數的結果超出了激活閾值的界限。
在所謂的密集或完全連接層中,每個節(jié)點的輸出值都會傳遞給后續(xù)層的節(jié)點,在通過所有隱藏層后最終到達輸出層,也就是產生輸入結果的地方。在輸出層, 神經網絡得到的最終結論將會跟預期結論進行比較(例如,圖片中的這些像素代表一只貓還是狗?)。神經網絡猜測的結果與正確結果的計算誤差都會被納入到一個測試集中,神經網絡又會利用這些計算誤差來不斷更新參數,以此來改變圖片中不同像素的重要程度。整個過程的目的就是降低輸出結果與預期結果的誤差,正確地標注出這個圖像到底是不是一條狗。
深度學習是一個復雜的過程,由于大量的矩陣系數需要被修改所以它就涉及到矩陣代數、衍生品、概率和密集的硬件使用問題,但是用戶不需要全部了解這些復雜性。
但是,你也應該知道一些基本參數,這將幫助你理解神經網絡函數。這其中包括激活函數、優(yōu)化算法和目標函數(也稱為損失、成本或誤差函數)。
激活函數決定了信號是否以及在多大程度上應該被發(fā)送到連接節(jié)點。階梯函數是最常用的激活函數, 如果其輸入小于某個閾值就是0,如果其輸入大于閾值就是1。節(jié)點都會通過階梯激活函數向連接節(jié)點發(fā)送一個0或1。優(yōu)化算法決定了神經網絡怎么樣學習,以及測試完誤差后,權重怎么樣被更準確地調整。最常見的優(yōu)化算法是隨機梯度下降法。最后, 成本函數常用來衡量誤差,通過對比一個給定訓練樣本中得出的結果與預期結果的不同來評定神經網絡的執(zhí)行效果。
Keras、Deeplearning4j 等開源框架讓創(chuàng)建神經網絡變得簡單。創(chuàng)建神經網絡結構時,需要考慮的是怎樣將你的數據類型匹配到一個已知的被解決的問題,并且根據你的實際需求來修改現有結構。
三、神經網絡的類型以及應用
神經網絡已經被了解和應用了數十年了,但是最近的一些技術趨勢才使得深度神經網絡變得更加高效。
GPUs使得矩陣操作速度更快;分布式計算結構讓計算能力大大增強;多個超參數的組合也讓迭代的速度提升。所有這些都讓訓練的速度大大加快,迅速找到適合的結構。
隨著更大數據集的產生,類似于ImageNet 的大型高質量的標簽數據集應運而生。機器學習算法訓練的數據越大,那么它的準確性就會越高。
最后,隨著我們理解能力以及神經網絡算法的不斷提升,神經網絡的準確性在語音識別、機器翻譯以及一些機器感知和面向目標的一些任務等方面不斷刷新記錄。
盡管神經網絡架構非常的大,但是主要用到的神經網絡種類也就是下面的幾種。
3.1前饋神經網絡
前饋神經網絡包括一個輸入層、一個輸出層以及一個或多個的隱藏層。前饋神經網絡可以做出很好的通用逼近器,并且能夠被用來創(chuàng)建通用模型。
這種類型的神經網絡可用于分類和回歸。例如,當使用前饋網絡進行分類時,輸出層神經元的個數等于類的數量。從概念上講, 激活了的輸出神經元決定了神經網絡所預測的類。更準確地說, 每個輸出神經元返回一個記錄與分類相匹配的概率數,其中概率最高的分類將被選為模型的輸出分類。
前饋神經網絡的優(yōu)勢是簡單易用,與其他類型的神經網絡相比更簡單,并且有一大堆的應用實例。
3.2卷積神經網絡
卷積神經網絡和前饋神經網絡是非常相似的,至少是數據的傳輸方式類似。他們結構大致上是模仿了視覺皮層。卷積神經網絡通過許多的過濾器。這些過濾器主要集中在一個圖像子集、補丁、圖塊的特征識別上。每一個過濾器都在尋找不同模式的視覺數據,例如,有的可能是找水平線,有的是找對角線,有的是找垂直的。這些線條都被看作是特征,當過濾器經過圖像時,他們就會構造出特征圖譜來定位各類線是出現在圖像的哪些地方。圖像中的不同物體,像貓、747s、榨汁機等都會有不同的圖像特征,這些圖像特征就能使圖像完成分類。卷積神經網絡在圖像識別和語音識別方面是非常的有效的。
卷積神經網絡與前饋神經網絡在圖像識別方面的異同比較。雖然這兩種網絡類型都能夠進行圖像識別,但是方式卻不同。卷積神經網絡是通過識別圖像的重疊部分,然后學習識別不同部分的特征進行訓練;然而,前饋神經網絡是在整張圖片上進行訓練。前饋神經網絡總是在圖片的某一特殊部分或者方向進行訓練,所以當圖片的特征出現在其他地方時就不會被識別到,然而卷積神經網絡卻能夠很好的避免這一點。
卷積神經網絡主要是用于圖像、視頻、語音、聲音識別以及無人駕駛的任務。盡管這篇文章主要是討論遞歸神經網絡的,但是卷積神經網絡在圖像識別方面也是非常有效的,所以很有必要了解。
3.3遞歸神經網絡
與前饋神經網絡不同的是,遞歸神經網絡的隱藏層的節(jié)點里有內部記憶存儲功能,隨著輸入數據的改變而內部記憶內容不斷被更新。遞歸神經網絡的結論都是基于當前的輸入和之前存儲的數據而得出的。遞歸神經網絡能夠充分利用這種內部記憶存儲狀態(tài)處理任意序列的數據,例如時間序列。
遞歸神經網絡經常用于手寫識別、語音識別、日志分析、欺詐檢測和網絡安全。
遞歸神經網絡是處理時間維度數據集的最好方法,它可以處理以下數據:網絡日志和服務器活動、硬件或者是醫(yī)療設備的傳感器數據、金融交易、電話記錄。想要追蹤數據在不同階段的依賴和關聯關系需要你了解當前和之前的一些數據狀態(tài)。盡管我們通過前饋神經網絡也可以獲取事件,隨著時間的推移移動到另外一個事件,這將使我們限制在對事件的依賴中,所以這種方式很不靈活。
追蹤在時間維度上有長期依賴的數據的更好方法是用內存來儲存重要事件,以使近期事件能夠被理解和分類。遞歸神經網絡最好的一點就是在它的隱藏層里面有“內存”可以學習到時間依賴特征的重要性。
接下來我們將討論遞歸神經網絡在字符生成器和網絡異常檢測中的應用。遞歸神經網絡可以檢測出不同時間段的依賴特征的能力使得它可以進行時間序列數據的異常檢測。
遞歸神經網絡的應用
網絡上有很多使用RNNs生成文本的例子,遞歸神經網絡經過語料庫的訓練之后,只要輸入一個字符,就可以預測下一個字符。下面讓我們通過一些實用例子發(fā)現更多RNNs的特征。
應用一、RNNs用于字符生成
遞歸神經網絡經過訓練之后可以把英文字符當做成一系列的時間依賴事件。經過訓練后它會學習到一個字符經常跟著另外一個字符(“e”經常跟在“h”后面,像在“the、he、she”中)。由于它能預測下一個字符是什么,所以它能有效地減少文本的輸入錯誤。
Java是個很有趣的例子,因為它的結構包括很多嵌套結構,有一個開的圓括號必然后面就會有一個閉的,花括號也是同理。他們之間的依賴關系并不會在位置上表現的很明顯,因為多個事件之間的關系不是靠所在位置的距離確定的。但是就算是不明確告訴遞歸神經網絡Java中各個事件的依賴關系,它也能自己學習了解到。
在異常檢測當中,我們要求神經網絡能夠檢測出數據中相似、隱藏的或許是并不明顯的模式。就像是一個字符生成器在充分地了解數據的結構后就會生成一個數據的擬像,遞歸神經網絡的異常檢測就是在其充分了解數據結構后來判斷輸入的數據是不是正常。
字符生成的例子表明遞歸神經網絡有在不同時間范圍內學習到時間依賴關系的能力,它的這種能力還可以用來檢測網絡活動日志的異常。
異常檢測能夠使文本中的語法錯誤浮出水面,這是因為我們所寫的東西是由語法結構所決定的。同理,網絡行為也是有結構的,它也有一個能夠被學習的可預測模式。經過在正常網絡活動中訓練的遞歸神經網絡可以監(jiān)測到入侵行為,因為這些入侵行為的出現就像是一個句子沒有標點符號一樣異常。
應用二、一個網絡異常檢測項目的示例
假設我們想要了解的網絡異常檢測就是能夠得到硬件故障、應用程序失敗、以及入侵的一些信息。
模型將會向我們展示什么呢?
隨著大量的網絡活動日志被輸入到遞歸神經網絡中去,神經網絡就能學習到正常的網絡活動應該是什么樣子的。當這個被訓練的網絡被輸入新的數據時,它就能偶判斷出哪些是正常的活動,哪些是被期待的,哪些是異常的。
訓練一個神經網絡來識別預期行為是有好處的,因為異常數據不多,或者是不能夠準確的將異常行為進行分類。我們在正常的數據里進行訓練,它就能夠在未來的某個時間點提醒我們非正?;顒拥某霈F。
說句題外話,訓練的神經網絡并不一定非得識別到特定事情發(fā)生的特定時間點(例如,它不知道那個特殊的日子就是周日),但是它一定會發(fā)現一些值得我們注意的一些更明顯的時間模式和一些可能并不明顯的事件之間的聯系。
我們將概述一下怎么用 Deeplearning4j(一個在JVM上被廣泛應用的深度學習開源數據庫)來解決這個問題。Deeplearning4j在模型開發(fā)過程中提供了很多有用的工具:DataVec是一款為ETL(提取-轉化-加載)任務準備模型訓練數據的集成工具。正如Sqoop為Hadoop加載數據,DataVec將數據進行清洗、預處理、規(guī)范化與標準化之后將數據加載到神經網絡。這跟Trifacta’s Wrangler也相似,只不過它更關注二進制數據。
開始階段
第一階段包括典型的大數據任務和ETL:我們需要收集、移動、儲存、準備、規(guī)范化、矢量話日志。時間跨度的長短是必須被規(guī)定好的。數據的轉化需要花費一些功夫,這是由于JSON日志、文本日志、還有一些非連續(xù)標注模式都必須被識別并且轉化為數值數組。DataVec能夠幫助進行轉化和規(guī)范化數據。在開發(fā)機器學習訓練模型時,數據需要分為訓練集和測試集。
訓練神經網絡
神經網絡的初始訓練需要在訓練數據集中進行。
在第一次訓練的時候,你需要調整一些超參數以使模型能夠實現在數據中學習。這個過程需要控制在合理的時間內。關于超參數我們將在之后進行討論。在模型訓練的過程中,你應該以降低錯誤為目標。
但是這可能會出現神經網絡模型過度擬合的風險。有過度擬合現象出現的模型往往會在訓練集中的很高的分數,但是在遇到新的數據時就會得出錯誤結論。用機器學習的語言來說就是它不夠通用化。Deeplearning4J提供正則化的工具和“過早停止”來避免訓練過程中的過度擬合。
神經網絡的訓練是最花費時間和耗費硬件的一步。在GPUs上訓練能夠有效的減少訓練時間,尤其是做圖像識別的時候。但是額外的硬件設施就帶來多余的花銷,所以你的深度學習的框架必須能夠有效的利用硬件設施。Azure和亞馬遜等云服務提供了基于GPU的實例,神經網絡還可以在異構集群上進行訓練。
創(chuàng)建模型
Deeplearning4J提供ModelSerializer來保存訓練模型。訓練模型可以被保存或者是在之后的訓練中被使用或更新。
在執(zhí)行異常檢測的過程中,日志文件的格式需要與訓練模型一致,基于神經網絡的輸出結果,你將會得到是否當前的活動符合正常網絡行為預期的結論。
代碼示例
遞歸神經網絡的結構應該是這樣子的:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder(
.seed(123)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
.weightInit(WeightInit.XAVIER)
.updater(Updater.NESTEROVS).momentum(0.9)
.learningRate(0.005)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue)
.gradientNormalizationThreshold(0.5)
.list()
.layer(0, new GravesLSTM.Builder().activation("tanh").nIn(1).nOut(10).build())
.layer(1, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MCXENT)
.activation("softmax").nIn(10).nOut(numLabelClasses).build())
.pretrain(false).backprop(true).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
下面解釋一下幾行重要的代碼:
.seed(123)
隨機設置一個種子值對神經網絡的權值進行初始化,以此獲得一個有復驗性的結果。系數通常都是被隨機的初始化的,以使我們在調整其他超參數時仍獲得一致的結果。我們需要設定一個種子值,讓我們在調整和測試的時候能夠用這個隨機的權值。
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
決定使用哪個最優(yōu)算法(在這個例子中是隨機梯度下降法)來調整權值以提高誤差分數。你可能不需要對這個進行修改。
.learningRate(0.005)
當我們使用隨機梯度下降法的時候,誤差梯度就被計算出來了。在我們試圖將誤差值減到最小的過程中,權值也隨之變化。SGD給我們一個讓誤差更小的方向,這個學習效率就決定了我們該在這個方向上邁多大的梯度。如果學習效率太高,你可能是超過了誤差最小值;如果太低,你的訓練可能將會永遠進行。這是一個你需要調整的超參數。
四、神經網絡相關名詞解釋
很多人認為深度學習很枯燥,大部分情況是因為對深度學習的學術詞語,特別是專有名詞很困惑,即便對相關從業(yè)者,亦很難深入淺出地解釋這些詞語的含義。
相信讀過此文的圈友,會對深度學習有個全新的認識,機器人圈希望可以為圈友的深度學習之路起到一些輔助作用。
人工智能,深度學習,機器學習—無論你在做什么,如果你對它不是很了解的話—去學習它。否則的話不用三年你就跟不上時代的潮流了?!R克.庫班
馬克.庫班的這個觀點可能聽起來很極端——但是它所傳達的信息是完全正確的! 我們正處于一場革命的旋渦之中——一場由大數據和計算能力引起的革命。
只需要一分鐘,我們來想象一下,在20世紀初,如果一個人不了解電力,他/她會覺得如何?你會習慣于以某種特定的方式來做事情,日復一日,年復一年,而你周圍的一切事情都在發(fā)生變化,一件需要很多人才能完成的事情僅依靠一個人和電力就可以輕松搞定,而我們今天正以機器學習和深度學習的方式在經歷一場相似的旅程。
所以,如果你還沒有探索或理解深度學習的神奇力量——那你應該從今天就開始進入這一領域。
與主題相關的術語
為了幫助你了解各種術語,我已經將它們分成3組。如果你正在尋找特定術語,你可以跳到該部分。如果你是這個領域的新手,那我建議你按照我寫的順序來通讀它們。
1.神經網絡基礎(Basics of Neural Networks) ——常用激活函數(Common Activation Functions)
2.卷積神經網絡(Convolutional Neural Networks)
3.循環(huán)神經網絡(Recurrent Neural Networks)
神經網絡基礎
1)神經元(Neuron) ——就像形成我們大腦基本元素的神經元一樣,神經元形成神經網絡的基本結構。想象一下,當我們得到新信息時我們該怎么做。當我們獲取信息時,我們一般會處理它,然后生成一個輸出。類似地,在神經網絡的情況下,神經元接收輸入,處理它并產生輸出,而這個輸出被發(fā)送到其他神經元用于進一步處理,或者作為最終輸出進行輸出。
2)權重(Weights) ——當輸入進入神經元時,它會乘以一個權重。例如,如果一個神經元有兩個輸入,則每個輸入將具有分配給它的一個關聯權重。我們隨機初始化權重,并在模型訓練過程中更新這些權重。訓練后的神經網絡對其輸入賦予較高的權重,這是它認為與不那么重要的輸入相比更為重要的輸入。為零的權重則表示特定的特征是微不足道的。
讓我們假設輸入為a,并且與其相關聯的權重為W1,那么在通過節(jié)點之后,輸入變?yōu)閍 * W1
3)偏差(Bias) ——除了權重之外,另一個被應用于輸入的線性分量被稱為偏差。它被加到權重與輸入相乘的結果中。基本上添加偏差的目的是來改變權重與輸入相乘所得結果的范圍的。添加偏差后,結果將看起來像a* W1 +偏差。這是輸入變換的最終線性分量。
4)激活函數(Activation Function) ——一旦將線性分量應用于輸入,將會需要應用一個非線性函數。這通過將激活函數應用于線性組合來完成。激活函數將輸入信號轉換為輸出信號。應用激活函數后的輸出看起來像f(a * W1 + b),其中f()就是激活函數。
在下圖中,我們將“n”個輸入給定為X1到Xn而與其相應的權重為Wk1到Wkn。我們有一個給定值為bk的偏差。權重首先乘以與其對應的輸入,然后與偏差加在一起。而這個值叫做u。
U =ΣW* X+ b
激活函數被應用于u,即 f(u),并且我們會從神經元接收最終輸出,如yk = f(u)。
常用的激活函數
最常用的激活函數就是Sigmoid,ReLU和softmax
a)Sigmoid ——最常用的激活函數之一是Sigmoid,它被定義為:
Sigmoid變換產生一個值為0到1之間更平滑的范圍。我們可能需要觀察在輸入值略有變化時輸出值中發(fā)生的變化。光滑的曲線使我們能夠做到這一點,因此優(yōu)于階躍函數。
b)ReLU(整流線性單位) ——與Sigmoid函數不同的是,最近的網絡更喜歡使用ReLu激活函數來處理隱藏層。該函數定義為:
當X>0時,函數的輸出值為X;當X<=0時,輸出值為0。函數圖如下圖所示:
使用ReLU函數的最主要的好處是對于大于0的所有輸入來說,它都有一個不變的導數值。常數導數值有助于網絡訓練進行得更快。
c) Softmax ——Softmax激活函數通常用于輸出層,用于分類問題。它與sigmoid函數是很類似的,唯一的區(qū)別就是輸出被歸一化為總和為1。Sigmoid函數將發(fā)揮作用以防我們有一個二進制輸出,但是如果我們有一個多類分類問題,softmax函數使為每個類分配值這種操作變得相當簡單,而這可以將其解釋為概率。
以這種方式來操作的話,我們很容易看到——假設你正在嘗試識別一個可能看起來像8的6。該函數將為每個數字分配值如下。我們可以很容易地看出,最高概率被分配給6,而下一個最高概率分配給8,依此類推……
5)神經網絡(Neural Network) ——神經網絡構成了深度學習的支柱。神經網絡的目標是找到一個未知函數的近似值。它由相互聯系的神經元形成。這些神經元具有權重和在網絡訓練期間根據錯誤來進行更新的偏差。激活函數將非線性變換置于線性組合,而這個線性組合稍后會生成輸出。激活的神經元的組合會給出輸出值。
一個很好的神經網絡定義——
“神經網絡由許多相互關聯的概念化的人造神經元組成,它們之間傳遞相互數據,并且具有根據網絡”經驗“調整的相關權重。神經元具有激活閾值,如果通過其相關權重的組合和傳遞給他們的數據滿足這個閾值的話,其將被解雇;發(fā)射神經元的組合導致“學習”。
6)輸入/輸出/隱藏層(Input / Output / Hidden Layer) ——正如它們名字所代表的那樣,輸入層是接收輸入那一層,本質上是網絡的第一層。而輸出層是生成輸出的那一層,也可以說是網絡的最終層。處理層是網絡中的隱藏層。這些隱藏層是對傳入數據執(zhí)行特定任務并將其生成的輸出傳遞到下一層的那些層。輸入和輸出層是我們可見的,而中間層則是隱藏的。
7)MLP(多層感知器) ——單個神經元將無法執(zhí)行高度復雜的任務。因此,我們使用堆棧的神經元來生成我們所需要的輸出。在最簡單的網絡中,我們將有一個輸入層、一個隱藏層和一個輸出層。每個層都有多個神經元,并且每個層中的所有神經元都連接到下一層的所有神經元。這些網絡也可以被稱為完全連接的網絡。
8)正向傳播(Forward Propagation) ——正向傳播是指輸入通過隱藏層到輸出層的運動。在正向傳播中,信息沿著一個單一方向前進。輸入層將輸入提供給隱藏層,然后生成輸出。這過程中是沒有反向運動的。
9)成本函數(Cost Function) ——當我們建立一個網絡時,網絡試圖將輸出預測得盡可能靠近實際值。我們使用成本/損失函數來衡量網絡的準確性。而成本或損失函數會在發(fā)生錯誤時嘗試懲罰網絡。
我們在運行網絡時的目標是提高我們的預測精度并減少誤差,從而最大限度地降低成本。最優(yōu)化的輸出是那些成本或損失函數值最小的輸出。
如果我將成本函數定義為均方誤差,則可以寫為:
C= 1/m ∑(y–a)^2,
其中m是訓練輸入的數量,a是預測值,y是該特定示例的實際值。
學習過程圍繞最小化成本來進行。
10)梯度下降(Gradient Descent) ——梯度下降是一種最小化成本的優(yōu)化算法。要直觀地想一想,在爬山的時候,你應該會采取小步驟,一步一步走下來,而不是一下子跳下來。因此,我們所做的就是,如果我們從一個點x開始,我們向下移動一點,即Δh,并將我們的位置更新為x-Δh,并且我們繼續(xù)保持一致,直到達到底部??紤]最低成本點。
在數學上,為了找到函數的局部最小值,我們通常采取與函數梯度的負數成比例的步長。
11)學習率(Learning Rate) ——學習率被定義為每次迭代中成本函數中最小化的量。簡單來說,我們下降到成本函數的最小值的速率是學習率。我們應該非常仔細地選擇學習率,因為它不應該是非常大的,以至于最佳解決方案被錯過,也不應該非常低,以至于網絡需要融合。
12)反向傳播(Backpropagation) ——當我們定義神經網絡時,我們?yōu)槲覀兊墓?jié)點分配隨機權重和偏差值。一旦我們收到單次迭代的輸出,我們就可以計算出網絡的錯誤。然后將該錯誤與成本函數的梯度一起反饋給網絡以更新網絡的權重。 最后更新這些權重,以便減少后續(xù)迭代中的錯誤。使用成本函數的梯度的權重的更新被稱為反向傳播。
在反向傳播中,網絡的運動是向后的,錯誤隨著梯度從外層通過隱藏層流回,權重被更新。
13)批次(Batches) ——在訓練神經網絡的同時,不用一次發(fā)送整個輸入,我們將輸入分成幾個隨機大小相等的塊。與整個數據集一次性饋送到網絡時建立的模型相比,批量訓練數據使得模型更加廣義化。
14)周期(Epochs) ——周期被定義為向前和向后傳播中所有批次的單次訓練迭代。這意味著1個周期是整個輸入數據的單次向前和向后傳遞。
你可以選擇你用來訓練網絡的周期數量,更多的周期將顯示出更高的網絡準確性,然而,網絡融合也需要更長的時間。另外,你必須注意,如果周期數太高,網絡可能會過度擬合。
15)丟棄(Dropout) ——Dropout是一種正則化技術,可防止網絡過度擬合套。顧名思義,在訓練期間,隱藏層中的一定數量的神經元被隨機地丟棄。這意味著訓練發(fā)生在神經網絡的不同組合的神經網絡的幾個架構上。你可以將Dropout視為一種綜合技術,然后將多個網絡的輸出用于產生最終輸出。
16)批量歸一化(Batch Normalization) ——作為一個概念,批量歸一化可以被認為是我們在河流中設定為特定檢查點的水壩。這樣做是為了確保數據的分發(fā)與希望獲得的下一層相同。當我們訓練神經網絡時,權重在梯度下降的每個步驟之后都會改變,這會改變數據的形狀如何發(fā)送到下一層。
但是下一層預期分布類似于之前所看到的分布。 所以我們在將數據發(fā)送到下一層之前明確規(guī)范化數據。
17)濾波器(Filters) ——CNN中的濾波器與加權矩陣一樣,它與輸入圖像的一部分相乘以產生一個回旋輸出。我們假設有一個大小為28 * 28的圖像,我們隨機分配一個大小為3 * 3的濾波器,然后與圖像不同的3 * 3部分相乘,形成所謂的卷積輸出。濾波器尺寸通常小于原始圖像尺寸。在成本最小化的反向傳播期間,濾波器值被更新為重量值。
參考一下下圖,這里filter是一個3 * 3矩陣:
與圖像的每個3 * 3部分相乘以形成卷積特征。
18)卷積神經網絡(CNN) ——卷積神經網絡基本上應用于圖像數據。假設我們有一個輸入的大小(28 * 28 * 3),如果我們使用正常的神經網絡,將有2352(28 * 28 * 3)參數。并且隨著圖像的大小增加參數的數量變得非常大。我們“卷積”圖像以減少參數數量(如上面濾波器定義所示)。當我們將濾波器滑動到輸入體積的寬度和高度時,將產生一個二維激活圖,給出該濾波器在每個位置的輸出。我們將沿深度尺寸堆疊這些激活圖,并產生輸出量。
你可以看到下面的圖,以獲得更清晰的印象。
19)池化(Pooling) ——通常在卷積層之間定期引入池層。這基本上是為了減少一些參數,并防止過度擬合。最常見的池化類型是使用MAX操作的濾波器尺寸(2,2)的池層。它會做的是,它將占用原始圖像的每個4 * 4矩陣的最大值。
你還可以使用其他操作(如平均池)進行池化,但是最大池數量在實踐中表現更好。
20)填充(Padding) ——填充是指在圖像之間添加額外的零層,以使輸出圖像的大小與輸入相同。這被稱為相同的填充。
在應用濾波器之后,在相同填充的情況下,卷積層具有等于實際圖像的大小。
有效填充是指將圖像保持為具有實際或“有效”的圖像的所有像素。在這種情況下,在應用濾波器之后,輸出的長度和寬度的大小在每個卷積層處不斷減小。
21)數據增強(Data Augmentation) ——數據增強是指從給定數據導出的新數據的添加,這可能被證明對預測有益。例如,如果你使光線變亮,可能更容易在較暗的圖像中看到貓,或者例如,數字識別中的9可能會稍微傾斜或旋轉。在這種情況下,旋轉將解決問題并提高我們的模型的準確性。通過旋轉或增亮,我們正在提高數據的質量。這被稱為數據增強。
循環(huán)神經網絡
22)循環(huán)神經元(Recurrent Neuron) ——循環(huán)神經元是在T時間內將神經元的輸出發(fā)送回給它。如果你看圖,輸出將返回輸入t次。展開的神經元看起來像連接在一起的t個不同的神經元。這個神經元的基本優(yōu)點是它給出了更廣義的輸出。
23)循環(huán)神經網絡(RNN) ——循環(huán)神經網絡特別用于順序數據,其中先前的輸出用于預測下一個輸出。在這種情況下,網絡中有循環(huán)。隱藏神經元內的循環(huán)使他們能夠存儲有關前一個單詞的信息一段時間,以便能夠預測輸出。隱藏層的輸出在t時間戳內再次發(fā)送到隱藏層。展開的神經元看起來像上圖。只有在完成所有的時間戳后,循環(huán)神經元的輸出才能進入下一層。發(fā)送的輸出更廣泛,以前的信息保留的時間也較長。
然后根據展開的網絡將錯誤反向傳播以更新權重。這被稱為通過時間的反向傳播(BPTT)。
24)消失梯度問題(Vanishing Gradient Problem) ——激活函數的梯度非常小的情況下會出現消失梯度問題。在權重乘以這些低梯度時的反向傳播過程中,它們往往變得非常小,并且隨著網絡進一步深入而“消失”。這使得神經網絡忘記了長距離依賴。這對循環(huán)神經網絡來說是一個問題,長期依賴對于網絡來說是非常重要的。
這可以通過使用不具有小梯度的激活函數ReLu來解決。
25)激增梯度問題(Exploding Gradient Problem) ——這與消失的梯度問題完全相反,激活函數的梯度過大。在反向傳播期間,它使特定節(jié)點的權重相對于其他節(jié)點的權重非常高,這使得它們不重要。這可以通過剪切梯度來輕松解決,使其不超過一定值。
以上就是關于神經網絡的概念相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀:
腰椎間盤突出壓迫神經腿疼怎么治(腰椎間盤突出壓迫神經腿疼怎么治中藥)
openai自動代碼生成器(openapi3.0 自動生成api文檔)