人工知能・機械学習コース課題(2.関数近似)


この記事は、人工知能と機械学習コースの課題 (2. 関数近似) の第 2 部です。

この記事は学習の参考のみを目的としています。


 他の章にジャンプします:

1. 知識工学の基礎

2. 関数近似

3. ファジーロジック

4. 機能の最適化


目次

2. 関数近似

2.1 BPネットワーク

2.1.1 BPニューラルネットワークの原理

2.1.2 BP ニューラルネットワークに基づく非線形関数近似

2.2 BPネットワークモデルパラメータの変更と近似結果の解析

2.2.1 隠れ層の数を変更する

2.2.2 各層のニューロン数を変更する

2.2.3 学習率の変更

2.2.4 トレーニングアルゴリズムの変更

2.2.5 アクティベーション関数の変更

2.2.6 近似結果の分析

2.3 RBFニューラルネットワークの原理

2.4 RBFネットワークモデルパラメータの変更と近似結果の解析

2.4.1 動径基底拡張速度パラメータの変更

2.4.2 ニューロンの最大数パラメータを変更する

2.4.3 ステップサイズパラメータの変更

2.5 BPネットワークとRBFネットワークの近似結果の解析と実験まとめ

2.6 BP および RBF ニューラル ネットワークに基づいて非線形関数を近似するための MATLAB ソース コード

 2. 関数近似


Q: BP ネットワークと RBF ネットワークを使用して、次の非線形関数の近似問題を調べます。

y=(1+3x-2x^{^{2}})e^{^{-x^{^{2}}/2}},x\in [-10,10]

必要とする:

1.まず、トレーニング セットとテスト セットとして 2 つのデータ セットを取得し、トレーニング セットを使用してネットワークをトレーニングし、テスト セットを使用してトレーニング結果を検証します。

2.隠れ層ニューロンの数、トレーニングアルゴリズム、学習率、最大反復回数などのパラメータを変更し、それらが近似精度に及ぼす影響を分析します。

3. 2 つのネットワークの近似結果の比較分析。

2.1 BPネットワーク

2.1.1 BPニューラルネットワークの原理

       BP ニューラル ネットワークは誤差逆伝播ニューラル ネットワークとも呼ばれ、非線形変換単位から構成されるフィードフォワード ネットワークであり、一般的な多層フィードフォワード ネットワークも BP ニューラル ネットワークと呼ばれます [1]。

       BP 学習アルゴリズムは、人工ニューラル ネットワークをトレーニングするための基本的な方法です。これは非常に重要で古典的な学習アルゴリズムでもあります。その本質は、誤差関数の最小値問題を解決することです。複数の重みを調整するために使用できます。レイヤーフィードフォワードニューラルネットワーク。この学習アルゴリズムの提案は、人工ニューラルネットワークの開発を促進する上で大きな役割を果たしました。

       ニューラルネットワークの情報処理機能は、ネットワークユニット(ニューロン)の入出力特性(活性化特性)、ネットワークのトポロジー(ニューロンの接続方法)、接続の重み(シナプス結合)の大きさによって決まります。強度)とニューロンの閾値(特別な接続権とみなされます)。ニューロンはニューラル ネットワークの最も基本的なコンポーネントであり、その構造モデルを図 2-1 に示します。

 図 2-1 ニューロンの構造モデル

このうち、xi(i=1,2,...,R)はニューロン入力、wi(i=1,2,...,R)はニューロン間の結合重み、b=w0は閾値である。 ( バイアス値 )、xo=1 もニューロン入力とみなす場合、次のように、w0 を特別な接続重み、f を伝達関数 (活性化関数)、y をニューロン出力とみなすことができます。

y=f(\sum_{i=1}^{R}x_{i}w_{i}+b)

X=(x1 x2...xR)、W=(w1 w2...wR)T、XW+b=n とすると、次のようになります。

