查看原文
其他

【老万】从0开始学chatGPT(一):背后的模型

老万 老万故事会
2024-08-23

我是人工智能的外行。这个系列分享的是我最近学习 chatGPT 的心得,希望对感兴趣的朋友有所帮助,也希望借机得到专家的指正。

~~~~

近期 IT 界最火的话题无疑是 chatGPT。微软支持的 Open AI  公司推出的这个聊天机器人(chat bot)可以说是火出了天际,在朋友圈频频刷屏。大家发现,用 chatGPT 可以查资料、改总结、编段子、写代码,除了生娃,没有它不会的。一时间,为人不识 GPT,便称英雄也枉然。

chatGPT 的基本工作原理不算复杂。它背后是一个 1750 亿参数的电脑模拟的神经网络。这个规模巨大的神经网络擅长处理自然语言,我们叫它大语言模型(LLM,large language model)。这个 LLM 会干的唯一一件事就是根据最近的上文猜下一个词是什么。更准确地说,它每次猜的是一个 token。

token 可以翻译成“标记”或“记号”,跟“语素”的意思差不多,指的是文本中的一个基本单元,比如单词的一部分、一个标点符号或一个数字。平均来说,一个英文单词会被拆成大约 1.3 个记号,一个汉字会被拆成大约两个记号。这些记号被用于训练和生成语言模型。研究发现,以记号为单位处理自然语言,效果比以字符或单词为单位更好。

你以为 chatGPT 在跟你谈笑风生,其实它只是在计算:根据对话中的最近 4095 个记号,算出紧接着最可能是哪个记号。 

在绝大多数情况下,下一个记号有多种可能。所以这个模型的输入是对话的最后 4095 个记号,输出是不同记号出现的概率。

比如,如果我们跟 chatGPT 唠:“今天天气不错,挺风和日丽的。

它一看,凭以前读过的海量文本推断,接下来可能是“”(概率0.08)、“”(概率 0.06)、“”(概率 0.05)、......(为简单起见,姑且假定每个汉字对应于一个记号。)

假设 chatGPT选了“”,接下来它就会把“今天天气不错,挺风和日丽的。我”这一串记号输入到模型,模型的输出可能是:“”(概率0.21)、“”(概率0.12)、“”(概率0.07)、......

要是它这次选了“”,它就会问模型“今天天气不错,挺风和日丽的。我们”后面有哪些选择。如此重复,直到完成答案“今天天气不错,挺风和日丽的。我们下午没有课,这的确挺爽的。

这些概率是从哪里来的?是天上掉下来的吗?

当然不是。chatGPT 的每一点成绩都是它的微软爸爸用重金请私教培训换来的。

我们可以把 chatGPT 看成一个基于统计的文字生成器。这个机器的模型在训练时阅读了天量的文本。根据这些原始语料,生成了一个巨大无比的神经网络。这个神经网络记住了文字之间的相关性,可以根据已经看到的文字,预测下面出现各种记号的概率,所以你看它对话的时候是一个字一个字往外蹦的。

这个过程跟人类不一样。咱们人类是先有想法,再拟提纲,最后把它扩充成文。也有那飞沙走石的主,搞些意大利面必须拌42号混凝土之类的无厘头,但那不是正常人类。

chatGPT 实际上是不理解它自己说的那些话的。它有的时候看上去很有逻辑,那是因为它的模仿能力强,根据自己过往训练的历史照猫画虎,往往可以以假乱真。但是因为它没有真正的逻辑做基础,难免有时会东施效颦,张冠李戴。你要是盲信就输了。

chatGPT 不是每次都选概率最大的记号 - 要是那样它说话就会非常干巴,而且对同样的问题总是会给出同样的答案,乏味之至。所以,野百合也有春天,小概率的选择也有机会被选到。我们以后会讲它具体怎样从候选记号中选中一个。

注意 chatGPT 这个 bot 不等于它背后的模型。具体地说,模型只负责把最近的对话内容翻译为一张概率表,告诉我们下一个记号是哪个的概率分别有多大。chatGPT 负责根据这张表选出下一个记号,再让模型算再下一个记号的概率表,......

这种分工是因为神经网络善于做只可意会不可言传的计算(比如判断一张画片是不是猫片)或者不可意会的计算(比如从蛋白质的的氨基酸序列预测蛋白质的三维结构),但它们做有严格定义的逻辑处理和数值计算不如普通程序。

~~~~

除了开放 chatGPT的网站 https://chat.openai.com/chat 让用户访问,openAI 还开放了 API(Application Programming Interface,应用程序接口),让大家可以通过代码去付费访问它的模型。

明明 chatGPT 免费,为什么还要花钱写代码去用它的 API?

