人工智能时代,有很多时髦、相互容易混淆概念的科技名词:AI、Machine Learning、Deep Learning、Generative AI、Large Model,它们指的是同一个概念么?不是的。
-
AI(artificial intelligence人工智能),它的概念最广泛,所有研究人类智能的技术都可以归为其中。
-
ML(machine learning机器学习),是AI的一个子集,具体指的是通过计算机从数据中学习规律的技术。
-
DL(deep learning,深度学习),是ML的子集,指的是一种具体的计算机算法,即神经网络。
-
Generative AI(生成式人工智能),跟AI一样也是广泛的概念,但强调其智能是能够“生成内容”,例如生产文本、生成图片、生成声音,这大大区别于传统的discriminative AI(判别式AI),判别式AI只能预测分类结果,不能生成内容。生成式AI目前使用的算法都是Deep learning。我们现在常用的GPT模型,其全称是Generative Pre-trained Transformer,其中generative是“生成式”的意思,能够生成与训练数据集相似的新数据;Transformer指的是深度学习算法中的一种模型结构。所以,可以理解成深度学习算法在生成内容领域的应用。
-
Large Model (大模型),泛指参数很多的机器学习模型,因为现在只有深度学习模型有可能有几十亿上百亿上千亿的参数(传统的机器学习模型的参数一般在十几到几十个之间),并且这些参数量大的模型又都主要用于生成内容,所以可理解为参数量大的、用于生成内容的深度学习模型。大模型根据应用场景不同,可进一步细分成语言大模型Large language model(LLM)、图像大模型、音频大模型、视频大模型等。
哪些常见的AI产品
目前国外比较有名的大模型公司及其产品。
-
OpenAI: 人工智能公司,著名的产品是GPT-4、DALL-E 2、Sora。
GPT-4是一个大语言模型,可完成翻译、撰写文章、回答内容等各种类似文案工作者的任务;Dalle.E是大规模文本到图像的转换模型,在给定文本提示的情况下生成各种样式的真实图像;Sora是通过文字生成视频的模型,是基于GPT和Dalle模型成果在视频领域的应用。 -
Google:产品是Gemini(之前叫做Bard),功能类似GPT,是基于谷歌自研的大语言模型,跟谷歌自身的产品深度绑定,例如在谷歌邮箱中可以协助写邮件。
-
Anthropic:OpenAI 前员工共同创立的 AI 公司,推出一款名为 Claude 的类似 ChatGPT的AI助手。
-
Meta(Facebook):模型产品为LLaMA,参数从 7B 到 70B 不等的大模型,是开源社区中性能最强和最流行的模型。
-
EleutherAI: 非营利性的人工智能研究实验室,专注于大型模型的可解释性和对齐性,发布了开源的大模型GPT-Neo。
-
微软:Copilot,一个人工智能驱动的智能聊天机器人,其背后支撑是OpenAI的GPT4。
-
GitHub Copilot:编程机器人,具有代码自动完成功能,并且可作为大多数流行代码编辑器的插件使用。
-
Sourcegraph Cody:生成式 AI 编程助手,可以解释代码、为选定代码段创建单元测试、优化现有代码的能力等。
-
Jasper:AI 营销工具以及写作助手,作为第三方工具利用多个模型,如 GPT-4、Claude、等生成营销活动、将文案翻译成多种语言、撰写博客文章、搜索引擎优化 (SEO)。
-
Sensei GenAI:Adobe公司出品的类似Jasper产品。
-
Midjourney: 类似DALL-E,利用人工智能技术,让计算机创作精美的绘画作品。
-
Stability AI: 产品DreamStudio 提供与 DALL-E 类似的功能:图像生成、修复、图像修改。
-
DiffusionBee:开源的AI图像生成工具。
-
Adobe Firefly: Adobe公司出品的图像生成工具。
-
Canva公司的Text to Imag:一款AI图像生成工具,Canva是一家视觉传播公司。
-
DeepMind: 一家被谷歌收购的人工智能公司,围棋人机大战中的机器人AlphaGo就是这家公司的产品。DeepMind推出的Flamingo 是一种视觉语言模型。
-
Synthesia: 是一个基于人工智能的AI视频生成制作平台,生成多样化的AI数字虚拟人形象,制作视频内容。类似的公司还有Natural Video。
-
RealSpeaker: 类似科大讯飞,提供声音合成的产品。
-
Stable Diffusion:Stability AI、CompVis和Runway提供的开源产品。它是一个文本到图像的模型,其模型权重和代码是免费提供的。
大模型的发展历史
大部分机器学习的模型(除了深度学习模型),其模型有效性取决于2个方面。一是所采用的数学模型的假设是否能完美模拟应用场景所发生的事件概率(比如逻辑回归、贝叶斯算法、决策树算法等),二是特征工程的质量(结合行业的专家经验,人工定义出潜在具有预测性的变量,数量往往越多越好)。这些模型训练的过程是,输入加工好的特征,通过算法找出最符合训练样本情况的模型参数。
虽然这些模型在很多行业有非常好的应用效果(例如产品推荐)且便于训练和部署,但是在自然语言处理和图像处理领域,传统的机器学习模型效果不好,其原因是这两个领域的数据有很强的多样性且结构更复杂(例如语言中的一词多义,图像中同一种动物的多种姿势),都使得特征工程的难度加大,也很难找到一个简单又完美的数学模型能拟合现实的情况。
深度学习模型,也叫神经网络模型(模仿人脑神经元),是有多层简单的模型单元层层叠加起来。每一层的模型都不复杂,但随着层数增加,就可以很好的进行representation learning(表征学习),学习到数据背后的复杂规律。完全靠这种多层结构,让模型同时完成特征工程和模型参数选择的工作。由于不需要人工来做特征工程,也不需要设计特别复杂的数学模型,使其特别适用于自然语言和图像处理领域。每层的数学模型虽然不复杂,但是其参数并不少,层数多了以后整个模型所学的参数就更多(百万以上),因此其训练所需的数据样本量也很大,训练时间也长。
神经网络模型起源于20世纪60年代,很多算法在上个世纪就被发明。例如RNN发明于1990年,LSTM发明于1997年。直到2012年称为AlexNet的神经网络获得图像识别大赛冠军,2015年ResNet模型获得了3.6%的错误率(比人的识别错误率5%还低),深度学习才成为人工智能的主要研究方向。随着计算机硬件和网络条件的改进(GPU的使用使得训练深度学习模型的难度降低),从而有机会更普遍的使用。
神经网络模型是一个庞大的算法家族。虽然都可以称为神经网络,但是算法之间的差别还是很明显的。拿盖房子打个比方,当每一个房间或者每一层楼的内部设计不同时,最终搭建起来的建筑物也是千差万别的。传统的神经网络算法有 FNN、CNN、RNN、LSTM、GRU等。2014年以来应用于生成式AI的神经网络结构更复杂,参数规模更大,有variational autoencoder (VAE变分自编码器)、generative adversarial networks (GANs生成对抗神经网络)、Seq2seq、Transformer、normalizing flow、diffusion model等,都可以称为大模型。
这些神经网络算法在网络结构的设计上有明显的不同,但也会相互借鉴。一些新的网络算法会融合不同网络结构,例如2014年GAN模型被发明以后有持续性的发展和改进,和同一时期流行的VAE模型相融合,形成VAE-GAN模型和VQ-VAE模型。
我们常说的LLM(大语言模型),是基于神经网络的大规模预训练统计语言模型,其采用的模型结构广泛使用Transformer,例如Google开发的BERT、T5模型,OpenAi开发的GPT模型,都是继承Transformer的结构特点进一步研发出来的。因为Transformer有2个优点,一是比较适合并行计算,模型训练速度快;二是引入“注意力机制”,可以很好的拟合文本中词和词之间微妙的语法和语义关系。
按照大语言模型采用的网络结构,可进一步分为三个类别:
-
Autoencoding models自动编码模型,典型代表是BERT,它通过屏蔽一些输入标记并尝试从其余标记中预测它们来构建句子的双向表示。这些 LLM 擅长快速、大规模地捕获令牌之间的上下文关系,很适合文本分类任务。
-
Autoregressive models自回归模型,典型代表是GPT,GPT2,GPT3,它根据前面的标记预测句子中的下一个标记。这些LLM 可以有效地在给定上下文后生成连贯的自由文本。通常用于生成式任务,比如摘要、翻译或抽象问答。
-
Encoder-Decoder(Seq2seq模型),典型代表是T5,同时使用编码器和解码器,将每个task视作序列到序列的转换/生成(比如,文本到文本,文本到图像或者图像到文本的多模态任务)。通常用于需要内容理解和生成的任务,比如机器翻译。
同时,每种类型的模型也会进一步在算法结构上演化,形成不同的子类型,例如BERT家族中的变体还有RoBERTa, DistilBERT, ALBERT, DeBERTa等。
市面上的LLM模型发展的很快,在2022-2023年间每年都有接近30个大模型诞生。模型分为两种:pre-trained model预训练模型、instruction-tuned model指令调优模型。预训练模型是在大规模文本数据上进行预训练(非监督学习)的通用语言模型。指令调优模型则是在预训练模型的基础上,通过指令数据集(数据集由三个元素组成:指令、提供上下文信息的可选输入、基于指令的预期输出)进行重新训练来提高性能。下图中颜色较深的是指令调优模型。
在模型性能方面,目前排名靠前的都是闭源模型(没有公开代码),例如OpenAI的GPT系列、Anthropic的Claude系列、谷歌的PaLM系列。开源模型也很多,比较流行的是有Meta 发布的LLaMA,模型能力很接近GPT3.5。LLaMA 系列发展迅速,被许多研究机构广泛使用并开发更好的开源模型,与闭源 LLM 竞争。未来两者的性能差距会缩小还是扩大还很难下结论,但是开源模型的性能在不少场景已经足够好用了。模型排名可参考https://huggingface.co/spaces/opencompass/opencompass-llm-leaderboard
在模型的使用场景方面,大部分大模型是多任务模型,或者说不是针对某一个具体任务而研发的(传统的机器学习模型都是针对单一任务)。T5(Text to Text Transfer Transformer) 是世界上第一个多任务模型,最新版本Flan-T5在超大规模的任务上进行微调,有极强的泛化性能,单个模型可以在1800多个NLP任务上都有很好的表现,常见的任务包括:文本分类、文本翻译、代码生成、文本生成、信息知识查询。
2023年3月《Sparks of Artificial General Intelligence Early experiments with GPT-4》通过各种实验,发现GPT4大模型表现出很好的通用智能。除了对语言的掌握,GPT-4能解决跨越数学、编码、视觉、医学、法律、心理学等领域的任务,其表现都惊人地接近人类水平,大大超过ChatGPT等现有模型。大模型的训练语料包罗万千,体现出的能力通用涉及各行各业,但不一定很深入很专业。因此有一些大模型的训练语料更专注于某一个领域,主打专业能力,例如BioGPT是基于生物领域的语言大模型。
从模型使用的参数量来看,随着模型版本的迭代,其参数规模越来越庞大。例如:
-
2018年GPT的训练数据是4.5G的文本资料,参数为1.2亿;
-
2019年GPT2的训练数据是40GB的互联网数据,参数为15亿;
-
2020年GPT3的训练数据是570GB的互联网数据和书籍文本,其参数为1750亿。
那么数据集大小、参数量、计算量和性能之间有什么关系呢,openAI提出了Scaling Laws,基本意思是:随着模型大小、数据集大小和用于训练的计算浮点数的增加,模型的性能会提高,也会显得越智能。
如何训练大模型
大模型的训练包含以下几个阶段:
-
数据清洗:除去有明显质量问题的数据、自相矛盾的数据,数据去重
-
分词:采用BytePairEncoding、WordPieceEncoding、SentencePieceEncoding等分词算法
-
搭建网络结构:有Encoder-Only、Decoder-Only、Encoder-Decoder三种类型的网络结构
-
预训练:在大量无标签数据集上进行非监督的学习,语料多训练时间长、训练成本高。预训练阶段涉及大量文本,但质量可能较低,很多文本来自互联网。
-
微调和指令调优(Fine-tuning and Instruction Tuning):在专有的、高质量的打标数据集上做进一步的监督学习的训练;在指令数据集上做进一步的训练(称为指令调优,能够让模型更好的对特定的提示词进行响应)。在微调阶段,样本数据看重质量而不是数量,例如几千到几万的高质量的对话。
-
Alignment(语言模型的对齐):进一步按照人类的语言习惯、偏好倾向和道德标准来规范模型的输出。采用基于人类反馈的强化学习 reinforcement learning from human feedback(RLHF),例如利用真实人类的反馈数据建立一个奖励模型,再用这个奖励模型给模型结果评分,根据评分好坏模型进一步完成训练。
-
模型验证和迭代:监控模型的表现,对于大模型错误的结果,用正确的答案覆盖错误的响应,并将其作为示例加入到训练数据中,进一步微调模型。这种迭代可以进行很多次,代价也较小。
使用大模型时,用户提供文本输入称为“提示词”,用于指导模型的输出。不断优化提示词prompt的方法,使得模型能够理解用户需求,称为提示工程Prompt engineering。提示可以是简单的问题,也可以是详细的任务描述。提示一般由指令、问题、输入数据(示例)组成。提示词也可以很复杂,包含很多技巧。例如:思维链提示方法 “chain of thought” prompting 在提示词中包含了推理过程的示例,能够让大模型产生更有条理、更透明和更精确的输出结果;在提示词中指明大模型扮演的角色,给出任务所需的上下文信息;要求模型对生成的结果进行验证,并指明出处。
一般来讲,一个任务场景下训练的模型要用到另一个任务场景,是需要进行迁移学习的。迁移学习,指的是利用从一项任务中获得的知识来提高另一项相关任务的性能。一般的过程是,首先在一个文本语料库中预先训练好模型,然后使用新任务场景的数据来进行模型微调,更新模型参数。预先训练好的模型已经掌握了大量关于语言和词与词之间关系的信息,这些信息作为一个起点来提高新任务的性能。与从头开始训练模型相比,迁移学习允许使用更少的特定任务数据,针对特定任务对模型进行微调,大大减少了训练模型所需的时间和资源。
但是,大部分大语言模型都具有多任务执行的能力,不需要针对新任务进行微调,只要在提示词里面提供较少的样本(例子)甚至不提供任何例子,LLM也可以很好的完成任务。"zero-shot prompting"指的是提示词中不提供特定样本,模型在新的场景内也可以进行推理和生成,"few-shot prompting "指的是提示词中提供少量特定样本,模型就能够进行有效的推理和生成。我们把大模型的这种学习能力称为“zero-shot task-transfer “或 “meta-learning元学习”,或 " in-context learning上下文学习”。
但是这些学习并不是真正的训练过程,即使提供了少量样本,模型参数本身并没有得到更新。之所以大模型具有这种通用能力,是因为大模型在预训练过程中所用的训练数据已经包含了执行这些新任务所需的信息和知识,大模型经过指令调优能够理解提示词中的任务要求。当提示词中给出任务要求并且提供少量样本数据时,相当于是告诉大模型以什么样的形式来展示输出结果,激活了模型的表现能力,按照用户的预期形式来展示答案,完成新任务的执行。所以,in-context learning并不是学习一种新知识,而是学会该如何展示预训练过程中学到的知识。
模型训练后的推理阶段,也就是生成文本的阶段,被称为“解码”,解码也有不同的策略。
-
Greedy search:在每个词的生成步骤,都选择概率最大的词进行输出。特点是生成速度快,但因为每一个步骤的词选择是局部最优,最后生成的句子未必是全局最优的。可能存在比当前模型生成的句子更好的表达方式,但是模型的输出是单一的,且对同样的提示词,模型每次输出文本也是一样的。
-
Beam Search: 在每个词的生成步骤,会选择2个至5个概率较高的候选词,从而生成很多种候选的句子,从中选择整体概率最高的句子输出。这种方法计算量大,但是可以生成更好的文本表达方式。
-
Top-k Sampling:引入“随机采样”的概念,每次生成词的时候会按照概率分布,从排名前K个词中,随机选择一个词进行输出。参数”temperature”是用来定义这个随机性的大小,当这个值较高时随机性较高,生成的文本就更有创意或者多样化。
-
Top-p Sampling: 也是一种随机生成的策略,但是每次选择的候选词的数量是变化的,不是固定的K个词。这种方式会让生成文本更具有创意性。
目前还没有公认的最佳解码方法,哪种方法最好取决于生成文本的任务性质。如果希望模型执行精确的任务,如算术或提供特定问题的答案,应该降低temperature温度或使用确定性方法,如greedy search与beam search相结合,以确保获得最可能的答案。如果希望模型生成较长的文本,甚至有点创造性,那么就应该改用采样方法并提高温度。
大模型在训练和应用时对硬件环境的要求高。为了降低训练成本,行业内有几种方法:
-
Low-Rank Adaption (LoRA): 利用矩阵分解技术,将庞大的参数矩阵分解成2个低秩矩阵的相乘,训练时只需要完成低秩矩阵的权重更新,从而大大降低计算的复杂度。
-
Knowledge Distillation: 将一个大模型的结果来训练一个规模较小的模型,就像老师教学生一样,知识得到传递,获得的新模型体积较小,更适合在终端硬件设备上运行。
-
Quantization 降低模型参数的计算精度,Float-32运算改为Int-8运算,这样会减少模型的大小,但也会降低模型的精度。
大模型的局限性
大模型的训练过程,可视为是一种对海量训练数据进行“压缩”过程,从广泛的数据中提取有用的信息和模式,并将这些知识以参数的形式存储在模型中。这些参数是海量信息的归纳和压缩,语言规律的总结。例如Lama2 70B模型来说,其训练数据是10T,最后生成的参数文件为140GB,压缩比大约是100倍。
所以,对于大模型来讲,输入的样本包含的信息、知识越多,模型需要归纳的参数也自然更多,能力也就越强。相对于语言大模型,图像大模型的参数往往会少一些,例如Dalle.E 2的模型参数在35亿,Sora的参数量大约在30亿,跟GPT的参数不在同一个量级。
一个潜在原因是图像的训练数据量较小,或者说图像样本所携带的信息量并没有语言文本那么量多且内容多元化。Dalle.E模型的训练数据是基于互联网上抓取的 4 亿个文本和图像相互对应的组合,样本量远低于大语言模型的样本量,就已经有非常出色的图像生成能力。
因为本质上是信息压缩,大模型本身并不是像人类那样通过深入思考和推理来完成任务。模型能够生成高质量的内容,看似拥有了智能,但其底层运行机制是根据压缩后的参数,按照概率生成一串跟训练数据相似的一段文字,有点“熟读唐诗三百首不会吟诗也会吟”的感觉。
因此大模型对各种任务完成的程度,取决于大模型的训练数据,如果训练数据过时,即使任务本身不复杂,大模型也是很难像人类那样通过思考和推理来完成。例如让chatGPT生成代码并指定其必须使用一种新发明的编程语言(训练的样本数据中没有这种语言的参考资料),它是无法完成的。
退一步讲,即使是常见的编程语言,其生成的代码也未必准确(如果训练数据中的样本代码有错误的话),就需要人工进一步调试。还有一个例子,如果问GPT-4汤姆·克鲁斯的母亲是谁,它会告诉你是玛丽·李·菲佛,答案是正确的;但问玛丽·李·菲佛的儿子是谁,它会说不知道。也就是说大模型掌握了文本之间的语义关系,但并不是一种真正的推理或者学习能力。
大模型对信息的压缩、对知识的学习,只能在训练阶段中完成。训练完成之后,当人们在使用大模型的时候,模型只是根据学到的规则完成预测(inference),模型并不会在人机对话过程中进一步完成信息的吸收和学习。所以,大模型本身是没有记忆功能的,不会记忆跟用户之间发生过的历史对话,除非这些对话内容作为下一次模型训练时的样本数据。
目前大模型看似有的“记忆”功能,是通过允许较长的输入长度来实现的,例如用户完成第一次提示词输入得到回答以后,在进行第二次提示词输入时,前一次的提示词在后台也是作为上下文同时输入给模型的,也占用输入长度的额度。
传统的机器学习算法在预测过程中会出现错误,同样道理,大模型生成文本时也会发生错误,也就是幻觉现象。大模型的幻觉现象(Hallucination),指的是其生成的内容不可靠、不真实或者逻辑混乱,类似一本正经的胡说八道。
例如一位律师使用ChatGPT 来支持他的法律案件,但发现ChatGPT 捏造了一些看似支持论点但完全不存在的案例。幻觉产生的背后原因是数据压缩的过程中产生信息损失,或者训练数据中不包含这方面样本,或者训练数据包含的样本就是逻辑错误的。
“幻觉”在有些场景未必是坏事,例如用户如果是来撰写小说或者写诗,幻觉会让文字更有想象力和创造性。虽然“幻觉”不能彻底消除,但是有很多方法可以降低其出现的可能性。例如建立规则或者统计模型来评估生成文字和事实数据的一致性,使用思维链提示(chain-of-thought prompting)的方式让模型完成审慎的推理,或者使用外部知识库(检索增强生成RAG)来补充事实数据。另外需要注意的是,随着大模型能够生产大量的文字和图像,这些又进一步被人类发布到互联网上,就会造成未来用来训练模型的数据很大可能会包含这些不是人类创造的文本和图像,意味着训练数据的有效性在降低,幻觉问题可能会加重。
由于大语言模型功能仅限于文本生成,为了让LLM提供更广泛的功能以及提供更准确的答案,就结合外部的工具(插件功能),例如允许模型通过API访问实时信息、访问外部的数据库、调用计算器执行复杂的数学计算等。这种充分利用第三方工具的方法衍生了AI agent(智能体)概念。智能体基于大模型能力,同时与用户和环境互动,具备访问和使用工具的能力,并能根据给定的输入做出决策,不是简单的响应文字,而是能够执行需要一定程度的自主性和决策性的复杂任务,就像一个有脑有手的人,例如Cognition宣布推出全球首个AI软件工程师Devin,本质上就是一个智能体。