y=f(n)

       伝達関数 f には線形または非線形関数を使用できます。一般的に使用される伝達関数には、hardlim (ハード リミット伝達関数)、purelin (線形伝達関数)、logsig (対数伝達関数) などがあります。

       いわゆる BP モデルは、最も広く使用されているタイプのニューラル ネットワーク モデルです。構造的に言えば、BP ネットワークは典型的な階層型多層ネットワークであり、入力層、隠れ層、出力層があり、各層は層間でほぼ完全に接続されています。同じフロアにあるユニット間の相互接続はありません。図 2-2 は、典型的な 3 層 BP ニューラル ネットワーク構造を示しています。多層パーセプトロンと比較すると、この 2 つは似ていますが、大きな違いもあります。BP ネットワークとパーセプトロンの主な違いは、各層の重みを学習によって調整できることです。logsig 関数は微分可能であるため、BP ネットワークはこの関数を伝達関数として使用します。

       BP ネットワークは、入力から出力への高度に非線形なマッピング、つまり F:Rm->Rn、Y=f(n) として見ることができます。サンプルセットの入力、つまり入力 xi(Rm) と出力 yi(Rn) については、g(xi)=yi,i=1,2,...,p のような特定のマッピング g があると考えることができます。ここで、ある意味 (通常は最小二乗の意味) で f が g の最良の近似となるようなマッピング f を持つことが必要になります。Hechat-Nielsen は、次のコルモゴロフの定理を証明しました: 任意の連続関数 f:U->R (U は閉じた単位間隔 [0,1]) が与えられた場合、f は 3 層フィードフォワード ネットワークによって正確に実現できます。第 1 層には m 個の処理ユニットがあり、中間層には 2m+1 個の処理ユニットがあり、第 3 層には n 個の処理ユニットがあります。

 図2-2 3層BPニューラルネットワーク構造図

2.1.2 BPニューラルネットワークに基づく非線形関数近似

       近似する必要がある関数は次のとおりです。

y=(1+3x-2x^{^{2}})e^{^{-x^{^{2}}/2}},x\in [-10,10]

       ここでの非線形関数近似問題では、反復回数の更新はあまり実用的な効果を持たないことに注意してください。関数が比較的単純であるため、過度に考慮するのではなく、MSE、SSE、RMSE などの評価指標をより多く考慮することになります。複雑さの問題にさらに注意を払う必要があります。したがって、BP のエポックを 1000000 で表される無限大に設定します。

        元の非線形関数を図 2-3 に示します。区間 [-10,10] を 8:2 の比率に従ってトレーニング セットとテスト セットに分割します。つまり、トレーニング セットは [-10,6)、テスト セットは [6,10] です。隠れ層の数、ニューロンの数、学習率、トレーニングアルゴリズム、活性化関数などのネットワークモデルパラメータを変更する必要があるため、過学習を防ぐために検証セットを使用する必要があることに注意してください。こちらも同様で、ニューラルネットワークでは必ず使用する手法なので、ネットワークパラメータを変更する際に、トレーニングセットの一部を検証セットに分割し、最終的にトレーニングセット:検証セット:テストセット=6を取得しました。 :2:2。

 図 2-3 元の非線形関数

        newff の学習機能とその特徴、利用シーンを表 2-1 に示します。

表 2-1 トレーニング機能とその特徴、利用シーン

関数名

機能と使用シナリオ

訓練された

基本的な勾配降下法、収束速度は比較的遅い

トレーニングDM

運動量項を使用した勾配降下法、通常は trainingd より高速

トレーニングDX

運動量項を使用した適応学習アルゴリズム、traingdm より高速

トレーナー

Elastic BP アルゴリズムには、収束速度が速く、メモリ使用量が小さいという利点があります。

トレインCGF

Fletcher-Reeves 共役勾配法は、共役勾配法の中でストレージ要件が最小のアルゴリズムです。

トレインCGP

Polak-Ribiers 共役勾配アルゴリズム。ストレージ容量は traincgf よりわずかに大きいですが、一部の問題ではより速く収束します。

電車のCG

正規化共役勾配法は、線形探索を必要としない唯一の共役勾配法です。

トレインBFG

BFGS - 準ニュートン法。共役勾配法よりも大きな記憶領域が必要で、反復ごとに時間がかかりますが、通常、収束に必要な反復回数が共役勾配法より少なく、小規模ネットワークに適しています。

トレインロス

ワンステップセグメンテーション法は、共役勾配法と準ニュートン法の折衷的な方法です。

電車

Levenberg-Marquardt アルゴリズムは、中規模のネットワーク向けの最も高速なトレーニング アルゴリズムですが、大量のメモリを消費するという欠点があります。大規模なネットワークの場合、パラメータ mem-reduc を 1、2、3、... に設定することで、ヤコビ行列をいくつかの部分行列に分割できます。ただし、これには欠点もあり、システムのオーバーヘッドはヤコビアンの各部分行列の計算に密接に関係します。

2.2 BPネットワークモデルパラメータの変更と近似結果の解析

       統計データには、隠れ層の数、ニューロンの数、学習アルゴリズム、学習率、最大反復回数が含まれており、これらのモデルパラメータをそれぞれ変更して近似精度への影響を分析すると、次の表のようになります。 2-2

