A. 神經網路中訓練函數(基本梯度下降法、BP演算法)和優化演算法(SDG,ADAM)有什麼關系
traingdx 有動量和自適應lr的梯度下降法 trainlm Levenberg - Marquardt方法 traind 梯度下降法
B. 神經網路中rprop是什麼演算法
對於bp神經網路來說沒有固定的標准可以得到最好的bp網路,設計好後只能手動修改參數然後選擇最好的。下邊是個分類的例子
clc
clear
close all
%---------------------------------------------------
% 產生訓練樣本與測試樣本,每一列為一個樣本
P1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
T1 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];
P2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
T2 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];
%---------------------------------------------------
% 歸一化
[PN1,minp,maxp] = premnmx(P1);
PN2 = tramnmx(P2,minp,maxp);
%---------------------------------------------------
% 設置網路參數
NodeNum = 10; % 隱層節點數
TypeNum = 3; % 輸出維數
TF1 = 'tansig';TF2 = 'purelin'; % 判別函數(預設值)
%TF1 = 'tansig';TF2 = 'logsig';
%TF1 = 'logsig';TF2 = 'purelin';
%TF1 = 'tansig';TF2 = 'tansig';
%TF1 = 'logsig';TF2 = 'logsig';
%TF1 = 'purelin';TF2 = 'purelin';
net = newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});
%---------------------------------------------------
% 指定訓練參數
% net.trainFcn = 'traingd'; % 梯度下降演算法
% net.trainFcn = 'traingdm'; % 動量梯度下降演算法
%
% net.trainFcn = 'traingda'; % 變學習率梯度下降演算法
% net.trainFcn = 'traingdx'; % 變學習率動量梯度下降演算法
%
% (大型網路的首選演算法 - 模式識別)
% net.trainFcn = 'trainrp'; % RPROP(彈性bp)演算法,內存需求最小
%
% 共軛梯度演算法
% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正演算法
% net.trainFcn = 'traincgp'; % Polak-Ribiere修正演算法,內存需求比Fletcher-Reeves修正演算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal復位演算法,內存需求比Polak-Ribiere修正演算法略大
% (大型網路的首選演算法 - 函數擬合,模式識別)
% net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient演算法,內存需求與Fletcher-Reeves修正演算法相同,計算量比上面三種演算法都小很多
%
% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,計算量和內存需求均比共軛梯度演算法大,但收斂比較快
% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,計算量和內存需求均比BFGS演算法小,比共軛梯度演算法略大
%
% (中小型網路的首選演算法 - 函數擬合,模式識別)
net.trainFcn = 'trainlm'; % Levenberg-Marquardt演算法,內存需求最大,收斂速度最快
%
% net.trainFcn = 'trainbr'; % 貝葉斯正則化演算法
%
% 有代表性的五種演算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm'
%---------------------%
net.trainParam.show = 1; % 訓練顯示間隔
net.trainParam.lr = 0.3; % 學習步長 - traingd,traingdm
net.trainParam.mc = 0.95; % 動量項系數 - traingdm,traingdx
net.trainParam.mem_rec = 10; % 分塊計算Hessian矩陣(僅對Levenberg-Marquardt演算法有效)
net.trainParam.epochs = 1000; % 最大訓練次數
net.trainParam.goal = 1e-8; % 最小均方誤差
net.trainParam.min_grad = 1e-20; % 最小梯度
net.trainParam.time = inf; % 最大訓練時間
%---------------------------------------------------
% 訓練與測試
net = train(net,PN1,T1); % 訓練
%---------------------------------------------------
% 測試
Y1 = sim(net,PN1); % 訓練樣本實際輸出
Y2 = sim(net,PN2); % 測試樣本實際輸出
Y1 = full(compet(Y1)); % 競爭輸出
Y2 = full(compet(Y2));
%---------------------------------------------------
% 結果統計
Result = ~sum(abs(T1-Y1)) % 正確分類顯示為1
Percent1 = sum(Result)/length(Result) % 訓練樣本正確分類率
Result = ~sum(abs(T2-Y2)) % 正確分類顯示為1
Percent2 = sum(Result)/length(Result) % 測試樣本正確分類率
C. 梯度下降演算法是指什麼 神經網路
梯度下降演算法是神經網路在每代更新網路權值的一種方法。
神經網路還有很多其他更新權值的方法,不只這一種
D. 神經網路演算法中,參數的設置或者調整,有什麼方法可以採用
若果對你有幫助,請點贊。
神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路里的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜索演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等),這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜索方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函數的輸出(在神經網路中就是預測誤差)下降。 然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函數(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函數(預測誤差)比較小。
而在尋解過程中,步長太大,就會搜索得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設置適當非常重要。
學習率對原步長(在梯度下降法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度,
而在matlab神經網路工具箱里的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智能的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函數帶來的效果來對學習率作調整,再根據學習率決定步長。
機制如下:
if newE2/E2 > maxE_inc %若果誤差上升大於閾值
lr = lr * lr_dec; %則降低學習率
else
if newE2 < E2 %若果誤差減少
lr = lr * lr_inc;%則增加學習率
end
詳細的可以看《神經網路之家》nnetinfo里的《[重要]寫自己的BP神經網路(traingd)》一文,裡面是matlab神經網路工具箱梯度下降法的簡化代碼
若果對你有幫助,請點贊。
祝學習愉快
E. 對於非連續目標在深度神經網路的優化過程中 哪種梯度下降方法最好
還有很多,一步正割演算法,擬牛頓演算法,量化共軛梯度法,彈性梯度下降法等等。具體可以在MATLAB的help文件訓練函數中查看,路徑是:Neural Network Toolbox>Functions>Training Functions,可以看到各種演算法的函數及詳細介紹
F. 神經網路利用哪種演算法將損失函數的值降到最低
用的是梯度下降演算法,用偏微分找出超平面下降最快的方向,使損失函數快速下降。
G. Matlab神經網路原理中可以用於尋找最優解的演算法有哪些
若果對你有幫助,請點贊。
神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路里的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜索演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等),這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜索方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函數的輸出(在神經網路中就是預測誤差)下降。 然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函數(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函數(預測誤差)比較小。
而在尋解過程中,步長太大,就會搜索得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設置適當非常重要。
學習率對原步長(在梯度下降法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度,
而在matlab神經網路工具箱里的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智能的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函數帶來的效果來對學習率作調整,再根據學習率決定步長。
機制如下:
if newE2/E2 > maxE_inc %若果誤差上升大於閾值
lr = lr * lr_dec; %則降低學習率
else
if newE2 < E2 %若果誤差減少
lr = lr * lr_inc;%則增加學習率
end
詳細的可以看《神經網路之家》nnetinfo里的《[重要]寫自己的BP神經網路(traingd)》一文,裡面是matlab神經網路工具箱梯度下降法的簡化代碼