本文主要是介绍【AI学习】OpenAI员工谈消融实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
jbetker(OpenAI员工)的博客不长,很好读,但是内容却别开生面、非常有见底。
消融实验真的很重要
我不再像以前那样阅读那么多论文了。这让我感到惊讶,因为我一直认为,当我把机器学习作为全职工作时,我会花更多的时间阅读其他领域人士正在进行的所有事情。
在某种程度上,这是一个弱点。我们应该在阅读和写作之间找到一个健康的平衡,而我明显倾向于写作方面(代码,而不是论文)。话虽如此,我很荣幸能与我在这个领域中非常尊重的一些人一起工作,他们阅读的也不比我多。
有几个很好的理由,但今天我想讨论的是领域中缓慢进步和消融实验的重要性。这两件事和谐地工作,使得论文要么太无聊,不值得一瞥,要么完全无法用于任何未来的工作。让我们来谈谈为什么。
在过去的几年里,我学到的最重要的事情之一就是神经网络惊人的工作能力。这意味着在你可以尝试的一系列疯狂想法中,用来提高神经网络性能的,它们至少都会训练并产生结果。因此,我们需要想出衡量神经网络工作效果的方法——这些以我们领域中使用的各种各样的评估形式出现。
理想的梦想是使用这些评估来评判各种技术和想法之间的比较性能。如果你有一个疯狂的想法,编码实现它并得到更好的评估——这是一个好主意,对吧?是时候写一篇论文了。
嗯……事情并不是那么简单。首先,实现方式非常重要很多。两个由不同人从头开始编写的“变换器”通常会有不同的性能特征。当你实现这些时,你会做出一长串小决策,它们都以一种直观的方式与其他你可能正在测试的变更相互作用。常见的变量包括初始化比例、优化器选择、数据预处理选择、归一化层的类型和位置、激活选择、位置信息如何输入到注意力层——列表还在继续。
当你写一篇论文说你的新神经网络技术比我的好时——我会问的第一个问题是“我可以看看代码吗?”因为很可能你的新技术并不比我的好,是你的实现方式。我很愿意复制它。
聪明的研究者非常清楚这些问题,并以两种方式之一来应对:
1、只对具有良好特征化的现有开源代码进行小改进。这只有在一切都是开源的时候才有效——包括训练代码和数据集。它也只对那些作者仔细考虑了确定性的培训者真正有效。
2、进行消融实验,并且是大量的。从一些基础模型的裸实现开始,比如一个变换器。训练它很长时间。进行一个小调整。再次训练。再进行一个小调整并再次训练。
大多数优秀的研究者遵循第二个方法,但大多数人不愿意发表关于中间步骤的内容。这是一种遗憾,因为我认为这是在确定一个新想法是否值得追求时手头上最重要的数据!
这就是为什么我非常喜欢阅读任何研究论文的消融部分:它让我了解什么真正重要,以及结果有多少仅仅是由于研究者选择的实现选择。
当阅读实验结果时,我想以一个最后重要的事情作为结束,无论是否存在消融:在机器学习中,性能的两个最重要的决定因素是数据和计算。如果任何“新技术”改变了用于训练神经网络的计算量或数据类型,那么这项技术本身至少是值得怀疑的。我们不应该在运行之间使用不同的数据集进行训练,这是相当明显的,但衡量计算变化通常要困难得多。
要正确地消融计算变化,你真的需要跟踪你的神经网络中使用的所有矩阵乘法的数量和维度,并将其与你的基线进行比较。如果你的新数字不同,那将不可避免地影响性能。即使它在像归一化层这样“愚蠢”的东西中也是如此。神经网络是棘手的小野兽,会找到使用你给予它们的任何计算的方法。这一点在Chinchilla(包括我自己在内)之前并没有得到足够的重视,但研究人员开始“理解”。
这篇关于【AI学习】OpenAI员工谈消融实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!