表 2-2 BP ニューラル ネットワーク モデルのパラメータの変更

シリアルナンバー

隠れ層の数

ニューロンの数

トレーニングアルゴリズム

学習率

活性化関数

#1

1

10

トレインLM

0.001

ログシグ

#2

2

10,10

トレインLM

0.001

ログシグ

#3

3

10、10、10

トレインLM

0.001

ログシグ

#4

1

20

トレインLM

0.001

ログシグ

#5

2

20,10

トレインLM

0.001

ログシグ

#6

5

20,20,10,10,5

トレインLM

0.01

ログシグ

#7

5

20,20,10,10,5

トレインLM

0.1

ログシグ

#8

5

20,20,10,10,5

電車のCG

0.01

ログシグ

#9

5

20,20,10,10,5

電車のCG

0.01

タンジー

#10

5

20,20,10,10,5

トレインラップ

0.01

ログシグ

#11

5

20,20,10,10,5

トレーニング

0.01

ログシグ

       BP ニューラル ネットワークのソース コードは次のとおりです。

%% BP网络逼近非线性函数源码
%%
clear
clc
close all
%% 数据生成
n = 10000; % 总数据量
% x = 20 * rand(n,1)-10; % x生成
x = linspace(-10,10,n); % x生成
fx = (1 + 3.*x - 2.*x.^2).*exp(-x.^2./2); % fx生成
dataOrigin = [x,fx];% 原始数据生成
%%
figure(1)
plot(x,fx,'LineWidth',2)
grid on
title('原始非线性函数')
xlabel('X Label')
ylabel('Y Label')
%% 拆分数据集
X_train = x(1:8000);
X_test = x(8001:end);
Y_train = fx(1:8000);
Y_test = fx(8001:end);
disp('1*************************************************')
epochs=1000000;
goal = 1e-7;
mid = [20];
transfun = {'logsig'};
stra = 'trainlm';
lr = 0.001;
[netALL] = trainAndModel(X_train,Y_train,epochs,goal,mid,transfun,stra,lr);
% test
SimYALL = sim(netALL,X_test);
% cal score
deltaY = Y_test - SimYALL;
fprintf('最大绝对误差绝对值,即绝对误差限为:')
[MaxindeltaY,p1] = max(abs(deltaY))
deltaToY = deltaY./Y_test;
fprintf('最大相对误差绝对值,即相对误差限为:')
[MaxindeltaToY,p2] = max(abs(deltaToY))
% 均方差MSE
fprintf('均方误差MSE为:')
test_mse = mse(deltaY)
% 和方差SSE
fprintf('和方差SSE为:')
test_sse = test_mse*n
% 均方根RMSE
fprintf('均方根差SSE为:')
test_rmse = sqrt(test_mse)
%%
figure(2)
hold on
plot(X_test,Y_test,'LineWidth',1.5)
plot(X_test,SimYALL,'LineWidth',1.5)
plot(X_train,Y_train,'','LineWidth',1.5)
legend('非线性函数理想曲线','非线性函数BP逼近曲线','训练部分')
title('BP网络训练结果')
xlabel('X Label')
ylabel('Y Label')
grid on
axes('Position',[0.54 0.17 0.34 0.33])
hold on
plot(X_test,Y_test,'LineWidth',2)
plot(X_test,SimYALL,'LineWidth',2)
grid on
axis([6 10 -0.00006 0.0002])

2.2.1隠れ層の数を変更する

       表 2-2 の #1、#2、および #3 の番号が付いたネットワーク モデル パラメーターに従って、隠れ層の数はそれぞれ 1、2、および 3 に設定され、マグネシウム層ニューロンの数は 10 で、トレーニングアルゴリズムは trainlm です。学習率は 0.001、活性化関数は logsig、最適化指標として平均二乗誤差 (mse) が使用され、検証セットで検証されます。最終的なパフォーマンス結果は次のとおりです。

 図 2-4 #1 モデル パラメーターのトレーニング結果

 図 2-5 #2 モデル パラメーターのトレーニング結果

 

 図 2-6 #3 モデル パラメーターのトレーニング結果

2.2.2各層のニューロン数を変更する

       表 2-2 に示すように、番号 #1 について、ニューロンの数を 20 に変更し、他のパラメータを変更しないと、図 2-7 に示すような学習結果が得られます。

 図 2-7 #4 モデル パラメーターのトレーニング結果

       同様に、番号 #2 については、最初の隠れ層のニューロン数のみを 20 に変更し、その他のパラメータを変更しないと、図 2-8 に示すような学習結果が得られます。

 図 2-8 #5 モデル パラメーターのトレーニング結果

