您当前的位置:首页 > 电脑百科 > 人工智能

解读大模型的微调

时间:2023-06-07 13:59:09  来源:微信公众号  作者:喔家ArchiSelf
微调预训练LLM的所有层仍然是适应新目标任务的黄金准则。但是,诸如基于特征的方法、上下文学习和参数高效微调技术等方法,可以在最小化计算成本和资源的同时,有效地将LLM应用到新任务中。

在快速发展的人工智能领域中,有效地利用大型语言模型(LLM)变得越来越重要。然而,有许多不同的方式可以使用大型语言模型,这可能会让我们感到困惑。实际上,可以使用预训练的大型语言模型进行新任务的上下文学习并进行微调。

那么,什么是上下文学习?又如何对大模型进行微调呢?

1. 上下文学习与索引

自从GPT-2和GPT-3出现以来,可以发现在预训练的通用文本语料库上的生成式大型语言模型(LLM)具备了上下文学习的能力,这意味着如果我们想要执行LLM没有明确训练的特定或新任务,不需要进一步训练或微调预训练的LLM。同时,我们可以通过输入提示直接提供一些目标任务的示例。

In Context Learning(ICL)的关键思想是从类比中学习。下图给出了一个描述语言模型如何使用 ICL 进行决策的例子。首先,ICL 需要一些示例来形成一个演示上下文。这些示例通常是用自然语言模板编写的。然后 ICL 将查询的问题(即需要预测标签的 input)和一个上下文演示(一些相关的 cases)连接在一起,形成带有提示的输入,并将其输入到语言模型中进行预测。

 

图片

 

如果无法直接访问模型,例如通过 API 使用模型,上下文学习非常有用。与上下文学习相关的是“硬提示微调”的概念,可以通过修改输入来期望改善输出。将直接修改输入的单词或标记的微调称为“硬”提示微调,另一种微调方式称为“软”提示微调或通常称为“提示微调”。这种提示微调方法提供了一种更为节省资源的参数微调替代方案。然而,由于它不会更新模型参数以适应特定任务的微小差异,因此可能会限制其适应能力。此外,由于通常需要手动比较不同提示的质量,提示微调可能需要耗费大量人力。

另一种利用纯粹的上下文学习方法的方法是索引。在LLM的范围内,索引可以被视为一个上下文学习的解决方法,它使得LLM可以转换为信息检索系统,用于从外部资源和网站中提取数据。在此过程中,索引模块将文档或网站分解为较小的段落,并将它们转换为可以存储在向量数据库中的向量。然后,当用户提交查询时,索引模块计算嵌入式查询与数据库中每个向量之间的向量相似度。最终,索引模块获取前k个最相似的嵌入式向量以生成响应。索引的示意图如下:

 

图片

 

2. 基于三种特征的微调方法

上下文学习是一种有价值且用户友好的方法,适用于直接访问大型语言模型受限的情况,例如通过API或用户界面与LLM进行交互。然而,如果可以访问LLM,则使用来自目标领域的数据对其进行适应和微调通常会导致更好的结果。那么,我们如何将模型适应到目标任务?下图概述了三种常规的基于特征的微调方法。

 

图片

 

除了微调编码器风格的LLM之外,相同的方法也适用于GPT般的解码器风格LLM。此外,还可以微调解码器风格的LLM生成多句话的答案,而不仅仅是分类文本。

2.1 基于特征的方法

在基于特征的方法中,需要加载预训练的LLM,并将其应用于目标数据集。在这里,需要特别关注生成训练集的输出嵌入,这些嵌入可以用作训练分类模型的输入特征。虽然这种方法在以嵌入为重点的模型(如BERT)中特别常见,但也可以从生成式GPT-style模型中提取嵌入。

分类模型可以是逻辑回归模型、随机森林或XGBoost ,也可以任何我们想要的模型。一般地,在这里线性分类器如逻辑回归表现最佳。

 

图片

 

从概念上讲,可以用以下代码说明基于特征的方法:

model = AutoModel.from_pretrAIned("distilbert-base-uncased")

# ...
# tokenize dataset
# ...

# generate embeddings
@torch.inference_mode()
def get_output_embeddings(batch):
    output = model(
        batch["input_ids"],
        attention_mask=batch["attention_mask"]
    ).last_hidden_state[:, 0]
return {"features": output}

dataset_features = dataset_tokenized.map(
  get_output_embeddings, batched=True, batch_size=10)

X_train = np.array(imdb_features["train"]["features"])
y_train = np.array(imdb_features["train"]["label"])

X_val = np.array(imdb_features["validation"]["features"])
y_val = np.array(imdb_features["validation"]["label"])

X_test = np.array(imdb_features["test"]["features"])
y_test = np.array(imdb_features["test"]["label"])

