ChatGPT是如何运行起来的?(下)

本文我们介绍ChatGPT是如何工作的,以及为什么它能够产生连贯和多样化的对话。分上中下篇为读者们呈现。

微信搜索关注《Java学研大本营》

9 嵌入

神经网络--至少在目前的设置中--从根本上说是基于数字的。因此,如果我们要用神经网络来处理像文本这样的东西,我们就需要一种方法来用数字表示我们的文本。当然,我们可以(就像ChatGPT那样)为字典中的每个词分配一个数字。这里有个 "嵌入 "的概念,我们把嵌入看作是一种尝试用数字阵列来表示事物的 "本质 "的方式--其特性是 "附近的事物 "由附近的数字来表示。

举例来说,我们把一个词的嵌入看作是试图在一种 "意义空间 "中排列词语,在这个空间中,以某种方式 "在意义上接近 "的词语在嵌入中出现。实际使用的嵌入--例如在ChatGPT中--往往涉及大量的数字列表。但是,如果我们把它投射到二维空间,我们就可以显示出单词是如何被嵌入的例子:

而且,我们看到的东西在捕捉典型的日常印象方面做得非常好。但是,我们如何才能构建这样一个嵌入?大致的想法是查看大量的文本(这里是来自网络的50亿个单词),然后看看不同单词出现的 "环境 "有多相似。例如,"鳄鱼 "和 "鳄鱼 "经常会在类似的句子中出现,这意味着它们会被放在嵌入的附近。但是 "萝卜 "和 "老鹰 "不会出现在类似的句子中,所以它们在嵌入中会被放在很远的地方。

但是,如何使用神经网络实际实现这样的东西呢?我们先来讨论一下不是针对单词的嵌入,而是针对图像的嵌入。我们想找到某种方法,通过数字列表来描述图像,使 "我们认为相似的图像 "被分配到相似的数字列表中。

我们如何判断是否应该 "认为图像相似"?如果我们的图像是,例如,手写的相同数字,我们会 "认为两个图像是相似的",早些时候,我们讨论了一个被训练来识别手写数字的神经网络。我们可以认为这个神经网络被设置成在其最终输出中把图像放入10个不同的仓,每个数字一个仓。

如果我们在做出 "这是一个'4'"的最终决定之前,"拦截 "神经网络内部发生的事情呢?我们可能会想到,在神经网络中,有一些数字将图像描述为 "大部分是4,但有一点是2 "或类似的情况。而我们的想法是捡起这些数字,作为嵌入的元素。

因此,概念是这样的。我们不是直接试图描述 "什么图像在什么其他图像附近",而是考虑一个定义明确的任务(在这种情况下是数字识别),我们可以获得明确的训练数据--然后利用这样一个事实:在做这个任务时,神经网络隐含地要做出相当于 "接近性决定 "的决定。因此,我们不需要明确地谈论 "图像的接近性",而只是谈论一个图像代表什么数字的具体问题,然后我们 "把它留给神经网络 "来隐含地决定这意味着什么 "图像的接近性"。

那么,这对数字识别网络来说是如何更详细地工作的呢?我们可以认为这个网络是由11个连续的层组成的,用图标来概括它(激活函数显示为独立的层):

在开始时,我们向第一层输入实际的图像,用像素值的二维数组表示。最后,我们得到了一个由10个值组成的数组,我们可以认为这表示网络对图像对应于0到9的每个数字的 "确定程度"。

输入图像,最后一层的神经元的值是:

换句话说,神经网络此时已经确定这个图像是4,为了真正得到输出 "4",我们只需要挑选出数值最大的神经元的位置。

但是,如果我们再往前看一步呢?网络中的最后一个操作是一个所谓的softmax,它试图 "强制确定"。但在这之前,神经元的值是:

代表 "4 "的神经元仍然有最高的数值。但在其他神经元的数值中也有信息。我们可以预期,这个数字列表在某种意义上可以用来描述图像的 "本质",从而提供一些我们可以用作嵌入的东西。因此,例如,这里的每个4都有一个稍微不同的 "签名"(或 "特征嵌入")--都与8非常不同:

在这里,我们基本上是用10个数字来描述我们的图像特征。但通常情况下,使用比这多得多的数字会更好。例如,在我们的数字识别网络中,我们可以通过挖掘前一层得到一个500个数字的阵列。而这可能是一个合理的数组,可以作为 "图像嵌入 "使用。

如果我们想对手写数字的 "图像空间 "进行明确的可视化,我们需要 "降低维度",有效地将我们得到的500维矢量投射到,比如说,三维空间:

我们刚刚谈到为图像创建一个特征(从而嵌入),有效地基于识别图像的相似性,通过确定(根据我们的训练集)它们是否对应于相同的手写数字。如果我们有一个训练集,比如说,确定每张图片属于5000种常见类型的物体(猫、狗、椅子......),我们就可以更广泛地对图片做同样的事情。通过这种方式,我们可以制作一个图像嵌入,然后根据神经网络的行为 "围绕它进行概括"。关键是,只要这种行为与我们人类感知和解释图像的方式相一致,这将最终成为一个 "对我们来说是正确的 "嵌入,并在实践中做 "类似人类判断 "的任务时有用。

那么我们如何遵循同样的方法来寻找单词的嵌入呢?关键是要从一个我们可以随时进行训练的关于单词的任务开始。而标准的任务是 "单词预测"。假设我们得到了 "the ___ cat"。基于一个庞大的文本语料库(比如网络上的文本内容),可能 "填空 "的不同单词的概率是多少?或者说,给定"___ black___"  ,不同单词的概率是多少?

我们如何为神经网络设置这个问题?归根结底,我们必须用数字来表述一切。做到这一点的方法就是为英语中5万个左右的常用词中的每一个分配一个独特的数字。例如,"the "可能是914,而 "cat"(前面有一个空格)可能是3542。(这些是GPT-2所使用的实际数字。)所以对于 "the ___ cat "问题,我们的输入可能是{914, 3542}。输出应该是什么样子的呢?它应该是一个由50,000个左右的数字组成的列表,有效地给出了每个可能的 "填充 "词的概率。再一次,为了找到一个嵌入,我们要在神经网络 "达到结论 "之前 "拦截 "它的 "内部"--然后拾取在那里出现的数字列表,我们可以认为它是 "描述每个词 "的。

那么这些表征是什么样子的呢?在过去的10年里,已经有一系列不同的系统被开发出来(word2vec, GloVe, BERT, GPT, ...),每一个都是基于不同的神经网络方法。但最终所有的系统都是通过数百到数千个数字的列表来描述单词的特征。

在它们的原始形式中,这些 "嵌入向量 "是相当无信息的。例如,这里是GPT-2产生的三个特定单词的原始嵌入向量:

如果我们做一些事情,比如测量这些向量之间的距离,那么我们就可以找到类似于单词的 "近似度 "的东西。后文我们会更详细地讨论这种嵌入的 "认知 "意义。但现在主要的一点是,我们有方法可以有效地将单词变成 "神经网络友好 "的数字集合。

