我一直在研究 UFLDL 教程(在 matlab/octave 中):
http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
并且一直在不同的数据集上尝试稀疏自动编码器。我尝试在时间序列数据上运行它并遇到了问题。由于输入数据具有负值,因此 sigmoid 激活函数 (1/1 + exp(-x)) 不合适。当替换为 tanh 时,优化程序 minfunc (L-BFGS) 失败(步长低于 TolX)。我大幅降低了 TolX 常数,但没有任何变化。 我将输出层更改为线性,保留输入层 sigmoid,但这不是一个更好的解决方案。自动编码器的输出按常数 (0.5) 放大,这会扰乱成本函数。所以......简而言之:
为什么 Tanh 激活函数不能与 L-BFGS 一起使用? (或者还有其他问题)?
..我错过了什么?人们在任何地方读到的内容都说激活函数是可以互换的。我知道有解决方法(重新调整数据、使用 FFT 系数等),但我不明白为什么这不起作用。
无论如何,先感谢所有回答的人!这是这里的第一篇文章,我越来越多地阅读这些类型的论坛,并发现它们越来越有帮助......
最佳答案
我想我可能已经明白了。谢谢两位的回答!稀疏性惩罚使用 Kullback Leibler Divergence。请参阅此链接,位于页面下方一半以上。 (你可以在这里输入 Latex 吗?)无论如何,它可能有点长..
http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity
英文:稀疏性惩罚试图最小化隐藏单元的激活,但它假设输出范围在 0 和 1 之间的 sigmoid,因为 KL div 仅在 0 和 1 之间才是实数。 如果 tanh 的平均激活值为 0(这就是我们想要的稀疏自动编码器),那么该页面上给出的 KL div 就不令人满意。 我环顾四周,但运气不佳;
是否有一种形式的 KL div 具有适当的 tanh 激活范围?有人可以指出我的任何引用资料吗?在上面链接的网站上,作者说稀疏惩罚的许多选择都是可以的,但没有进一步详细说明其他选择可能是什么。编造一些东西是否谨慎?或者寻找一些被接受的东西。再次感谢!
关于machine-learning - 具有 UFLDL 的 Tanh 激活功能的稀疏自动编码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430870/