演算法第一課 BP神經網路

2021-10-01 04:06:08 字數 2779 閱讀 3681

演算法學習

一、bp神經網路

bp(back propagation)神經網路是2023年由rumelhart和mcclelland為首的科學家提出的概念,是一種按照誤差逆向傳播演算法訓練的多層前饋神經網路,是目前應用最廣泛的神經網路。從結構上講,bp神經網路具有輸入層、隱藏層和輸出層;從本質上講,bp演算法就是以網路誤差平方為目標函式、採用梯度下降法來計算目標函式的最小值。

人工神經網路無需事先確定輸入輸出之間對映關係的數學方程,僅通過自身的訓練,學習某種規則,在給定輸入值時得到最期望接近輸出值的結果。

(一)基本構成

(二)基本思想

bp神經網路演算法包括訊號的前向傳播和誤差的反向傳播兩個過程。即計算誤差輸出時按從輸入到輸出的方向進行,而調整權值和閾值從輸出到輸入的方向進行。

正向傳播時,輸入訊號通過隱層作用於輸出節點,經過非線性變換,產生輸出訊號,若實際輸出與期望輸出不相符,則轉入誤差的反向傳播過程。誤差反向傳播是將輸出誤差通過隱層逐級反傳,並將誤差分攤給各層的所有單元,以從各層獲得的訊號誤差作為調整各單元權值的依據。通過調整輸入節點與隱層節點的連線強度和隱層節點與輸出節點的連線強度以及閾值,使誤差沿梯度方向下降,經過反覆學習訓練,確定與最小誤差相對應的網路引數(權值和閾值),訓練即告停止。此時經過訓練的神經網路即能對類似樣本的輸入資訊,自行處理輸出誤差最小的經過非線性轉換的資訊。

(三)bp神經網路的優缺點

1.優點

bp神經網路無論在網路理論還是在效能方面已比較成熟。其突出優點就是具有很強的非線性對映能力和柔性的網路結構。網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其效能也有所不同。

2.缺點

1、學習速度慢,即使是乙個簡單的問題,一般也需要幾百次甚至上千次的學習才能收斂。

2、容易陷入區域性極小值。

3、網路層數、神經元個數的選擇沒有相應的理論指導。

4、網路推廣能力有限

(四)bp神經網路的應用

1)函式逼近:用輸入向量和相應的輸出向量訓練乙個網路逼近乙個函式。

2)模式識別:用乙個待定的輸出向量將它與輸入向量聯絡起來。

3)分類:把輸入向量所定義的合適方式進行分類。

4)資料壓縮:減少輸出向量維數以便於傳輸或儲存。

nnet(formula, data, weights, …,subset, na.action, contrasts = null)

nnet(x, y, weights, size, wts, mask,

linout = false, entropy = false, softmax = false,

******ed = false, skip = false, rang = 0.7, decay = 0,

maxit = 100, hess = false, trace = true, maxnwts = 1000,

abstol = 1.0e-4, reltol = 1.0e-8, …)

其中formula:公式的形式class ~ x1 + x2 + …

x:矩陣x值的例子或資料框

y:矩陣或資料框的例子目標值

size:隱藏層單位數目

linout:切換線性輸出單位

nnet包中的nnet(x, y, size, rang, decay, maxit, skip, hess, trace)函式:單層的前向神經網路模型。

size神經網路隱藏層的神經元個數;

rang初始隨機權值[-rang, rang];

decay經元輸入權重的乙個修改偏正引數,表明權值是遞減的(可以防止過擬合);

maxit最大反饋迭代次數;

skip是否允許跳過隱藏層;

hess是否輸出hessian值;

trace指出是否要最優化。

(五)案例分析

install.packages(「nnet」)

library(nnet)

install.packages(「mlbench」)

library(mlbench)

data(vehicle)#選取資料

head(vehicle)#資料前五行展示

str(vehicle)#變數型別

n = length(vehicle[,1]); #樣本量

nset.seed(111)#設定隨機數的種子

samp = sample(1:n, n/2)#隨機選擇半數觀測值作為訓練集

b = class.ind(vehicle$class); #生成類別的示性函式

head(b)

#利用初始訓練集前18個變數作為輸入變數,隱藏層有三個節點,初始隨機權值在[-0.1, 0.1],權值是逐漸衰減的

test.cl = function(true, pred)

a = nnet(vehicle[samp, -19], b[samp, ],size = 3, rang = 0.1,

decay = 5e-4, maxit = 200);

#結果分析

summary(a)

#給出訓練集分類結果

test.cl(b[samp, ], predict(a, vehicle[samp, -19]))

#給出測試集分類結果

test.cl(b[-samp, ], predict(a, vehicle[samp, -19]))

#結果不好,換組資料

網路第一課(2)

這個乙個慢慢接近於乙個聊天工具的製做 sendto include include include include int main step 2 char p cc struct sockaddr in mi mi.sin family af inet mi.sin port htons 9527...

演算法導論第一課

計算機效能 比效能更重要的是?正確性 簡介 可維護性 穩定性 健壯性 特性 功能性 模組化 安全 可擴充套件性 使用者體驗 效能的重要性?效能的好與壞直接決定著可行 不可行。比如實時資料 有趣,我們嚮往速度。排序問題?輸入 a1,a2,an 輸出 a1 a2 an 插入排序 演算法複雜度 n 2 偽...

演算法導論第一課

1.課程分兩部分 演算法分析,演算法設計 2.演算法分析 首先考慮的是效能,how fast 其次會考慮通訊,ram,disk占用等等 3.what is more important than perf 功能性,模組化,安全,使用者友好,可擴充套件.then why study algs?1,pe...