人工神经网络算法实战教程
神經網絡(Artificial Neural Network,也稱為人工神經網絡,簡稱ANN)具有通過示例學習能力。ANN是受生物神經元系統啟發的的信息處理模型,它由大量高度互聯的處理元素組成,這些處理元素被稱神經元,整體協作用于解決實際問題。
它遵循非線性路徑,并在整個節點中并行處理信息。神經網絡是一個復雜的自適應系統,意味著它有能力通過調整輸入的權重來改變其內部結構。
ANN主要用于解決對人很容易但對機器很難的問題,如:識別貓狗圖片、數字圖片。這些問題通常也稱為模式識別,廣泛應用于光學字符識別(OCR, optical character recognition)、物體檢測等。本文主要介紹ANN并通過R示例介紹其實現過程。
介紹神經網絡
1943年,沃倫·麥卡洛克(Warren McCulloch)和沃爾特·皮茨(Walter Pitts)建立了首個神經元數學模型。在他們的研究論文A logical calculus of the ideas immanent in nervous activity中,描述了神經元的簡單數學模型,它代表了神經系統中接受輸入、處理輸入并返回輸出的單個細胞,該模型被稱為McCulloch-Pitts神經模型。
神經網絡是一種受人腦啟發而執行特定任務或功能的算法,它需要通過學習的過程再來進行計算。神經網絡包括一組連接的輸入/輸出單元,其中每個連接都有一個與之相關的權值。在學習階段調整連接節點的權值擬合訓練模型,在預測階段對給定輸入預測其正確分類標簽。
人腦由數十億處理信息的神經元細胞組成,每個神經元細胞被認為是一個簡單的處理系統。神經元通過信號傳遞信息,它們相互連接形成生物神經網絡,這種并行交互的系統使得大腦能夠思考和處理信息。一個神經元的樹突(Dendrites)接收另一個神經元的輸入信號,并根據這些輸入對另一個神經元的軸突(axon)輸出響應。
樹突接收來自其他神經元的信號,細胞體將所有輸入信號相加產生輸出,當和達到閾值時軸突通過輸出。突觸(Synapse,來源于希臘語,意思是連接)是神經元相互作用的一個點,它向另一個神經元傳遞信號。
其中 y = ∑(weight?input)+bias{∑(weight * input) + bias}∑(weight?input)+bias
這里的x1, x2 …… Xn是輸入變量,w1 w2 …… Wn是各自輸入的權重。b為偏置,與加權輸入相加形成凈輸入,偏置和權值都是神經元的可調節參數。參數調整采用一定的學習規則。神經元的輸出可以從負無窮到正無窮,神經元不知道邊界,所以需要在神經元輸入和輸出之間有一個映射機制,這種映射機制稱為激活函數。
前向和反向傳播
人工神經網絡主要有兩類:前向傳播和反向傳播。前向傳播神經網絡非遞歸的網絡,前一層神經元只與下一層神經元相連,它們不形成循環,信號僅向輸出層單向傳播。
反向傳播神經網絡包含循環,信號通過在網絡中引入環路進行雙向傳播,從而導致網絡行為基于輸入信號隨著時間推移而改變。反向傳播神經網絡又稱循環神經網絡。
激活函數
激活函數用局部感應來定義神經元輸出。激活函數給神經元引入了非線性因素,使得神經網絡可以逼近任何非線性函數,讓神經網絡可以應用到眾多的非線性模型中。下面介紹常用的幾種激活函數:
-
恒等函數:它總是返回和其輸入相同的值。換句話說,恒等函數為函數f(x) = x,輸入等于輸出。
-
階躍函數:如果輸出在特定閾值之上則輸出為真(被激活),反之則輸出假(沒有被激活),作為分類器非常有用。
-
Sigmoid函數:是常見的S型函數,也稱為S型生長曲線。Logistic函數和Tanh函數常用作Sigmoid函數。主要為輸出值范圍不同,一種輸出范圍為[0,1],另一種范圍為[-1,1]。
-
斜坡函數(ramp function):斜坡函數名稱來源于其圖形外觀。它將負輸入映射為0,將正輸入映射為相同的輸出。
-
ReLU函數:它是使用最多的激活函數。它將負輸入映射為0,將正輸入映射為相同的輸出。
R 實現神經網絡示例
首先需要安裝加載neuralnet包,然后創建示例數據。
示例數據包括兩類變量,特征變量和標簽變量。特征變量包括知識技能和溝通交流兩方面的得分,標簽變量為二值標簽(是否為尖子生)。為了簡化,示例數據僅包括6條的數據。
| 20 | 90 | 1 |
| 10 | 20 | 0 |
| 30 | 40 | 0 |
| 20 | 50 | 0 |
| 80 | 50 | 1 |
| 20 | 80 | 1 |
下面代碼主要實現神經網絡分類模型,neuralnet函數的調用形式如下:
nn=neuralnet(topStu ~ tScore + cScore, data=df, hidden=3, act.fct = "logistic", linear.output = FALSE)第一個參數指定標簽和特征變量,data設置數據集,hidden指定隱藏層數量為3。
act.fct指定激活函數平滑結果;linear.output為False表示使用act.fct,設置True則不使用。
其他代碼都加了注釋,完整代碼如下:
# 加載庫 library(neuralnet)# 創建示例數據 tScore <- c(20,10,30,20,80,30) cScore <- c(90,20,40,50,50,80) topStu <- c(1,0,0,0,1,1)# 組合為數據框 df <- data.frame(tScore, cScore, topStu)# 擬合神經網絡模型 nn <- neuralnet(topStu ~ tScore + cScore, data=df, hidden=3, act.fct = "logistic", linear.output = FALSE)# 畫出神經網絡圖 plot(nn)# 創建測試數據 tScore <- c(30, 40, 85) cScore <- c(85, 50, 40) test <- data.frame(tScore, cScore)## 使用神經網絡模型預測 Predict <- compute(nn, test) Predict$net.result# 轉換輸出概率為標簽,閾值設置為0.5 prob <- Predict$net.result pred <- ifelse(prob>0.5, 1, 0) pred神經網絡使用場景
神經網絡更靈活,既可以用于回歸問題,也可以用于分類問題。神經網絡適合于圖像等輸入量較大的非線性數據集,神經網絡可以處理任意數量的輸入和層,神經網絡采用并行方式執行。
當然也有很多替代算法,如支持向量機,決策樹和回歸算法,這些算法簡單,快速,易于訓練,并提供更好的性能。神經網絡則是黑盒子,需要更多時間來訓練模型,同時會占用更多計算能力;神經網絡比其他機器學習算法需要更多樣本數據,神經網絡只能用于數值輸入和非缺失值數據集。一位著名的神經網絡研究者說: “神經網絡是解決任何問題的第二好方法,最好的方法是真正理解問題所在。”
神經網絡應用場景非常多,主要包括:
-
模式識別: 神經網絡非常適合用于人臉識別、目標檢測、指紋識別等模式識別問題。
-
異常檢測: 神經網絡擅長模式檢測,它們可以很容易地檢測出不符合一定模式的異常模式。
-
時間序列預測: 神經網絡可以用于預測時間序列問題,如股票價格,天氣預報。
-
自然語言處理: 神經網絡在自然語言中有廣泛的應用。
總結
恭喜你堅持讀到結尾,給自己點個贊吧。本文介紹了神經網絡的概念:前向和反向神經網絡,激活函數等。并提供R語言實現示例以及神經網絡的應用場景。希望你學習后能夠應用神經網絡算法分析自己的數據集,感謝閱讀。
總結
以上是生活随笔為你收集整理的人工神经网络算法实战教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UDT 分析
- 下一篇: PIC单片机入门笔记(新手学PIC必看)