Categories
经济、IT观察与思考

归纳法对世界的改造

从简单的统计模型,到后面的计量经济学,到机器学习,到现在的人工智能,过去的二十年是归纳法大发展的二十年。为什么只看二十年呢,因为二十年前的园主不知世事,超出认知范围之外了。

经济学在大规模应用计量经济学之前,一直是和物理学神似的,也被叫做社会科学中的物理学。而计量经济学的发展与突破也不是纯属巧合,主要是大规模经济金融数据的爆发。

早期的计量经济学,无论是宏观还是微观,其实都还是有深深的“结构化”的影子,就是需要一个结构化的模型来解释为什么会这样,有一堆变量和与之相对的系数,然后再用数据来估计系数。现在回头看,这个时期的计量经济学还是停留在一个“辅助”的阶段,数据的价值只是帮助计算系数。

然后计量经济学就向着弱结构化的方向一去不复返。可以说这是理论的发展赶不上数据的爆发,也可以说是人们渐渐失去了对结构化的理论的执念。这大概等同于量子力学之于传统物理学的革命,人们开始接受这个结构的模糊化。可就算是在这个阶段,人们的执念还是“因果关系”,直到今日计量经济学还是把因果推断作为其存在的哲学本源,试图从归纳法的角度倒推演绎法需要的因果关系。

然后随着机器学习的大爆发,人们从开始的“预测”和“因果推断”是两回事,到逐渐的审问自己,为什么对因果有这么强烈的执念?退一步说,到底什么是因果关系?这个时候才发现,因果关系其实在哲学上的定义也不是那么得清晰。园主在这里就不挖太深了,否则填因果这个坑就要填好久。

这些年,随着大语言模型的爆发,人工智能好像又解锁了一个新的阶段。虽然一边说着大语言就是一个预测方向无意的突破,另一边园主却看到人工智能落地层面对于结构化关系的依赖性慢慢减弱。以前我们的解决办法是对一个问题不断地细分梳理,然后逐个攻破。而现在大模型的冲击就是,我们真的有必要这样分解问题本身吗?如果深度学习模型本身可以就自动学出来一个等同于以前结构化的东西,就算我们没有办法把它明确的表达出来,哪又如何呢?

到这里,深度学习无疑是冲击到一个哲学层面的问题。当数据远远超过了理论的发展的时候,是不是演绎法的价值就远远不及归纳了?我们是像以前那样路径依赖,一定要对问题做一个外科手术一样精准的分解,还是可以容忍结构慢慢演变成一个黑盒子,给它无尽的自适应的能力,然后只需要关注结果就可以了?

这一波深度学习对于人工智能的冲击,我觉得体现到最后, 其实可能是一个去结构化的冲击。我们选择放弃对于结构关系的清晰表述,然后拥抱强化的预测能力对于世界的适应和改造。

人们对于深度学习和大模型的恐惧在于我们无法解释、进而无法控制。一旦我们适应和接受,下一步就是挖掘其无尽的潜力,实现下一轮生产力的爆发。

无论如何,我还是看好科技发展与世界进步的,就算过程中会有无尽的波折。

Categories
读书有感

大语言模型LLM的基本逻辑

上一篇说到我准备入个坑,结果就是最近埋头苦苦补习最基本的一些知识。随便写点东西梳理一下思路吧,这样万一我真的开始做点什么也算是一个基本素材。一些英文的名词我就不翻译了,反正现在大家英语都挺好的。

先来一些可以基本望文生义的名词解释。LLM=large language model = 大语言模型。这简直是个不能再俗的名字了。GPT = generative pre-trained transformer ,也是够直白的。

再来个极其简单的(受限于园主阅历)历史回顾。自然语言处理基本上经历了 word2vec, RNN,然后就是现在的transformer了。其实说到底,自然语言处理的基本问题就是一个时间序列问题。当园主意识到这点的时候也是惊掉了下巴,什么,计量里面的时间序列不是Autoregression, moving average,stationary 那些东西么,怎么看都跟自然语言扯不上关系了。后面看到做量化的人都在跟这个方向的进展,才明白说到底都是时间序列嘛。想想也是,自然语言就是一个把词按照特定顺序排列起来的数据,词与词之间的关联和顺序最终表达了一定的意义。

nlp模型想法差不多,就是基于已经有的词,预测对应的下一个词的概率。建模不是问题,但数据上来后计算是问题啊……于是有了transformer 那篇著名的 Attention is all you need,伴随着经典的encoder-decoder结构,就出现了让图灵测试不再是问题的大语言模型们。

