如何在神经网络上实现套索正则化或弹性网络?(特别是前馈)。我知道这个问题的封闭式解决方案不存在,它们是如何实现的?如何计算梯度?
注意,我熟悉这两个程序以及它们完成的工作,我要问的是如何实现它们,如何制定渐变。
如何在神经网络上实现套索正则化或弹性网络?(特别是前馈)。我知道这个问题的封闭式解决方案不存在,它们是如何实现的?如何计算梯度?
注意,我熟悉这两个程序以及它们完成的工作,我要问的是如何实现它们,如何制定渐变。
你可以看看稀疏自动编码器,它有时会对神经激活施加 L1 惩罚,从优化的角度来看,它类似于 Lasso(对权重的 L1 惩罚)。这是一个 Theano实现。UFLDL教程提供了一种替代方法:
这个目标函数提出了最后一个问题——L1 范数在 0 处不可微,因此对基于梯度的方法提出了问题。虽然可以使用其他基于非梯度下降的方法来解决该问题,但我们将使用允许我们使用梯度下降的近似值来“平滑”L1 范数。为了“平滑” L1 范数,我们使用代替,其中 ε 是一个“平滑参数”,也可以解释为一种“稀疏参数”(要看到这一点,请观察当 ε 与 x 相比较大时,x + ε 以 ε 为主,并取平方root 产生大约)。
因此,您可以使用平滑近似来遵循他们的方法,但您也可以使用精确的梯度,它在 0 处不连续,但有时这可能不是问题。例如,流行的 ReLU 神经元也有一个在 0 处不连续的梯度,但对于大多数应用程序来说这不是问题。
此外,您可以查看极限学习机 (ELM),它们是 MLP,仅学习最终层的权重并使用随机隐藏层权重。这看起来很奇怪,但它可以在非常快的时间内达到合理的结果(见右图)。由于训练 ELM 的优化问题只是线性回归,因此您可以为此使用任何 Lasso 工具。