【.com快译】深度神经网络(DNN)需要大量的训练数据,即使对模型进行微调也需要大量的训练数据。那么你怎么知道你是否使用了足够的数据呢?如果是计算机视觉(CV)模型,您可以随时查看测试错误。但是如何微调像BERT或GPT这样的大型变压器模型呢?评估模型的最佳指标是什么?您如何确定您使用足够的数据训练了模型?您的客户如何确定?WeightWatcher可以提供帮助。pipinstallweightwatcherWeightWatcher是一种开源诊断工具,用于评估(预)训练和微调的深度神经网络的性能。它基于对深度学习为何有效的前沿研究。最近登上了《自然》杂志。本文介绍如何使用WeightWatcher确定您的DNN模型是否使用足够的数据进行训练。我们在本文中考虑了GPT与GPT2的示例。GPT是OpenAI开发的用于生成假文本的NLPTransformer模型。最初开发时,OpenAI发布了GPT模型,该模型专门用小数据集训练,因此无法生成假文本。后来,他们意识到假文本是一门好生意,于是他们发布了GPT2,它与GPT类似,但经过足够的数据训练才能发挥作用。我们可以将WeightWatcher应用于GPT和GPT2并比较结果;我们会看到WeightWatcherlogspectralnorm和alpha(幂律)这两个指标可以立即告诉我们GPT模型是错误的。这显示在论文的图6中;图6在这里,我们详细说明了如何为WeightWatcher幂律(PL)alpha指标完成此操作,并解释如何解释这些数字。建议在JupiterNotebook或GoogleColab中运行这些计算。(作为参考,您还可以查看用于在论文中创建图表的实际笔记本,但此处使用的是旧版本的WeightWatcher)。出于本文的目的,我们在WeightWatchergithub代码存储库中提供了一个工作笔记本。WeightWatcher了解基本的Huggingface模型。事实上,WeightWatcher支持以下内容:TF2.0/KeraspyTorch1.xHuggingFace将很快支持ONNX(目前在主线)目前,我们支持Dense层和Conv2D层。很快将支持更多层。对于我们的NLPTransformer模型,我们只需要支持Dense层。首先,我们需要GPT和GPT2pyTorch模型。我们将使用流行的HuggingFace变形金刚包。!pipinstalltransformers其次,我们需要导入pyTorch和weightwatcherImporttorchImportweightwatcherasww我们还需要pandas库和matplotlib库来帮助我们解释weightwatcher指标。在Jupyternotebook中,这看起来像:from_pretrained('openai-gpt')gpt_model.eval();gpt2_model=GPT2Model.from_pretrained('gpt2')gpt2_model.eval();要使用WeightWatcher分析我们的GPT模型,只需创建一个watcher实例并运行观察者。分析()。这将返回一个Pandas数据框,其中包含每一层的指标。watcher=ww.WeightWatcher(model=gpt_model)gpt_details=watcher.analyze()详细数据框报告质量指标,可用于分析模型性能-无需访问测试或训练数据。最重要的指标是幂律指标。每层的WeightWatcher报告。GPT模型有将近50层,因此一次检查所有层的alpha作为直方图似乎很方便(使用pandasAPI)。gpt_details.alpha.plot.hist(bins=100,color='red',alpha=0.5,density=True,label='gpt')plt.xlabel(r"alpha$(\alpha)$PLexponent")plt.legend()这绘制了GPT模型中所有层的值密度。图2从这个直方图中,我们可以立即看出模型存在两个问题?峰值高于完全训练模型的最佳值。?有几个异常值,表明有几层训练不佳。因此,对GPT一无所知,并且从未见过测试训练或训练数据,WeightWatcher告诉我们,这个模型永远不应该投入生产。现在让我们看看GPT2,它具有相同的架构,但使用更多更好的数据进行训练。我们用指定的模型再次创建一个watcher实例并运行watcher.analyze()watcher=ww.WeightWatcher(model=gpt2_model)gpt2_details=watcher.analyze()现在让我们比较GPT和GPT2的幂律alpha指标。我们只是创建2个直方图,每个模型1个直方图,并将2个图叠加。gpt_details.alpha.plot.hist(bins=100,color='red',alpha=0.5,density=True,label='gpt')gpt2_details.alpha.plot.hist(bins=100,color='green',density=True,label='gpt2')plt.xlabel(r"alpha$(\alpha)$PLexponent")plt.legend()GPT层alpha显示红色,GPT2层alpha显示绿色,直方图很不一样。对于GPT2,峰值$alpha\sim3.5&bg=ffffff$,更重要的是没有异常值$latex\alpha>6&bg=ffffff$。Alpha越小越好,GPT2模型比GPT好很多,因为它是用更多更好的数据训练的。图3WeightWatcher有许多功能可以帮助您评估模型。它可以做这样的事情:帮助你决定你是否用足够的数据训练它(如图所示)检测过度训练的潜在层用于获得早期停止标准(当你看不到测试数据时)对于不同的模型和超参数,趋势预测测试准确率等等不妨一试。请让我知道这对你有没有用。原标题:HowTellifYouHaveTrainedYourmodelwithenoughData,作者:CharlesMartin
