在机器学习中使用不可训练的参数可以吗?

Is it okay to have non-trainable params in machine learning?

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

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

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

拥有这样不可训练的参数不仅是可以的,而且对于大多数训练算法来说是不可避免的。

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

Keras 中不可训练的参数在 中进行了描述。

...non-trainable parameters of a model are those that you will not be updating and optimized during training, and that have to be defined a priori, or passed as inputs.

此类参数的例子有:

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

These parameters are "non-trainable" because you can't optimize its value with your training data.

解决您的问题:

Is it okay to have non-trainable params?

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

Does this create errors in the model?

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

但有些架构会比其他架构更好地处理您的数据和任务。

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

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


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

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

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

例如如果你正在训练一个简单的Logistic Regression,你有一个参数C,代表regularization,基本上影响你的意愿 "penalty" 错误答案的算法。

你可能想对你的算法进行非常严厉的惩罚以泛化更多(但你也可以 underfit),或者你可能不想对错误进行高惩罚(这也可能导致 overfitting)

这是你无法从数据中学习的东西 - 这是你可以调整以满足你的特定需要的东西。