实际上,我们可以更进一步,不仅仅是用数字的集合来描述单词;我们还可以对单词的序列,或者整个文本块进行描述。在ChatGPT中,它就是这样处理事情的。它把目前得到的文本,生成一个嵌入矢量来表示它。然后,它的目标是找到接下来可能出现的不同词汇的概率。它将其答案表示为一个数字列表,该列表基本上给出了50,000个左右的可能词汇的概率。

10 聊天室GPT

现在讨论ChatGPT的内容。ChatGPT是一个巨大的神经网络--目前是所谓的GPT-3网络的一个版本,有1750亿个权重。在许多方面,这是一个非常像我们讨论过的其他神经网络。但它是一个特别为处理语言问题而设置的神经网络。它最显著的特点是一个被称为 "转化器 "的神经网络架构。

在我们上面讨论的第一个神经网络中,任何给定层的每个神经元基本上都与前一层的每个神经元相连(至少有一些权重)。但是,如果一个人在处理具有特殊的、已知的结构的数据时,这种全连接的网络(大概)是过剩的。例如,在处理图像的早期阶段,典型的做法是使用所谓的卷积神经网络("convnets"),其中的神经元被有效地布置在一个类似于图像中的像素的网格上--并且只与网格上附近的神经元连接。

变换器的想法是为构成一段文本的标记序列做一些类似的事情。但是,转化器并不只是在序列中定义一个可以有连接的固定区域,而是引入了 "注意 "的概念--以及对序列的某些部分比其他部分更 "注意 "的概念。也许有一天,仅仅启动一个通用的神经网络并通过训练进行所有的定制是有意义的。但目前,将事物 "模块化 "在实践中是至关重要的。

那么ChatGPT(或者说,它所基于的GPT-3网络)实际上是做什么的?回想一下,ChatGPT的总体目标是以 "合理 "的方式延续文本,基于它所看到的训练(包括从网络上查看数十亿页的文本等),所以在任何给定的点,它有一定数量的文本,它的目标是为下一个标记的添加提出适当的选择。

ChatGPT的操作分为三个基本阶段。首先,它获取与文本相对应的标记序列,并找到代表这些标记的嵌入(即一个数字阵列)。然后,它以 "标准的神经网络方式 "对这一嵌入进行操作,数值 "通过 "网络中的连续层,产生一个新的嵌入(即一个新的数字阵列)。接着,它取这个数组的最后一部分,并从中生成一个大约5万个值的数组,这些值变成了不同的可能的下一个标记的概率。

关键是这个管道的每一部分都是由神经网络实现的,其权重是由网络的端到端训练决定的。换句话说,除了整体架构之外,没有任何东西是 "明确设计的";所有东西都是从训练数据中 "学习 "的。

然而,在架构的设置方式上有很多细节,反映了各种经验和神经网络的知识。我认为谈论其中的一些细节是有用的,尤其是让我们了解到建立像ChatGPT这样的东西需要什么。

首先是嵌入模块。下面是GPT-2的Wolfram语言示意图:

输入是一个由n个标记组成的向量(与上一节一样,由1到50,000左右的整数表示)。每个标记被(通过单层神经网)转换成一个嵌入向量(GPT-2的长度为768,ChatGPT的GPT-3为12288)。同时,还有一个 "二级路径",它为标记获取(整数)位置序列,并从这些整数创建另一个嵌入向量。最后,来自令牌值和令牌位置的嵌入向量被加在一起--产生嵌入模块的最终嵌入向量序列。

为什么只是把令牌值和令牌位置的嵌入向量加在一起?我不认为这有什么特别的科学依据。只是各种不同的东西都被尝试过,而这是个似乎有效的方法。从某种意义上说,神经网络的部分,只要设置 "大致正确",通常就可以通过做充分的训练来确定细节,而不需要真正 "在工程层面上理解 "神经网络最终是如何配置自己。

下面是嵌入模块所做的工作,对字符串hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye 2:

每个标记的嵌入向量的元素在页面下方显示,在整个页面上,我们首先看到的是 "hello "的嵌入,然后是 "bye "的嵌入。上面的第二个数组是位置嵌入--其看起来有点随机的结构只是 "碰巧学到的"(在这种情况下是GPT-2)。

在嵌入模块之后,是转化器的 "主要事件":一连串所谓的 "注意块"(GPT-2为12个,ChatGPT的GPT-3为96个)。这一切都很复杂--让人想起典型的难以理解的大型工程系统,或者,生物系统。但无论如何,这里是一个单一的 "注意块 "的示意图(对于GPT-2):

在每一个这样的块中,有一系列的 "注意头"(GPT-2有12个,ChatGPT的GPT-3有96个)--每一个都对嵌入向量中的不同数值块独立操作。(我们不知道为什么分割嵌入向量是个好主意,或者它的不同部分有什么 "意义";这只是 "被发现可行 "的事情之一)。

那么注意头是做什么的?基本上,它们是一种在标记序列中 "回顾 "的方式(即到目前为止产生的文本),并以一种对寻找下一个标记有用的形式来 "包装过去"。在上面的第一节中,我们谈到了使用2-gram概率来根据它们的直接前身来挑选单词。变换器中的 "关注 "机制所做的是允许 "关注 "甚至更早的词--因此有可能捕捉到,比如说,动词可以指代在句子中出现在它们之前的许多词的名词的方式。

在更详细的层面上,注意头所做的是以一定的权重重新组合与不同标记相关的嵌入向量中的大块。举例来说,在第一个注意块中的12个注意头(在GPT-2中)对于上面的 "hello, bye "字符串有如下("look-back-all-the-beginning-the-sequence-of-tokens")模式的 "重组权值":

在经过注意头的处理后,产生的 "重新加权的嵌入向量"(GPT-2的长度为768,ChatGPT的GPT-3的长度为12288)被传递到一个标准的 "全连接 "神经网层。很难掌握这个层在做什么,但这里是它使用的768×768权重矩阵的图(这里是GPT-2):

采取64×64的移动平均线,一些(随机漫步式的)结构开始出现了:

是什么决定了这种结构?最终,它可能是人类语言特征的一些 "神经网络编码"。但到现在为止,这些特征可能是什么还很不清楚。实际上,我们正在 "打开ChatGPT的大脑"(或至少是GPT-2)并发现,那里很复杂,我们不了解它--尽管最终它产生了可识别的人类语言。

在经历了一个注意块之后,我们得到了一个新的嵌入向量--然后它又被连续地传递到其他的注意块中(GPT-2共有12个;GPT-3有96个)。每个注意块都有自己特定的 "注意力 "和 "完全连接 "权重模式。这里是GPT-2的注意力权重序列,用于 "你好,再见 "输入,用于第一个注意头:

这里是全连接层的(移动平均)"矩阵":

奇怪的是,尽管不同注意块中的这些 "权重矩阵 "看起来非常相似,但权重的大小分布可能有些不同(而且不总是高斯的):

