BP ニューラル ネットワークの非線形システム モデリング (MATLAB 実装)

 このブログの完全なコードを取得します。

MATLAB ニューラル ネットワーク 43 のケース スタディ - MATLAB および Simulink 書籍

1事件の背景

        エンジニアリング アプリケーションでは、複雑な非線形システムに遭遇することがよくありますが、これらのシステムの状態方程式は複雑であり、数学的手法を使用して正確にモデル化することが困難です。この場合、BP ニューラル ネットワークを構築して、これらの非線形システムを表現できます。この方法では、未知のシステムをブラック ボックスと見なし、最初にシステムの入出力データを使用して BP ニューラル ネットワークをトレーニングし、ネットワークが未知の機能を表現できるようにします。次に、トレーニングされた BP ニューラル ネットワークを使用してシステムの出力を予測します。
        この章で当てはめる非線形関数は次のとおりです。

        この関数のイメージを図 2-1 に示します。

図2-1 機能イメージ

2 モデルの確立

        図 2-2 に示すように、BP ニューラル ネットワークに基づく非線形関数フィッティング アルゴリズム プロセスは、BP ニューラル ネットワークの構築、BP ニューラル ネットワークのトレーニング、および BP ニューラル ネットワークの予測の 3 つのステップに分けることができます。


        BP ニューラル ネットワークの構造は、近似された非線形関数の特性に基づいて BP ニューラル ネットワークの構造を決定します。非線形関数には 2 つの入力パラメーターと 1 つの出力パラメーターがあるため、BP ニューラル ネットワークの構造は 2--5-1、つまり入力層には 2 つのノードがあります。隠れ層には 5 つのノードがあり、出力層には 1 つのノードがあります。
        BP ニューラル ネットワーク トレーニングでは、非線形関数の入力データと出力データを使用してニューラル ネットワークをトレーニングするため、トレーニングされたネットワークは非線形関数の出力を予測できます。2000 セットの入力および出力データが非線形関数からランダムに取得され、1900 セットがネットワーク トレーニング用のトレーニング データとしてランダムに選択され、100 セットがネットワークのフィッティング性能をテストするためのテスト データとして使用されました。
        ニューラル ネットワーク予測は、学習済みのネットワーク予測関数を使用して出力され、予測結果が分析されます。

3 MATLAB の実装

        BP ニューラル ネットワーク理論によれば、MATLAB ソフトウェア プログラミングを使用して、BP ニューラル ネットワークに基づく非線形フィッティング アルゴリズムを実装します。

3.1 BPニューラルネットワークツールボックス機能

        MATLAB ソフトウェアには、MATLAB Neural Network Toolbox が含まれています。これは人工ニューラル ネットワーク理論に基づいており、MATLAB 言語を使用して、ニューラル ネットワークの設計とトレーニングのための数式演算、行列演算、方程式解法などの理論に関連するサブルーチンのほとんどを構築します。ユーザーは必要に応じて関連するサブルーチンを呼び出すだけで、ネットワーク構造の設計、重みの初期化、ネットワークの学習、結果の出力などの一連の作業を完了できるため、複雑で巨大なプログラムを書く手間が省けます。現在、MATLAB ニューラル ネットワーク ツールボックスには、パーセプトロン、線形ネットワーク、BP ニューラル ネットワーク、放射基底ネットワーク、自己組織化ネットワーク、回帰ネットワークが含まれています。BP ニューラル ネットワークでは主に newff、sim、train の 3 つのニューラル ネットワーク機能が使用されており、それぞれの機能について説明します。

3.1.1. newff: BPニューラルネットワークパラメータ設定関数 機能: BPニューラルネットワークを構築します。

関数形式:

net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)P: 入力データ行列。
T: 出力データ行列。S: 隠れ層ノードの数。
TF: ノード伝達関数 (ハード制限伝達関数hardlim、対称ハード制限伝達関数hardlims、線形伝達関数 purelin、タンジェント シグモイド伝達関数 Tansig、対数シグモイド伝達関数 logsig を含む) BTF: トレーニング関数 (勾配降下法 BP アルゴリズム トレーニング関数 traingd を含む
) 、運動量逆伝播用の勾配降下法 BP アルゴリズム トレーニング関数 traingdm、動的適応学習率用の勾配降下法 BP アルゴリズム トレーニング関数 traingda、運動量逆伝播および動的適応学習率用の勾配降下法 BP アルゴリズム トレーニング関数 traingdx、Levenberg_Marquardt の BP アルゴリズム トレーニング関数 trainlm。
BLF: ネットワーク学習機能。BP 学習ルール learngd および運動量アイテムを含む BP 学習ルール learninggdm を含みます。