# train classifier
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression()
clf.fit(X_train, y_train)

print("Training accuracy", clf.score(X_train, y_train))
print("Validation accuracy", clf.score(X_val, y_val))
print("test accuracy", clf.score(X_test, y_test))

2.2 基于输出层更新的微调

与上述基于特征的方法相关的一种流行方法是微调输出层。与基于特征的方法类似,保持预训练LLM的参数不变,只训练新添加的输出层,类似于在嵌入特征上训练逻辑回归分类器或小型多层感知器。在代码中,将如下所示:

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
     num_labels=2
)

# freeze all layers
for param in model.parameters():
    param.requires_grad = False

# then unfreeze the two last layers (output layers)
for param in model.pre_classifier.parameters():
    param.requires_grad = True

for param in model.classifier.parameters():
    param.requires_grad = True

# f.NETune model
lightning_model = CustomLightningModule(model)

trainer = L.Trainer(
    max_epochs=3,
    ...
)

trainer.fit(
  model=lightning_model,
  train_dataloaders=train_loader,
  val_dataloaders=val_loader)

# evaluate model
trainer.test(lightning_model, dataloaders=test_loader)

理论上,这种方法应该具有与基于特征的方法同样的良好建模性能和速度。然而,由于基于特征的方法使预计算和存储嵌入特征更加容易,因此在特定的实际情况下,记忆特征的方法可能更加方便。

2.3 面向所有层更新的微调

尽管原始的BERT论文声称,仅微调输出层可以实现与微调所有层相当的建模性能,但后者涉及更多参数,因此成本更高。例如,BERT基本模型约有1.1亿个参数。然而,BERT基本模型用于二元分类的最后一层仅包含1,500个参数。此外,BERT基本模型的最后两层占据60,000个参数,仅占总模型大小的约0.6%。]

由于目标任务和目标领域与模型预训练的数据集相似程度的不同,几乎总是通过微调所有层来获得更优秀的模型性能。因此,当优化模型性能时,使用预训练LLM的黄金标准是更新所有层。从概念上讲,这种方法与输出层更新非常相似。唯一的区别是不冻结预训练LLM的参数,而是对其进行微调。

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
     num_labels=2
)

# don't freeze layers
# for param in model.parameters():
#    param.requires_grad = False

# finetune model
lightning_model = LightningModel(model)

trainer = L.Trainer(
    max_epochs=3,
    ...
)

trainer.fit(
  model=lightning_model,
  train_dataloaders=train_loader,
  val_dataloaders=val_loader)

# evaluate model
trainer.test(lightning_model, dataloaders=test_loader)

多层微调通常会导致更好的性能,但代价也会增加,各种方法的计算和模型性能如下图所示。

 

图片

 

上面的情景突出了微调的三种极端情况:基于特征,仅训练最后一层或几层,或者训练所有层。当然,根据模型和数据集的不同,在各种选项之间探索也可能是值得的。

3. 参数高效微调

参数高效微调允许我们在最小化计算和资源占用的同时重复使用预训练模型。总的来说,参数高效微调至少有以下5个优点:

  • 减少计算成本(需要更少的GPU和GPU时间);
  • 更快的训练时间(更快地完成训练);
  • 更低的硬件要求(可以使用更小的GPU和更少的存储器);
  • 更好的模型性能(减少过拟合);
  • 更少的存储空间(大部分权重可以在不同任务之间共享)。

如前所述,微调更多的层通常会导致更好的结果。如果想要微调更大的模型,例如重新生成的LLM,这些模型只能勉强适合GPU内存,该怎么办呢?人们开发了几种技术,只需训练少量参数便可通过微调提升LLM的性能。这些方法通常被称为参数高效微调技术(PEFT)。

在huggingface提供的PEFT工具中,可以很方便地实现将普通的HF模型变成用于支持轻量级微调的模型,使用非常便捷,目前支持4种策略,分别是:

  • LoRA
  • Prefix Tuning
  • P-Tuning
  • Prompt Tuning

下图总结了一些最广泛使用的PEFT技术。

 

图片

 

那么这些技术是如何工作的呢?简而言之,它们都涉及引入少量的额外参数,而不是对所有层都进行修改。从某种意义上讲,输出层微调也可以被视为一种参数高效的微调技术。然而,像前缀微调、适配器和低秩适应等技术,它们“修改”多个层,以极低的成本实现更好的预测性能。

4.RHLF

在人类反馈增强学习中,预训练模型使用监督学习和强化学习相结合进行微调。这种方法是由原始的ChatGPT模型推广而来,而该模型又基于InstructGPT。RLHF通过让人类对不同的模型输出进行排名或评分来收集人类反馈,从而提供奖励信号。然后,可以使用收集的奖励标签来训练奖励模型,进而指导LLM对人类偏好的适应。