那么,在经历了所有这些块之后,转化器的净效果是什么?从本质上讲,它是将原始的符号序列的嵌入集合转化为最终的集合。而ChatGPT的具体工作方式是在这个集合中拾取最后一个嵌入,并对其进行 "解码",以产生一个关于下一个标记应该是什么的概率列表。

这就是ChatGPT的概要内容。它可能看起来很复杂(尤其是因为它有许多不可避免的、有点武断的 "工程选择"),但实际上,所涉及的最终元素非常简单。因为最终我们要处理的只是一个由 "人工神经元 "组成的神经网络,每个神经元都在做简单的操作,即接受一组数字输入,然后将它们与某些权重结合起来。

ChatGPT的原始输入是一个数字数组(到目前为止符号的嵌入向量),当ChatGPT "运行 "以产生一个新的符号时,所发生的只是这些数字 "通过 "神经网络层的涟漪,每个神经元 "做它的事 "并将结果传递给下一层的神经元。没有循环或 "回头"。一切都只是通过网络 "向前馈送"。

这是一个与典型的计算系统—就像图灵机—非常不同的设置,在图灵机中,结果是由相同的计算元素反复 "再处理 "的。在这里,至少在生成一个给定的输出符号时,每个计算元素(即神经元)只被使用一次。

但从某种意义上说,即使在ChatGPT中,仍然存在一个重复使用计算元素的 "外循环"。因为当ChatGPT要生成一个新的标记时,它总是 "读"(即作为输入)之前的整个标记序列,包括ChatGPT自己之前 "写 "的标记。我们可以认为这种设置意味着ChatGPT--至少在其最外层--涉及到一个 "反馈循环",尽管在这个循环中,每一次迭代都明确地显示为一个出现在其生成的文本中的标记。

回到ChatGPT的核心:反复用于生成每个标记的神经网络。在某种程度上,它非常简单:一整个相同的人工神经元的集合。网络的某些部分只是由("完全连接")的神经元层组成,其中某一层的每个神经元都与前一层的每个神经元相连(有一定的权重)。但是,特别是它的变压器结构,ChatGPT有更多的结构部分,其中只有不同层的特定神经元被连接。(当然,我们仍然可以说 "所有的神经元都是相连的"--但有些神经元的权重为零)。

此外,ChatGPT中的神经网的某些方面并不是最自然地被认为是由 "同质 "层组成的。例如,正如上面的图标摘要所示,在一个注意块中,有一些地方对传入的数据进行了 "多份拷贝",然后每个拷贝都要经过不同的 "处理路径",可能涉及不同数量的层,然后才会重新组合。但是,虽然这可能是对正在发生的事情的一个方便的表述,但至少在原则上,总是可以考虑 "密集地填充 "层,但只是让一些权重为零。

如果我们看一下ChatGPT的最长路径,大约有400个(核心)层参与其中--在某些方面不是一个巨大的数字。但是有数以百万计的神经元--总共有1750亿个连接,因此有1750亿个权重。需要认识到的一点是,每当ChatGPT生成一个新的令牌时,它必须进行涉及这些权重中每一个的计算。在实现上,这些计算可以 "按层 "组织成高度并行的阵列操作,可以方便地在GPU上完成。但是,对于每一个生成的标记,仍然需要进行1750亿次计算(最终会更多一些)--因此,是的,用ChatGPT生成一个长的文本需要一段时间,这并不令人惊讶。

最终,令人瞩目的是,所有这些操作--个别而言,它们很简单--能够以某种方式共同完成如此出色的 "类似人类 "的文本生成工作。必须再次强调的是,目前没有任何 "最终的理论理由 "来解释这样的工作。事实上,正如我们将要讨论的那样,我认为我们必须把这看作是一个潜在的令人惊讶的科学发现:在像ChatGPT这样的神经网络中,有可能捕捉到人类大脑在生成语言方面的本质。

11 ChatGPT的训练

所以我们现在已经给出了ChatGPT建立后的工作概要。但它是如何建立的呢?其神经网络中的1750亿个权重是如何确定的?基本上,它们是非常大规模的训练的结果,基于一个巨大的文本语料库--网络上的、书中的等等--由人类写的。正如我们所说的,即使考虑到所有的训练数据,神经网络是否能够成功地产生 "类似人类 "的文本,这一点也不明显。而且,再一次,需要详细的工程来实现这一目标。但ChatGPT的最大惊喜和发现是,它是可能的。实际上,一个 "只有 "1750亿个权重的神经网络可以为人类写的文本建立一个 "合理模型"。

在现代,有很多人类写的文本是以数字形式存在的。公共网络至少有几十亿人写的网页,总共可能有一万亿字的文本。如果包括非公开网页,这些数字可能至少要大100倍。到目前为止,已经有超过500万本数字化书籍被提供(在曾经出版过的1亿本左右的书籍中),提供了另外1000亿字左右的文本。

鉴于所有这些数据,我们如何从中训练出一个神经网络呢?基本过程与我们在上面的简单例子中讨论的非常相似。你提出例子,然后你调整网络中的权重,使网络在这些例子中的误差("损失")最小。从错误中 "反向传播 "的主要问题是,每次你这样做,网络中的每个权重通常至少会有微小的变化,而且有大量的权重需要处理。(实际的 "反向计算 "通常只比正向计算难一个小常数)。

利用现代的GPU硬件,可以直接计算出成千上万个例子的并行结果。但是,当涉及到实际更新神经网络中的权重时,目前的方法要求人们基本上是一批一批地做。

即使在我们之前讨论的看似简单的学习数字函数的案例中,我们发现我们经常不得不使用数百万个例子来成功训练一个网络。那么,这意味着我们需要多少个例子来训练一个 "类人语言 "模型呢?似乎没有任何基本的 "理论 "方法可以知道。但在实践中,ChatGPT在几千亿字的文本上被成功训练。

有些文本被多次输入,有些只有一次。但不知何故,ChatGPT从它看到的文本中 "得到了它需要的东西"。考虑到需要学习的文本量,ChatGPT应该需要多大的网络才能 "学好"?同样,我们还没有一个基本的理论方法来说明。最终人类语言大概有某种 "总的算法内容",以及人类通常用它说什么。但接下来的问题是,神经网络在实现基于该算法内容的模型时将会有多大的效率。我们也不知道,尽管ChatGPT的成功表明它的效率相当高。

最后我们注意到,ChatGPT使用了几千亿个权重--与它所获得的训练数据的总字数(或标记)的数量相当。在某些方面,令人惊讶的是(尽管在ChatGPT的小型类似物中也有经验观察),似乎工作良好的 "网络规模 "与 "训练数据的规模 "如此相似。毕竟,这肯定不是说 "在ChatGPT内 "所有来自网络和书籍等的文本都被 "直接存储 "了。因为在ChatGPT里面的实际上是一堆数字--精度略低于10位--是对所有这些文本的总体结构的某种分布式编码。

