rustum 发表于 2023-3-6 22:09

不用数学和代码,讲讲ChatGPT的算法原理

这一段时间花了挺长的时间开始看ChatGPT的算法原理,有了一些新的认知,mark了一些算法书,对ChatGPT和OpenAI有了更多的尊重。虽然这不是底层的算法理论突破,但ChatGPT在算法应用落地方面的创新还是让人震惊。与此同时,OpenAI这个团队能坚持这样一条与众不同的路走到现在,也让人由衷敬佩。

这篇文章试图不用数学和代码,解释下ChatGPT的算法原理,希望也能跟大家分享这种震撼。
一、算法的基础原理
算法的本质是统计学,这是一句正确的废话,废话程度和“人类的本质是复读机”不相伯仲。
但如果要一句话说明白的算法是什么,这句话也还算是合适和恰当的。
输入和输出
算法的任务本质就是为了对一个数据输入给出一个计算后的输出。对于搜索而言,输入是搜索词,输出是搜索结果,对于推荐而言,输入是用户特征,输出是推荐内容。对于语言模型而言,输入是问题,输出是回答。
模型总是要接受一些数据样本作为原始的训练材料,这些材料需要包含输入和输出两部分,并且需知道这个输出对这个输入是不是好的结果。有些模型需要人工进行打分,打分的本质就是评估一个输出对于输入是不是好的。
有一些模型看起来不需要这样的输入和输出,实际上样本中已经隐含了这样的关系,比如一篇文章有些词经常一起出现,就说明这两个词有关联,文章作为训练样本好像没有输入和输出,但输入和输出就包含在文章的字里行间。
具体的模型搭建,就像是一系列非常复杂的数学公式,但是包含了大量可以调节的参数,学习的过程就是计算最合适的参数,来让模型的逻辑更加符合实际上预先给定的输入和输出的逻辑。
神经元结构
计算机最基础的结构是与非门,当前主流的大规模算法的基础则是神经元模型。
在生物神经元中,一个神经元有多个树突和一个轴突,树突接受之前神经元的电信号,经过处理,如果激活则会将电信号通过轴突传递出去。
在计算机的神经元结构中也是如此,一个神经元可以有多个信号输入,这些输入有不同的权重,神经元会接受这些输入,并处理为一个输出。
人的大脑有超过100亿个神经元构成,而算法也可以有大量这样的神经元结构。GPT-3公布的参数有1750亿个,目前关于ChatGPT的参数规模还没有公布,但可以肯定的是,参数规模应该显著高于GPT-3。
最近几年的AI浪潮中,前沿模型的基础结构都是神经元。为了适应不同的任务类型,神经网络被搭建为不同的结构。这个过程就像集成电路形成各种电子元件,再组装成这个领域的电子产品。也像是人体的结构,细胞构成组织、组织构成器官、器官构成系统、系统构成人体。
这篇文章讨论的算法结构,更像是器官和系统维度的讨论,大致描述ChatGPT的机理。
损失函数和随机梯度下降
算法的目的是什么呢?简单来说,算法用自己训练后的逻辑针对每一个输入给出一个输出,算法那可以针对一些已经有正确输出的样本进行校验,算法输出和真实输出的误差,就是损失。这些损失的累加结果就是损失函数,算法的目标就是让这个损失函数最小。
数学原理上,算法优化的目标就是不断计算损失函数的偏微分,去对参数进行定向优化,不断寻找损失函数的最小化方案,这个过程叫做梯度下降。
梯度下降有一个比较直观的解释。我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。
这样一步步的走下去,我们就能一直走到已经到了山脚。
这里的描述进行了简单化的处理,实际上无论是损失函数的设计,还是梯度下降的计算,都有很多工程化的处理。稍微思考下就会发现,如果用这种方法下山,开始刚好在几个山中间的高地,就无法找到下山的路,这叫做局部最优解问题。比如算法完全针对这些样本优化,导致实际的时候对新样本无效,这也就是过拟合问题。这些问题不在展开讨论,总而言之,这里就是一个大体思路的描述,对很多细节做了隐藏。
二、ChatGPT模型基础
ChatGPT用了很多已有的算法,要了解ChatGPT,要先了解transformer机制和RLHF。
transformer机制
算法顾名思义是就是处理数字的方法。对于语言这种富含信息量的内容,首先需要将语言抽象为具体的可计算编码,这个机制一直在变化。2017 年,Google 在论文 《Attention is All you need》中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。Transformer 是一个 Encoder-Decoder 架构,顾名思义,可以分为两个部分:编码组件和解码组件。这种结构可以在所有的语言任务都可以应用,理解的文本内容可以认为是编码,语言任务无论是翻译、回答、复述、扩写,都可以理解为内容生成。
相比于之前的RNN(循环神经网络,Recurrent Neural Network)和,LSTM(长短期记忆,Long short-term memory),transformer可以捕获更长的特征,所以可以理解长文本。中间特殊的attention机制就是可以对之前的文本进行权重分配,聚焦关键信息,这就导致transformer可以有更强的理解能力。
强化学习
强化学习(RL,Reinforcement Learning)基础结构如下:


