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写的更好一些。

Categories
事儿关经济

数据挖掘 vs 计量经济学 (Data Mining vs Econometrics)

先说一下免责声明:我在数据挖掘 (data mining)和计量经济学 (econometrics)两方面涉猎都不算深入。今天斗胆写这么一篇文章主要是最近在看data mining的东西,有一些小小的体会,故记录下来以备后用。

Data mining是最近几天热起来的东西,而由于其中文翻译又可译作“数据挖矿”,所以做data mining的人有的时候也被戏称为“矿工”。Data mining和近十几年的信息化潮流密不可分——若没有计算机在各行各业的大力应用,又怎么可能会有这么大规模的数据用来分析呢?简单的说,data mining有点“透过现象看本质”的味道,在大家还都在“雾里看花”的时候,data mining致力于“拨开云雾见月明”。当然一个最经典的例子就是“啤酒和尿布”,即经过统计发现男士购买尿布的时候也容易购买啤酒,所以把他们两个放在一起可以很有效的提升啤酒的销量。所以从我个人的浅薄理解来看,data mining更多的就是利用计算机高计算性能把大规模数据一一的进行模型匹配,然后按照我们制定的标准来返回最优的模型。

至于econometrics,它又想回答什么问题呢?我虽然一路经济学出身,计量却只是当工具学的,从未研究过怎么开发工具,这里只从应用计量经济学的角度来说说我看过的研究。嗯,我们可以说在计量经济学里面总是在做“回归分析”(regression analysis),即给定一个感兴趣的变量,把其他的可视作影响因子的东西扔到方程右边。从广义矩估计的角度来说,即在一阶距为0的前提下(小样本下无偏)、最小化二阶距为目标(OLS方法,欧几里德空间内的距离按||·||2来算)进行拟合。当然简单的回归一定是有问题的,得出的结果最多能说明两个变量之间的“(线性)相关性” (linear correlation)而无法提供进一步的原因:到底是由X导致了Y,还是有其他的因子同时作用于X和Y从而他们显示出一致的变化趋势。从经济学的角度,我们当然更感兴趣什么东西导致了Y,所以在大样本下从寻找一个consistent估计量的角度出发,我们一般要求X是外生的,要不就需要借助IV等其他方法了。如果所有的方程右边的变量都是外生的,那么我们就可以放心的说这里面有“计量上的因果关系(causality in econometrics,这里定义明确一点要不又要被Yihui兄等统计学出身的批判了)”。所以说到这里,我可以小心翼翼的说,econometrics毕竟是和经济学紧密相关的,所以我们感兴趣的是变量之间的“谁导致了谁”的关系,而寻求这种答案的途径之一就是让足够的数据来说话。从这个角度来说,我更倾向于把计量作为检验 (empirical check) 经济理论的一个工具。至于我们怎么可以保证X的外生性(exogeneity),那就是要具体问题具体分析了。两种主流的观点是要么依据一个经济理论中的structural的模型来进行估计,从而什么是外生的一目了然;要么做(随机)(田野)实验 (randomized field experiment)。我感觉近两年两者结合的趋势越来越多,毕竟做实验的那群人不是什么都不知道就去试一通,他们很多时候也是依照现有的经济理论进行随机化实验设计的。从这个角度来说,实验更是检验理论的一种途径了,先不论它可以在什么程度上回答一个(经济学)理论问题。

那么数据挖掘和计量经济学直接是冲突的、还是互补的、抑或其他呢?简单的一路看过去数据挖掘的介绍,譬如Wiki,大多数时候看到的是从计算机或者统计学出身的人写出来的方法论上的东西,缺少有人直接论及这东西和经济学是怎么结合的。我也只是粗粗的搜了一番,找到的只有一篇简短的文章:Data Mining in Economic Science,by Ad Feelders。先引用一下它开头引用的一段话:

Let neither measurement without theory nor theory without measurement dominate your mind, but rather contemplate a two-way interaction between the two, which will your thought processes stimulate to attain syntheses beyond a rational expectation!

Arnold Zellner

大意就是说“我们不应一味迷信数据不顾理论,但也不宜欢迎没有现实世界数据支撑的理论”。这篇文章不长,感觉作者可能是更偏向宏观经济学(macroeconomics)分析,所以例子都是宏观中经典的譬如体现凯恩斯主义的IS-LM模型。作者的观点是,很多经济理论并没有直接的给出一个特定的模型设定,所以数据挖掘的方法可以用来选择最优的模型(依稀记得某宏观经济学家曾在上世纪90年代就一一试过1700多个线性模型……当然现在看来他的分析难逃内生性问题的争议,不过这大概是我所知道的最早的和数据挖掘思想相近的尝试吧)。后面还提到时间序列分析VAR模型(vector auto-regression),这个我有点不喜欢VAR的思想,所以不再多做评议。

回到那个啤酒尿布的例子,我想到的是,确实,这个统计结果出来之后经济学家可以很容易的解释“为什么”,但是经济学理论却难以告诉我们在某个(微观)实例中到底反映这种理论力量的“是什么和什么”。与我来说,经济学的 explanatory power已经很强大,但是具体到一个可以操作的层面还是需要其他技术来支撑的。如果我们可以通过数据挖掘在找寻可能存在关系的两个变量(此例中啤酒和尿布),那么就可以依据经济学理论进行可能的解释,然后还可以进一步设计随机对照试验,分析试验结果则是计量的用武之地了。

嗯,这大概是我刚刚接触数据挖掘的一点感触,不知道几分正确几分错误,或许若干年后回头看就会觉得有些幼稚了。最后想说的是,从我个人的观点来说,经济理论能告诉大家的更多的是“为什么”,在这个很general的基础上,我们可以进一步尝试的去回答在某个例子中到底“是什么”。最后无论使用线性模型进行回归分析还是其他的模型设定都好,数据挖掘技术可以在这个方面推进工作的进展、帮助我们更好的理解数据和读懂数据、在浩繁的数据海洋中提取最有力的信号,剩下的可能就是经济学进行分析的工作了(当然我是从纯经济学角度出发说这个话的)。从这个角度而言,数据挖掘和计量经济学更是一种相互裨益的感觉,前者更多是一种思想吧~矿工嘛,先挖挖试试看。

[注:我只是从自己的所学出发随便说说,其间必有偏颇之处,还望各位海涵及不吝拍砖!]