换句话说,我们可以问人类语言的 "有效信息内容 "是什么,以及通常用它说什么。这里有语言实例的原始语料库。然后是ChatGPT的神经网络中的表述。这个表征很可能与 "算法上最小 "的表征相去甚远。但它是一个很容易被神经网络使用的表征。在这个表示中,最终很少 "压缩 "训练数据;平均而言,只需要不到一个神经网络的权重就能承载一个词的训练数据的 "信息内容"。

当我们运行ChatGPT来生成文本时,我们基本上不得不使用每个权重一次。因此,如果有n个权重,我们有n个计算步骤要做--尽管在实践中,许多步骤通常可以在GPU中并行完成。但是,如果我们需要大约n个字的训练数据来设置这些权重,那么从我们上面所说的,我们可以得出结论,我们需要大约n的平方个计算步骤来进行网络的训练--这就是为什么用目前的方法,人们最终需要谈论数十亿美元的训练工作。

12 超越基础训练

训练ChatGPT的大部分工作是向它 "展示 "大量来自网络、书籍等的现有文本。但事实证明,还有一个相当重要的部分。

一旦它完成了对所展示的原始语料库的 "原始训练",ChatGPT内的神经网络就可以开始生成自己的文本,继续提示等。但是,虽然这样做的结果往往看起来很合理,但它们往往--特别是对于较长的文本--以相当非人类的方式 "游离"。这不是人们可以轻易发现的,比如说,通过对文本做传统的统计。这是实际阅读文本的人很容易注意到的事情。

构建ChatGPT的关键想法是,在 "被动地阅读 "网络等事物之后,还有一个步骤:让实际的人类主动与ChatGPT互动,看看它产生了什么,并在实际上给它反馈 "如何成为一个好的聊天机器人"。神经网络如何使用这种反馈呢?第一步只是让人类对神经网络的结果进行评价。随后又建立了另一个神经网络模型,试图预测这些评分。但现在这个预测模型可以在原始网络上运行--基本上就像一个损失函数,实际上是让该网络通过人类的反馈来 "调高"。而实践中的结果对系统成功产生 "类似人类 "的输出有很大影响。

总的来说,"最初训练的 "网络只需要很少的 "戳 "就能让它向特定的方向有用地发展。人们可能认为,要让网络表现得像 "学到了新东西",就必须运行训练算法,调整权重,等等。

但事实并非如此。相反,基本上只需告诉ChatGPT一些东西,作为你给出的提示的一部分,然后它就可以在生成文本时成功地利用你告诉它的东西。我认为,这一点再次成为理解ChatGPT "真正在做什么 "以及它与人类语言和思维结构之间关系的重要线索。

它当然有一些类似于人类的东西:至少在它接受了所有的预训练之后,你只需告诉它一次,它就能 "记住"--至少 "足够长的时间 "来使用它生成一段文本。那么,在这样的情况下发生了什么?可能是 "你告诉它的一切都已经在那里了"--你只是把它引向正确的地方。但这似乎并不靠谱。相反,更有可能的是,这些元素已经在那里了,但具体细节是由 "这些元素之间的轨迹 "这样的东西来定义的,这就是你在告诉它的时候所引入的东西。

事实上,就像人类一样,如果你告诉它一些奇怪的、出乎意料的、完全不适合它所知道的框架的东西,它似乎并不能成功地 "整合 "这个。只有当它基本上是以相当简单的方式骑在它已有的框架之上时,它才能 "整合 "它。

还值得再次指出的是,对于神经网络能够 "接收 "的东西,不可避免地存在 "算法限制"。告诉它 "浅层 "的规则,如 "这个到那个",神经网络很可能能够很好地表示和再现这些规则--事实上,它从语言中 "已经知道 "的东西会给它一个直接的模式来遵循。但是,如果试图给它一个实际的 "深度 "计算规则,其中涉及许多潜在的计算上不可简化的步骤,它就是行不通的。(记住,在每一个步骤中,它总是在其网络中 "向前输送数据",除了生成新的标记外,从不循环)。

当然,网络可以学习特定的 "不可简化 "计算的答案。但是,一旦有了组合数的可能性,这种 "查表式 "的方法就不灵了。就像人类一样,现在是时候让神经网络 "伸出手来",使用实际的计算工具了。(是的,Wolfram|Alpha和Wolfram语言是唯一合适的,因为它们是为了 "谈论世界上的事物 "而建立的,就像语言模型的神经网络一样)。

13 什么是真正让ChatGPT工作的?

人类的语言--以及产生语言的思维过程--似乎一直代表着一种复杂性的顶峰。事实上,人类的大脑--由 "仅仅 "1000亿个左右的神经元(也许还有100万亿个连接)组成的网络--能够对其负责,这比较了不起。也许,人们会想象,大脑除了神经元网络之外还有其他东西,就像一些未被发现的物理学的新层。但是现在通过ChatGPT,我们得到了一个重要的新信息:我们知道,一个纯粹的人工神经网络,其连接数与大脑的神经元一样多,能够在生成人类语言方面做得很好,令人惊讶。

而且,这仍然是一个庞大而复杂的系统--其神经网络的权重与目前世界上的文字一样多。但在某种程度上,仍然很难相信,语言的所有丰富性和它可以谈论的东西可以被封装在这样一个有限的系统中。这其中的部分原因无疑是反映了一个无处不在的现象(这在第30条规则的例子中首次变得很明显),即计算过程实际上可以大大放大系统的表面复杂性,即使其基本规则很简单。但是,实际上,正如我们在上面讨论的那样,ChatGPT中使用的那种神经网络往往是专门用来限制这种现象的影响以及与之相关的计算的不可重复性的,以使其训练更容易进行。

那么,像ChatGPT这样的东西是如何在语言方面走得如此之远的呢?我想,基本的答案是,语言在根本层面上比它看起来要简单得多。这意味着ChatGPT--即使它的神经网络结构最终是简单的--能够成功地 "捕捉 "人类语言的本质和背后的思维。此外,在其训练中,ChatGPT以某种方式 "隐含地发现 "了语言(和思维)中的任何规律性,使之成为可能。

我认为,ChatGPT的成功为我们提供了一个基本的和重要的科学证据:它表明我们可以期待有重大的新 "语言法则"--以及有效的 "思维法则"--在那里被发现。在ChatGPT中,作为一个神经网络,这些规律充其量是隐含的。但是,如果我们能以某种方式使这些定律明确化,就有可能以更直接、更有效和更透明的方式完成ChatGPT所做的各类事情。

那么这些法律可能是什么样的呢?归根结底,它们必须给我们提供某种关于语言--以及我们用它说的东西--是如何组合起来的处方。后文我们会讨论 "观察ChatGPT "如何能够给我们一些这方面的提示,以及我们从构建计算语言中了解到的情况如何提示我们前进的道路。首先我们先来讨论两个众所周知的相当于 "语言法则 "的例子--以及它们与ChatGPT的运作有何关系。