Agent(智能体),就是我们要训练的模型,根据训练后的规则对不同环境做出反应。
Action(动作),2D游戏向左走、向右走和向上跳,做的这三个动作就是action。
Environment(环境),环境会根据智能体的不同动作,提供不同的奖赏。
Reward(奖赏),这个奖赏可以类比为在明确目标的情况下,接近目标意味着做得好则奖,远离目标意味着做的不好则惩,最终达到收益/奖励最大化,且这个奖励是强化学习的核心。
State(状态),可以理解成当前智能体面对的环境状态,简称状态。
算法的流程:“依据策略执行动作-感知状态--得到奖励”循环进行。强化学习就是在虚拟环境中持续模拟计算,持续进化自身策略,只要算力支持,环境和实际环境一致,则算法可以进化到理论上完美的地步。
几年前机器学习的浪潮进入大众视野,和AlphaGo战胜李世石和柯洁的新闻有很大的关系。很多人不知道的是,在战胜了柯洁之后,Deepmind公司推出了抛开人类经验的新版本人工智能AlphaGo Zero,这就是强化学习的典型应用。
但这个算法的前提是,环境和系统的交互规则需要真实。在游戏中是这样的,围棋规则非常明确,对手的落子可以用另一个Agent去模拟,环境完全清晰,所以围棋首先取得了突破。OpenAI之前有开发过一个OpenAI Five,2019年一亮相就战胜了Dota2的冠军队,Deepmind也开发了星际AI,也有一些战绩。但这类复杂游戏中,AI表现出的更多是操作碾压和零失误,而不是游戏策略的提升,这也让大家对强化学习能否广泛应用产生了怀疑。
因为现实世界中问题,决策空间更为复杂,环境规则和博弈方行为都无法进行有效的预测,强化学习还能应用吗?实际上自动驾驶到现在核心控制模块还是规则引擎,为什么不用强化学习呢?因为真的不敢,真的会死人。
RLHF
RLHF(Reinforcement Learning from Human Feedback)没有特别通用的翻译,是基于人类反馈来构建强化学习,使用强化学习的方法和框架,但是模型能够接纳人类反馈。
RLHF不要求构建真实的环境,而是用人工标注的反馈信息去构成环境的奖励机制。这样训练的结果就是系统汇迎合人工的标注和判别标准。
ChatGPT正是用了RLHF的机制,做到了自然而流利的对话。
三、ChatGPT模型的技术
GPT模型的思路
首先得理解GPT是什么,GPT是生成式预训练模型(Generative Pre-Training) ,总结而言特点是就是无监督的预训练,去完成语言任务。这是OpenAI在2018年提出的模型。
和无监督学习对应的是监督学习,监督学习就是给一个学习任务大量的样本,让模型进行学习。但是无监督学习则不会针对性地给大量学习任务样本。
GPT的核心思想用一句话解释就是,用统一模型解决语言的全部问题。相比于之前一个领域一个模型的监督学习模式,这样的思路更有变革性,但也更容易走入死胡同。
比如同样是语言模型,同样是transformer机制,之前应用广泛的Bert模型中,就是每个任务训练一个小模型,每个小模型都需要进行定制化标注。
之前广泛应用的聊天机器人也是这种范式,通过语言触发对应的语言任务,比如问天气、问路等,然后在这个任务下进行回答。之前的一些语言大模型实际上是很多独立任务的堆砌,就想国产凌凌漆中文西的要你命3000一样,看似统一,实则割裂。


