Categories
日常应用

小试自定义GPT

最近不是在折腾LLM嘛,于是就试了两条路子:用openai的api,以及直接在openai的界面里面创建GPT。

前者没啥特别的,chatgpt的api做的很成熟了,from openai import OpenAI 之后直接在python里面调用几个现成的函数就好了。可选的参数其实也不多,主要就是prompt写的好一点就行。我的要求也不高,试了试基本满足。此外我还用到了微软 azure api,也很方便,两者一结合基本一个app就搓出来了,只是暂时还只能在命令行运行,没写前端ui罢了。

后者就麻烦了。我想着自己写前端ui还挺麻烦的,就想偷个懒直接在GPT里面弄弄看看行不。结果呢,现在这个版本实在是太挫了,只支持最最基本的action,虽然可以调用其他api,但还没研究出来怎么实现用户上传的文件扔到action api call里面。搜了搜他们的论坛也没啥结果,然后心累就到此为止了。

最后贴一下如何在openai 的GPT里面调用azure api。主要是api key那里实在是反用户直觉,我找了好久……一定要选 custom 然后把自定义的名字设为 Ocp-Apim-Subscription-Key 才可以。贴个图。

自定义 action -> authentication -> custom header name

当然azure api的文档做的也很差就是了,经常搜出来的是过时的文档,试一试都是404错误。哎,时间都花在这些琐碎的调试bug上了。

最后的结论是,在现在这个阶段,openai GPT的多模态做的还是太封闭,只适用于比较基础的交互需求,得等到后面允许自定义编程更丰富一些才可以。想做的稍稍复杂一点,写ui是逃不掉的了。web版还可以写个python+js凑和一下(flask这么轻量级的web开发框架真的是效率提升利器),app版xcode看了半天发现也是一等一的复杂……说好的ai改变程序开发呢?叹口气……

Categories
读书有感

吾日三省吾身

  1. 逆水行舟,不进则退。每一次偷懒的后果都会反噬自己。
  2. 透过现象看本质。热点永远层出不穷,不能以有限的精力来应对无限的新闻。但也不能两耳不闻窗外事,否则换了人间都不知。
  3. 用进废退。记忆是有限的,不可能面面俱到。

——-

舒适圈还是躺太久了,忘了外面的血腥残酷。

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
互联网产业观察

[新坑]通用人工智能

为了写下这个标题,我打字都要抖一抖。Artificial General Intelligence 这一年被炒的太火热了,我好像一个迟到的来蹭流量的似的。硅谷每几年都会有新的一波热点,追热点死得很惨的人一片片,我还是多少费了一番功夫,才觉得这不是又一个转瞬即逝的热点,而是一波新的技术革命的开端。

最近种种原因吧,花了不少时间精力来了解和思考这个领域,理论、技术和商业应用层面都有(我怎么这么牛,打脸冷静一下)。虽然前面法语的坑还没填上,但我还是想先挖个坑,要不要开个频道专门聊一下AGI和其他这一波AI技术的革新呢……哎,再挖个坑,这次可以用英文法语中文三种语言讲这个话题哎,想到这里觉得自己好厉害的样子(再打脸清醒一下)。

让我这个周末冷静冷静,再来看自己是不是又一时冲动了哈哈。

Categories
经济、IT观察与思考

Affirmative Action和阶层固化

最近美国最高法院的一则判决让Affirmative Action一下子成为了众矢之的。我不知道是不是圈子有限的缘故,我一时之间看到的竟然全都是一片对于禁止AA的叫好之声,让我不禁怀疑这里面多少只是情绪的宣泄而不是理性的思考。那我就来捅捅这个马蜂窝,讲一些自己的看法。

AA其实是美国某些高校录取时候的一项倾斜政策(当然也有人说这是歧视政策,看具体立场了)。大意就是,对于现在相对较少的民族降低录取的一些标准(比如SAT分数),从而提升新生中这些人的比例。如果代入中国的高考制度,大概相当于少数民族加分政策。为什么大部分华裔对高院的这项判决一片叫好呢?因为华裔恰恰是享受不到加分政策的民族,所以禁止AA对于华裔录取是看起来有好处的。