第一个是语言的语法。语言并不只是一个随机的词语组合。相反,对于不同种类的单词如何放在一起,有(相当)明确的语法规则:例如,在英语中,名词前面可以有形容词,后面可以有动词,但通常两个名词不能紧挨着。这样的语法结构可以(至少是近似地)被一套规则所捕获,这些规则定义了如何将相当于 "解析树 "的东西放在一起:

ChatGPT对这些规则没有任何明确的 "知识"。但在它的训练中,它隐含地 "发现 "了这些规则,然后似乎很擅长遵守这些规则。那么,这是如何做到的呢?在一个 "大画面 "的层面上,这并不清楚。但为了得到一些启示,看看一个更简单的例子也许会有启发。

考虑一种由()和()序列组成的 "语言",其语法规定小括号应该总是平衡的,如解析树所表示的那样:

我们能否训练一个神经网络来产生 "语法正确 "的小括号序列?有各种方法来处理神经网络中的序列,但让我们使用变换器网络,就像ChatGPT那样。给定一个简单的变换器网络,我们可以给它提供语法正确的小括号序列作为训练实例。一个微妙之处(实际上也出现在ChatGPT的人类语言生成中)是,除了我们的 "内容标记"(这里是"("和")"),我们还必须包括 "结束 "标记,它的生成表明输出不应该再继续下去(即对于ChatGPT来说,我们已经达到了 "故事的终点")。

如果我们只用一个有8个头的注意块和长度为128的特征向量设置一个转换网(ChatGPT也使用长度为128的特征向量,但有96个注意块,每个注意块有96个头),那么不可能让它学会很多小括号语言。但是,如果有2个注意块,学习过程似乎会收敛--至少在给出1000万个左右的例子之后(而且,就像转化器网络常见的那样,显示更多的例子似乎会降低其性能)。

因此,有了这个网络,我们可以做ChatGPT的类似工作,并询问下一个标记应该是什么的概率--在一个括号序列中:

在第一种情况下,网络 "非常确定 "序列不能在这里结束--这很好,因为如果它结束了,括号就会留下不平衡。然而,在第二种情况下,它 "正确地认识到 "序列可以在这里结束,尽管它也 "指出 "有可能 "重新开始",放下一个"(",估计后面还有一个")"。但是,哎呀,即使它有40万个左右经过艰苦训练的权重,它也说有15%的概率将")"作为下一个标记--这是不对的,因为这必然会导致一个不平衡的括号。

