【51CTO.com快译】深度神经网络(DNN)需求少量训练数据,即使微调模型也需求少量训练数据。那么您如何知道能否已用了足够的数据?假设是计算机视觉(CV)模型,您一直可以查看测试错误。但是假设微调BERT或GPT之类的大型transformer模型,又该如何?
评价模型的最佳度量目的是什么?
您如何确信已用足够的数据训练了模型?
您的客户如何确信?
WeightWatcher可助您一臂之力。
pip install weightwatcher
WeightWatcher是一种开源诊断工具,用于评价(预)训练和微调的深度神经网络的功用。它基于研讨深度学习为何有效的前沿成果。最近,它已在《自然》杂志上刊登。
本文引见如何运用WeightWatcher来确定您的DNN模型能否用足够的数据加以训练。
我们在本文中思索GPT vs GPT2这个例子。GPT是一种NLP Transformer模型,由OpenAI开发,用于生成假文本。最后开发时,OpenAI发布了GPT模型,该模型专门用小的数据集停止训练,因此无法生成假文本。后来,他们看法到假文本是个好生意,于是发布了GPT2,GPT2就像GPT 一样,但用足够的数据来加以训练,确保有用。
我们可以将WeightWatcher运用于GPT和GPT2,比较结果;我们将看到WeightWatcher log spectral norm和 alpha(幂律)这两个度量目的可以立刻通知我们GPT模型出了岔子。这在论文的图6中显示;
图 6
我们在这里将详细引见如何针对WeightWatcher幂律(PL)alpha度量目的
执行此操作,并解释如何解读这些图。建议在Jupiter笔记本或Google Colab中运转这些计算。(作为参考,您还可以查看用于在论文中创立图解的实践笔记本,但是这里运用的是旧版本的WeightWatcher)。
出于本文需求,我们在WeightWatcher github代码存储库中提供了实在有效的笔记本。
WeightWatcher了解基本的Huggingface模型。确实,WeightWatcher支持以下:
TF2.0/Keras
pyTorch 1.x
HuggingFace
很快会支持ONNX(以后主干中)
目前,我们支持Dense层和Conv2D层。行将支持更多层。针对我们的NLP Transformer模型,我们只需求支持Dense层。
首先,我们需求GPT和GPT2 pyTorch模型。我们将运用盛行的HuggingFace transformers软件包。
!pip install transformers
其次,我们需求导入pyTorch和weightwatcher
Import torch
Import weightwatcher as ww
我们还需求pandas库和matplotlib库来协助我们解读weightwatcher度量目的。在Jupyter笔记本中,这看起来像:
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
我们如今导入transformers软件包和2个模型类
import transformers
from transformers import OpenAIGPTModel,GPT2Model
我们要获取2个预训练的模型,并运转model.eval()
gpt_model = OpenAIGPTModel.from_pretrained('openai-gpt')
gpt_model.eval();
gpt2_model = GPT2Model.from_pretrained('gpt2')
gpt2_model.eval();
想运用WeightWatcher剖析我们的GPT模型,只需创立一个watcher实例,然后运转 watcher.analyze()。这将前往的Pandas数据帧,附有每一层的度量目的。
watcher = ww.WeightWatcher(model=gpt_model)
gpt_details = watcher.analyze()
细节数据帧报告可用于剖析模型功用的质量度量目的——无需拜访测试数据或训练数据。最重要的度量目的是幂律度量目的
。WeightWatcher报告每一层 的。GPT模型有近50层,因此将一切层 alpha作为直方图(运用pandas API)一次性反省显得很方便。gpt_details.alpha.plot.hist(bins=100, color='red', alpha=0.5, density=True, label='gpt')
plt.xlabel(r"alpha $(\alpha)$ PL exponent")
plt.legend()
这绘制了GPT模型中一切层的
值的密度。图2
从这个直方图中,我们可以立刻看到模型的两个成绩
(责任编辑:admin)