Ⅰ 用BP神經網路建立數學模型,MATLAB實現,怎樣得到輸入到輸出的計算公式
clear;
%輸入數據矩陣
p1=zeros(1,1000);
p2=zeros(1,1000);
for i=1:1000
p1(i)=rand;
p2(i)=rand;
end
p=[p1;p2];
%目標(輸出)數據矩陣
t = cos(pi*p1)+sin(pi*p2);
%對訓練集中的輸入數據矩陣和目標數據矩陣進行歸一化處理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);
%建立BP神經網路
net = newff(pn, tn, [200,10]);
%每10輪回顯示一次結果
net.trainParam.show = 10;
%最大訓練次數
net.trainParam.epochs = 5000;
%網路的學習速率
net.trainParam.lr = 0.05;
%訓練網路所要達到的目標誤差
net.trainParam.goal = 10^(-8);
%網路誤差如果連續6次迭代都沒變化,則matlab會默認終止訓練。為了讓程序繼續運行,用以下命令取消這條設置
net.divideFcn = '';
%開始訓練網路
net = train(net, pn, tn);
%獲取網路權值、閾值
netiw = net.iw;
netlw = net.lw;
netb = net.b;
w1 = net.iw{1,1}; %輸入層到隱層1的權值
b1 = net.b{1} ; %輸入層到隱層1的閾值
w2 = net.lw{2,1}; %隱層1到隱層2的權值
b2 = net.b{2} ; %隱層1到隱層2的閾值
w3 = net.lw{3,2}; %隱層2到輸出層的權值
b3 = net.b{3} ;
in = mapminmax('apply',[0.1;0.5],inputStr);
%用公式計算輸出
y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
y1=mapminmax('reverse',y,outputStr);
%用網路驗證計算結果
out = sim(net,in);
out1=mapminmax('reverse',out,outputStr);
Ⅱ 反向傳播(Back propagation)演算法筆記
上學期學習的方向傳播演算法在此回顧。以下是一些讀書筆記,因為好記性不如爛筆頭!
Wiki上對反向傳播(Back propagation 或者BP)的描述是「誤差反向傳播」的簡稱,它是訓練人工神經網路的一種常見方法,通常與梯度下降結合使用。該方法計算網路中所有權重的損失函數梯度,並將這些梯度反饋給最優化方法,以更新權值並最小化損失函數。
反向傳播通常被認為是一種監督學習方法,因為它需要根據輸入值期望得到的已知輸出,來計算損失函數的梯度,進而更新權值。但也可以應用於無監督網路。它使用鏈式法則對網路的每層迭代計算梯度,因此,每個節點的激勵函數必須是可微的。
BP演算法主要由激勵傳播和權重更新循環迭代構成,直到網路的輸出滿足一定條件才停止。
激勵傳播和權重更新是BP演算法的兩個關鍵步驟。由於梯度指向誤差擴大的方向,而我們想要的是權重減小的方向,因此在更新權重時需要對其取反。
在推導過程中,我們首先分析神經元的結構,每個神經元由兩個部分組成。每個神經元的輸出由公式[公式] 表示,其中[公式] 表示神經元i和j之間的權值,[公式] 是上一層神經元的輸出。
在BP演算法中,誤差函數為[公式],其中t是目標輸出,y是神經元的實際輸出。其倒數為[公式]。
計算誤差對於權重的偏導數是BP演算法中最關鍵的部分。採用梯度下降的方式更新權重,關鍵是要得到誤差對於權重的偏導數[公式]。根據鏈式法則,偏導數可以表示為[公式],其中[公式]和[公式]是學習率。
以下是一個三層神經網路的例子,具有兩個輸入和一個輸出。從輸入信號開始,計算每個神經元的輸出信號[公式],總共有n個神經元。最終到輸出層。
在反向傳播階段,計算[公式]。然後依次計算[公式],... [公式]。最後更新權值[公式]。
一個回合結束後,重復該過程,直到滿足退出條件為止。
Ⅲ 對如下BP神經網路,寫出它的計算公式(含學習公式),並對其初始權值以及樣本x1=1,x
Ⅳ 【神經網路原理】如何利用梯度下降法更新權重與偏置
損失函數的值減小,意味著神經網路的預測值(實際輸出)和標簽值(預期的輸出)越接近。
損失函數通常為 多元函數 ,其自變數包括網路中包含的所有的權重w、以及所有的偏置b,有的地方也將其稱作代價函數(Cost function)或價值函數(Value function),這里只介紹均方誤差損失函數(MSE):
多元函數的梯度類似於一元函數導數 :對多元函數各變數依次求一階偏導,然後將各偏導值組合成一個一維列向量,就得到了該多元函數梯度。損失函數通常為 多元函數 ,其梯度如下:
對於神經網路結構 & 符號約定有疑惑的可以參考我的這篇文章—— 【神經網路原理】神經網路結構 & 符號約定
梯度的負方向 :因為梯度是一個向量,具有方向性。這里的 下降 是指損失函數值的減小。
那麼為什麼沿梯度的負方向損失函數值減小最快呢?這里主要利用 多元函數的一階泰勒展開 (一階形式還是比較簡單的)和 向量點積公式 來證明:
這里只給出了第 l 層的網路參數——權重(矩陣)與偏置(向量)的梯度下降更新公式,其他層網路參數的更新公式同理可得,對符號有疑惑的請參考: 【神經網路原理】神經網路結構 & 符號約定 。
有了各層網路參數(向量/矩陣)的更新公式,其中損失函數對各參數的梯度又該如何求解呢?事實上由於神經網路中參數(權重W和偏置b)通常較多,要想直接求解損失函數對這些參數的梯度,難度極大,所以在實際訓練網路時,我們通常採用 反向誤差傳播,即BP演算法 ,巧妙地利用預測值與標簽值的殘差,從輸出層到輸入層反向地求解出損失函數對各層網路參數的梯度。