刚开始接触应用机器学习时可能会感到困惑。
有太多术语要使用,而且许多术语可能没有被一致地使用。如果您来自其他领域,这些领域可能使用与机器学习相同的术语,但用法不同,情况尤其如此。
例如:“模型参数”和“模型超参数”这两个术语。
对于初学者,尤其是来自统计学或经济学领域的人来说,缺乏对这些术语的清晰定义是一个常见的难题。
在这篇文章中,我们将仔细研究这些术语。

参数和超参数有什么区别?
图片来源:Irol Trasmonte,保留部分权利。
什么是模型参数?
模型参数是模型内部的配置变量,其值可以从数据中估计。
- 模型在进行预测时需要它们。
- 它们的值定义了模型在您问题上的技能。
- 它们是从数据中估计或学习的。
- 它们通常不由实践者手动设置。
- 它们通常作为学习模型的一部分被保存。
参数是机器学习算法的关键。它们是模型中从历史训练数据中学习的部分。
在经典的机器学习文献中,我们可以将模型视为假设,将参数视为针对特定数据集调整假设的过程。
模型参数通常使用优化算法进行估计,这是一种通过可能参数值进行高效搜索的方法。
- 统计学:在统计学中,您可能会假设一个变量的分布,例如高斯分布。高斯分布的两个参数是均值(mu)和标准差(sigma)。这在机器学习中也适用,这些参数可以从数据中估计并用作预测模型的一部分。
- 编程:在编程中,您可以将参数传递给函数。在这种情况下,参数是函数参数,可以具有一系列值。在机器学习中,您使用的特定模型就是函数,并且需要参数才能对新数据进行预测。
模型是具有固定数量的参数还是可变数量的参数,决定了它是否可以被称为“参数化”或“非参数化”。
模型参数的一些示例包括:
- 人工神经网络中的权重。
- 支持向量机中的支持向量。
- 线性回归或逻辑回归中的系数。
什么是模型超参数?
模型超参数是模型外部的配置,其值无法从数据中估计。
- 它们通常用于帮助估计模型参数的过程。
- 它们通常由实践者指定。
- 它们通常可以使用启发式方法设置。
- 它们通常针对给定的预测建模问题进行调整。
我们无法知道给定问题上模型超参数的最佳值。我们可以使用经验法则、复制在其他问题上使用的值,或通过试错法搜索最佳值。
当机器学习算法针对特定问题进行调整时,例如使用网格搜索或随机搜索时,您正在调整模型的超参数,以便发现能够产生最熟练预测的模型参数。
许多模型都有无法直接从数据中估计的重要参数。例如,在K-最近邻分类模型中……这种类型的模型参数被称为调优参数,因为没有可用的分析公式来计算适当的值。
— 第64-65页,《应用预测建模》,2013年
模型超参数通常被称为模型参数,这可能会让人感到困惑。克服这种困惑的一个好经验法则是:
如果您必须手动指定模型参数,那么
它很可能是一个模型超参数。
模型超参数的一些示例包括:
- 训练神经网络的学习率。
- 支持向量机的C和sigma超参数。
- K-最近邻中的k。
进一步阅读
- 维基百科上的超参数
- Quora上的机器学习中的超参数是什么?
- StackExchange上的模型超参数和模型参数的区别是什么?
- Reddit上的什么被认为是超参数?
总结
在这篇文章中,您发现了模型参数和模型超参数的清晰定义以及它们之间的区别。
总而言之,模型参数是自动从数据中估计的,而模型超参数是手动设置的,并用于帮助估计模型参数的过程。
模型超参数通常被称为参数,因为它们是机器学习中必须手动设置和调整的部分。
这篇文章是否帮助您消除了困惑?
在下面的评论中告诉我。
您对哪些模型参数或超参数仍不确定?
请在评论中提出,我将尽力进一步澄清。
很棒的文章!这曾经是一个很大的困惑点,因为我不确定自己有哪些“旋钮”可以用来调整模型——旋钮很多,但它们不像汽车仪表盘那样集中在一起。 🙂 感谢您将其澄清!
谢谢。很高兴有帮助!
杰森,这篇文章写得太棒了。谢谢!
不客气,艾伦。
谢谢杰森,太棒了
很高兴它有帮助。
很好的解释…
谢谢韦斯利。
杰森,解释得真棒……爱读你的文章!!!
谢谢迪帕克。
在部分模型参数中,你给出了“支持向量机中的支持向量”这个例子。我有点困惑,为什么不是SVM中的系数呢?
我们将SVM找到的实例称为“支持向量”,它们在技术上不是“权重”或“系数”。
很棒的帖子,杰森。谢谢!
一个问题:k-近邻算法被认为是一种非参数模型(相对于参数模型)。那么k不应该被视为一个超参数吗?
kNN中的“k”是一个超参数。我正是这么说的,路易斯。
令人困惑的部分是“参数”的用法,例如:
“许多模型都有无法直接从数据中估计的重要参数。例如,在K-最近邻分类模型中……这种类型的模型参数被称为调优参数,因为没有可用的分析公式来计算适当的值。”
为什么这会令人困惑,路易斯?
《应用预测建模》这本书不包含“超参数”一词。上面的文章指出,许多专家混淆了参数和超参数这两个术语。
那么引用这句话的意义何在?这里有一些潜在的答案:
1. 作者错误地使用了“调优参数”这个词,应该使用“超参数”。这种理解得到了在超参数部分引用这句话的支持,此外,我的理解是,将统计显著性阈值作为调优参数可能被称为超参数,因为它
然而,我认为“调优参数”并非不正确的描述。
此外,您链接到的是贝叶斯超参数的维基百科页面,而不是机器学习中超参数的页面 https://en.wikipedia.org/wiki/Hyperparameter_optimization
维基百科页面给出了直截了当的定义:“在机器学习的上下文中,超参数是在学习过程开始之前设置的参数。相比之下,其他参数的值是通过训练获得的。”
如果我错了请纠正我,但根据许多定义,超参数是一种参数。
超参数的同义词:调优参数,元参数,自由参数
由于超参数是一种参数,因此在讨论超参数时,这两个术语可以互换使用。然而,并非所有参数都是超参数。
很棒的观点,谢谢汤米。
我通常不会不同意,但这种区别很重要,特别是如果您是初学者,试图弄清楚要“配置”或“调整”什么。
嗨,汤米,我提供这个引文是为了帮助澄清定义,而不是作为误用的例子。很抱歉造成困惑。
很好,您的定义与帖子中使用的“根据数据估计 vs 不根据数据估计”的方法相符。
清晰明了。谢谢杰森
很高兴它有帮助。
谢谢。我以为它们指的是同一件事。感谢您的澄清。
很高兴有帮助。
太棒了!这曾经真的很让人困惑(参数 vs 超参数),我一直忽略它,但这篇文章把它讲得很清楚。
谢谢你!!
很高兴有帮助!
解释得非常好。感谢您总是提供实用的帖子。
谢谢!
clf = svm.SVC(C =0.01, kernel =’rbf’, random_state=33)
——
random_state是参数还是超参数?
深入蒂姆……好问题!
直觉告诉我“超参数”,但我们不优化它,我们控制它。但这感觉不对。也许它两者都不是。
我的意思是,它会影响模型的技能,或者大多数随机模型的技能,但我们不会针对特定的模型/数据集“调整”其值。“最佳”随机种子这个想法没有意义。相反,我们会重复实验 n 次,以便对技能进行可靠的估计。我们会创建 n 个最终模型的集合,以产生更可靠的预测。
这有帮助吗?我说得通吗?
这说得通。我同意“random_seed”似乎既不是超参数也不是参数……
这个Stack Exchange问题(下方链接)暗示“random_seed”是一个参数。而如果我必须选择,我会选择“超参数”(即,你“调整”/“配置”它;它不是“由模型学习的”)
https://datascience.stackexchange.com/a/14194/77875
谢谢你的文章!
谢谢。
很棒的帖子!我目前正在研究堆叠自编码器在被动声纳分类上的应用,您的帖子对我非常有帮助。我从您那里学到了很多。顺便问一下,您有关于这个主题或新奇检测的资料吗?谢谢!
谢谢。
抱歉,我没有关于这些主题的帖子,希望能找时间写一些。
很好的澄清和解释。谢谢!
谢谢希瓦。
嗨,杰森,解释得很好。我有一个疑问,如果我们对给定的数据序列有一些超参数。当给定一个新的数据序列时,我们能预测出新的超参数集吗?
参数和超参数指的是模型,而不是数据。
对我来说,模型由其族(线性、神经网络等)及其参数完全指定。超参数在预测阶段之前使用,并对参数有影响,但之后不再需要。因此,线性模型中的系数显然是参数。任何梯度下降过程中的学习率都是超参数。结构参数,如多项式的次数或隐藏单元的数量,则介于两者之间,因为它们在模型拟合之前确定,但隐含在参数本身中。这些数字是由算法选择还是手动选择,我认为这不是一个非常有用的区别。线性模型在仅仅一两代人之前还是手动拟合的。图基曾引用过通过目测绘制超平滑器。现在没人会这么做了。
很棒的笔记,安东尼奥,谢谢。
你好!很棒的帖子,我一直在寻找这个澄清。我好奇为什么不能从数据中调整超参数,使用另一个数据分区作为“超参数测试集”
您可以这样做,这也是人们在网格搜索或随机搜索超参数时所做的。
一个模型是受模型参数还是超参数的影响更大?
一个模型由其参数定义。
超参数影响用于获得模型参数的训练过程。
这有帮助吗,约翰?
一篇很棒的文章。
我对超参数的数学含义有一个疑问。
如果将机器学习过程视为一个函数 f,它将一些输入(来自定义域)映射到其他类型的输出(值域)。
将一个值设置为超参数与数学上所谓的“函数限制”相同吗?
谢谢。
也许吧。我建议你向数学家提出这个问题。
哇!!
太棒了,终于清楚了
很高兴听到这个消息!
超参数是学习偏差或归纳偏差的实现吗?
超参数可以影响模型的偏差程度。哪些超参数有影响取决于模型。
我们以XGBoost为例,n_estimators、Max_depth等选项被称为超参数吗?而n_estimators=100或Max_depth=6中,例如100,被称为参数吗?请帮我厘清这个困惑。
是的,它们是模型的超参数,您需要为这些超参数指定值。
模型中的参数可能是xgboost模型中给定树内的具体分割点值(例如,不公开)。
很棒的信息。感谢您分享这样一篇富有信息量的文章。我有一个疑问,在进行价格预测时,我应该考虑哪些超参数?对超参数有什么建议吗?
只关注您所选模型的超参数。
非常棒的文章。事实上,您的所有文章都非常优秀且易于理解,确实帮助我理清了许多概念。
谢谢!
解释得很清楚。非常感谢!!
谢谢。
嗨,Jason,在使用K-Means/高斯混合模型等聚类算法时,我们需要进行超参数调优吗?
提前感谢🙂
抱歉,我没有关于聚类的材料。我不想给你临时的误导性建议。
嗨,Jason,好文章。我是机器学习的初学者。您的文章对我帮助很大。但是我对如何选择最佳参数感到困惑?我们是否需要定期更新参数?
算法通过训练选择参数。超参数由您选择。我建议运行实验,看看在您特定数据集上,所选模型的哪些超参数值是最佳的。
如果您的数据随着时间发生变化或漂移,模型参数可能需要更新。我在这里对此进行了解释。
https://machinelearning.org.cn/gentle-introduction-concept-drift-machine-learning/
亲爱的 Jason,
首先,非常感谢这篇精彩的文章,它澄清了两种参数类型。
我有一个问题:在我们组织里,我们有足够的计算能力通过网格搜索来调整超参数。然而,几乎每次我选择在训练集上获得最大AUC的超参数配置时,在测试集上都会面临相当糟糕的结果,这意味着过拟合……您会推荐我们采用什么策略来避免这种过拟合呢?当然,我们可以使用随机搜索(这样会大大减少运行时间),但很可能无法获得最佳结果。那么在这种情况下我们还能做些什么呢?
提前感谢……
也许可以对文献中显示出良好结果的配置进行网格搜索(例如,使用文献来定义搜索的边界)。
你好…
我正在使用深度卷积神经网络进行遥感图像分类。
1. 训练中使用的变量包括滤波器权重、偏差、学习率、动量等……它们是参数还是超参数?
2. 在池化层和 dropout 层中,我定义了步长因子和 dropout 比率……它们是参数还是超参数?
权重是参数,学习率是超参数。
网络架构又是不同的。它更多是模型设计。
偏置向量 b 是参数还是超参数?从逻辑上讲,我觉得它是一个参数,但在 Coursera 的 deeplearning.ai 作业中,它说它是一个超参数。
偏置是一个输入(1.0),偏置的权重是模型的参数。在模型中使用偏置输入的决定可能是一个超参数。
我不知道其他课程的思考过程。也许可以问问他们?
所以,既然我是一名机器学习实践者,我就是一个超(活跃的)人。
凡是我能调整(或直接改变)的都是超参数。
凡是不受我直接控制,而是通过训练模型得出的,都只是参数。
😀
不错。
或许最好说,在超参数可以调整的情况下,会手动指定一系列超参数值。现在,这种调优过程本身已实现自动化,例如使用 Amazon SageMaker,因此模型性能相对于指定指标的自动化,既包括可调超参数也包括模型参数:https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning.html
它可以自动化。
很棒的文章,解释得非常清楚。谢谢Brownless博士。您的网站现在已添加到我的书签栏中。
谢谢。
非常感谢你Jason!!
我很高兴它能帮到你。
谢谢这个!
不过我有一个问题,层数(CNN:卷积层、池化层、 dropout 层)被认为是超参数吗?根据这个(第24页)http://www.iro.umontreal.ca/~bengioy/talks/ICML-AutoML-26Jun2014.pdf,层数是深度学习超参数的一部分。
是的,层数是一个超参数。
非常感谢您清晰简洁的解释!非常感谢您的帮助!
很高兴您觉得这篇文章有用。
您的文章太棒了。有什么办法可以订阅邮件吗?
谢谢!
是的,就在这里。
https://machinelearning.org.cn/faq/single-faq/how-can-i-get-emails-about-new-tutorials
我总觉得超参数是指那些在值发生微小变化时,对算法性能有非常大影响的特定参数——
这与解决初值问题和边值问题时所处理的一些东西类似。
我认为在聚类中,K 是用户给定的参数,而聚类半径是超参数。
这种解释,即所有通过模型推导出来的都是参数,所有输入进去的都是超参数,听起来不太对劲??
也许有些例子不完全符合这种区分。
我认为k-means中的k是超参数,它是指定的,而不是学习到的。
谢谢!
很高兴这篇文章对您有所帮助。
哦,天哪,这真的很有帮助,它解答了我心中的许多疑问。
太棒了。
致以崇高的敬意 🙂
很高兴它有帮助!
解释得真好!
谢谢。
你好,
虽然很有帮助,但是我们如何找到最有助于估计模型参数的最佳超参数呢?我们如何决定 mtry 值?
测试一系列值,然后使用能够得到最佳估计性能模型的那个值。
解释得很棒!非常有帮助。谢谢。
谢谢,很高兴对您有帮助。
很棒的文章!
谢谢,很高兴对您有帮助。
一篇非常有用的文章。
谢谢!
精彩的解释……感谢这篇很棒的文章。
您能写一篇关于目标检测的文章吗,我们可以把模型移植到移动设备上。
谢谢!
也许从这里开始
https://machinelearning.org.cn/how-to-perform-object-detection-with-yolov3-in-keras/
你是机器学习教程界的“GOAT”!!!对于那些不了解的人来说,它的意思是“史上最佳”!!!
一如既往,谢谢Jason!
谢谢。
你好,Jason Brownlee,
非常感谢您的文章。
我该如何引用这篇文章?
不客气。
看这里
https://machinelearning.org.cn/faq/single-faq/how-do-i-reference-or-cite-a-book-or-blog-post
嗨,Jason,
我们能为模型设置自己的参数吗(固定一些参数)?基本上,在模型训练之前,例如,水总是流动,或者在某个温度下它总是会下降,或者类似的情况?还是模型在训练时自己学习这些?
谢谢你
如果某事物是常数,不需要学习,您很可能可以将其从模型中排除。
很棒的文章。帮我解除了疑惑。
谢谢,很高兴听到这个。
嗨,Jason,您对如何决定在特定情况下哪个参数影响最大有什么想法吗?
这叫做特征重要性。
https://machinelearning.org.cn/calculate-feature-importance-with-python/
嗨,Jason。实际上,我对预测的步骤有点困惑。假设我已经预测了一些值,并拟合了模型,然后保存并加载了模型。然后我想继续用我保存的模型进行预测。
如果我执行所有预测步骤,包括拟合并之后继续使用模型,那么预测才会正常。
我的问题是,如果我想使用模型进行预测。我是否仍然需要在每次首次使用保存的模型时都拟合模型?因为当我使用模型进行预测并跳过拟合部分时,它会说模型尚未拟合。🙁
很好的问题!
是的,这指的是随时间推移可能需要的任何模型的维护和更新。
您必须测试模型是否需要更新,如果需要,还要测试不同的更新模型策略,以使该模型随时间推移最有用。
谢谢你,Jason。
不客气。
谢谢你,Jason,这太启发人了。
不客气。
谢谢Jason您的信息丰富的文章!不过我对您关于超参数的两种表述有一个问题
“模型超参数是模型外部的配置,其值无法从数据中估计。”
“我们无法知道在给定问题中模型超参数的最佳值。”
考虑到 AutoML 和 HPO 的进步,我们还能说超参数不能从数据中估计或者我们无法知道其最佳值吗?如果可以,请您详细说明原因?
是的,我们可以使用搜索方法估计超参数,但我们永远不知道建模管道是否最优。搜索空间是巨大的。
清晰、简洁、直接。谢谢。
谢谢!
精彩的文章!
谢谢!
超参数是外部配置变量,而模型参数是系统内部的。
由于超参数值未保存,因此训练好的或最终模型不用于预测。然而,模型参数在进行预测时会使用。
https://www.hitechnectar.com/blogs/hyperparameter-vs-parameter/
同意。
Jason
阿德姆提出了一个很好的问题:“既然超参数值没有被保存,那么训练好的或最终的模型就不能用于预测。”
那么,超参数调优的目的是什么,如果最终它不会被保存呢?
在超参数调整结束时,您可以使用发现的“好”或“最佳”配置来训练一个新的最终模型,并用它来进行预测。
谢谢 Jason。之前搞清楚参数和超参数的区别真是让人头疼。现在对两者的区别已经很清楚了。
很高兴听到这个消息。
谢谢您的解释,非常清楚。
我注意到,您在超参数的特点中提到,超参数可以启发式设置。
我的理解是这样的。使用网格搜索,我可以测试几乎所有可能适合模型的参数组合。然后看看哪种组合是最好的。
我这样理解对吗?
关于超参数调整的另一个问题。
如果我们的问题是数据集不是静态的,而是动态的。固定的参数组合可能不适合后续的数据。有没有办法自动找到参数组合?
谢谢!
如果您的数据集很小且模型速度快,您可以测试许多(但不是所有)超参数组合。
对于动态数据,您可能需要随着时间的推移监控模型的性能,如果性能下降到所需水平以下,可能需要定期重新训练模型,甚至重新调整模型。
精彩的文章
感谢 Jason 的澄清!
不客气。
我还是有点困惑,模型中的参数在测试期间是固定的还是可训练的?
参数是可训练的。
非常感谢
不客气。
隐藏层的数量会被认为是超参数吗?
是的!
有人能告诉我为什么贝叶斯广义回归模型说它不需要任何调整参数吗?
非常棒的帖子!
谢谢。
谢谢您的清晰解释!
超参数的例子是梯度下降中的学习率吗?
正确。
这真的非常有帮助。非常感谢您的清晰解释。
不客气!
我喜欢 Manju Savanth 的这个解释。
模型参数是模型自行学习的东西。例如:1) 线性回归模型中自变量的权重或系数。2) SVM 中自变量的权重或系数。3) 决策树中的分裂点。
模型超参数用于优化模型性能。例如:1) SVM 中的核函数和松弛变量。2) KNN 中的 K 值。3) 决策树的深度。
谢谢分享。没错。
我们可以说参数是在 ML/DL 过程中学习到的东西。
例如:权重和偏差
而超参数是您手动指定的,以获得具有最佳性能的模型。
Hi Abdul……您的理解是正确的!超参数也可以通过许多其他过程进行优化,这些过程被认为是比手动或临时方法更好的选择。
https://www.kdnuggets.com/2020/05/hyperparameter-optimization-machine-learning-models.html
正如其他人所说,总结得非常清晰。感谢您创作这些迷你文章。
谢谢您的反馈和支持,Andrew!我们非常感谢!
你好。
当我们拟合回归树时,我们使用……
– 训练数据:用于优化参数(变量的顺序及其阈值)。
– 验证数据:用于在尝试不同的超参数值时验证模型的误差。(*)
那么剪枝呢?它是算法自动执行的吗(将训练数据进一步分割成训练和验证)?还是在相同的验证数据(*)上执行的?
“剪枝”是在相同的 k 折叠过程中,使用与进行其他超参数调整相同的验证数据执行的吗?
还是使用用于训练树(变量选择和阈值)的相同数据执行,尽管它被进一步分割成新的训练-验证集?
谢谢!足够清楚!
非常欢迎您,Dragomir!