大模型到底是什么?小白也能看懂的科普贴
大模型发展到现在已经有一段时间了,不少人都有自己亲身体验过,昨晚上OpenAI还发布了最新的草莓模型。但依然有不少人不明白大模型是什么。这篇文章,作者结合书籍的知识和自己的认知,给大家科普一下相关知识。
从去年到今年,大模型、chatGPT等概念和技术越来越火,但是像笔者一样的技术小白一直对大模型是一种似懂非懂的状态。
鉴于最近在做基于大模型和Agent的上层AI应用,如若不了解底层概念,始终还是会限制产品层的能力,因此,最近2周零散时间读完了这本由复旦团队出版的《大规模语言模型:从理论到实践》,基本涉及到了大模型入门所需的核心框架内容,适合扫盲看。
因此,基于这本书的核心框架,来结合自己的理解聊一聊大模型到底是什么?
01 大模型到底是什么?和以前的AI有何区别?
当我第一次听到大模型(LLM,Large Language Model)这个词的时候,我的关注点就落在了「大」上面:难道是因为最近这个AI模型所用到的各类数据量很大,所以起名叫大模型?
看完书后,确实没太大毛病。「大」的确是大模型几大特性之一,这是因为底层芯片、算力、分布式等领域的飞跃,导致了模型拥有百亿、千亿级参数量以及训练更大数量级的的数据量有了可能性。以OPENAI公司的chatGPT3为例,其拥有1750亿模型参数量,而盘古甚至有10850亿。大家可能对这个数量级没太大概念,可以简单理解为以前很难做到这样的量级,既昂贵又看不到效果,而现在的大模型不仅能做到,甚至还能够因为参数量、训练量越多,其效果呈现更好的正相关性。
我们来看看其官方定义:大规模语言模型,是一种由包含数百亿以上参数的深度神经网络构建的语言模型,通常使用自监督学习方法、通过大量无标注文本进行训练。
那它和以前的AI有什么区别呢?除了前面提到的「参数量海量」之外,个人总结还有以下几点:
1、更像人一样的自然语言对话
以前我们和AI对话,它的「AI感」很重、不太类人,而现在的大模型则能够做到在对话过程中基本像真实的自然语言。这其实和大模型是生成式输出内容的原因有关,这里我用一个不太准确的例子形象化去说明一下(后面我们会用严谨的方式来准确描述):
这个大模型很厉害,它先是将世界上的所有知识(无论是书籍、论文、网站、微博等,还是各类语法结构、逻辑推理知识等)统统咽进肚子里进行消化。那么,它是怎么消化的呢?它将每一个知识拆成小块后都打上标签后存储起来。
当你向他问「今天成都天气咋样?」,他会先将你问的问题和问题背景等信息汇集在一起后,拆成小块并打上标签。打完标签后,它会命令10000个小人拿着这些标签同时去肚子里找出能够回答对应问题所对应的已有知识标签,挑出其中最匹配、概率最高的一个,假设是「成」,这时候,它就会在对话框里展示出第一个「成」字;紧接着,它再将你问的问题和问题背景等信息、再结合「成」这个回答,再次找10000个小人同时去找「成」之后可能性最高的那个字,假设是「都」,然后,它再在对话框里展示出第二个字「都」……最终,经过6次让这10000个小人无脑循环工作后,它会一个字一个字的告诉你「成 都 今 天 晴 天」。
在生成式形态之下,它的每一个字都是通过已有自然语言表达中拎出来的单词、词组结合而成的、每一句话也会遵循相对严谨的语法结构等,所以,大部分情况下,很难让人觉得它的AI感那么重。但是,也同时偶尔在出现大模型幻觉的时候,说一些看似语法结构各方面都正确但内容其实胡说八道的话,类似于「今天成都晴天,你要记得带雨伞」。
2、多任务可集成在一个对话框里
以前想让AI帮忙翻译、推理等,都需要各自找特定的产品,而现在,一个集成的对话框就可以同时做各类任务:文本摘要、翻译、文本创作、知识问答、逻辑推理等,而无需自行拆分场景。能力的扩展固然是好事,但也带来了2个弊端:
1是用户不知道其能力边界在哪里,则会随意的去进行对话尝试,最开始固然是有新鲜感,但碰壁几次后可能就想放弃了,这时也许还不如使用一些指令和路径明确的功能型产品去完成任务;
2是这种更像人在对话的交互形式,会让人不禁对AI产生更多无尽的想象、拉高了期望预知,以为其是真的拥有了智力;然而我们通过前面对其工作方式的理解来看,它并不是拥有了真正的智力,只是拥有了更高效和贴近答案的一种旁门侧路。
因为笔者更多关注文本领域,所以AI在其他在文生图、图生文等上面的多模态(多种媒体形态,如图片、视频等)上的新增能力点就不再展开了。
02 大模型是怎么被训练出来的?
其实大模型的构建原理并不难,这个过程和我们教会一个小孩学习的思路很类似。其包含了5个阶段:预训练阶段、有监督微调、奖励建模、强化学习、语言模型训练。
预训练指通过海量的训练数据(包含互联网网页、维基百科、书籍论文、问答网站等)预先喂给模型海量的数据,来构建基础语言模型,从而使得模型具有语言生成的能力。这其实是先让这个能够没日没夜学习的超级小孩先自己恶狠狠的吃一大堆多啦A梦那样的记忆面包,先把最基础的能力打好。
但这时候,超级小孩回答的内容还不一定是效果最好的,可能你问「我想出门玩,今天天气咋样」,他会告诉你「今天天气还行」,但其实你背后隐含想了解的可能是:今天会不会下雨,需不需要带伞;或者是今天太阳大不大,需不需要防晒等。
这时候,就需要通过「有监督微调」来帮助模型给出更贴合用户想问问题的答案。通过少量高质量数据集合(包含用户输入问题及对应理想的输出结果),再进一步让这个小孩能够照猫画虎,回答出更好的答案。
前几百次超级小孩的回答我可以人工来逐个去反馈好坏,但针对这么庞大的训练量,不可能全部都去人工进行。因此,就引入到了奖励模型和强化学习部分,模拟人类评估的过程。那具体是怎么来提升超级小孩的回答表现呢?
系统先构建好对应的奖励模型,在对问题进行每一次回答后,超级小孩都能及时收到来自环境给予他对应的「打分」反馈,为了获取最高分,他就需要多次尝试、改善得分策略从而最终有最好的表现。
当我们基本构建好这些方面后,就可以将这样的一套模型进行训练和不断优化,最终就构建好了一个可用的大模型。
03 大模型为什么是一个字一个字蹦出来答案的?
语言模型目标就是建模自然语言的概率分布,因此,生成式模型通常基于概率分布进行生成。其本质上是根据已生成的部分来预测下一个最有可能的元素,就像在玩接龙游戏中根据前面的词语来猜测下一个词语一样,每个新的元素都会影响后续元素的概率分布。
当基于提问「今天成都天气咋样」,答案第一个字生成「成」之后,模型会根据上下文和「成」重新更新概率分布,选择下一个词「都」……以此类推,逐步展示模型是如何逐步构建答案的。
那么,这个答案具体是如何通过概率计算得来的呢?
首先会通过分词器(Tokenizer)将文本分割成较小单元——即词元(Token),这些tokens可以是单词、子词、字符等,例如一个wonderful可以单独是一个token,也可以拆分为won der ful这3个token;然后再将文本转换为适合模型输入的tokens序列,从而进一步编码成向量表示,然后输入到模型中进行训练或者推理。
(以下例子从字节的AI聊天机器人平台——豆包扒来的)假设我们有一个简单的句子:“I love natural language processing.”,会按照以下方式进行token化:
(图源网络)
(1)分割文本并转换为 token 序列
使用预训练的 Tokenizer对这个句子进行处理。首先,它会将句子分割成 tokens,可能会在开头加上特殊标记[CLS],在结尾加上特殊标记[SEP]。经过处理后,这个句子可能变成:[CLS] I love natural language processing. [SEP]。然后进一步将其转换为具体的 token 序列,假设每个单词对应一个 token,就变成:[‘[CLS]’, ‘I’, ‘love’, ‘natural’, ‘language’, ‘processing’, ‘.’, ‘[SEP]’]。
(2)编码成向量
Tokenizer 通常会与一个模型(如 BERT)一起使用。模型会为每个 token 分配一个向量表示。这个过程通常是通过查找预先训练好的词向量表或者通过模型的内部计算来实现的。例如,对于上面的 token 序列,模型可能会输出一个形状为(序列长度,向量维度)的张量。假设向量维度为 768,那么这个张量可能是一个 8×768 的矩阵,其中每一行代表一个 token 的向量表示。
这样,原始的文本句子就被转换为了一个由向量组成的序列,然后再输入到语言模型中。然后,语言模型再根据已有的向量信息预测下一个可能的向量(包含多头自注意力机制、前馈神经网络、残差连接和层归一化…),然后再将这个向量转换回文本形式,逐步生成新的文本内容。
当然,我们看起来一个字一个字蹦出来,其实不一定是严格一个字一个字算的,这得看词元(Token,即对词的拆分)是按照什么方式去拆的。至于为什么要做成一个字一个字蹦出来的样式,除了其生成方式本身就是逐步式的之外,其余也包含了以下2点出发点:一是快速响应用户,不至于全部加载完再一并展示回来,从而让用户先基于已经生产出来的内容快速判断该内容是否是想要的;二是基于不满意的内容,用户能够快速进行反馈,假设觉得不满意,即可停止生产or重新发起问题,从而不浪费过多计算资源。
以上就是从大致逻辑上跟大家梳理了大模型底层运作的大致框架,其很多思路和细节还有待进一步深入学习。看完书后,有些内容当时感觉自己懂了,但是真要写出来说明白,还是又查了很多资料。
目前先整理一些理论性内容,后续也希望结合自己工作上对于AI聊天产品设计、prompt调优上逐步积累的小经验和大家做一分享(本文内容如有不妥之外,还望大佬们及时帮忙指正,感谢。)
专栏作家
冰冰酱;公众号:冰冰酱啊,人人都是产品经理专栏作家。5年产品经验,创过业、带过人、踩过坑;独立负责从0-1搭建业务中台,持续深耕B端及SaaS领域。
本文原创发布于人人都是产品经理,未经许可,不得转载。
题图来自 Unsplash,基于CC0协议。
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
- 目前还没评论,等你发挥!