PF: 平均絶対誤差性能解析関数 mae、平均二乗誤差性能解析関数 mse を含む性能解析関数。

IPF:入力処理機能。
OPF:出力処理機能。
DDF:検証用データ分割機能。
一般に、最初の 6 つのパラメータは使用中に設定され、最後の 4 つのパラメータはシステムのデフォルトのパラメータを採用します。

3.1.2.train: BPニューラルネットワークトレーニング機能

機能: トレーニング データを使用して BP ニューラル ネットワークをトレーニングします。
関数形式: [net,tr] =train(NET,X,T,Pi,Ai)NET: トレーニングされるネットワーク。
X: 入力データ行列。

T: 出力データ行列。
Pi: 入力層の条件を初期化します。

Ai: 出力層の条件を初期化します。

net: 訓練されたネットワーク。

tr: トレーニングプロセスの記録。
一般に、最初の 3 つのパラメータは使用中に設定され、最後の 2 つのパラメータはシステムのデフォルトのパラメータを採用します。

3.1.3. sim: BP ニューラルネットワーク予測関数

関数 function: トレーニングされた BP ニューラル ネットワークを使用して、関数の出力を予測します。

関数形式: y=sim(net,x)
net: 訓練されたネットワーク。
x: 入力データ。
y: ネットワーク予測データ。

3.1.4 完全な matlab コード

        まず、非線形関数方程式に基づいて関数の入出力データ 2000 セットをランダムに取得し、そのデータを data.mat ファイルに格納します (input が関数の入力データ、output が関数の出力データ)。入出力データからランダムに 1900 個のデータを選択してネットワーク学習データとし、100 個のデータをネットワークテストデータとして使用し、学習データを正規化します。

        次に、トレーニング データを使用して BPニューラル ネットワークをトレーニングし、ネットワークが非線形関数の出力を予測できるようにします。

        最後に、訓練された BP ニューラル ネットワークを使用して非線形関数の出力を予測し、ニューラル ネットワークを通じて出力と期待される出力を予測します。

BP ニューラル ネットワークのフィッティング能力を分析します。
%% 该代码为基于BP神经网络的预测算法
%% 清空环境变量
clc
clear

%% 训练数据预测数据提取及归一化
%下载输入输出数据
load data input output

%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);

%找出训练数据和预测数据
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900));
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));

%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);

%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,5);

net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00004;

%网络训练
net=train(net,inputn,outputn);

%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
 
%网络预测输出
an=sim(net,inputn_test);
 
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);

%% 结果分析

figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=BPoutput-output_test;


figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)

figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')

errorsum=sum(abs(error));

4結果分析

        学習済みの BP ニューラル ネットワークを使用して関数の出力を予測します。予測結果、 BP ニューラル ネットワークの予測出力と期待される出力の間の誤差は、下の図に示されています

        上の図からわかるように、BP ニューラル ネットワークは高いフィッティング能力を持っていますが、ネットワーク予測結果には依然として一定の誤差があり、一部のサンプル点の予測誤差は大きくなります。以下のケースでは、より良い予測結果を得るために、BP ニューラル ネットワークの最適化アルゴリズムについて説明します。

5 件の拡張子

5.1 多重隠れ層BPニューラルネットワーク

        BPニューラルネットワークは入力層、中間層、出力層から構成され、中間層は層数に応じて単一中間層と複数中間層に分けられます。多重隠れ層は複数の単一隠れ層で構成されており、単一隠れ層に比べて汎化能力が高く予測精度が高いですが、学習時間が長くなります。隠れ層の数の選択は、ネットワークの精度とトレーニング時間の観点から総合的に考慮する必要があります。より単純なマッピング関係の場合、ネットワークの精度が要件を満たしている場合、プロセスを高速化するために単一の隠れ層を選択できます。複雑なマッピングの場合は、単一の隠れ層を選択できます。 、関係、ネットワークの予測精度を向上させるために複数の隠れ層を選択できます。
        MATLAB ニューラル ネットワーク ツールボックスの関数 newff を使用すると、複数の隠れ層を含む BP ニューラル ネットワークを簡単に構築できます。その呼び出し関数は次のとおりです。