奖励模型本身是通过监督学习进行学习的,通常使用预训练的LLM作为基本模型。接下来,奖励模型用于更新预训练的LLM,以适应人类的偏好。训练使用了一种称为近端策略优化的强化学习方法。InstructGPT论文中概述了RLHF的过程。

 

图片

 

为什么要使用奖励模型而不是直接训练预先训练好的模型并使用人类反馈?主要原因是将人类纳入学习过程会造成瓶颈,我们无法实时获取反馈。

5.小结

微调预训练LLM的所有层仍然是适应新目标任务的黄金准则。但是,诸如基于特征的方法、上下文学习和参数高效微调技术等方法,可以在最小化计算成本和资源的同时,有效地将LLM应用到新任务中。此外,带有人类反馈的强化学习(RLHF)作为有监督微调的替代方法,也可以提高模型性能。

【参考资料】 

  • A Survey on In-context Learning,https://arxiv.org/pdf/2301.00234.pdf
  • LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS,https://arxiv.org/pdf/2106.09685.pdf
  • Prefix-Tuning: Optimizing Continuous Prompts for Generation, https://aclanthology.org/2021.acl-long.353
  • P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks,https://arxiv.org/pdf/2110.07602.pdf
  • The Power of Scale for Parameter-Efficient Prompt Tuning,https://arxiv.org/pdf/2104.08691.pdf
  • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,https://arxiv.org/abs/1810.04805
  • https://Github.com/huggingface/peft
  • https://github.com/rasbt