再来一轮名词解释。自然语言到建模之前,需要先把unstructured data转换为可以计算的数字,这就是embedding 这一步,也叫token 化。然后再怎么办呢?transformer的核心是再算一下attention 矩阵,这个矩阵主要涵盖了词与词之间关联程度(不贴公式了),然后要做的就是放到神经网络里面去算了。这里有意思的是,encoder里面不只有一个基于attention数据的模型,而是多个,所以称之为 multi-head attention (多头注意力)。为啥需要多个模型呢,因为神经网络很有名的一个feature(bug)是local optima,即随着初始值的不同,参数可能会迭代到一个局部最优。至于全局最优嘛,存不存在都还是个迷。反映到encoder这里,有意思的是每个单独的模型就有可能抓住语言的某一个层面的特征,比如语法,比如逻辑,比如修辞,比如情绪,以及一些语义学还无法解释的神秘模型。但不要紧,大力出奇迹,只要计算机能算得出来就行。

encoder到这里已经可以做很多任务了,最显著的大概是sentiment analysis, 就是判断里面的情绪。比如一个评价是正面负面,或者是关于价格还是物流速度,等等。这些分类模型对于很多应用场景都是很有价值的信息提取过程,也称为auto-encoding。

decoder呢,任务就更直接,就是通过输入的新数据来预测并生成下文。这也是GPT的厉害之处,可以自己写小作文了。所以这一类也叫autoregressive model ,即AR!再看下去,其实decoder的架构和encoder很像,所以他们的并不是模型架构本身,而是任务的目标不同。

那什么时候我们会同时需要encoder和decoder呢?典型的例子就是两种语言之间的翻译。大概的数学任务就是,给定前后的词,来猜中间缺失的词是什么。这一类就是sequence to sequence 模型了。至于模型的评价,现有Rouge, Bleu等指标(怎么都是法语里的颜色……)。

好了,现在我们有一个transformer模型了,就可以高枕无忧了么?当然不是,下一阶段就是,fine-tuning 或者更准确的说,instruction fine tuning。

这一步,说到底就是让模型理解人们的意图。比如,我想让ChatGPT给我写代码,那我就会先给一个指令,help me write a code in python,这样它才可以理解我要的是代码而不是一个翻译任务。这类对于指定任务类型的 instruction 的训练,不仅仅在于理解目的,还牵扯到对于不同类型任务的参数细调。最简单粗暴的,我们可以要求对某一类型任务完全刷新所有参数,即full fine tuning,也可以省点资源,来只训练部分参数,即parameter efficient fine tuning PEFT。近期还有比较有意思的LoRa方法,在原来的参数矩阵外额外训练两个rank小很多的矩阵,最后再把新的两个小矩阵的乘起来,加到原始的参数矩阵上。甚至我们可以对instruct 的数据单独做一个小模型单独训练,然后在embedding 那一步把数据预处理后再喂给encoder or decoder。

fine tuning之后,理论上llm模型已经有了不错的预测能力了,但还需要一步alignment,即通过reinforcement learning 来进一步训练模型给出更符合人们需求的回答,比如 HHS (helpful, honest, harmless)。这一步主要是利用额外的人为标记的数据,比如对于多个候选答案之间的排序等等。当然,我们还可以搞个单独用来打分的模型给GPT的答案打分,哈哈,让机器自动自我修正。

这一些做完,基本上就是chatGPT 的雏形了。然后我们发现,不够,远远不够,一个AGI不能只有对话功能。下一步显然就是多模态Multimodality,即文字语音图像视频等等形式的结合。到这里,我们大概可以窥见这是一种“搭积木”的挑战了,即每一块儿自己的AI模型要和其他领域的结合起来,互通有无。

再来一组名词解释。Langchain,主要想法是各领域最后都转化为一个文本语言问题,然后互通有无。RAG (retrieval augmented generation) ,主要用来引入额外的信息来补全LLM的知识储备。ReAct (Reasoning and Acting augments) 主要是理解指令并利用各种多模态的模块来执行具体任务。

——

对了,为啥么这里园主通篇不提prompt。因为,园主觉得这就是个成长过程中不成熟阶段的伪命题……过两年可能就完全嵌入大模型本身了。

——

园主这些知识大概一半是Coursera 这门Generative AI with LLM 课扫盲来的。这门课主打一个深入浅出,适合理清大模型的整体逻辑,极其适合入门。剩下一半就是读各类的新闻和paper,还有各种视频。只能说,互联网时代,知识本身触手可及,考验的是系统学习的鉴别能力。

——

这篇本来是想写个提纲然后扔给GPT帮我完成的,结果最后还是老老实实的手动敲完了。哎,下次试试能不能用GPT写的更好一些。