net = newff(inputn,outputn,[5,5]);
        単一隠れ層 BP ニューラル ネットワークと二重隠れ層 BP ニューラル ネットワークの実行時間と予測精度のパフォーマンスを比較します。ネットワーク構造は同じで、学習反復は 100 回で、10 回の予測結果の平均を比較します。比較結果は以下のとおりです(表 2-1)。

 

        表 2-1 から、単一隠れ層 BP ニューラル ネットワークと比較して、二重隠れ層 BP ニューラル ネットワークの予測精度は向上しますが、実行時間が増加することがわかります。

5.2 隠れ層ノードの数

        BP ニューラル ネットワークを構築するときは、隠れ層のノード数の選択に注意する必要があります。隠れ層のノード数が少なすぎると、BP ニューラル ネットワークは複雑なマッピング関係を確立できず、ネットワーク予測が困難になります。誤差が大きくなります。ただし、ノードが多すぎると、ネットワークの学習時間が増加し、「オーバーフィッティング」現象が発生する可能性があります。つまり、トレーニング サンプルの予測は正確ですが、他のサンプルの予測誤差が大きくなります。隠れ層ノードの数が異なる場合の BP ニューラル ネットワークの予測誤差を表 2-2 に示します。

        この場合に当てはめられた非線形関数は比較的単純であるため、ノード数が増加するにつれて BP ニューラル ネットワークの予測誤差は減少し続けますが、複雑な問題の場合、ネットワーク予測誤差は通常、最初は減少し、その後増加する傾向を示します。ノード数が増えます。

5.3 予測精度に対するトレーニング データの影響

        ニューラル ネットワークの予測精度は学習データの量と密接に関係しており、特に多入力多出力のネットワークでは、ネットワークの学習データが不足すると、ネットワーク予測値に大きな誤差が生じる可能性があります。
        筆者はかつて、4入力5出力のBPニューラルネットワークを構築して実験結果を予測するBPニューラルネットワーク予測の例を行ったことがあります。ネットワーク トレーニング データは実際の実験から得られます。実験プロセスの複雑さのため、84 セットのデータのみが取得されました。80 セットのデータが BP ニューラル ネットワーク トレーニング データとして選択され、残りの 4 セットのデータがテストとして使用されましたトレーニング後の BP ニューラル ネットワークの予測結果は次のとおりです。
        表 2-3 からわかるように、トレーニング データが不足しているため、BP ニューラル ネットワークは十分にトレーニングされておらず、BP ニューラル ネットワークの予測値と期待値の間の誤差が大きくなっています。
        著者はかつて同様の予測問題を実行しました。この問題の目的は、4 入力 4 出力の BP ニューラル ネットワーク予測システム出力を構築することでした。トレーニング データはモデル シミュレーションの結果から取得しました。モデルはソフトウェアでシミュレーションできるため、複数のデータセットを取得し、1,500 セットのデータを選択してネットワークを学習させたところ、最終的にネットワークの予測値が期待値に近づきました。

5.4 ノード転送機能

MATLAB ニューラル ネットワーク ツールボックスの関数 newff は、主に次の 3 つを含むいくつかのノード伝達関数を提供します。

        ネットワーク構造、重み、閾値が同じ場合、BP ニューラルネットワークの予測誤差、平均二乗誤差、出力層ノード伝達関数の関係は表 2-4 のようになります。

        表 2-4 から、隠れ層関数と出力層関数の選択が BP ニューラル ネットワークの予測精度に大きな影響を与えることがわかります。一般に、隠れ層のノード伝達関数には logsig 関数または Tansig 関数が使用され、出力層のノード伝達関数には Tansig 関数または Purelin 関数が使用されます。

5.5 ネットワークフィッティングの制限

        BP ニューラル ネットワークは優れたフィッティング能力を持っていますが、そのフィッティング能力は絶対的なものではなく、一部の複雑なシステムでは、BP ニューラル ネットワークの予測結果に大きな誤差が生じる可能性があります。たとえば、

        その機能グラフを 図 2-6 に示します

        この関数の入力データと出力データの 2000 セットをランダムに選択し、そこから 1900 セットのデータを取り出してネットワークをトレーニングし、100 セットのデータを取り出してネットワークの適合能力をテストします。2-5-1 のネットワーク構造を持つ単一隠れ層 BP ニューラル ネットワークが使用され、100 回のネットワーク トレーニング後に予測関数が出力され、予測結果は図 2-7 に示されています。図 2-7 からわかるように、複雑な非線形システムの場合、BP ニューラル ネットワークの予測誤差は比較的大きくなります。この例は、BP ニューラル ネットワークのフィッティング能力の限界を示しています。

おすすめ

転載: blog.csdn.net/weixin_44209907/article/details/131787697