Tags:大模型   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
华为笔记本将接入盘古大模型!全新华为MateBook X Pro即将发布
快科技4月10日消息,华为官方宣布,华为将于4月11日举办新品发布会。据了解,此次发布会将推出全新的华为MateBook X Pro,而预热海报的主题是“轻且强”。这里的“强”不仅仅是指性...【详细内容】
2024-04-10  Search: 大模型  点击:(4)  评论:(0)  加入收藏
行业大模型快速落地的一年,如何做?
生成式AI正成为时下科技企业“讲故事”的关键词之一。但从发展上看,无论是“文生文”的大语言模型,还是“文生图”的多模态模型,更多的是辅助人们进行一些简单的办公,或者提供一...【详细内容】
2024-04-10  Search: 大模型  点击:(3)  评论:(0)  加入收藏
AI是万灵药?Meta要把大模型塞进AR眼镜里
寻找下一块“屏幕”,这无疑是最近几年科技行业的一个热门赛道。随着个人计算机点燃了互联网,智能手机让移动互联网无处不在之后,这前后两次造富神话的出现,也让所有人都在期待下...【详细内容】
2024-04-09  Search: 大模型  点击:(5)  评论:(0)  加入收藏
AI程序员上岗 垂类大模型应用迎来井喷期
能自动写代码的“AI员工”、逐渐告别不够好用的智能客服,无需费时费力开发的工业AI控制器……随着人工智能大模型能力开始深入多个行业,IT、工业生产、金融、服务...【详细内容】
2024-04-07  Search: 大模型  点击:(4)  评论:(0)  加入收藏
AI干掉声优?音频大模型追逐“图灵时刻”
七十年前,“人工智能之父”图灵提出,如果人无法判断屏幕的另一侧究竟是人还是机器,就证明机器具备了人一样的智能。这一经典的图灵测试如同北斗星一般,指引着AI行业的工作者们不...【详细内容】
2024-04-03  Search: 大模型  点击:(5)  评论:(0)  加入收藏
大模型Kimi火了,长文本“卷”出新高度
近日,AI智能助手Kimi宣布支持200万字无损上下文,在长上下文窗口技术上再次取得突破,引燃人工智能领域新一轮投资热情。  摄影/宁颖OpenAI官方去年11月发布的GPT-4 Turbo,支持1...【详细内容】
2024-03-29  Search: 大模型  点击:(13)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27  Search: 大模型  点击:(13)  评论:(0)  加入收藏
超长文本是AI大模型的能力突破口吗?
◎记者 刘怡鹤近日,能“一口气读完20万字小说”的AI大模型应用Kimi再次为国内AI产业添了一把火。业内认为,国产大模型能力提升或成今年国内AI领域最核心的主线。超长上下文是...【详细内容】
2024-03-26  Search: 大模型  点击:(8)  评论:(0)  加入收藏
百度AI“咬”了一口苹果 大模型商用有戏了?
百度3月25日突传利好。据知情人士透露,百度将为苹果今年发布的iPhone16、Mac系统和ios18提供AI功能。消息人士称,苹果曾与阿里以及另外一家国产大模型公司进行过洽谈,最后确定...【详细内容】
2024-03-26  Search: 大模型  点击:(19)  评论:(0)  加入收藏
Kimi引燃大模型“长文本竞赛”,阿里360百度急出手
从ChapGPT到Sora,从数千亿参数到千万长文本,大模型浪潮下,永远不缺热点。近日,“Kimi概念股暴涨”“Kimi为宕机道歉”等词条先后冲上微博热搜,让月之暗面这家刚成立一年的人工智...【详细内容】
2024-03-25  Search: 大模型  点击:(15)  评论:(0)  加入收藏
▌简易百科推荐
行业大模型快速落地的一年,如何做?
生成式AI正成为时下科技企业“讲故事”的关键词之一。但从发展上看,无论是“文生文”的大语言模型,还是“文生图”的多模态模型,更多的是辅助人们进行一些简单的办公,或者提供一...【详细内容】
2024-04-10    钛媒体APP  Tags:行业大模型   点击:(3)  评论:(0)  加入收藏
互联网充斥“针对小白的AI课”,能相信吗?普通人不学AI课程会被淘汰?
早前,一位标榜清华大学博士和多家公司AI顾问名头的百万级粉丝量博主,向用户大力推介“所有人都需要学”的AI入门课程。不过,这些课程最终因贩卖焦虑、蒙骗学员而被平台下架。然...【详细内容】
2024-04-10    九派新闻  Tags:AI课   点击:(7)  评论:(0)  加入收藏
藏在AI背后的“吃电狂魔”
人工智能时代的能耗黑洞据估算,到2027年,人工智能行业每年将消耗85~134太瓦时的电力,相当于瑞典或荷兰一年的总用电量。马斯克判断,电力缺口最早可能会在2025年发生,“明年你会看...【详细内容】
2024-04-09    雪豹财经社  Tags:AI   点击:(3)  评论:(0)  加入收藏
OpenAI和谷歌再起纷争:AI的尽头是内容
日前,纽约时报的一篇报道称,人工智能公司 OpenAI为收集高质量训练数据而开发了一个语音转录模型Whisper。该模型主要用于转录 OpenAI 获取的超过 100 万小时的 YouTube 视频,也...【详细内容】
2024-04-09  小编也疯狂  新浪网  Tags:AI   点击:(3)  评论:(0)  加入收藏
AI产业的灰色暗面:OpenAI、谷歌、META如何搞训练语料
财联社4月7日讯(编辑 史正丞)种种迹象显示,目前站在全世界AI领域潮头浪尖的这些公司,早在几年前就已经陷入对训练语料的“绝望”追逐中——为此他们不惜修改政策条款...【详细内容】
2024-04-09    财联社  Tags:AI产业   点击:(4)  评论:(0)  加入收藏
和“数字人”交朋友,当心隐私被出卖......
在虚拟社交中如何在保护用户隐私和数据安全的同时提供高质量的社交体验?如何避免过度依赖虚拟社交找到虚拟与真实之间的平衡点?《中国消费者报》记者就此展开了调查APP里有个...【详细内容】
2024-04-09    中国消费者报  Tags:数字人   点击:(6)  评论:(0)  加入收藏
AI“复活”成产业链:成本可降至数百元
大模型应用落地,带火数字人(11.560, 0.29, 2.57%)赛道。文|《中国企业家》记者李艳艳 实习生 孙欣编辑|姚赟头图来源|《流浪地球2》电影画面截图清明节前,预估会有需求的庞立...【详细内容】
2024-04-09    中国企业家  Tags:AI“复活”   点击:(3)  评论:(0)  加入收藏
多方热议人工智能产业新机遇
编者按  从前沿科技展会到高层对话平台,从上海、重庆到博鳌,从线上到线下……一场场高规格、大规模的盛会中,人工智能正在成为各界热议的高频词。赋能千...【详细内容】
2024-04-08    中国家电网  Tags:人工智能   点击:(5)  评论:(0)  加入收藏
​人形机器人时代来了吗
日前,由中国人形机器人(11.080, -0.05, -0.45%)百人会主办的人形机器人大赛在北京经济技术开发区开赛。工作人员向参观者展示一款人形机器人。参观者与一款陪护型人形机器人...【详细内容】
2024-04-08    中国青年报  Tags:​人形机器人   点击:(6)  评论:(0)  加入收藏
AI重塑社交:腾讯与字节跳动的新赛场
文|新火种 一号编辑|美美最近,腾讯和字节跳动这两大互联网巨头几乎同步推出了各自的AI社交产品,尽管腾讯和字节跳动在前段时间刚刚“破冰”,但这一举措不仅意味着这两大巨头之...【详细内容】
2024-04-07    蓝鲸财经  Tags:AI   点击:(8)  评论:(0)  加入收藏
站内最新
站内热门
站内头条