如果我们要求网络为逐渐变长的('s)序列提供最高概率的完成度,我们会得到以下结果:

在一定长度内,网络做得很好。但随后它就开始失败了。这是一个非常典型的事情,在像这样的 "精确 "情况下,神经网络(或一般的机器学习)会出现这种情况。人类 "一眼就能解决 "的情况,神经网络也能解决。但是需要做一些 "更多的算法"(例如明确地计算括号是否封闭)的情况,神经网络往往在某种程度上是 "计算能力太浅",无法可靠地做到。(顺便说一句,即使是目前完整的ChatGPT也很难正确匹配长序列中的小括号)。

那么,这对于像ChatGPT和像英语这样的语言的语法意味着什么呢?小括号语言是 "朴素的"--而且更像是一个 "算法的故事"。但在英语中,能够在局部选词和其他提示的基础上 "猜测 "什么是符合语法的,则要现实得多。而且,是的,神经网络在这方面要好得多--尽管它可能会错过一些 "形式上正确 "的情况,而人类也可能错过。但主要的一点是,语言有一个整体的句法结构这一事实--以及它所暗示的所有规律性--在某种意义上限制了神经网络要学习的 "程度"。一个关键的 "类似自然科学 "的观察是,像ChatGPT中的神经网络的转化器架构似乎能够成功地学习所有人类语言中似乎都存在的(至少在某种程度上是近似的)嵌套树状句法结构。

句法提供了对语言的一种约束。但显然还有更多。像 "好奇的电子吃鱼的蓝色理论 "这样的句子在语法上是正确的,但并不是人们通常期望说的东西,而且如果ChatGPT生成它,也不会被认为是成功的--因为,嗯,以其中单词的正常含义,它基本上没有意义。

但是,是否有一个一般的方法来判断一个句子是否有意义?这方面没有传统的整体理论。但是我们可以认为ChatGPT在接受了来自网络的数十亿(可能是有意义的)句子的训练之后,已经隐含地 "发展了一套理论"。

这个理论可能是什么样的?有一个小小的角落,基本上两千年来一直为人所知,这就是逻辑。当然,在亚里士多德发现它的对偶形式中,逻辑基本上是一种说法,即遵循某些模式的句子是合理的,而其他句子则不是。例如,说 "所有的X都是Y,这不是Y,所以它不是X "是合理的(正如 "所有的鱼都是蓝色的,这不是蓝色,所以它不是鱼")。就像人们可以有点异想天开地想象亚里士多德通过("机器学习式")大量的修辞学例子发现了对偶逻辑一样,人们也可以想象在ChatGPT的训练中,它能够通过查看网络上的大量文本等来 "发现对偶逻辑"。(是的,虽然我们可以期待ChatGPT产生包含 "正确推论 "的文本,基于像对偶逻辑这样的东西,但当它涉及到更复杂的形式逻辑时,情况就完全不同了--我认为我们可以期待它在这里失败,原因与它在小括号匹配中失败的原因一样。)

但除了逻辑这个狭隘的例子之外,对于如何系统地构建(或识别)甚至是看似有意义的文本,又能说什么呢?有一些东西,如《疯狂的自由》,使用非常具体的 "短语模板"。但不知何故,ChatGPT隐含着一种更普遍的方法。也许除了 "当你有1750亿个神经网络权重时,它就会以某种方式发生 "之外,对于如何做到这一点没有什么可说的。但我强烈怀疑有一个更简单、更有力的故事。

14 意义空间和运动的语义规律

我们在上面讨论过,在ChatGPT中,任何一段文本都由一个数字阵列有效地表示,我们可以把它看作是某种 "语言特征空间 "中一个点的坐标。因此,当ChatGPT延续一段文本时,这相当于在语言特征空间中追踪一条轨迹。但现在我们可以问,是什么让这个轨迹对应于我们认为有意义的文本。也许会有某种 "语义运动法则 "来定义--或者至少是约束--语言特征空间中的点如何移动,同时保留 "有意义"?

那么,这个语言学特征空间是什么样子的呢?下面是一个例子,说明如果我们把这样一个特征空间投射到二维空间,单个词(这里是指普通名词)可能会被布置成什么样:

我们在上面看到了另一个基于代表植物和动物的词的例子。但这两种情况下的重点是,"语义相似的词 "被放在附近。

作为另一个例子,下面是对应于不同语篇的词是如何排列的:

当然,一个给定的词一般来说并不只有 "一个意思"(或者说一定只对应一个语篇)。通过观察包含一个词的句子在特征空间中的布局,我们通常可以 "区分 "出不同的含义--就像这里的例子 "起重机"(鸟或机器):

所以我们至少可以认为这个特征空间是将 "意义相近的词 "放在这个空间里,这是合理的。但是,在这个空间里我们能识别出什么样的额外结构呢?例如,是否存在某种 "平行运输 "的概念,以反映空间中的 "平坦性"?掌握这个问题的一个方法是看一下类比:

而且,即使当我们投射到二维时,往往至少会有 "一丝平面感",尽管它肯定不是普遍存在的。

那么,轨迹呢?我们可以看看ChatGPT的提示在特征空间中的轨迹--然后我们可以看看ChatGPT是如何延续这个轨迹的:

这里当然没有 "几何学上明显的 "运动规律。而这一点也不令人惊讶;我们完全期待这将是一个相当复杂的故事。举例来说,即使有一个 "运动的语义法则 "可以找到,它最自然地以什么样的嵌入(或者,实际上,什么样的 "变量")来表述,也远非明显。

在上图中,我们展示了 "轨迹 "中的几个步骤--在每个步骤中,我们挑选ChatGPT认为最可能的词("零温度 "情况)。但我们也可以问,在某一点上,哪些词可以以什么概率 "接下来":

在这种情况下,我们看到的是有一个高概率词的 "扇形",似乎在特征空间中或多或少有一个明确的方向。如果我们再往前走会怎么样呢?下面是我们沿着轨迹 "前进 "时出现的连续的 "扇形":

这里有一个三维表示,共走了40步:

这似乎是一团乱麻--对于人们期望通过经验性地研究 "ChatGPT在里面做什么 "来确定 "类似数学物理学的""运动语义法则 "的想法没有任何鼓励作用。但也许我们只是看了 "错误的变量"(或错误的坐标系),只要我们看了正确的变量,我们就会立即看到ChatGPT正在做一些 "数学-物理学的简单 "的事情,比如遵循测地线。但是到目前为止,我们还没有准备好从它的 "内部行为 "中 "实证解码 "ChatGPT "发现 "人类语言是如何 "拼凑 "的。

15 语义语法和计算语言的力量

产生 "有意义的人类语言 "需要什么?在过去,我们可能会认为这不可能是一个人的大脑。但现在我们知道,ChatGPT的神经网络可以很好地完成这一任务。不过,也许这已经是我们能走的最远的路了,没有什么比这更简单--或者更容易被人类理解--的东西会起作用。但我强烈怀疑的是,ChatGPT的成功隐含地揭示了一个重要的 "科学 "事实:有意义的人类语言的结构和简单性实际上比我们所知道的要多得多,而且最终甚至可能有相当简单的规则来描述这种语言如何被组合起来。

正如上文所提,句法语法给出了人类语言中对应于不同语篇的词语如何组合的规则。但是为了处理意义,我们需要更进一步。而如何做到这一点的一个版本是,不仅要考虑语言的句法语法,还要考虑语义的语法。

为了语法的目的,我们确定名词和动词等事物。但为了语义学的目的,我们需要 "更精细的等级"。因此,例如,我们可以确定 "移动 "的概念,以及 "保持独立于位置的身份 "的 "物体 "的概念。这些 "语义概念 "中的每一个都有无尽的具体例子。但是,为了我们的语义语法的目的,我们将只是有某种一般性的规则,基本上说 "物体 "可以 "移动"。关于这一切如何运作,有很多话要说(其中有些话我以前说过)。但是,我在这里只想说几句,指出一些潜在的前进道路。

值得一提的是,即使一个句子根据语义语法是完全正确的,也不意味着它在实践中已经实现(甚至可以实现)。"大象去了月球 "无疑会 "通过 "我们的语义语法,但是它肯定没有在我们的现实世界中实现(至少还没有)--尽管它对于一个虚构的世界来说绝对是公平的。

当我们开始谈论 "语义语法 "的时候,我们很快就会问:"它的下面是什么?"它所假设的是什么 "世界模型"?句法语法实际上只是关于从词语中构建语言的问题。但是,语义学语法必然涉及某种 "世界模型"--作为 "骨架 "的东西,由实际词语构成的语言可以在上面分层。

直到最近,我们可能会想象,(人类)语言将是描述我们 "世界模型 "的唯一一般方式。早在几个世纪前,就已经开始有了对特定种类事物的形式化,特别是以数学为基础。但是现在有了一种更普遍的形式化方法:计算语言。

这就是我四十多年来的大项目(现在体现在沃尔弗拉姆语言中):开发一种精确的符号表示,可以尽可能广泛地谈论世界上的事物,以及我们关心的抽象事物。例如,我们有城市、分子、图像和神经网络的符号表示,而且我们有关于如何计算这些事物的内在知识。

经过几十年的工作,我们已经用这种方式覆盖了很多领域。但是在过去,我们并没有特别处理 "日常话语"。在 "我买了两磅苹果 "中,我们可以轻易地表示(并对其进行营养和其他计算)"两磅苹果"。但是我们(还没有)对 "我买了 "有一个符号化的表示。

这一切都与语义语法的想法有关--目标是为概念提供一个通用的符号 "构造套件",这将为我们提供什么可以与什么结合的规则,从而为我们可能转化为人类语言的 "流程 "提供规则。

但是,假设我们有这种 "符号话语语言"。我们会用它做什么呢?我们可以开始做一些事情,比如生成 "本地有意义的文本"。但最终我们可能想要更多 "全局意义 "的结果--这意味着 "计算 "更多关于世界上(或也许在某个一致的虚构世界)实际存在或发生的东西。

现在,在Wolfram语言中,我们有大量的关于很多种类的事物的内置计算知识。但是,对于一个完整的符号话语语言,我们必须建立关于世界上一般事物的额外 "计算":如果一个物体从A移动到B,从B移动到C,那么它就从A移动到C,等等。

给定一个符号化的话语语言,我们可以用它来做 "独立的陈述"。但我们也可以用它来问关于世界的问题,"Wolfram|Alpha风格"。或者我们可以用它来陈述我们 "想让它变成这样 "的事情,大概是用一些外部的执行机制。或者我们可以用它来做断言--也许是关于真实的世界,也许是关于我们正在考虑的某个特定世界,不管是虚构的还是其他的。

人类语言从根本上说是不精确的,这不仅仅是因为它没有 "拴 "在一个具体的计算实现上,而且它的意义基本上只是由其使用者之间的 "社会契约 "来定义。但是计算语言,就其性质而言,具有某种基本的精确性--因为最终它所指定的东西总是可以 "毫不含糊地在计算机上执行"。人类语言通常可以摆脱某种模糊性。(当我们说 "行星 "时,它是否包括系外行星,等等。)但是在计算语言中,我们必须对我们所做的所有区分都要精确和清楚。

在计算语言中,利用普通人类语言来编造名字往往很方便。但它们在计算语言中的含义必然是精确的,而且可能涵盖也可能不涵盖典型人类语言用法中的某些特定内涵。

我们应该如何弄清楚适合一般符号话语语言的基本 "本体 "呢?嗯,这并不容易。这也许就是为什么自亚里士多德两千多年前的原始开始以来,在这些方面做得很少。但是,今天我们对如何以计算方式思考世界了解得如此之多,这确实有帮助(而且,从我们的物理学项目和统治者的想法中得到一个 "基本形而上学 "也无妨)。

但是这一切在ChatGPT的背景下意味着什么?从它的训练来看,ChatGPT已经有效地 "拼凑 "了一定数量的相当于语义语法的东西(相当令人印象深刻)。但是它的成功让我们有理由认为,以计算语言的形式构建更完整的东西将是可行的。而且,与我们迄今为止对ChatGPT内部的理解不同的是,我们可以期望将计算语言设计得很容易为人类所理解。

当我们谈及语义语法时,我们可以将其与对偶逻辑进行类比。起初,对偶逻辑本质上是一组关于用人类语言表达的语句的规则。但是(是的,两千年后)当形式逻辑被开发出来时,对偶逻辑最初的基本构造现在可以用来建造巨大的 "形式塔",包括例如现代数字电路的运作。而且,我们可以预期,更一般的语义语法也将如此。起初,它可能只是能够处理简单的模式,例如以文本形式表达。但是,一旦它的整个计算语言框架建立起来,我们就可以预期,它将能够被用来竖起 "广义语义逻辑 "的高塔,使我们能够以精确和正式的方式处理各种我们以前从未接触过的东西,而只是在 "底层 "通过人类语言,以其所有的模糊性。

我们可以认为计算语言的构造--以及语义语法--代表了一种对事物的终极压缩。因为它允许我们谈论什么是可能的本质,而不需要,例如,处理存在于普通人类语言中的所有 "转折性的措辞"。我们可以把ChatGPT的巨大优势看作是有点类似的东西:因为它在某种意义上也 "钻了空子",达到了可以 "把语言以一种有语义的方式组合起来 "的程度,而不必担心不同的可能的短语转折。

那么,如果我们把ChatGPT应用于底层计算语言,会发生什么呢?计算语言可以描述什么是可能的。但仍然可以添加的是对 "什么是流行的 "的感觉--例如基于对网络上所有内容的阅读。但是,在下面,用计算语言操作意味着像ChatGPT这样的东西可以立即和基本地接触到相当于利用潜在的不可还原的计算的终极工具。这使得它成为一个不仅可以 "生成合理文本 "的系统,而且可以期望解决任何可以解决的问题,即这些文本是否真的对世界做出了 "正确 "的陈述,或者它应该谈论的是什么。

16 ChatGPT在做什么,为什么它能发挥作用?

ChatGPT的基本概念在某种程度上相当简单。从网络、书籍等人类创造的大量文本样本开始。然后训练一个神经网络来生成 "像这样 "的文本。特别是,让它能够从 "提示 "开始,然后继续生成 "像它被训练过的那样 "的文本。

正如我们所看到的,ChatGPT中的实际神经网络是由非常简单的元素组成的,虽然有数十亿个元素。而神经网络的基本操作也非常简单,基本上是对它所生成的每一个新词(或词的一部分),通过其元素 "传递一次输入"(没有任何循环,等等)。

但出乎意料的是,这个过程可以产生成功地 "像 "网络上、书本上的文字。而且,它不仅是连贯的人类语言,它还 "说了些什么","按照它的提示 "利用它 "读 "到的内容。它并不总是说 "全局有意义"(或对应于正确的计算)的事情--因为(例如,在没有获得Wolfram|Alpha的 "计算超能力 "的情况下)它只是根据其训练材料中的事情 "听起来像 "而说的事情。

ChatGPT的具体工程使它相当引人注目。但最终(至少在它能够使用外部工具之前),ChatGPT "只是 "从它所积累的 "传统智慧的统计数据 "中抽出一些 "连贯的文本线索"。但令人惊讶的是,其结果是如此的像人。正如我所讨论的,这表明了一些至少在科学上非常重要的东西:人类语言(以及它背后的思维模式)在某种程度上比我们想象的更简单,更 "像法律"。ChatGPT已经隐晦地发现了这一点。但我们有可能明确地暴露它,用语义语法、计算语言等等。

ChatGPT在生成文本方面所做的工作令人印象深刻,而且其结果通常非常像我们人类会产生的东西。那么,这是否意味着ChatGPT的工作方式就像一个大脑?它的底层人工神经网络结构最终是以大脑的理想化为模型的。而且,当我们人类产生语言时,似乎很有可能发生的许多方面都很相似。

当涉及到训练(又称学习)时,大脑和当前计算机的不同 "硬件"(以及,也许,一些未开发的算法想法)迫使ChatGPT使用一种可能与大脑相当不同(在某些方面效率低得多)的策略。还有一点:即使与典型的算法计算不同,ChatGPT内部也没有 "循环 "或 "对数据进行重新计算"。而这不可避免地限制了它的计算能力--即使与目前的计算机相比也是如此,但与大脑相比肯定是如此。

目前还不清楚如何 "解决这个问题",并且仍然保持以合理效率训练系统的能力。但这样做大概会让未来的ChatGPT做更多 "类似大脑的事情"。当然,有很多事情是大脑做得不好的--特别是涉及到相当于不可简化的计算。对于这些,大脑和像ChatGPT这样的东西都必须寻求 "外部工具"--比如Wolfram语言。

但就目前而言,看到ChatGPT已经能够做到的事情是令人兴奋的。在某种程度上,它是基本科学事实的一个很好的例子,即大量简单的计算元素可以做非凡和意想不到的事情。它也为我们提供了两千年来最好的动力,以更好地理解人类条件的核心特征,即人类语言及其背后的思维过程的基本特征和原则。

推荐书单

《Java从入门到精通(第6版)》

《Java从入门到精通(第6版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细讲解了使用Java语言进行程序开发需要掌握的知识。全书分为23章,内容包括初识Java,熟悉Eclipse开发工具,Java语言基础,流程控制,数组,类和对象,继承、多态、抽象类与接口,包和内部类,异常处理,字符串,常用类库,集合类,枚举类型与泛型,lambda表达式与流处理,I/O(输入/输出),反射与注释,数据库操作,Swing程序设计,Java绘图,多线程,网络通信,奔跑吧小恐龙,MR人脸识别打卡系统。书中所有知识都结合具体实例进行讲解,涉及的程序代码都给出了详细的注释,可以使读者轻松领会Java程序开发的精髓,快速提高开发技能。

《Java从入门到精通(第6版)(软件开发视频大讲堂)》(明日科技)【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《Java从入门到精通(第6版)(软件开发视频大讲堂)》在线选购,本书作者:明日科技,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!icon-default.png?t=N658https://item.jd.com/13284888.html

精彩回顾

ChatGPT是如何运行起来的?(中)

ChatGPT是如何运行起来的?(上)

Netty和原生Java的性能比较

Java对比Python,谁才是编程王者?

10个强大的IntelliJ IDEA插件

微信搜索关注《Java学研大本营》

访问【IT今日热榜】,发现每日技术热点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20352.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动生成原创文案软件v.1.2.3

各大科技公司纷纷布局大模型领域,微软将向OpenAI进行价值数十亿美元的投资加速其在人工智能领域的技术突破。此外Buzzfeed和亚马逊亦在探索ChatGPT应用场景,正在逐步落地。国内方面,以华为、阿里、百度为代表的科技公司纷纷展开了AI大模型的研…

巴比特 | 元宇宙每日必读:4个月内签下1亿美元的生成式人工智能项目,埃森哲称Gen AI是很大的机会,现在还是早期...

摘要:据 LiveMint 6 月 25 日报道,埃森哲表示,在过去四个月中,该公司在生成式人工智能领域签下了价值 1 亿美元的项目。埃森哲主席兼首席执行官 Julie Sweet 表示,“Gen AI 是一个很大的机会,但现在还是早期…

零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器,是比较大的那种F450机架,不是那种PCB板做机架的小四轴,因为我也是从零基础开始做的四轴,现在就想把自己的过程写成博客分享在网上。下面我会从机械结构、主控和各传感器…

高性能流媒体硬解码

目录 高性能流媒体硬解码前言1. What、Why and How1.1 What1.2 Why?1.3 How? 2. 离散傅里叶变换(DFT)2.1 JPEG编码2.2 哈夫曼编码(Huffman Coding) 3. 视频流媒体前置知识3.1 视频文件的构成3.2 视频的编码与封装3.3 H264编码的分层3.4 RTSP之RTP(Real-t…

《云计算好用工具清单(2023版)》.pdf

其实,自工信部在2018年印发《推动企业上云实施指南(2018-2020年)》以来,国家政策就已经显示出不断支持与引导着我国云计算行业的发展的态势。 根据美国软件公司Flexera《2021年云计算市场发展状态报告》数据显示,36%的…

基于TCP交互的安卓chatGLM客户端

基于TCP交互的安卓chatGLM客户端 基本原理 随着chatGPT的火爆发展,如何将其快速实现部署和访问成为了急需解决的问题,为此,开发了一个基于TCP交互的安卓chatGLM客户端系统。 其中 后端在开源的 chatGLM-6B 的基础上,使用socket…

aardio + Python 可视化快速开发桌面程序,一键生成独立 EXE

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

chatgpt赋能python:Python手游:如何用Python技术构建一个优秀的手游?

Python手游:如何用Python技术构建一个优秀的手游? 在当今的数字时代,游戏已经成为一种最流行的娱乐方式之一。尤其是手游,在移动设备上已经占据了巨大市场份额。通过Python编程语言,我们可以使用其强大的功能来构建出…

chatgpt赋能python:Python拦截发包实现网络安全

Python拦截发包实现网络安全 网络安全是当前社会中一个非常重要的话题,无论是企业还是个人都需要采取有效措施保护自身隐私和数据安全。在网络安全中,拦截发包是一个非常有用的技术手段。本文将介绍如何利用Python实现拦截发包,从而实现网络…

AutoCV:Python基础总结

目录 Python基础总结前言Python基础课程总结第一课:开发环境和基本数据类型第二课:控制流程和函数第三课:闭包和根号2的求解第四课:类和三大神器第五课:文件IO和pickle、json第六课:作用域、模块和包、Data…

AutoCV第一课:Python基础

目录 Python基础注意事项一、2023/3/24更新一、2023/3/25更新前言1.开发环境1.1 作业 2.变量和基本数据类型2.1 python常见数据类型2.2 作业2.3 拓展-Python格式化输出 3.算数运算和变量解包3.1 zip函数3.2 拓展-后处理代码详解 4.字符串基本使用4.1 拼接4.2 重复4.3 提取单个字…

Wireshark的抓包和分析,看这篇就够了!

点击上方蓝字 关注【程序IT圈】 WireShark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。在网络封包和流量分析领域有着十分强大功能…

全网超详细的Linux iptables命令详解以及详解iptables-save和iptables-restore命令

文章目录 1. 文章引言2. iptables的四表五链2.1 何为四表2.2 何为五链 3. iptables语法格式4. 规则的查看与清除5. 防火墙的备份与还原5.1 iptables-save命令5.2 iptables-restore命令 1. 文章引言 最近在学习Linux iptables,从而知道,它是Linux防火墙系…

chatgpt赋能python:Python拦截游戏封包:打造自己的游戏辅助工具

Python拦截游戏封包:打造自己的游戏辅助工具 随着游戏领域的不断发展,越来越多的玩家开始使用游戏辅助工具提高自己的游戏水平。而Python拦截游戏封包技术的出现,让玩家们能够更加自由地打造适合自己的游戏辅助工具,实现更高效的…

chatgpt赋能python:如何用Python炒股赚钱?

如何用Python 炒股赚钱? 在过去的几年里,随着互联网技术的飞速发展,许多人开始关注股票市场。许多股票交易者也利用数据分析和机器学习技术来辅助他们做出更好的交易决策。Python,作为一种快捷,高效,易于学…

chatgpt赋能python:如何用Python炒股

如何用Python炒股 Python是一种功能强大、易用且广泛使用的编程语言。它受到众多程序员的追捧,不仅因为它易于学习,而且因为它有许多优秀的库和工具可供使用。现在,Python不仅可以用于Web应用程序、数据科学和人工智能等领域,还可…

chatgpt赋能Python-python_ai炒股

介绍 随着人工智能技术的不断发展,越来越多的行业开始应用AI技术提升效率和准确性。其中,炒股领域是一个非常典型的案例。而Python则成为了广泛被应用于AI炒股的主流语言之一。本文将介绍Python在AI炒股方面的应用以及相关的技术和策略。 什么是AI炒股…

chatgpt赋能python:Python用于炒股

Python用于炒股 随着互联网和数据科学的发展,越来越多的投资者开始依靠计算机和数据科学来进行更高效的投资。Python是一种广泛使用的编程语言,可以帮助投资者更好地处理数据和自动化交易。本文将简要介绍Python如何用于炒股,并分享一些有用…

chatGPT代替了我的工作,却让他加薪了50%

前言 最近ChatGPT这个技术发展,着实有点让人眼花缭乱,所以,搞来了一份表格,帮你理清它的发展思路。 简单来说,ChatGPT是一种全新聊天机器人模型,也可以称之为“生成型AI”。 点击免费领取: CS…

ChatGPT代替了人类思考,学习还有什么用?

ChatGPT是由OpenAI在2022年11月30日发布的聊天机器人。如果你认为它只是另一个 Siri、小度,你就大大低估了这个产品的革命性威力。 这个产品的本质, 不是语音机器人,而是代替人类思考 。 过去你想知道什么,会用谷歌、百度搜索&…