而OpenAI的GPT模型,则是进行统一的预训练,针对任务做一些微调,虽然针对不同的任务有水平高低,但是能针对所有的语言任务给出回答,是真正的统一的语言大模型。
GPT的发展历程
GPT阶段:基于Transformer预训练 + 微调
第一个阶段是利用语言模型进行预训练,第二阶段通过人工微调的模式解决下游任务。
GPT2阶段:舍弃微调,直接做零样本学习
彻底放弃了微调阶段,仅通过大规模多领域的数据预训练,让模型在零样本学习的设置下系统学会解决多任务的问题,而且效果还不错。
GPT3阶段:开启NLP新范式prompt从而实现小样本学习
Prompt 就是给预训练语言模型的一个线索/提示,帮助它可以更好的理解人类的问题。
ChatGPT阶段:RLHF模式接入语言训练,更多的微调
利用人类的标注数据去对GPT3/GPT3.5进行有监督训练。针对模型的多个回答,标注员进行排序标注,通过对排序标注的理解,形成RLHF机制形成内部奖励模型,让回答更契合人类标准。
ChatGPT的突破
首先,毫无疑问,这种新思路实现效果本身就是突破。从目前的效果上讲,借助强大的算力,transformer+RLHF+prompt模型组合下,效果上看起来远超普通语言模型。但在此之前,大模型这条nothing or everything的道路,在大多说人看来前景非常灰暗。当小步快跑的独立任务语言模型不断突破的情况下,如果大模型不能全面超越,就会输掉一切。
一切都是有代价和成本的,这中间但凡多走一点弯路,就不会有今天的ChatGPT,毕竟从GPT的概念提出到现在,已经过去了5年。另起炉灶全面超越,这个听起来有点热血的故事,很像iPhone十年磨一剑,颠覆智能手机市场。
于此同时,目前ChatGPT已经是多种前沿算法理论组合。Transformer、prompt、RLHF的组合,选取了大量的数据,设计了合理的标注流程,并且将这些融合。虽然不是传统意义上的算法团队理论创新,但难度和复杂度一点都不低。原子弹的基础理论高中物理书上就有,但是能造出原子弹的国家全世界也没有几个。
四、一些算法相关的常见问题
如果投入大量资源,可以快速复制吗?
不能。
首先ChatGPT背后有英伟达和微软的支持,算力和云平台的全方位支持。有些东西是有市无价的,其他公司花同样的钱不一定有相同的效果。
同时Google之前公布了大量的模型原理,而OpenAI只是介绍了思路,且稍微详细的介绍在GPT-3之后就没有了。大量的技术trick并没有公布,新模型甚至没有开源论文,连参数规模都需要猜测,从理论到实践中有大量的坑需要摸索。
比如prompt具体机制怎么实现?RLHF需要标注什么规模的数据?标注标准什么样的?算法怎么做到泛化?ChatGPT的算法微调到底在哪些环节?这样的问题还有很多,大量这样边边角角的问题让复制ChatGPT充满了困难。要知道,腾讯开发围棋AI绝艺没有花多长时间,在AlphaGo战胜柯洁的同时,绝艺也已经能战胜顶尖人类棋手。
但目前国内没有人敢拍着胸脯说能给他多少钱多长时间,能作出ChatGPT来。各大公司也是蹭热度式宣布,真正在做的人,可能现在也是两眼一抹黑的状态。
能否替代搜索、客服、营销、XXX?
目前不能。
搜索可以给出多个可能结果让用户选择,问答需要给出单一结果。是完全不同的场景,所以不能替代搜索。
目前回答不能针对在线数据,或者内部数据库,所以无法在公司单独业务中应用。但从原理上来讲,没道理后续版本不能支持。
从原理上来讲,多轮对话有8kb的文本存储,这就是可以对接外部信息的基础。针对非通用的NLP任务,特别是有极高商业价值的客服和营销,后续版本需要接入其他知识库,或者给出一些训练数据接入的协议。
下一阶段额ChatGPT的商业突破关键,就是抽象的流利多轮对话能力+本地化数据库,甚至提供可以商业化的私有化部署能力。提供出这样的ToB能力,AI就会真正彻底颠覆世界。
至于这需要多久,我倾向于观察GPT4和GPT5的版本升级内容,如果没有质变,也许就意味着GPT的通用模型和本地化数据库本身不够兼容,或者商业化成本过高超出一般公司承受能力。
GPT后续版本陷入瓶颈的概率并不低,要知道,大模型本身意味着大量的参数可解释性差,无法调整。而GPT能否生成toB的个性化的prompt,因为目前不知道他们的prompt是怎样的工程化实现的,所以也无法揣测。
五、系列小结
加上之前的两篇AIGC的文章,这已经是第三篇了,算是对AIGC和ChatGPT有了一个大概的了解。
这篇文章试图通俗,但可以预料可能还是会出现“汉字全认识,但放一起不理解”的情况。这也没有办法,目前的算法已经失去了简洁性,不用数学语言,其他的解释终究是管中窥豹。
现在回看30年前的协同过滤算法,居然可以用中学数学的知识讲清楚,反而是一种意外。
因为这次算法本质是语言模型和强化学习的进步,我会再系统性看一下transformer和强化学习的书,后续如果有可以简单化分享的内容,可以再跟大家交流。

Mecanim 发表于 2023-3-6 22:10

XGundam05 发表于 2023-3-6 22:16

还是有数学和算法比较好

JamesB 发表于 2023-3-6 22:23

非常棒!如果能针对模型的细节讲解更多就好了
页: [1]
查看完整版本: 不用数学和代码,讲讲ChatGPT的算法原理