简单来说:
如何为我的无监督神经网络的成本和反向传播(我正在使用堆叠稀疏自动编码器)实现类似 ICA 的熵或峰度惩罚项?
详细说明:
我基于 Andrew Ng 的 UFLDL 教程使用共轭梯度下降和 Wolfe 线搜索在 Matlab 中实现了稀疏自动编码器 (AE)。与使用 infomax 的独立分量分析 (ICA) 相比,这在我的数据上获得了更清晰的结果(我将我的 AE 的隐藏层激活与 eeglab 的 runica 函数的 ICA 激活进行了比较。)
然而,激活的最大独立性,就像在 ICA 中一样,对我来说也是一个基本标准。所以我想实现更高质量的 sNN 隐藏激活,但也让它们独立。换句话说,我想从稀疏性和独立性中受益。
ICA 使用熵或峰态惩罚项来最小化跨组件(激活)的互信息。
我尝试简单地应用 matlab 的 goropy 或峰度函数:如果给定隐藏层的激活矩阵 '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;
这给出了不好的结果并且没有独立的激活。我想我还应该计算反向传播的惩罚误差,但我不确定如何计算。我也不确定我的上述费用罚款是否正确。
有什么想法可以改进上述代码,或者只是用简单的数学术语为我指出正确的方向?