因为这样可以在自己的 app 或网站中接入 chatGPT,解锁新的商机。chatGPT 功能空前强大,用好了就象魔法。把这一技术集成到各种应用场景可以实实在在转化为生产力,颠覆旧有模式,创造大量财富。

而且,API 提供了更多的选择和参数,比 chatGPT 网页功能更强。比如,你用 chatGPT 的时候是没法选后面的语言模型的,而通过 API 你可以在目前的五种语言模型中选取:

  • Ada

  • Bargage

  • Curie

  • Davinci

  • gpt-3.5-turbo


前四种模型的主要区别在于大小不同和训练数据不同,从 A 到 D 能力依次上升。

小的模型能力弱一些,但是速度快、计算成本低。API 是按流量收费的,不同的模型单价不同。所以不是说越强的模型越好 - 它们不但更贵,而且更慢。如果一个任务用小规模的模型就可以达到需要的效果,就没必要花冤枉钱用更慢的模型。

最后一种 gpt-3.5-turbo 模型是三月一号刚发布的,据说就是原汁原味的 chatGPT 用的模型。它的能力跟 Davinci 相似,但更适用于对话场景。据我测试比 Davinci 快得多,而价格只要 Davinci 的十分之一。

为什么从 Davinci 到 gpt-3.5-turbo 价格倒挂了?我也不清楚。估计现在 Davinci 模型的用户都在忙着把程序改到 gpt-3.5-turbo 上。

如果你读过 API 文档,就会发现它提供了一些参数用来调整模型的行为,比如你可以控制它胡说八道的程度,还有说车轱辘话的可能性等等。如果你要问它一个认真的问题,可以把胡说八道参数调到最低。如果你想要看它脑洞大开的样子,就把这个参数调大。这些便利在 chatGPT 网站是享受不到的。

还有一点好处:API 访问比网站访问更稳定可靠。因为这个原因,我觉得没必要每月花 20 美元买升级版的 chatGPT plus(比 chatGPT 快一点稳定一点),用 API 就够了(前提是你要懂一点编程)。

~~~~

说到价格,目前的定价(见 https://openai.com/pricing)是每一千个记号:

  • Ada $0.0004

  • Babbage $0.0005

  • Curie $0.002

  • Davinci $0.02

  • gpt-3.5-turbo $0.002


要注意的是,输入和输出都是要算钱的。比如你描述问题用了 1000 个记号,模型的回答用了 2000 个记号,那么按 3000 个记号计费。

这些模型只能处理 4096 个记号的上下文,也就是说问题和答案加起来不能超过 4096 个记号,大约两千汉字。如果你想让 AI 帮你写情节连贯的长篇小说,现在还很难。

还有,目前开放的 API 都不在服务器端保留状态。如果你想让机器记得前几轮说过的话,必须在发请求时把以前的对话内容再发一遍。这些内容也一样要计费,要占用记号额度。

比如你以前跟机器已经唠了 4000 个记号了,又用 40 个记号问了一个附加问题,机器的回答就被限制在 4096 - 4000 - 40 = 56 个记号之内了。要是用完了 4096 个记号的上下文,还不想换个话题,就得忍痛割舍一部分历史。

这个价格贵不贵?要是本山大叔想唠个十块钱人民币(1.45 美元),gpt-3.5-turbo 可以陪他掰扯 1.45/0.002*1000 = 725000 个记号,大约三十六万字。一分钟 200 字的话,30 个小时不停歇才唠得完。看样子,微软这是要卷死谷歌而后快啊!

~~~~

chatGPT 背后的大语言模型有 1750 亿个参数,也就是说它是一个有这么多连接的神经网络。有趣的是,用来训练 chatGPT 的语料大致也包含这么多个记号,所以差不多“记住”一个记号需要一个参数,看不到什么数据压缩的效果。

由此产生一种假说:如果要训练好 N 个参数的大语言模型,需要大约 N 个记号的语料。在训练过程中,每处理一个记号都要把神经网络里所有参数通过反向传播学习算法全部更新一遍,所以完成训练需要的计算量是 N 的平方量级。也就是说,如果模型规模扩大到 10 倍,训练的成本要增长到 100 倍,非常恐怖。

这就是为什么训练大语言模型非常烧钱(据称训练 chatGPT 花了几千万美元),只有重量级玩家才能入场。

虽然训练 chatGPT 很贵,不妨碍我们自己手工搭一个小语言模型,通过这个练习加深对语言模型原理的理解。下一次我们就聊聊如何用 Python 编程从头实现一个罗大佑歌词的简单马尔可夫链模型,看看这个简单模型的效果如何。

I'll be back.

~~~~~~~~~~

猜你会喜欢:

~~~~~~~~~~

关注老万故事会公众号:

本公众号不开赞赏不放广告。如果喜欢这篇文章,欢迎点赞、在看、转发。谢谢大家🙏

继续滑动看下一个
老万故事会
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存