2.2.3学習率の変更

       表 2-2 の番号 #6 と #7 に示すように、隠れ層の数は 5、ニューロンの数は 20、20、10、10、5、学習率はそれぞれ 0.01、0.1 に設定されています。トレーニング アルゴリズムと活性化関数はそれぞれ trainlm と logsig であり、トレーニング結果を図 2-9 と図 2-10 に示します。

 図 2-9 #6 モデル パラメーターのトレーニング結果

 図 2-10 #7 モデル パラメーターのトレーニング結果

2.2.4トレーニングアルゴリズムの変更

       表 2-2 の #6、#8、#10、#11 の番号が付いたモデル パラメーターに示されているように、隠れ層はすべて 5 層に設​​定されており、ニューロンの数は 20、20、10、10、およびレートはすべて 0.01、トレーニング アルゴリズムはそれぞれ trainlm、traincg、trainrp、および traininged、活性化関数はすべて logsig です。表 2-1 に示すように、Levenberg-Marquardtアルゴリズム中規模ネットワーク向けの最速のトレーニング アルゴリズム) と正規化共役勾配法 (線形探索の共役勾配法を必要としない唯一のもの)、弾性BP アルゴリズム (高速収束と少ないメモリ使用量という利点があります) および基本的な勾配降下法。トレーニング結果を図2-11 、図2-13 、および図2-14に示します

2.2.5アクティベーション関数の変更

       表 2-2 の #8 と #9 の番号が付けられたモデル パラメーターに示されているように、隠れ層は 5 層に設​​定され、ニューロンの数は 20、20、10、10、5、学習率は 0.01 です。アルゴリズムは trainlm で、活性化関数はそれぞれ logsig と Tansig です。トレーニング結果を図2-12に示します

 図 2-11 #8 モデル パラメーターのトレーニング結果

 図 2-12 #9 モデル パラメーターのトレーニング結果

 図 2-13 #10 モデル パラメーターのトレーニング結果

 図 2-14 #11 モデル パラメーターのトレーニング結果

2.2.6近似結果の分析

       さまざまな BP ネットワーク モデル パラメーターの反復数とトレーニング時間を表 2-3 に示し、MSE、SSE、RMSE、最大相対誤差、および最大絶対誤差の結果を表 2-4 に示します。

表 2-3 さまざまな BP ネットワーク モデルの反復時間とトレーニング期間の結果

シリアルナンバー

反復回数

トレーニング時間 (秒)

#1

849

5

#2

216

42

#3

289

81

#4

88

1未満

#5

283

73

#6

460

176

#7

413

112

#8

443

35

#9

621

71

#10

937

243

#11

10000+

1000以上

表 2-4 さまざまな BP ネットワーク モデルの MSE、SSE、RMSE およびその他の結果

シリアルナンバー

MSE

SSE

RMSE

最大絶対誤差

最大相対誤差

#1

0.9255

9255.0110

0.9620

1.7650

5.4148e+19

#2

2.3173e-05

  0.2317

0.0048

0.0056

1.4902e+17

#3

  1.7493

1.7493e+04

1.3226

1.5567

4.7757e+19

#4

8.3655e-09

8.3655e-05

9.1463e-05

  9.1786e-05

2.8150e+15

#5

0.7609

7.6091e+03

0.8723

0.9602

2.9458e+19

#6

0.0486

485.7135

0.2204

0.2393

7.3422e+18

#7

0.0644

644.3497

0.2538

0.2780

8.5292e+18

#8

0.0040

40.4638

0.0636

0.0658

2.0186e+18

#9

0.1512

1.5121e+03

0.3889

0.4072

1.2492e+19

#10

6.0798e-09

6.0798e-05

7.7973e-05

7.8006e-05

2.3931e+15

#11

0.0055

54.8824

0.0741

0.0746

2.2898e+18

       要約すると、最もパフォーマンスの高いネットワークは #10 のネットワークで、MSE は 6.0798e-09、SSE は 6.0798e-05、RMSE は 7.7973e-05 で、トレーニング時間は 243 秒です。 #4 のネットワークに接続します。インジケーターは #10 と似ていますが、トレーニング時間が 1 秒未満であるため、BP ニューラル ネットワークの最終ネットワークとして #4 のネットワークを選択しました。MSE は 8.3655e-09 です。 、SSE は 8.3655e-05、RMSE は 9.1463e-05 です。最適および準最適の BP ニューラル ネットワーク モデル パラメーター、#4 モデル: 隠れ層は 1 層、ニューロンの数は 20、トレーニング アルゴリズムは trainlm、学習率は 0.001、活性化関数 logsig; #10 モデル: 暗黙的 層は 5、ニューロンの数は 20 20 10 10 5、トレーニング アルゴリズムは tranrp、学習率は 0.01、活性化関数は logsig です。

       最適な BP ネットワーク モデルのトレーニングとテストの結果を次の図に示します。

 図 2-15 最適な BP ネットワーク モデルのトレーニングとテストの結果

