课代表:ChatGPT及大模型专题研讨会
周末应领导的要求听了一下午的直播(什么时候能不再做领导对啥感兴趣你就要每天围着什么转的牛马呢?),一打开还看到了自己本科的老师(死去的记忆突然攻击我)。既然做都做了,还是有些结果比较好,简单分享一下我的笔记和一些思考
以ChatGPT为代表的对话式大型语言模型
-
模型角度:具备涌现能力的模型(目前看来为自回归的、参数规模在百亿以上的,就是10+B)
-
涌现能力:小实体不具备,但是小实体聚在一起的规模达到一个质变点的时候忽然出现的能力。参数规模小的时候没有,在参数规模突破百亿时,忽然出现了一些能力。目前比较特色的有:
-
情景学习能力(in-context learning)
-
思维链能力(chain-of-thought)能够进行逐步推理,分解复杂问题
-
执行指令的能力(Instruction learning)
我们后面会逐一详谈
-
-
能够以对话的形式和人类交互
-
能够和人类的意图对齐:helpful, honest, harmless
-
ChatGPT
- 2017年Google提出Transformer,openai据此提出生成式解码器GPT
- +2021年Google提出的指令学习模型FLAN,据此融入指令学习技术
- +2017年OpenAI自己提出的优化算法PPO,据此融入PPO技术
- +2021年OpenAI自己提出的基于人类反馈的自动摘要方法,据此融入基于人类反馈的学习训练
有趣的三个能力
-
In-context learning
学习上下文的能力,比如在输入的自然语言中给出一些示例,以“问题1-答案1,问题2-答案2,目标问题”的形式输入模型,得到的答案效果明显提升(few-shot),表现为一种被示例引导的语言生成能力。
-
chain of thought:
可以视为基于In-context learning的一种能力——输入的示例不再是直接给出答案,而是“问题1-步骤1-步骤2-步骤3-答案1,问题2-步骤1-步骤2-步骤3-答案2,目标问题-”的形式, 此时模型输出的内容也会呈现明显的步骤,仿佛具备了思考的过程
-
base GPT-3并没有这个能力,怀疑是后来进行的代码数据的预训练带来的
-
program-aided reasoning:辅助解决神经网络算术运算能力不足的问题
在chain-of-thought基础上,再附上代码程序语句,比如计算的公式。然后模型在生成的时候,就会也生成代码辅助计算,从某种程度上实现把计算能力分离出神经网络的效果,提升算术运算的理解效果
- 因此,可以用同样的方法在推理场景中,把逻辑表达式等分离出来,提升推理效果
-
-
learning from natural instructions
- 把不同的NLP任务都指令化,即在训练预料中增加描述指令的语句,发现在40多个任务上训练,就能在上百种任务的指令上泛化
通用的AI能力
Chatgpt表现出了强大的通用能力,似乎可以应对所有和语言有关的问题,或者凡是可以转换为语言形式的任务。这与其训练过程有关,通常通过大规模的语料进行预训练,从而获得语言的通用能力,然后再为了完成下游的具体任务,比如文本分类、序列标注,再进行第二个环节的训练。目前有如下几个范式:
-
预训练 + 全参数微调
模型较小时用的多,把预训练得到的通用模型,变成具体任务的专家
存在的问题:
- 资源占用夸张:每个任务都有一份参数值不同但规模相同的大模型
- 过拟合:下游的具体任务通常数据稀缺,此时过大的参数规模就会学太猛,把噪声一起学进去,导致过拟合
- 通用能力降低
-
预训练 + 提示学习进行inference
- 预训练得到通用大模型后,不改变其参数
- 将下游的任务形式进行改变,变成和预训练一样的数据形式,比如预训练的时候进行文本补全,不断推测输入语句序列的下一个词是什么,在进行文本分类的时候,就用某种方式把分类也变成“下一个词”。比如我们可以在输入文本的末尾增加“The sentiment is possitive[label]”,就实现了文本分类任务变成预训练阶段的文本生成补全任务
- 在对具体的任务进行inference的时候,直接用prompt的方式利用大模型的通用能力完成任务
- 问题
- 这样的提示语特别难找
- 离散提示语:自然语言,不知道搜索空间在哪里,同任务的不同样本之间最合适的提示语可能不同
- 连续提示语:像embedding一样的一组向量,非自然语言。可以理解成是某种抽象的提示语,它能够指代的东西更多,因此具备一定的泛化能力
-
预训练+指令学习
- 对数据进行提示语增强,即在数据中加入提示语后进行第二轮训练,模型的参数会进行一次调整,但是所有的任务都用同一个调整参数后的通用模型解决
发展方向
-
模型的能力通常用Knows矩阵评估,给知识领域做如下划分
- knows knows:知道自己知道什么
- knows unknows:知道自己不知道什么,能够对不知道的问题说我不知道
- unknown knows:实际上是能解决的,但是模型以为自己不知道。chatgpt通过CoT(思维链能力)进行拆解,能够通过解决小问题的方式,从而解决以为自己不知道的复杂问题
- unknown unknows:实际上不知道,但是模型以为自己知道,所以一本正经的胡说八道
-
发展的方向:扩充knows knows和knows unknows
- up-to-date的知识更新能力
- untoxic
- 使用辅助工具的能力,比如使用计算器
- 与现实世界对齐,而不是仅仅和人类的语言对齐。(现实世界中文本知识+暗知识)
大佬们感兴趣的工作
-
MOSS模型:200亿参数,中英文公开数据集,有对话能力,能基于交互进行迭代优化。提及工作耗费128卡,4个月,语料500B互联网数据
-
Prompt领域的工作:
- PLM:为每个样本学习连续提示语,但未考虑同任务不同样本的共性
- Unified prompt learning
- PLM:为每个样本学习连续提示语,但未考虑同任务不同样本的共性
-
NLG的评价方法
- 目前,存在标答的NLP任务,人工标注存在一致性问题、采样问题;不存在标答的NLP任务,如写故事的任务,不能准确评估想象力和创造性。评估指标和人类意图存在一定gap
- 利用prompt挖掘chatgpt对文本质量进行评价的能力,从而实现非人工的自动评价
-
应用于业界垂类场景
- 最性价比参数规模寻找:当下千亿级别的模型并没有完全发挥潜能,开放的数据即将耗尽
- 最性价比训练数据
- 考虑大模型的迁移能力、考虑数据的提纯过滤技术
- 大规模通用语料 + 小规模垂类语料
- 直接使用大规模垂类语料
- 通用、垂类语料比例混合
- 强化垂类专业性的训练技术
- 多任务提示,指令微调
- 小模型无法涌现的CoT:大模型-小模型的Teacher-student架构
- 垂类领域的prompt engineering
- 生成prompt的产品,供垂类专家使用,形成专家-in-loop的prompt生成方案
- prompt自优化:APE, DSP
- 模型加速:分布式并行训练,提高训练效率
- 增强模型通用能力
- CoT能力增强,实现模型对复杂问题的拆解能力
- 结合知识库的检索能力
- 结合搜索引擎
- 内容转换,如算术转换为代码,再结合代码解释器的能力
-
涌现原因的试解释
- 发现
- 多步骤任务上才表现出涌现能力,其它的都是单纯的scaling laws(规模越大,效果越好)
- 不同任务、不同模型、不同能力,涌现出现的规模门槛均不相同
- 数据量较少的任务上,随着训练过程推进,会出现顿悟(grokking)现象:效果出现跳变。随着训练过程,有记忆期->平台期->泛化期这样明显的阶段,发现跳变的原因是模型学到了一个比较好的任务结构的表征
- 试解释
- 能力涌现是因为模型达到一定规模,训练数据中某个比例的子任务的数据进行了良好的任务结构学习,出现grokking,从而实现性能跳变
- 能力涌现实际上只是一种表象,实际上还是符合scaling laws,是评估指标对多任务总结果粗暴评估导致的
- 多步骤的任务,如果拆成多个子任务,评估某个子任务的效果,会发现呈scaling laws
- 发现
大佬们关心的未解之谜
- 为什么训练数据不仅仅决定模型的性能,还会影响模型训练过程的成败?(有报告称改变数据导致训练失败了好几次)
- 能力涌现的原因?参数规模的门槛是否并非百亿,仅仅是因为测试参数规模的时候并不连续,为什么小模型没有涌现?
- 中文训练数据占比很少,但是效果非常好,这样的语种迁移能力是如何来的?
- 大模型的能力能否蒸馏到小模型?
- 未来应该如何研究黑盒一般的大语言模型,是否可以采用脑科学的研究范式?
一些碎碎念(题外话,可太长不看)
直播的最后是一个圆桌讨论,台上的人都是我不认识的各种大佬,title很多,年纪也都比我大不少,听他们聊天的时候我边在打扫卫生,脑子里放空般地想了很多,包括ChatGPT横空出世以来,工作上、网络上发生的种种变化、焦虑和讨论。
专家们都是信心满满的,认为OpenAI提供了一条可行的路,只是路很长,但是大家抬起脚使劲走就行了。
我不知道有多少人和我有同样的感受,从一个不成熟的独生子的角度来说,路的方向和路程的长度对我而言都是非常重要的。我从小是非常适应孤独的,我会我也喜欢和别人合作,但我常常首先思考自己一个人就能解决的方案,优先寻找自己一个人就能做好的事。
这个让大佬们兴奋的领域,对我来说是一个遥远的领域,有多遥远呢?我自己一个人的学习不够,我和小伙伴一起学习还是不够,它所体现出来的算力问题、经济成本,让我觉得它是一个和我无关的事情,我能做的事甚少。即便方向在那里,但是路程的长度同样让我却步,因为我的青春,甚至我的一生,都是非常短暂的。这大概是一种精致的利己,不愿意为什么事业奉献自己的一生,但大概同时也是一种没有希望的现实,和这个社会其他的一些方面相似。没有感受到在某个事业中能迸发个人价值的希望的人,要如何燃烧自己的动力源,投身某项事业中呢?
我不知道这算不算是一种对于普通的自己的自我接纳,还是一种不想再前进的怯懦。于我而言,我只要学会使用这样的新技术(一个人就能使用的话),做一些我自己觉得有意思的东西就好了。这仿佛是我对于网上最近涌现的替代焦虑,顿悟的答案。对我来说,大模型就像是键盘、鼠标,就像JAVA PYTHON一样,只是人和机器交互的一种新方式,这个方式更加没有门槛也不需要练习,就说话就行了。我只想用它做一些我一个人就能做出来的好玩的东西,我自己觉得好玩并且享受就好了。
但是即便是一个这么新、这么便捷的人机交互的方式,也一定有人不会使用。就像文字、键盘、鼠标、手机,每一个时代的技术都不会覆盖到每一个人,于是每个时代都产生各种各样的需求,他们需要被各种各样的新事物服务。过去我用编程语言让机器创造程序,实现我想要的效果,可能未来我只要和机器说话,就可以实现我要的效果,而这个效果,服务于不同的人群,满足不同的需求,我还是有自己的一席之地,但是说话这件事太没有门槛(真的吗?),所以难免会产生淘汰焦虑。
但未来谁能预料呢,过分关注未来,只是在给现在找借口罢了——“反正未来也会XXXX,我现在不采取什么行动也可以”或者“等我怎么怎么样了,我再好好过怎样的人生,所以现在我就先不采取行动,好好忍耐吧”。
我始终觉得,关键不在于未来的周遭是如何的,关键是理想的自己有什么特质,如何靠近。我期待自己是一个这样的人:
- 有好奇心,并能准确描述自己的问题。这是我从不太会用手机的老爸那里观察来的。对于一个陌生的庞然大物,首先能够提出清晰的问题,并逐步发现子问题,找到子答案,最后汇总成自己的答案
- 每一刻都是全新的自己。我慢慢地发现,周围的很多人都有某种程度的“一劳永逸”的期待,比如在某个领域深耕了十余年,如果这个领域被AI挑战,就会万念俱灰,好像做了“用我十年二十年光阴,换我百岁长安”的买卖。我希望每一刻的自己都是全新的,每一刻的自己都是一个随机过程吐出来的状态,它不受过去的强连续性约束,每一个付出都在它完成的一刻完结,把它抛在脑后,而选择只活在“此时此刻”。曾经高中三年是为了考大学,大学四年是为了毕业,硕士两年是为了工作,现在我不想再为了这为了那了,今天的我选择做什么,仅仅献给今天的自己,到明天的时候,这一份精力的付出就和昨天的我一起永久的封存了,明天的我,面对明天的世界,采取新的行动,永远做一个有耐心的小白。
- 有人味儿。我设想在自动化程度已经很高的今天,手机缩短了信息的距离,却拉远了人与人之间的距离的今天,在AI进一步把自动化拉向智能化的时候,我会觉得什么是难能可贵的?我想大概是人味儿,不绝对理智的、不全面的、有点任性的、不现实的、单纯利他的奉献激情,等等。我最想保持的人味儿,就是我可笑的理想主义和有点儿没边的真诚。
- 惊喜。我跟自己说了好多年,“梦想是成为一份惊喜”。近几年的推荐算法一直有一个难题,人的兴趣是突变的,刷几个视频他突然就不想再看这个话题了,他刷到某个别的视频,他突然对这个话题都感兴趣了。我希望在AI的世界里,我给AI的惊喜能更多一些,我还记得本科的时候,AI还没火的大一,我听见满头白发的院长苍老地说“灵感和顿悟可能是大自然给人类留下的最后一道防线”,我希望我可以好好珍惜,希望灵感乍现的时刻能多一点。