initnw
Nguyen・Widrow 層初期化関数
構文
net = initnw(net,i)
説明
initnw は、Nguyen・Widrow 初期化アルゴリズムにしたがって層の重みとバイアスを初期化する層初期化関数です。このアルゴリズムは、層内の各ニューロンのアクティブな領域が層の入力空間でほぼ均等に分散されるように、値を選択します。この値にはある程度のランダム性があるため、この関数を呼び出すたび異なる値になります。
initnw を使用するには、有限のアクティブな入力範囲をもつ伝達関数が初期化対象の層に存在する必要があります。そのような伝達関数には、tansig や satlin などがあります。ただし、purelin は、アクティブな入力範囲が無限区間 [-inf, inf] であるため、この条件を満たしません。tansig などの伝達関数は、次のようにアクティブな入力範囲を返します。
activeInputRange = tansig('active')
activeInputRange =
-2 2
net = initnw(net,i) は、2 つの引数を取ります。
net | ニューラル ネットワーク |
i | 層のインデックス |
これは、層 i の重みとバイアスが更新されたネットワークを返します。
Nguyen・Widrow の初期化には、ランダムな要素があります。initnw を呼び出す前に毎回既定の乱数発生器を設定しない限り、この関数を呼び出すたびに異なる重みとバイアスが生成されます。
ネットワークの利用
feedforwardnet または cascadeforwardnet を呼び出すことによって、initnw を使用する標準的なネットワークを作成できます。
initnw を使用して初期化されるようにカスタム ネットワークを準備するには、以下のようにします。
net.initFcnを'initlay'に設定します。これにより、net.initParamが空行列[]に設定されます。これは、initlayに初期化パラメーターがないためです。net.layers{i}.initFcnを'initnw'に設定します。
ネットワークを初期化するには、init を呼び出します。
アルゴリズム
Nguyen・Widrow 法は、層内のニューロンのアクティブな領域が入力空間でほぼ均等に分散されるように、層の重みとバイアスの初期値を生成します。
これには、重みとバイアスを純粋にランダム化する場合と比べて次の利点があります。
無駄なニューロンが減る (すべてのニューロンが入力空間に含まれるため)。
学習が高速化される (入力空間の各領域にニューロンが存在するため)。Nguyen・Widrow 法は、次の層のみに適用できます。
バイアスが存在する
重みの
weightFcnがdotprodであるnetInputFcnがnetsumに設定されているtransferFcnのアクティブな領域が有限である
これらの条件が満たされていない場合、initnw は、rands を使用して層の重みとバイアスを初期化します。
バージョン履歴
R2006a より前に導入
参考
cascadeforwardnet | feedforwardnet | init | initlay | initwb