【问题标题】:Is it okay to have non-trainable params in machine learning? [closed]在机器学习中有不可训练的参数可以吗? [关闭]
【发布时间】:2019-01-26 20:10:03
【问题描述】:

在构建机器学习模型时,是否可以使用不可训练的参数?或者这会在模型中产生错误吗?我对不可训练的参数实际上是什么以及如何基于此修复您的模型感到困惑。

【问题讨论】:

  • 我不明白为什么会这样。你已经在神经网络中有一个偏置单元,并且不训练它。我想你也可以有其他的,只是把它排除在培训之外。
  • @Chrispresso 偏差单元经过训练......你的意思是你不训练那个?
  • 如果您特指“NN”或“多层 NN”,请不要说“机器学习”。如果您指的是 NN,您是指各个层的维度、连接性(全部/部分)、激活函数吗?或者梯度提升树中的超参数,比如学习率、正则化?还是回归或随机森林中的固定效应或混合效应建模?或者是其他东西?还是所有这些? (我将此超参数标记为猜测,但如果不适用,请编辑)

标签: python machine-learning keras hyperparameters


【解决方案1】:

通常,不可训练的参数并不意味着您为其分配随机或预定义值的某些权重(无法知道正确的值,因为它们取决于其他权重值) .

这意味着您已经做出了先验的一些架构决策。例如,在神经网络中,这些参数将是层数和每层的节点数。这些可以通过有根据的猜测来决定,或者通常通过反复试验(交叉验证)来决定。

拥有这种不可训练的参数不仅没问题,而且对于大多数训练算法来说都是不可避免的。

【讨论】:

    【解决方案2】:

    编辑: 正如 enumaris 在 cmets 中提到的,问题可能是指 Keras 中不可训练的参数,而不是一般不可训练的参数(超参数)

    Keras 中不可训练的参数在answer to this question 中有描述。

    ...模型的不可训练参数是那些在训练期间不会更新和优化的参数,必须定义为 先验,或作为输入传递。

    此类参数的示例有:

    1. 隐藏层数
    2. 每个隐藏层上的节点
    3. 每个单独层上的节点
      和其他人

    这些参数是“不可训练的”,因为您无法优化它 与您的训练数据相结合。

    解决您的问题:

    可以有不可训练的参数吗?

    是的,如果您正在构建 NN 或其他机器学习模型,这没关系,事实上这是不可避免的。

    这会在模型中产生错误吗?

    它默认不会产生错误,它决定了你的神经网络的架构。

    但有些架构在您的数据和任务方面的表现会比其他架构更好。

    因此,如果您选择次优的不可训练参数,您可以并且将欠拟合您的数据

    优化不可训练的参数是另一个非常广泛的话题。


    一般机器学习理论的答案:

    非训练参数(并非专门针对 Keras)称为超参数

    他们的目的是根据您的具体要求调整算法

    例如如果你正在训练一个简单的Logistic Regression,你有一个参数C,代表regularization,它基本上影响你将 “惩罚”一种错误答案的算法。

    您可能希望对算法进行非常严格的惩罚以进行更多推广(但您也可以underfit),或者您可能希望不对错误进行高额惩罚(这也可能导致overfitting

    这是您无法从数据中学到的东西 - 这是您可以调整以满足您的特定需求的东西。

    【讨论】:

    • 这个答案忽略了模型中的某些层可能被冻结的可能性,就像转移学习中的情况一样。根据定义,这些层的权重是不可训练的参数。事实上,Keras 会告诉你到底有多少参数是可训练的和不可训练的。当 Keras 输出“不可训练的参数”时,它实际上并没有告诉你你的模型有多少超参数。它指的是那些冻结的层。
    • @enumaris 感谢您指出这一点!我认为这个问题不是 Keras 和 NN 特定的(因为问题通常是“在机器学习中”)。但你是对的,值得一提。我会尽快更新我的答案以解决您的评论。
    • 是的,我在字里行间做一些阅读,因为当您执行 model.summary() 时,标记为 Keras 和 Keras 的 OP 具​​有“可训练参数与不可训练参数”输出,所以我觉得就像这就是OP所要求的。
    • @enumaris 我编辑了这个问题。如果我在新答案的某个地方有错误,请随时纠正我。
    • 我认为实际上您链接的那个问题中的第二个答案(有 5 个赞成票的那个),而不是您所指的接受的答案,是解决我所谈论的上下文的答案。但同样,我在这里阅读字里行间。 OP 完全有可能不是 Keras 中的“不可训练参数”。
    猜你喜欢
    • 2022-11-28
    • 2020-05-06
    • 2011-02-15
    • 1970-01-01
    • 2019-07-15
    • 2017-06-25
    • 2017-04-06
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多