无论美国高校的AA也好,中国高考的加分也罢,他们背后对应的都是一个残酷的稀缺资源分配问题,哪些人可以进入更好的高校并获取更佳的教育资源。无论是中国美国,高校某种程度上都成为了“社会阶层跃迁”的一道门槛。几十年前的研究就发现,美国拥有大学文凭的人收入要比高中及以下文凭的人高许多,而这一差别随时间依旧在扩大。但与此同时,文凭通胀论和文凭无用论也逐渐在美国开始盛行。背后一个残忍的事实是,劳动力市场对于大学文凭的需求并没有随着毕业人数的增加而迅速增加,很多人不得不被挤压到以前不需要大学文凭就能胜任的岗位。说到底,文凭本身不是绝对的,而是相对的——相对于同龄人在这个劳动市场上的排名。当大学文凭拥有率从上世纪四五十年代的不到10%,一路飙升到近十年的30%(来源),这说明大学文凭本身的相对排名自然是在下降的。

人们之所以在意大学文凭,不如说更在意的是日后实现阶层上升的可能性,要不也不必称考上大学为“鲤鱼跃龙门”了。对于已经在社会顶层的人来说,有没有文凭并不会实质性的改变他们的阶级,而就算不喜欢读书,买个文凭来装点一下门面也不是什么稀奇的事情。然而对于中产阶级来说,保持现有的阶级不降落已经让人压力徒增,更不要说相互竞争拼命挤进去更高的阶层。AA阻拦的是很多中产阶级华裔实现美国梦的机会,所以他们自然会对废除AA交口称赞。

除了AA,美国高校录取的另一项倾斜政策legacy也成了下一个众矢之的。如果说AA照顾的是底层,那legacy照顾的则是顶层,因为这项政策青睐的是自己既有校友的后代。上一代能进入美国顶尖高校的大都不是平凡家庭,所以legacy就变相地照顾了社会既有利益所得者的阶层。

那么禁止AA,甚至于后面禁止legacy就能一劳永逸地给予中产阶级他们想要的机会公平吗?我觉得未必。反过来,我觉得这会进一步加剧美国社会的阶层固化。学历曾经是阶层变迁的门槛,但谁也不保证以后永远是,大学完全可以向所有人开放。就算中产阶级通过提高学历获得了收入更高的工作,那也只是劳动收入。阶层固化不仅仅是通过劳动收入来区分资源分配,往后会越来越倾向于资本收入,即“钱生钱”。资本的现有阶层有无数的办法控制社会资源的分配,比如房地产,比如通胀,这些会成为新的阶层跃迁的门槛,而且是看似公平的。社会顶层就算不想废除学历这个门槛,他们也可以通过建立更私有的学历门槛来控制阶层流动,留给中产阶级一个新的幻想就是了。中国有句古话,分久必合,合久必分,其实分分合合的国内战争恰恰反映的是阶级固化不得不通过暴力来打破的事实。美国富人近些年来学得越来越乖,他们知道为了维护自己的阶层稳定,一定不能是财富都集中在自己手里,所以他们去做慈善。他们难道就不焦虑吗?不,他们一样焦虑,只是他们可以动用手中的资源来保障自己阶层的利益。当然,还有很多其他维持相对稳定的办法,比如黄赌毒,只要人活着快乐就不会揭竿起义了。中产阶级的焦虑不会因为一个AA被禁就消失,他们应该思考的是如何真正地打破资源垄断的现实,而不是同一个阶层内部甚至于跟更底层的相互内斗。

说到这里,我又想起前几年看的Michael Sandel的《The Tyranny of Merit》,以及他对于社会公平问题本质的一些分析。当时的我觉得社会公平本身对抗的是人性中利己的“血脉相承”,即人们自然而然地会把资源留给自己的后代而不是陌生人。利己主义带来的是社会阶层固化,而社会阶层固化肯定会伤害机会平等。这就不难理解,美国华裔中产越来越浓烈的利己主义(甚至可以套上“精英主义”的美称),看似是为自己的机会公平抗争,实质的结果只能是作茧自缚,加剧阶层固化。

那么有解吗?我的悲观主义告诉我,我依旧没有完美的答案,但直觉告诉我,我们如果真的想实现机会平等就一定要想办法对抗人性中的利己主义。只有人们不再为自己的生活焦虑而时时刻刻想着自我保护的情况下(defensive mode),我们才有可能进一步讨论如何实现更大范围的公平。人们如何能不焦虑呢,除了满足基本的衣食住行等“马斯洛第一层次需求”,下一步我觉得是如何让人们的快乐不再基于攀比。

按康德所说,自由一定是基于人性本愿的,而人性本善则是从物质和道德两个方面都要有保障的。物质层面,资源资源分配制度上这可能被共产主义保障,也可以是其他资源分配形式来保障人们一直不利己的自由。道德层面,则需要一代代人不停地努力来抵抗利己主义的诱惑。到那个时候,社会公平必然是自然而然的。只是我们还相距甚远,但愿我们不是向着相反的方向使劲就好了。