注:本文写作多依赖于好友乐乐的视频播客和文本等工作,故转载文章请注明原处,且不得随意剪裁文本内容。
0. 小引
ChatGPT,从进入公众视野伊始,到如今被广为热议。我和好友乐乐就不约而同地站到了小黑粉的队伍。尤其是乐乐,翻找并整理了大量的论文和博客文献,深入发掘并梳理了NLP的演化历程,实为不易。而乐乐的另一位好友LiL .W2,现就职于OpenAI团队,也并不对ChatGPT有积极的评价。大家本质上的意见是一致的,那就是从学术角度来衡量,ChatGPT并不拥有很高的创新度,而更接近近些年NLP领域进展的大综合,以及大模型中所谓的“量变引起‘质变’”。
虽然如是说,但ChatGPT的表现仍然给大家带来许多惊喜,其构建和打磨模型的许多细节仍然值得被学术界和工业界关注和借鉴。鉴于好友已在她自己的视频播客1中对NLP和ChatGPT模型做了详细的拆解,故本文旨在以最轻量的科普文本,力求让更普泛的读者对AI、ML以及NLP等领域现阶段进展一窥全貌,并谈谈个人对未来计算机及智能领域的一点想法。
1. NLP演化极简史
1.1 关于语言的基础思考
首先思考这样一个问题,如何区分我们的56个民族?一个简单的回答就是看大家说什么语言或者方言,虽然这还不能精确的区分56个民族,但却是最为简单有效的办法。事实上,从宏观的角度看,当代的政治学家和社会学者都是以语言作为区分不同民族,信仰和文化背景的重要依据。那么微观层面上,我们该如何创造一门语言呢?我想我们可以参考一下J .R .R .托尔金在写作《魔戒》时创造精灵语的经验。首先我们要有一些基础符号,它们可以是用来表形的,例如古老的甲骨文,也可以是用来表音的,例如拉丁语系或欧印语系中的字母等。当有了这些基础符号,就可以通过组合排列的方式用来表意,如汉语中的文字或是英语中的单词,再进一步就可以构成短语和句子,当然为了约束以方便统一表达,我们还要加上若干抽象的规则——语法。这样我们就有了语言,但是因为在最初创造语言的时候采用了不同的基础符号原则,因此所构建出的语言在表达上也会出现区别,例如英语的字母只是一些音节的组合,而并不与现实映射,因此总可以通过不同的排列组合方式给出更为精准的定义化表达,这也是为什么许多从事科研工作的人相信英文在科学技术相关的表达要比中文准确。但是,类似中文这样半象形半表意的语言,则更为适合文艺工作者的表达,因为它更具有诗性的美感。
总的来说,虽然我们并不如一个语言学家一样拥有丰富的构词法、语法和语系知识,但这些基础的认知和思考过程,就足以映射人类在NLP领域中的探索过程。
1.2 从Bag of words到RNN/LSTM,再到BERT/GPT3
“如果一直猴子有无限的时间,那么它就可以在打字机上完整的写出一部莎士比亚作品”,这个思想实验大概已经成了许许多多统计学家口中的恶趣味了。但是我们这里可以想象一下,当猴子每敲下一个按键的时候,计算机是如何“弄懂”猴子要表达的意思呢?一个简单的办法,我们可以把26个字母看成是一个26维的空间,这样每一个字母都对应这个空间中某一个维度上的单位向量,它们是彼此正交的,因此可以通过向量的标量乘法和直和的运算方式将一个单词表示成一个26维的二阶张量。虽然看似很复杂,但是这样的语言计算机却可以很快“理解”它们。
Have you seen the movie The Wendering Earth 2? It is great! I really like it.
这里我们看上述一段语料,我们可以利用与猴子同样的思路,将单词映射为高维空间中的张量,并根据单词出现的频率赋予它权重,进而我们就建立了词袋模型(bag of words)和词嵌入模型(words embedding), 利用贝叶斯统计推断,可以选取某个单词的前三个单词作为条件概率,从而计算下一个词汇的概率,继而确定第四个单词。当然,由于词空间的维度相当之高,这样的推断很难准确,如果你用过早期的NLP产品,大概会对当时的推测准确率深有感触。
词袋模型中一个基本的理念是把一段语料看做成一个词序列,这样如果忽略词语之间的语法关联关系,就可以把这样一个词序列看作是一个马尔代夫过程,即无历史关联的随机过程。那么更进一步的思考,如果要确定一个单词,我们可以利用前面所有单词的向量来进行统计计算,这就产生利用RNN来处理NLP问题的基本思想。RNN实际上就是一个循环网络,每一次迭代都将一个单词作为输入进行计算。
RNN在处理语料序列的时候,对于词语词之间的关系是“无意识”的,完全依靠统计来处理权重,这种方式其实并不符合人类对于语言的认知。例如在上述给出的语料事例当中,我们当然知道the movie和it是对The Wendering Earth 2的指代。而且,由于卷积计算的天然特性,词语之间的关联关系会很快被“遗忘”,即权重在多次卷积计算后趋向于0 。那么一个自然的想法就是,我们需要对这些权重要有意识的进行增强或是减弱,以至于“遗忘”。那么我们可以改造RNN中每一个迭代的计算过程,这里一个过程可以成为一个Cell,我们需要在Cell中加入一些逻辑门来强化/削弱单词的权重,以体现一个语料序列中的重点关联关系,而这样的被改造过的RNN就被称之为LSTM。
LSTM中利用所谓的遗忘门函数选择强化/削弱一些权重,进而达到对语意“理解”的目的。当然在这过程中,对于词嵌入的方法也做了进一步处理,即采用所谓的tokenizer的方法进行分词(词袋模型中所使用的词向量办法一般称为word2dev),不再是单纯的对单词进行分割,而是对词根等进行分割,这样就将语法上的时态等概念引入了进来,比如want和wanted。
LSTM4一定程度上对NLP的研究过程起到了相当的促进作用,并且在机器翻译领域取得了不错的成绩,但是从结构上,RNN和LSTM都有一个问题是输入序列长度与输出序列的长度相当,所以很难处理长段落语料以及问答系统(问题和答案的序列长度差别很大)。RNN和LSTM另一个技术上的问题,是所谓的梯度消失/爆炸的问题6。
关于梯度消失/爆炸问题的解释*: RNN和LSTM网络中的“记忆/遗忘”参数并不是先验得出的,而是通过语料文本训练得到的,具体过程是首先给这些参数一个初始值,然后让网络计算一个文本,并给出输出向量,同时真实的结果文本转化为现实向量,我们将预测向量和现实向量做差(这里指的是差方),就会等到所谓的损失函数(Lost Function),所以不难看出,损失函数越小,预测值与实际值就越接近。为了让损失函数得到最小值,对于连续函数我们可以采用微分的办法,这就是所谓的反向传播,微分之后我们需要找到其最低点,因为最低点时损失函数为0,即预测值与实际值相等。而在这个曲面上找到最低点的过程,与你在一片田野上找一个土坑的经历类似,你会找到一些向下的“坡”,然后沿着“坡”一直向下跑,这个过程就是所谓的梯度下降过程,所谓的“坡”就是这里所说的梯度。所有的神经网络中,为了避免线性拟合的不准确性(可以理解为线性只能拟合直线,但是现实大多数数据都是曲线,即非线性的)都会引入所谓的激活函数,RNN和LSTM当中都会引入sigma激活函数,这就让原本的网络计算构成了一个非线性动力学模型系统,这种系统的初始态如果在稳定解(吸引子)附近就会逐渐趋向稳定,如果远离这种状态,整个系统就会像混沌态演化以至于最终发散,初始态一点点的差别,在非线性系统中都会产生天差地别的结果,这就是所谓的“蝴蝶效应”。RNN和LSTM在迭代过程中也是如此,如果初始参数不恰当(事实上很难选择到恰当的初始值),就会在不断的迭代权重乘法过程中,使得梯度权重趋向于0(梯度消失),或者是(梯度爆炸),使得计算过程无法继续。
要解决RNN和LSTM的问题,我们必须清晰的知道它们的问题是什么,目前除了计算中的梯度问题,另一个问题就是遗忘门这个设计还是太过简单了,还不能让网络像我们那样理解一段文本语料。那么我们在看一段文本语料时,我们主要看到了什么呢,很好验证的办法,你读完这一段文本之后闭上眼睛,然后你还记得什么?没错,你能记住的可能仅仅是一些词汇,一些重要的词汇,这是一种“注意力”机制,同样,我们需要我们的网络也能够产生类似的注意力。一种数学上的思路是,当两个向量做乘法时,可以得到一个向量在另一个向量上的投影,相关性越强,则投影越长,我们利用这个特性让语料经过分词(tokenizer)后的token进行自乘,已找出重要的东西,并且把它作为权重重新分配原来的token,这样我们就相当于把“注意力”分配到了这个token上,可以简单的表示成数学公式,这就是最初诞生Attention机制的思路,但然为了训练需要,我们需要改造这个公式,以使得它具有更高的可调节性和更好的梯度“坡”来用于训练,即键值Attention的思路
这里Q,K,V都是输入token序列X的线性变换,d为方差。这样我们就在数学上建立了一个简单的Attention机制,当然为了优化模型训练等问题,Attention有多种变体,一个非常有参考价值的文献就是Attention Is All You Need3。
另一个要解决的问题就是,RNN和LSTM需要单个token累计输入到网络中,切输出序列长度与输入序列长度相等,为了解决这个问题最早提出了seq2seq模型,该模型分为两部分,一部分称之为编码器(Encoder),能够将所有输入端的序列压缩到一个固定长度的向量当中,另一部分与编码器对偶,称之为解码器(Decoder),可以利用所得到的压缩向量计算得出下一个token。但是实际上文本语料中很少出现需要全文本关联的情况,因此seq2seq模型消耗大量的算力计算了一些无关紧要的东西。因此,一种自然的想法就是结合Attention和Encoder- Decoder的各自优点,也就诞生了NLP领域中目前最为重要的单元结构——Transformer。
至此,我们已看到了目前处理NLP的全部历史轮廓,无论是18年榨街的Bert系列模型,还是更早一些起家的GPT(GPT-1 -> GPT-2 ->GPT-3 -> InstructGPT -> ChatGPT)系列模型都是以Transformer(以下略写为Tm)为基础的大语言模型模型LLM(Large Language Model),只不过对于Transformer结构的优化和改进,以及整体网络结构设计和Tm组合都有各自的思路,简单归纳来说,Bert系列使用了Tm整体结构,或者只使用Tm的Encoder结构;而GPT系列则只使用了Tm的Decoder结构。并且目前为止,这些大模型的训练思路基本上都是采用Pre-Trained(预训练)+ finetune的思路。
2. 惊奇但并不传奇的ChatGPT
长城固然是雄伟且壮丽的,但是如果当时如果有人告诉始皇帝他发明了枪,那么熟更具有时代意义是不言自明的。当然,我们绝不能因为站在历史角度来否定受限于历史局限性的当时的人们在筑建伟大长城所付出的智慧和汗水,这样伟大的工作仍然具有历史的借鉴价值。这也是个人目前对于NLP领域进展的基本评价。
GPT的本意是Generative Pre-Trained Transformer,根据OpenAI团队的披露,GTP-1的诞生实际上要比Bert早一些,但是因为表现能力和宣传能力,使得它并没有像Bert那样受到广泛关注。但是ChatGPT之所以如今大火,其主要原因仍旧是在路上,除了使用Tm和Multi-Head Atention等网络结构机制之外,Google团队在GPT-2时还提出了一些“学习”思路来处理多类型任务模型(翻译,问答等)和零样本学习(Zero-Shot)问题5,10。
机器学习领域一直都区分为有监督学习和无监督学习两种方式,从表现上判断,有监督学习需要大量的样本数据进行训练,而无监督学习只需要设计一个行为良好的奖励函数即可完成学习过程。然而我们总可以把所谓的样本数据看做成是一个“智能”奖励函数的预处理结果,所以在GPT-2中提出的一个重要思路就是,所有一切有监督学习任务都是无监督学习任务的子集。进而区分了指示学习(Instruct Learning)和提示学习(Prompt Learning)两种处理学习任务的思路。可以简单以如下的方式来理解这两种学习任务的区别。
提示学习:上个月我去了哈尔滨,这座城市太美了,我很 ____这座城市;
指示学习:(请判断该句子所表达的情感)上个月我去了哈尔滨,这座城市太美了,我很喜欢这座城市。选项:A. 很好;B. 好;C. 一般;D. 差;
提出指示学习的目的是,对于已经针对某个任务(例如翻译)已经得到的训练后模型,可以采用生成网络模型作为奖励函数,在无样本条件下对该模型进行微调,以使得该模型能够处理其他任务,从而既可以解决Zero-Shot问题,也可以让模型更为泛化。
而预训练的GPT系列情况如下
GPT-1 | GPT-2 | GPT-3 | |
---|---|---|---|
Parameters | 117 Million | 1.5 Billion | 175 Billion |
Decoder Layers | 12 | 48 | 96 |
Context Token Size | 512 | 1024 | 2048 |
Hidden Layer | 768 | 1600 | 12288 |
Batch Size | 64 | 512 | 3.2M |
Training Data | 5GB | 40GB | 45TB |
Created Date | 2018-6 | 2019-2 | 2020-5 |
由此可见,GPT-3已经是绝对的大模型了,其训练过程总计消耗10000张Nvidia V100显卡,但是其训练语料样本主要包含人类搜索数据和问答数据等,输出结果好坏参差不起,因此OpenAI团队结合对于InstructGPT模型的研究,进一步采用指示学习和PPO算法对GPT-3模型进行微调,从而得到了如今的ChatGPT。
如此,OpenAI团队可以说利用充足的数据集、算力资源和物理能量构筑了一条迄今为止最为壮观的NLP长城,其效果也如大家所见,确实给人们以惊人的效果,特别是指示学习、强化学习模型和PPO算法的运用,挺升了模型的泛性,使得模型能够自己学习代码,数学计算等等非NLP领域的知识,给足了人们惊喜。
但是另一方面,由于地层模型并没有突破性的创新,模型的对于语义的理解仍然按照Tm模型中的方式进行,所以不禁让人们思考:我们如今究竟是要让机器学习以人类的方式来理解世界呢,还是以现行的方式来发展另一种有别于人类的“智能”呢?
3. 从ChatGPT想到的问题
虽然我们看到在ChatGPT使用了许多漂亮的模型和算法处理,但是仍然不能说这样一个模型具备了如同“人类”一样的智能,他仍旧是一些以确定化的过程来机械处理数据的算法。其实我们今天发展出的NLP领域进展情况,与其他如图像识别,语音识别等领域情况,仍然是十分相似的,也就是说虽然这些领域也有一些看起来很“智能”的模型,但是似乎都与人类所认知的智能有着较大的出入。这与这一广阔的领域中一些主要问题是相关联的。
3.1 黑箱与AGI
到目前为止,人类所追求的目标仍就是通用人工智能(AGI),我们常常描述一个通用人工智体能应该如同人一样的学习各种知识和能力,能够处理不同种类的任务。限于人们对于“智能”本身知之甚少,所以在这个目标前我们仍有漫长的路要走。个人认为,对于这个问题的本质突破仍然需要解决模型的黑箱问题。即我们需要理解并清晰描述模型设计,训练以及预测时的所有结构和过程。
部分数据科学家,人工智能方面的学者以及数学家,并不支持一定要揭开黑箱问题,就如同我们孕育了一个新的智能生命,我们可以与其合作,但并不要时时刻刻了解他的大脑里发生了什么一样。但个人认为,无论是将这样的通用智能体看作是“伙伴”还是“工具”,我们都需要让黑箱变得透明起来,虽然目前的诸多进展显示这个目标甚至要难于创造通用人工智能体。但是事实上,如果没有一个这样的理论来指导,我们也同样难以达成“创造通用人工智能体”的目标。
如果我们能早日攻克黑箱问题,那么许多其他问题将会迎刃而解,比如,我们有三个模型分别用来处理人脸识别、语音识别和翻译任务。如果我们需要同时用一套模型处理这些任务呢,要么我们需要人工区分这些任务,以调用不同的模型,要么重新训练一个模型,来处理这三个任务,但是如果能够揭开黑箱问题,或许我们会有方法直接归并三个模型而得到一个模型来处理任务了。
另一方面,我们需要根据我们的选择来调整模型的输出,比如,我们绝对不希望从ChatGPT看到一些灭世言论或者种族歧视的言论,所以我们需要利用指示学习和奖励模型来对模型进行微调,实际上这也并不是一个简单的过程,我们需要构建一个良好的强化学习智能体,来对预训练模型进行二次训练。但是如果能解开黑箱问题,我们就有可能通过直接调整模型参数的方法来直接就错,从而既可以保证模型的泛性,也可以使模型的输出得到保证。
3.2 算力问题
我们已经看到,要训练出一个ChatGPT这样的模型,其消耗的算力资源是如此巨大,莫说是个人,即使是非Google同等体量的公司也无法做到。但是实际上,在词袋模型模型中,我们就看到了,无论是分词向量还是后来的token向量,大部分元素都一定接近于0,这其实是现实数据样本的特性,同类数据样本在高维空间往往会相互接近,从而使得其他维度都表现为0。那么机器学习中无论是卷积计算还是激活函数等张量计算,实际上都是大规模稀疏矩阵运算问题。如何有限的削减这种稀疏矩阵运算次数,成了未来发展机器学习和人工智能的关键因素。
其实目前我们已经看到了两种思路,一种是降低反向传播算力消耗,在发展神经网络的过程中,我们都避免不掉反向传播算法,核心是因为我们没有这个偏微分方程的解析解,所以只能利用梯度下降算法来找到函数的极值点。但是最近MIT团队在一类CfC网络中求解了神经元传播的近似解析解7,这无疑会大幅度提升现有的计算效率,从而降低算力资源的消耗。
另一方面,在物理学中有一种处理极值点发散问题的方法——重整化8,他的本质是在局域区域做均值,从而易除掉一些无用的信息,降低原始数据的维度,这未来也可能成为一种处理算力问题的思路。
3.3 中文的NLP
百度今日发布说基于ChatGPT的中文模型“文心一言”很快就要发布,虽然对于国产化是一个不错的期待,但是这种期待个人觉得是会打折扣的。不同于英文,中文实际上是一种半形半意的语言,他的表达能力和表达思维完全不同于英文,这也是为什么许多做科研的人会觉得英语是更为准确的表达,而一些作家觉得中文是更为诗性的语言的原因。但是在处理机器学习和神经网络模型中,所有的语言都会被映射为一种编码,中文分词领域往往采用拼音加上声调和位置信息进行编码,这种编码对于英文语系是没有问题的,但是对于中文在编码过程中,实际上已经存在了部分信息的遗失,而丢失的这部分信息往往具有另一层的含义,只有很多以中文为母语的人才会领会。
所以站在这个角度讲,中文的NLP模型,很可能需要另辟蹊径,现有的模型仅仅具有参考价值,我们需要在分词,transformer等领域分别找到能够针对中文的模型才可能真正解决中文的NLP问题。
3.4 语言的创造问题
《格林童话》当中一个意味深长的寓言就是“侏儒妖”故事,它让人们意识到:“当你能够给一事物进行命名的时候,你就拥有了理解和支配它的力量”。这其实反映了一个事实,决定人类认知水平的不是其他什么,就恰恰是语言自身。
人类今天的词典里,并不是一直如今天一样的丰富,大量词汇是在历史的进程中被创造的。而一个新的词汇被创造出来的时候,往往意味着一个人类文明历史的进程和人类“智能”上的进展。虽然如此强大的ChatGPT拥有如此强大的能力,它甚至掌握着任何一个人类个体都无法掌握的语料文本,他可以通过组合的方式一本正经的胡说八道一段文本,然而它很难具备创造词汇的能力,因为一个词汇的诞生往往意味着真正意义上的认知和智能上的进展,以及他背后对于现实世界知觉和处理的力量,这也是为什么短时间内诸如ChatGPT等模型很难取代人类的根本原因。与现实社会和自然的割裂,注定了这种模型对于真正“智能”的割裂。
3.5 如何处理ChatGPT创造的文本
ChatGPT这类开放接口的文本处理模型,也会具体的带来一些现实问题,要如何控制和处理这类问题,将会很快成为大家关注的一个话题。一个典型的事件就是Stack Overflow官方公开声明禁止ChatGPT参与问题讨论。根本原因就是模型会输出一些看似“一本正经”的处理问题的答案。
那么相关的思考同样已经迫在眉睫,比如是否通过喂养和诱导等方式,让ChatGPT具有搜集隐私信息,并向部分非法用户转录这些隐私。
ChatGPT输出的文本如果不加以控制,是否会混淆到现实世界,从而产生一些非事实类描述文本,继而引起或激化一些人类社会的矛盾。这已经并不是第一次讨论类似的安全分体,毕竟类似Fake Face和Voice AI等模型已经被用于一些领域,以获取非法利益。
更近一步的,此类模型会不会向一个人发布同类诱导性文本,从而影响参与者的意识形态,做出违反自身意识和知觉的判断,我想如果你读过Jamie Susskind的《Future Politics》,你一定会有类似的担心。
3.6* 哲学问题
20世纪20年代,以卡尔纳普、石里克为首的等人成立了“维也纳小组”,支持逻辑实证主义,一时间对于“形而上学”讨论声音,变得噤若寒蝉。这种哲学上的严寒,直至哥德尔对于数学实证主义的讨论才渐渐停止。
那么如果ChatGPT类似模型产生了类似的逻辑文本,我们是要以“形而上学”的问题来接纳,还是要以逻辑实证主义角度来审视,也可能将成为“科技哲学”领域所需要深入讨论和求证的问题。
4. 价值体系——从ChatGPT到知觉革命
谈一点个人体验,虽然这些年由于商业价值的需要,诸如“通过图灵测试”和“奇点降临”的声音不少,但是个人认为,短时间内所谓的人工智能“奇点”和“元年”都可能不会真正的降临。
但是回顾这近半世纪互联网、物联网、信息存储、传感器、穿戴设备、科学计算、神经网络和机器学习的发展,都似乎在指向这样一种结果——知觉革命。
知觉,可以说是人与自然,人与自我之间的桥梁,它直接影响着人对自然对自我的认知,影响着人生存和生活的基本哲学和方式。
一个简单的例子,在红外设备发明之前,我们不会有把握或者策略的穿过一片夜幕笼罩的田野,但是有了红外设备,我们就能够在一定程度上及时发现风险,并找到处置办法。因此我们具备了夜间出行在荒野的能力,当然你可能还会带上一把用神经网络来拟合你个人习惯的武器。实际上这些设备都是对于人类知觉和能力的延伸。
也许你知道,人眼只可以观测电磁谱上很狭窄的一段频率范围,但是各种新型的物理设备和传感器可以延伸你的知觉,可以想象你接收到的信息将是以往的几十个上百个数量级的倍数,你会发现以往无从认知的世界,就如同《三体》中带着3k眼镜的汪淼,看到宏大的宇宙背景闪烁一样。想象一下,你不再通过有限的颜色来透过那些名画去认知梵高,达芬奇。而是更为宽阔的维度信息来触碰历史中那些伟大的灵魂。你甚至可以通过VR/AR/MR等设备,与这些伟大的人在任何一个你想要的时空中相认识。而你看到的对象将可能是利用神经网络还原他们的意识,样貌和真实声音,就如同你真的穿越时空见到了真实的他们一样。
虽然看起来这样的科幻,但事实上许多技术已经具备了现实支撑,这或许很快就成为那样一场知觉革命中的一个现实片段!
5*. 参考文献
- Yule Wang的Machine Learning Seminar讲解与讨论
- Lil’Log
- Attention Is All You Need
- Language Models are Few-Shot Learners
- Training language models to follow instructions with human feedback
- Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
- Closed-form continuous-time neural networks
- Gell-Mann–Low Criticality in Neural Networks
- Finetuned Language Models Are Zero-Shot Learners
- Language Models are Unsupervised Multitask Learners
- Proximal Policy Optimization Algorithms