2.3 RBFニューラルネットワークの原理

       1980 年代に、J. Moody と C. Darken は、放射基底関数ネットワークとしても知られるニューラル ネットワーク構造モデルを提案しました。この構造モデルには、3 層のフィードフォワード ニューラル ネットワークが含まれています [2]。このニューラル ネットワーク構造の理論的基礎は次のとおりです: ニューロンの暗黙的な基底として放射基底が存在します. これらの暗黙的な基底が暗黙的な空間を構成する主な要素です. 入力ベクトルは隠れ層で変更できるため、次のような変換が実現されます低次元から高次元へ変換するため、低次元では解決できない問題も高次元空間では容易に解決できます。動径基底関数ネットワークは入力と出力の両面で比類のない利点を有しており、この利点により、動径基底関数は関数近似、パターン認識、予測などの分野で広く使用されています。

       放射基底関数ネットワークは 3 層のフィードフォワード ニューラル ネットワークであり、入力層は外部情報の受信を担当し、空間層から隠れ層への変換は隠れ層で行われます。非線形変換も実現できます。3 番目の層は出力として機能し、入力の最終結果になります。このネットワークシステムを通じて、情報は空間層から隠れ層まで実現され、隠れ層で非線形変換を受け、最終的に線形で出力層に伝達される。

       動径基底関数では中心点に対して対称な関数となっており、中心点から遠く離れたニューロンの活動性は非常に低いため、距離が離れるにつれて活動性が低下していきます。動径基底関数にはさまざまな形式がありますが、最も一般的に使用される形式はガウス関数です。

 図 2-16 RBF ニューラル ネットワークの構造

2.4 RBFネットワークモデルパラメータの変更と近似結果の解析

       これを実現するには newrb 関数を使用します。newrb では、次のパラメータを調整できます。

表 2-5 newrb パラメータテーブル

newrb(P、T、ゴール、スプレッド、MN、DF)

P

入力変数行列

T

出力行列(ラベル値)

ゴール

平均二乗誤差の目標

広める

ラジアル基底膨張速度

ミネソタ州

ニューロンの最大数、つまりトレーニングは、ニューロンの数が MN に達するとすぐに停止します。

DF

毎回追加されるネットワークパラメータは出力時に使用されます。

       まず、平均二乗誤差の目標を決定します。非線形関数を適切に適合させるには、MSE は 0 である必要があります。ただし、過適合を防ぐために、目標を 10^(-16) に決定しました。表 2-6 に示すように、RBF ネットワーク パラメータを変更します。

表 2-6 さまざまな RBF ニューラル ネットワーク モデルのパラメーター

広める

ミネソタ州

DF

広める

ミネソタ州

DF

広める

ミネソタ州

DF

1

26

1

1

10

1

1

90

1

2

26

1

1

14

1

1

90

2

3

26

1

1

18

1

1

90

3

4

26

1

1

22

1

1

90

5

5

26

1

1

26

1

1

90

9

6

26

1

1

30

1

1

90

10

7

26

1

1

38

1

1

90

15

8

26

1

1

50

1

1

90

30

9

26

1

1

70

1

1

90

45

10

26

1

1

90

1

1

90

90

2.4.1放射基底拡張速度パラメータの変更

       パラメータの放射基底拡張速度拡散を変更するための RBF ニューラル ネットワークのソース コードは次のとおりです。

%% 更改参数spread的RBF神经网络源码
%% RBF spread
goal_rbf = 1e-16;
spread_rbf = 1;
MN_rbf = 26;
DF_rbf = 1;
SimRBF = zeros(10,2000);
for i = 1:10
    netRBF = newrb(X_train,Y_train,goal_rbf,spread_rbf,MN_rbf,DF_rbf);
    SimRBF(i,:) = sim(netRBF,X_test);
    spread_rbf = spread_rbf + 1;
end

       BP ニューラル ネットワークと同様に、MSE が目的関数として使用され、放射基底拡張速度は次のように設定されます: 1、2、3、4、5、6、7、8、9、10、スプレッド = 1 の RBF 、2、3 ニューラル ネットワークのパフォーマンス曲線を図 2-17 に示し、10 の状況のトレーニング結果を図 2-18 に示します。

