AI魔法学院客服
LLM微调经验&认知
这篇文章主要讨论了大型语言模型(LLM)的认知和训练方面。在认知方面,文章指出知识主要来自预训练阶段,指令微调主要是为了让LLM更好地输出已具备的知识。同时,文章也提到了模型学会中文后能够理解和输出一些指令微调数据集里未见过的中文词汇,但指令微调并非数据量越多越好,数据质量可能更重要。在训练方面,文章介绍了Lora框架和int8推理等相关内容,并给出了一些微调时的实用建议,如prompt和output尽量不要重复等。此外,文章还提到了模型可能更容易理解“模型语言”这一玄学现象,并讨论了预训练阶段数据量和质量的优先级问题。最后,文章还提出了一些猜想和补充,如领域微调时模型参数越大可能越难训,以及chatGLM2的max_length起飞等问题。
 2024-04-09
收藏 复制地址分享海报

原文地址:https://zhuanlan.zhihu.com/p/634180659

 

· 

关于认知

· 

1. 

知识来自于pretrain阶段,指令微调通常只不过是为了让LLM显示地输出已具备知识。

2. 

延申下来,可以理解Llama(原生)是一个会听不会讲中文的人,用中文语料做指令微调,实际上更多是教他“说中文”。换句话说,指令微调可以教他”用中文写文章“,但不会教他“写文章”本身。

3. 

模型一但学会中文后,一些指令微调数据集里没见过的中文词汇它竟然也可以理解和输出,这里有些惊奇。

4. 

但这并不意味着指令微调除了教模型”更好地说话“以外没有其他作用,事实上在这个阶段模型也能学到一定的知识。例如用高质量领域数据集进行微调,模型可以学会很多本身不具备的新技能。

5. 

如果说指令微调是为了让模型“能说会说”,那RLHF更多是让模型“说得更符合心意”。

6. 

尽管RLHF阶段的LOSS设计会驱使模型的输出不要偏离SFT太多,但仍可能会造成NLU能力的损失。

7. 

指令微调并不是数据量越多越好,可能10k左右就够了。数据质量可能更重要,太大的数据量有可能“阉割”掉模型原有的base能力

8. 

TASK或者多语言混合微调可能会有更好的效果,TASK不足的情况下考虑增加目标任务的数据量

9. 

目前的LLM如GPT、Llama、chatGLM等都可以理解为是一个“办公助手”的角色,想真正做到拟人,其实还是要靠角色扮演prompt。但情感链接这块,和真人还是有很大差距。换句话说,你时刻都能感觉到自己是在和AI对话,而不是一个“有情感”的机器人。

关于训练

1. 

Lora框架peft需要torch>=1.13.1,torch1.13.1可能需要cuda11.7,安装环境够让人头疼一会了。

2. 

Lora配合int8可以大幅度降低显存,但deepspeed不支持int8。如果想同时使用,要么float16,要么换accelerate包

3. 

int8推理太慢了!

4. 

指令微调可以理解是【Q+A】文本拼接,其中Q部分没必要计算loss,设置ignore_index即可。参考alpaca

5. 

实测chatGLM的tokenizer中文分词其实做的挺一般的,如果想做第4点,数据处理时需要格外注意,它有可能把拼接的位置切错

6. 

中文指令微调需要注意max_length,别傻傻照抄256/512

7. 

一般情况下lr选择9e-6到1e-5即可

8. 

据说batch size大一点性能会更好,但这个还真没实验过

9. 

拿中文对话数据集在Llama(中文)上训了一次,结果很捞,没想通为啥。可能真人对话数据和指令微调数据(偏书面)差距太大了,模型学懵了

------------------------------------------------

0606更新:

关于认知

10. 假设有一道多选题,那答案的设置最好是ABCD而不是1234,对于模型来说可能这几个数字没有太大区别,尤其是底座模型能力相对比较弱的情况下。

11. 一个很玄学的东西,相对于人类语言,模型可能更容易理解“模型语言”。解释起来就是:有时候人精心写的prompt或few shot,可能还不如模型自己生成的case(尽管这些case可能是错的),参考auto CoT

12. pretrain阶段,可能数据量+质量的优先级大于epoch。且pretrain使用过的语料,微调阶段没必要再用一次,几乎没有提升了。

关于训练

10. 微调时候,prompt和output尽量别重复,否则真的会在这个句式上过拟合的

一些猜想

1. 

领域微调,尤其是做一些特殊任务时,模型参数越大可能越难训。可以理解数据是一个“撬棍”,模型是一个“巨大的火车头”,想让“火车头”朝着你指定的方向行驶,要么靠原有的“铁轨”(即模型本身就有这个能力),要么靠微调数据这个小棍子。当这个车头太重且撬棍很小时,其实很难掰动车头的

2. 

总感觉现在这些模型的多轮对话做的有问题,只是简单的把上一轮对话扔进下一轮的input里,时间久了max_length和显存爆炸,chatGPT就没这个问题。可能把历史对话做一个摘要或embedding映射更合理一点?

3. 

0626补充:chatGLM2出来了,max_length起飞,方法不变。事实证明是我想多了

4. 

3。GLM2改动还是挺多的,仔细看了一下源码,受益匪浅。之前的回答是我太浅薄了~

5. 

到底Llama是咋看懂中文的呢?怀疑预训练数据清洗时没有洗干净,输入里掺杂了一些中文或翻译任务

 

 

 

出自:https://mp.weixin.qq.com/s/enZ0yV6-DtH8qHYMMqBpcQ

本文档由网友提供,仅限参考学习,如有不妥或产生版权问题,请联系我们及时删除。 客服请加微信:skillupvip
评论
1 评论
比基尼小熊2024/4/10 18:18:11
这篇关于大型语言模型(LLM)认知和训练方面的文章非常深入且实用。特别是关于认知方面的讨论,让我对LLM如何理解和应用预训练知识有了更清晰的认识。作者指出指令微调是为了更好地输出已具备的知识,而不仅仅是盲目地增加数据量,这一点非常关键。同时,文章还提到了模型能够理解和输出一些未见过的中文词汇,这也说明了LLM在语言理解方面的强大能力。

在训练方面,Lora框架和int8推理的介绍非常实用,为我在实际操作中提供了有价值的参考。另外,作者还给出了一些微调时的实用建议,如避免prompt和output重复等,这些都非常实用。

此外,文章还涉及了模型理解“模型语言”这一玄学现象以及预训练阶段数据量和质量的优先级问题,这些讨论都很有深度,为我们进一步理解LLM提供了思路。

总的来说,这篇文章对于想要深入了解大型语言模型认知和训练方面的读者来说非常有价值。作者的观点和论据都很深入,同时也提供了一些实用的建议和猜想,让我受益匪浅。
20秒读懂全文
伴读
文章摘要:本文探讨了大型语言模型(LLM)的认知与训练方面的多个话题。在认知方面,文章指出指令微调主要是让模型更好地输出已具备的知识,而不是教授新的技能。同时,多TASK或多语言混合微调可能更有效。训练方面,文章涉及了Lora框架、int8推理、中文指令微调等具体操作和注意事项。此外,文章还提出了一些关于模型训练与应用的猜想和观点。

关键词:大型语言模型(LLM)、指令微
One More Thing
One More Thing again ...

找组织,加入AI魔法学院群