【问题标题】:Fitting Keras L1 models安装 Keras L1 模型
【发布时间】:2018-03-18 04:51:22
【问题描述】:

我有一个简单的 keras 模型(普通 Lasso 线性模型),其中输入被移动到单个“神经元”Dense(1, kernel_regularizer=l1(fdr))(input_layer),但该模型的权重从未完全设置为零。我觉得这很有趣,因为 scikit-learn 的 Lasso 可以将系数精确设置为零。

我使用了Adam 和 tensorflow 的FtrlOptimizer 进行优化,他们也有同样的问题。

我已经检查过这个question 但这并不能解释为什么 sklearn 可以将值设置为零,更不用说当 Keras 中的相同模型需要 2.4 秒时,它们的模型如何在我的服务器上以约 500 毫秒收敛提前终止。

这都是因为使用了优化器还是我遗漏了什么?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    这都是因为使用了优化器还是我错过了 什么?

    确实如此。如果您从 scikit-learn(它从 ElasticNet 类中调用)拟合 Lasso 时查看实际的 function that gets called,您会发现它使用了不同的优化算法。

    scikit-learn 的ElasticNetstarts with coefficient vector equal to zero 中的坐标下降,然后考虑一次添加一个非零条目(这与线性回归的逐步特征选择有关)。

    用于优化 L1 正则化回归的其他方法也以这种方式工作:例如 LARS(最小角度回归)也可以从 scikit-learn 中使用。

    与此相反,paper on FTRL 算法说

    不幸的是,OGD 在生产方面并不是特别有效 稀疏模型。实际上,只需添加一个次梯度 损失梯度的 L1 惩罚 (Ow`t(w)) 基本上永远不会产生精确的系数 零。

    【讨论】:

    • 我知道这一点,这就是为什么我特别将我的权重初始化为零并且我使用了来自 tensorflow 的FtrlOptimizer,这是一种坐标下降算法(据我所知)。
    • 我已经相应地编辑了我的答案 - 这篇论文在FtrlOptimizer的tf文档中链接...
    • 你说得对,回想起来似乎是一个愚蠢的问题。现在我已经写了一个 FISTA 优化器什么的 :( .
    • @SARose 实际上我认为这是一个非常好的问题 - 我直观地感受到了答案,但我必须检查 scikit-learn 代码以确保我是对的。另外,我不确定 sklearn 的 LASSO 之前在内部到底使用了什么。
    猜你喜欢
    • 2019-09-06
    • 2018-11-26
    • 2017-10-23
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2022-01-18
    • 2019-08-02
    • 2017-08-26
    相关资源
    最近更新 更多