図 2-17 スプレッド = 1、2、3 の RBF ニューラル ネットワーク トレーニング MSE 曲線

 図 2-18 異なるスプレッドを使用した RBF ニューラル ネットワーク テスト セットの非線形関数曲線フィッティング結果

       図 2-18 によると、spread=2、3、4、5、6、7、8、9、10 の場合、結果は発散し、spread=1 の場合にのみ mse 曲線が収束することが非常に明白です。したがって、ここでは、他のパラメータを変更するための放射基底拡張速度パラメータとして、spread=1 の場合の結果のみを考慮します。

2.4.2ニューロンの最大数パラメータを変更する

       パラメータ内のニューロンの最大数 MN を変更するための RBF ニューラル ネットワークのソース コードは次のとおりです。

%% 更改参数MN的RBF神经网络源码
%% RBF MN
matrix_MN = [10,14,18,22,26,30,38,50,70,90];
spread_rbf = 1;
for i = 1:10
    DF_rbf = 1;
    MN_rbf = matrix_MN(i);
    netRBF_mn = newrb(X_train,Y_train,goal_rbf,spread_rbf,MN_rbf,DF_rbf);
    SimRBF_MN(i,:) = sim(netRBF_mn,X_test);
End

       ニューロンの最大数は、それぞれ 10、14、18、22、26、30、38、50、70、90 に設定されています。MN=50、70、および 90 の RBF ニューラル ネットワークのパフォーマンス曲線を図 2 に示します。 17. テスト セット内の 10 ケースの結果を図 2-20 に示します。

図 2-19 MN=50、70、および 90 の RBF ニューラル ネットワーク トレーニング MSE 曲線

図 2-20 さまざまな MN に対する RBF ニューラル ネットワーク テスト セットの非線形関数曲線のフィッティング結果

       さまざまな RBF ネットワーク モデルの MSE 結果を表 2-7 に示します. 一定の範囲内では、MN が大きいほど、RBF モデルのパフォーマンス指標 MSE が小さくなり、ネットワークが優れていることがわかります。最適な MN は 1、MSE は 1.83317e -11 です。

表 2-7 さまざまな RBF ニューラル ネットワーク モデルの MSE 結果

ミネソタ州

MSE

10

2.18221e-06

14

2.07757e-08

18

2.12097e-10

22

7.57382e-11

26

7.57828e-11

30

5.99356e-11

38

5.95365e-11

50

3.70175e-11

70

1.8505e-11

90

1.83317e-11

2.4.3ステップサイズパラメータの変更

       最適なパラメーター値としてニューロンの最大数 MN=90 を選択します。最後に、予測結果への影響を分析するために、さまざまなステップ サイズの DF パラメーター値が与えられます。パラメータ DF を変更するための RBF ニューラル ネットワークのソース コードは次のとおりです。

%% 更改参数DF的RBF神经网络源码
%% RBF DF
for i = 1:10
    DF_rbf = matrix_DF(i);
    MN_rbf = 1;
    netRBF_df = newrb(X_train,Y_train,goal_rbf,spread_rbf,MN_rbf,DF_rbf);
    SimRBF_MN(i,:) = sim(netRBF_df,X_test);
end

       ステップ サイズを 1、2、および 3 に設定した RBF ニューラル ネットワークのパフォーマンス曲線を図 2-21 に示します。

 図 2-21 DF=1、2、3 の RBF ニューラル ネットワーク トレーニング MSE 曲線

       上の図からわかるように、さまざまな DF は RBF ネットワーク トレーニングの MSE 曲線に大きな影響を与えないため、この記事では、視覚的に表示しやすくするために DF=1 のパラメーター結果も使用します。最後に、最適な RBF ネットワーク モデル パラメーターが得られました: 放射基底拡張速度スプレッド = 1、最大ニューロン数 MN = 90、およびステップ サイズ DF = 1. 図 2-22 は、最適な RBF ネットワーク モデルのテスト結果です。お試しセット。

 図 2-22 最適な RBF ネットワーク テスト セットは非線形関数曲線を近似します

2.5 BPネットワークとRBFネットワークの近似結果の解析と実験まとめ

       最もパフォーマンスの高い BP ニューラル ネットワーク モデルと RBF ニューラル ネットワーク モデルがそれぞれテスト セットでテストされ、得られた非線形関数近似の結果が図 2-23 に示されています。

 図 2-23 最適な BP および RBF ネットワーク テスト セット近似の非線形関数曲線の比較

