我正在尝试在 MATLAB 中训练一个基本的自动编码器。我的数据是 430 个十维点,我的自动编码器代码像
n_features = 25;
autoenc = trainAutoencoder(data, n_features, ...
'SparsityRegularization', 1, ...
'SparsityProportion', 0.1, ...
'L2WeightRegularization', 0.001, ...
'MaxEpochs', 1000, ...
'DecoderTransferFunction','purelin');
如您所见,我正在使用线性解码器。当我在我的数据集上运行它时,autoenc
最终只是学习了一个常量函数。所有输入权重最终都会不同,但运行predict(autoenc, data)
会为每个数据点提供相同的向量。会发生什么?
编辑:我环顾四周,自动编码器有时会简单地学习数据的平均值并称之为一天,这似乎是一种普遍现象。显然这是一个优化错误,这是一个局部最小值。相关链接;有点相关的链接。两者都没有提供令人满意的答案。据我所知,MATLAB 的自动编码器仅提供共轭梯度。