📢 Gate广场 #NERO发帖挑战# 秀观点赢大奖活动火热开启!
Gate NERO生态周来袭!发帖秀出NERO项目洞察和活动实用攻略,瓜分30,000NERO!
💰️ 15位优质发帖用户 * 2,000枚NERO每人
如何参与:
1️⃣ 调研NERO项目
对NERO的基本面、社区治理、发展目标、代币经济模型等方面进行研究,分享你对项目的深度研究。
2️⃣ 参与并分享真实体验
参与NERO生态周相关活动,并晒出你的参与截图、收益图或实用教程。可以是收益展示、简明易懂的新手攻略、小窍门,也可以是行情点位分析,内容详实优先。
3️⃣ 鼓励带新互动
如果你的帖子吸引到他人参与活动,或者有好友评论“已参与/已交易”,将大幅提升你的获奖概率!
NERO热门活动(帖文需附以下活动链接):
NERO Chain (NERO) 生态周:Gate 已上线 NERO 现货交易,为回馈平台用户,HODLer Airdrop、Launchpool、CandyDrop、余币宝已上线 NERO,邀您体验。参与攻略见公告:https://www.gate.com/announcements/article/46284
高质量帖子Tips:
教程越详细、图片越直观、互动量越高,获奖几率越大!
市场见解独到、真实参与经历、有带新互动者,评选将优先考虑。
帖子需原创,字数不少于250字,且需获得至少3条有效互动
一行代码提高大模型10%性能,开发者:免费午餐
原文来源:量子位
大模型微调有“免费的午餐”了,只要一行代码就能让性能提升至少10%。
在7B参数量的Llama 2上甚至出现了性能翻倍的结果,Mistral也有四分之一的增长。
虽然这种方法用在监督微调阶段,但RLHF模型也能从中受益。
这是一种新的正则化技术,可以用于提高微调监督(SFT)模型的性能。
NEFT不仅操作简便,而且没有显著的成本增加,作者称看起来是个“免费的午餐”。
向模型中加入噪声
NEFTune的全称是Noisy Embedding Fine Tuning,即“带噪声的嵌入式微调”。
开发者认为,过拟合现象是限制大模型性能的一大因素,因此采用在训练阶段向嵌入层中加入噪声的方式来避免过拟合的出现,从而提高性能。
然后,系统会随机生成一个噪声向量,并用缩放器将噪声调节成所设置的强度。
经过缩放后的噪声会加入到嵌入向量中,作为模型的输入,然后开始训练。
每次迭代训练时,都会生成新的噪声并加入到嵌入层中。
from torch.nn import functional as F
def NEFTune(model, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
if model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(dims)
return embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
else:
return orig_embed(x)
return new_func
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
return model
这段代码中,NEFTune函数中的形参noise_alpha就是噪声强度(系数),mag_norm则为实际过程中的噪声范围。
而NEFT只有在训练过程中才会向模型中加入噪声,推理阶段无此过程,代码中的if语句起到的就是这个作用。
训练模式下,new_func函数的返回值即为加入噪声后的嵌入层。
贴出这段代码是为了讲解需要,如果只是想调用NEFT,可以不必使用上面的完整代码,直接从TRL库中调用就可以了。
下面的代码是微调OPT-350M模型的一个示例:
from datasets import load_dataset
from trl import SFTTrainer
dataset = load_dataset("imdb", split="train")
trainer = SFTTrainer(
"facebook/opt-350m",
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=512,
)
trainer.train()
而数据集方面,开发者一共使用了Alpaca、ShareGPT等四种不同数据集进行了微调。
作者介绍,选择这些数据的原因包括它们比较著名、曾成为SOTA等等。
此外出于硬件性能考虑,实验过程中所选择的都是单轮对话数据集。
那么,用NEFT方法调校过后的大模型,表现到底怎么样呢?
性能最高提升1倍
研究团队主要测试了模型调校前后生成的文本质量和对话能力。
其中文本质量主要基于Aplaca数据集,使用ChatGPT和GPT-4评估。
用作参照的模型是Text-Davinci-003,训练后的模型胜过TD3的比例即为评价指标。
为了节约资源,研究团队先用ChatGPT判断是自己来评价还是调用GPT-4,部分情况下还会人工评判。
结果在不同的训练数据集中,Llama 2调整后都有至少10%的性能提升,在Alpaca数据集上更是直接翻倍。
结果发现,NEFT调整后模型的聊天能力同样相比Evol-Instruct有进一步提升。
结果显示,NEFT方法在不同的数据集和模型上,对模型的其他能力均没有显著影响。
为了证实这一点,作者对模型损失进行了评估,结果发现测试数据集损失低于训练数据,证实了这一观点。
为了确认文本质量的提高是加入噪声的作用而不是由文本长度的增加所导致,研究人员又进行了消融实验。
结果显示,只是强制模型生成更长的文本无法达到NEFT的效果。