結果の分析と実験の概要

       1. RBF ニューラル ネットワーク プログラムは BP ニューラル ネットワークよりも明らかに単純であり、トレーニングもより簡単です。

       2. この非線形関数近似問題では、問題が非常に単純であるため、最適な BP ニューラル ネットワークと最適な RBF ニューラル ネットワークの学習時間は非常に短く、2 つのネットワーク モデルの複雑さを比較することは不可能です。モデル パラメーターを変更する場合、より優れたネットワーク モデルは RBF ネットワークであることを考慮すると、BP ネットワーク パラメーターはさらに最適化できるため、実際にはこの結論はまだ議論されていません。2 つのネットワーク モデルの特徴は次のように要約されます。

       A) BP ニューラル ネットワークには次の特徴があります: 1. 十分な隠れ層と隠れ層ノードがある限り、BP ネットワークはあらゆる非線形マッピング関係を近似できます; 2. BP ネットワークの学習アルゴリズムはグローバル近似アルゴリズムです。強力な一般化能力を持っています; 3. ネットワークのすべての値はサンプル学習ごとに再調整する必要があり、収束速度が遅く、極小値に陥りやすいため、リアルタイムには適していませんコントロール。

       B) RBF ニューラル ネットワークには次の特徴があります: 1. RBF は異なる精度で任意の連続関数を近似できます; 2. BP ニューラル ネットワークとは異なり、RBF は局所近似ニューラル ネットワークです; 3. 入力から隠れ層への RBF のマッピングは次のとおりです。非線形: 非線形: 隠れ層から出力へのマッピングは線形であるため、大幅に高速化して極小値を回避でき、リアルタイム制御に適しています。

       C) BP ネットワークと RBF ネットワークには次の共通の特徴があります: 強力な堅牢性と適応性、隠れ層と隠れ層ノードの数が不確実であるため、経験に基づいて試してテストする必要があります。

       3. 最後に、最適な BP ニューラル ネットワーク パラメーターが得られます。隠れ層は 1 層、ニューロンの数は 20、トレーニング アルゴリズムは trainlm、学習率は 0.001、活性化関数 logsig、性能評価指標 MSE は次のとおりです。 8.3655e-09、SSE は 8.3655e-05、RMSE は 9.1463e-05 です。最適な RBF ニューラル ネットワーク パラメーター: 放射基底拡張速度スプレッド = 1、最大ニューロン数 MN = 90、ステップ サイズ DF = 1、性能評価指標: MSE は 1.83317e-11 です。

2.6 BPおよびRBFニューラル ネットワークに基づいて非線形関数を近似するためのMATLABソース コード

       BP および RBF ニューラル ネットワークに基づいて非線形関数を近似するためのソース コードは次のとおりです。

%% 基于BP、RBF神经网络逼近非线性函数的源码
%%
clear
clc
close all
%% 数据生成
n = 10000; % 总数据量
% x = 20 * rand(n,1)-10; % x生成
x = linspace(-10,10,n); % x生成
fx = (1 + 3.*x - 2.*x.^2).*exp(-x.^2./2); % fx生成
dataOrigin = [x,fx];% 原始数据生成
%%
figure(1)
plot(x,fx,'LineWidth',2)
grid on
title('原始非线性函数')
xlabel('X Label')
ylabel('Y Label')
%% 拆分数据集
X_train = x(1:8000);
X_test = x(8001:end);
Y_train = fx(1:8000);
Y_test = fx(8001:end);
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% train
disp('1*************************************************')
epochs=1000000;
goal = 1e-7;
mid = [20];
transfun = {'logsig'};
stra = 'trainlm';
lr = 0.001;
[netALL] = trainAndModel(X_train,Y_train,epochs,goal,mid,transfun,stra,lr);
% test
SimYALL = sim(netALL,X_test);
% cal score
deltaY = Y_test - SimYALL;
fprintf('最大绝对误差绝对值,即绝对误差限为:')
[MaxindeltaY,p1] = max(abs(deltaY))
deltaToY = deltaY./Y_test;
fprintf('最大相对误差绝对值,即相对误差限为:')
[MaxindeltaToY,p2] = max(abs(deltaToY))
% 均方差MSE
fprintf('均方误差MSE为:')
test_mse = mse(deltaY)
% 和方差SSE
fprintf('和方差SSE为:')
test_sse = test_mse*n
% 均方根RMSE
fprintf('均方根差SSE为:')
test_rmse = sqrt(test_mse)
%%
figure(2)
hold on
plot(X_test,Y_test,'LineWidth',1.5)
plot(X_test,SimYALL,'LineWidth',1.5)
plot(X_train,Y_train,'','LineWidth',1.5)
legend('非线性函数理想曲线','非线性函数BP逼近曲线','训练部分')
title('BP网络训练结果')
xlabel('X Label')
ylabel('Y Label')
grid on
axes('Position',[0.54 0.17 0.34 0.33])
hold on
plot(X_test,Y_test,'LineWidth',2)
plot(X_test,SimYALL,'LineWidth',2)
grid on
axis([6 10 -0.00006 0.0002])

