簡単に言えば:
教師なしニューラル ネットワークのコストと逆伝播に ICA のようなエントロピーまたは尖度ペナルティ項を実装するにはどうすればよいですか (スタックされたスパース オートエンコーダーを使用しています)。
詳細に:
Andrew Ng の UFLDL チュートリアルに基づいて、Matlab にスパース オートエンコーダー (AE) を共役勾配降下法と Wolfe 直線探索で実装しました。これにより、infomax を使用した独立成分分析 (ICA) よりもはるかにクリーンな結果が得られます (AE の隠れ層の活性化を eeglab の runica 関数の ICA 活性化と比較します)。
しかし、ICA のように、アクティベーションの最大の独立性も、私にとって重要な基準です。だから私はより高品質の sNN 隠しアクティベーションを実現したいのですが、それらを独立させたいと思っています。言い換えれば、スパース性と独立性の両方から恩恵を受けたいのです。
ICA は、エントロピーまたは尖度ペナルティ項を使用して、コンポーネント (アクティベーション) 間の相互情報を最小限に抑えます。
私は単に matlab の goropy または kurtosis 関数を適用しようとしました: 与えられた非表示層の活性化行列 'a' が (outputNeurons*hiddenNeurons) である場合、私は次のようにします:
betaEntropy = 0.01;
for m = 1:size(a,1)
entropyM(m) = abs(wentropy(a(m,:),'shannon'));
% kurtosisM(m) = abs(kurtosis(a(m,:)));
end
entropyPenalty = betaEntropy * mean(entropyM);
cost = cost + Wdecay + sparsityJ + entropyPenalty;
これは悪い結果をもたらし、独立したアクティベーションはありませんでした。バックプロパゲーションのペナルティの誤差も計算する必要があると思いますが、方法がわかりませんでした。上記のコストペナルティが正しいかどうかもわかりません。
上記のコードを改善するため、または単純な数学用語で正しい方向に向けるためのアイデアはありますか?