%% RBF spread
goal_rbf = 1e-16;
spread_rbf = 1;
MN_rbf = 26;
DF_rbf = 1;
SimRBF = zeros(10,2000);
for i = 1:10
    netRBF = newrb(X_train,Y_train,goal_rbf,spread_rbf,MN_rbf,DF_rbf);
    SimRBF(i,:) = sim(netRBF,X_test);
    spread_rbf = spread_rbf + 1;
end

% goal_rbf = 0;
% spread_rbf = 1;
% MN_rbf = 26;
% DF_rbf = 1;
% netRBF = newrbe(X_train,Y_train);
% SimRBF = netRBF(X_test);
%%
figure(3)
hold on
% plot(x,fx)
for i = 1:10
    plot(X_test,SimRBF(i,:),'LineWidth',1)
end
grid on
legend('spread = 1','spread = 2','spread = 3','spread = 4','spread = 5','spread = 6','spread = 7','spread = 8','spread = 9','spread = 10')
title('不同spread参数值的rbf网络曲线测试结果')
xlabel('X Label')
ylabel('Y Label')
%%
figure(4)
hold on
for j = 1:9
    subplot(3,3,j)
    plot(X_test,SimRBF(j,:),'LineWidth',1.5)
    grid on
    title(j)
end
%% best spread = 1
SimRBF_best_spread = SimRBF(1,:);
%% RBF MN
matrix_MN = [10,14,18,22,26,30,38,50,70,90];

spread_rbf = 1;
for i = 1:10
    DF_rbf = 1;
    MN_rbf = matrix_MN(i);
    netRBF_mn = newrb(X_train,Y_train,goal_rbf,spread_rbf,MN_rbf,DF_rbf);
    SimRBF_MN(i,:) = sim(netRBF_mn,X_test);
end
%%
figure(5)
hold on
% plot(x,fx)
for i = 1:10
    plot(X_test,SimRBF_MN(i,:),'LineWidth',1)
end
grid on
legend('MN = 10','MN = 14','MN = 18','MN = 22','MN = 26','MN = 30','MN = 38','MN = 50','MN = 70','MN = 90')
title('不同mn参数值的rbf网络曲线测试结果')
xlabel('X Label')
ylabel('Y Label')
%%
figure(6)
hold on
for j = 1:9
    subplot(3,3,j)
    plot(X_test,SimRBF_MN(j+1,:),'LineWidth',1.5)
    grid on
    title(matrix_MN(j+1))
end
%% best MN = 70
SimRBF_best_mn = SimRBF_MN(10,:);
%% RBF DF
matrix_DF = [1,2,3,5,9,10,15,30,45,90];
for i = 1:10
    DF_rbf = matrix_DF(i);
    MN_rbf = 90;
    netRBF_df = newrb(X_train,Y_train,goal_rbf,spread_rbf,MN_rbf,DF_rbf);
    SimRBF_DF(i,:) = sim(netRBF_df,X_test);
end
%% best DF = 1
SimRBF_best_df = SimRBF_DF(1,:);
%% Compare
figure(7)
hold on
plot(X_test,Y_test,'-.','LineWidth',1)
plot(X_test,SimYALL,'LineWidth',1.5)
plot(X_test,SimRBF_best_mn,'LineWidth',1)
plot(X_train,Y_train,'--','LineWidth',1)
legend('非线性函数理想曲线','非线性函数BP逼近曲线','非线性函数RBF逼近曲线','训练部分')
title('BP, RBF网络训练结果')
xlabel('X Label')
ylabel('Y Label')
grid on
axes('Position',[0.54 0.17 0.34 0.33])
hold on
plot(X_test,Y_test,'-.','LineWidth',1)
plot(X_test,SimYALL,'LineWidth',1.5)
plot(X_test,SimRBF_best_mn,'LineWidth',1)
grid on
axis([6 10 -5*10^(-5) 15*10^(-5)])

人工知能と機械学習コースの課題の他の章: 1. 知識エンジニアリングの基礎; 3. ファジー論理; 4. 関数の最適化

おすすめ

転載: blog.csdn.net/HISJJ/article/details/130404679