Cointime

扫码下载App
iOS & Android

Wolfram编程语言之父万字深度解析:最近很火的ChatGPT究竟是什么?以及它为什么能够发挥作用?

本文作者:Stephen Wolfram;编译:Coiintime Freya

它只是一次添加一个词而已

ChatGPT可以自动生成一些读起来像是人类书写的文本,自诞生以来迅速成为出圈爆款应用。但是它是怎么做到的呢?为什么它能发挥作用?本篇内容将大致概述一下 ChatGPT内部发生的事情,然后探讨为什么它可以如此出色地生成我们需要文本。我将把重点放在正在发生的事情的大局上——虽然我会提到一些工程细节,但我不会深入探讨它们。(我所说的实质内容也同样适用于其他当前的“大型语言模型”[LLM]以及ChatGPT。)

首先要解释的是,ChatGPT一直试图从根本上对现有文本进行“合理的延续”,这里的“合理”指的是“在看到人们在数十亿个网页上写的内容后,人们可能期望某人写的东西”。

假设我们有一篇文章“关于AI最大的优势是它的能力”。想象一下,扫描数十亿页的人类书写的文本(比如在网络上和数字化书籍中),找到这种个本的所有实例,然后看到某些单词在接下来的时间里出现了多少次。ChatGPT有效地做了类似的事情,除了它不看字面文本;它寻找在某种意义上“意义匹配”的事物。但最终的结果是,它产生了一个可能出现的单词的排名列表,以及“概率”:

值得注意的是,当ChatGPT做一些事情,比如写一篇文章时,它所做的事情基本上只是反复询问“鉴于目前的文本,下一个词应该是什么?”——而且每次都会增加一个词。(更准确地说,正如我所解释的,它在添加一个“标记”,这可能只是单词的一部分,这就是为什么它有时可以“组成新词”的原因)。

但是,在每一步它都会得到一个带有概率的单词列表。 但它实际上应该选择哪一个单词来添加到它正在写的文章(或其他)中呢?人们认为也许会是“排名最高”的单词(即被分配的最高“概率”的词)。关于这一点,也许有一天我们会有更一个科学式的解释——如果我们总是选择排名最高的词,我们通常会得到一个非常“平淡”的文章,似乎从不会“表现出任何创造力”(有时甚至会一字不差地重复)。但如果有时我们(随机)选择排名较低的词,我们也许会得到一篇“更有趣”的文章。

事实上,这里的随机性意味着,如果我们多次使用相同的提示,我们每次可能会得到不同的文章。 有一个特定的所谓“温度”参数,它将决定排名较低的词的使用频率,而对于论文生成,事实证明 0.8 的“温度”似乎是最好的。值得强调的是,这里没有使用任何“理论”;这只是一个在实践中被发现有效的问题。例如,“温度”的概念之所以存在,是因为恰好使用了统计物理学中熟悉的指数分布,但没有“物理”联系——至少到目前为止我们所知的是这样。)

在我们继续之前,我先来解释一下,为了论述的目的,我基本不会使用ChatGPT中的完整系统;相反,我通常会使用更简单的GPT-2系统,该系统的优点是它足够小,可以在标准台式电脑上运行。因此,对于我展示的所有内容,我将能够包括明确的Wolfram语言代码,你可以立即在你的计算机上运行这些代码。

例如,下图是如何获得上述概率表的。首先,我们必须检索底层的“语言模型”神经网络:

稍后我们将深入了解这个神经网络,并讨论它是如何工作的。但是现在,我们可以将这个“网络模型”作为一个黑匣子应用到我们的文本中,并按要求计算出应该该模型应该遵循的概率前5个词:

这就把这个结果变成了一个明确的格式化的“数据集”:

下图展示了,如果重复“应用模型”——在每一步中加入概率最高的词(在此代码中指定为模型的“决策”),会发生什么?

如果持续更长时间会发生什么?在这种(零温度”)情况下,很快就会出现相当混乱和重复的情况:

但是,如果不总是选择“顶级”词,而是偶尔随机选择“非顶级”词呢(“随机性”对应于“温度”0.8)? 我们同样可以创建文本:

每次这样做时,都会有不同的随机选择,文本也会不同——如以下 5 个示例所示:

值得注意的是,即使在第一步,也有很多可能的“下一个词”可供选择(温度为0.8),尽管它们的概率下降得非常快(是的,这个对数图上的直线对应于n-1的“幂律”衰减,这是语言一般统计数据的典型特征)。

那么,如果再继续下去会发生什么?这里有一个随机的例子。它比顶层词(零温度)的情况要好,但还是有点奇怪:

这是使用最简单的GPT-2模型(从2019年开始)完成的。如果使用更新更大的GPT-3 模型,结果会更好。以下是使用相同的“提示”但使用了最大的GPT-3模型所生成的顶级词(零温度)文本:

下面是一个“温度0.8”的随机示例:

概率从何而来?

所以ChatGPT总是根据概率来选择下一个词。但是这些概率从何而来?让我们从一个更简单的问题开始。如果让我们考虑一次生成一个字母(而不是单词)的英语文本。我们怎样才能算出每个字母的概率是多少呢?

我们可以做的一件非常简单的事情就是取一个英文文本样本,然后计算不同字母在其中出现的频率。因此,例如,这会计算维基百科关于“猫”的文章中的字母:

而这对“狗”也有同样的作用:

结果是相似的,但并不相同(“o”无疑在“dogs”这篇文章中更常见,因为它毕竟出现在“dog”这个词本身中)。不过,如果我们选取足够大的英语文本样本,我们可以期望最终得到至少相当一致的结果:

如果我们用这些概率生成一个字母序列,我们会得到什么?下面是我们得到的示例:

我们可以通过添加空格将其分解为“单词”,就像它们是具有一定概率的字母一样:

我们可以通过强制“单词长度”的分布与英语中的分布一致来更好地制造“单词”:

我们在这里没有碰巧得到任何“实际单词”,但结果看起来稍微好一些。不过为了更进一步,我们需要做的不仅仅是随机挑选每个字母。例如,我们知道,如果我们有一个“q”,下一个字母基本上就是“u”。

上图是字母本身的概率图表

这是一个显示典型英语文本中对字母对(“2-grams”)概率的图表。可能的第一个字母显示在整个页面上,第二个字母则显示在页面下方:

例如,我们在这里看到,除了“u”行之外,“q”列是空白的(概率为零)。好了,现在不是一次生成一个字母的“单词”,而是使用这些“2-gram”概率一次生成两个字母。下面是结果的示例——其中恰好包含一些“实际单词”:

有了足够多的英文文本,我们不仅可以很好地估计单个字母或字母对(2-grams)的概率,还可以对更长的字母组合的概率进行估计。如果我们用逐渐变长的n-gram概率生成“随机词”,我们会看到它们逐渐变得“更真实”:

但是现在让我们假设(或多或少与ChatGPT一样)我们处理的是整个单词,而不是字母。英语中大约有4万个常规使用的单词。通过查看大量的语文本语料库(比如几百万本书,总共有几千亿个单词),我们可以估计出每个单词的常见程度。利用这一点,我们可以开始生成“句子”,其中每个单词都是随机选择的,与其出现在语料库中的概率相同。以下是我们得到的一个示例:

不足为奇的是,这是无稽之谈。那么我们怎样才能做得更好呢?就像字母一样,我们不仅可以开始考虑单个单词的概率,还可以考虑成对或更长的n-gram单词的概率。在成对的情况下,我们可以得到以下5个例子,所有例子都以“cat”这个词开头:

它变得稍微“看起来很合理”了。我们可以想象,如果我们能够使用足够长的n-grams,我们基本上会“得到一个 ChatGPT”——从某种意义上说,它可以生成文章长度的单词序列,并带有“正确的整体文章概率”。但问题是:甚至没有足够多的英语文本能够推断出这些概率。

在对网络的抓取中,可能有几千亿个词;在已经数字化的书籍中,可能又有几千亿个词。但是在4万个常用词中,即使是可能的2-grams的数量也已经有16亿,而可能的3-grams的数量是60万亿。所以我们无法从现有的文本中估计出所有这些概率。当我们达到20个单词的“文章片段”时,可能性的数量比宇宙中的粒子数量还要多,所以从某种意义上说,它们永远不可能被全部写下来。

那么,我们能做些什么呢?最重要的想法是建立一个模型,让我们估计序列应该出现的概率——即使我们从来没有在我们看过的文本语料库中明确地看到过这些序列。ChatGPT的核心正是所谓的“大型语言模型”(LLM),它的构建是为了更好地估计这些概率。

什么是模型?

假设你想知道一颗炮弹从比萨斜塔的每一层楼掉落到地面需要多长时间(就像伽利略在 16世纪后期所做的那样)。那么,你可以在每种情况下测量它,并将结果制成表格。或者你可以做理论科学的本质:建立一个模型,给出某种程序来计算答案,而不是仅仅测量和记住每个案例。

让我们想象一下,我们有(有点理想化的)数据,说明炮弹从不同楼层落下需要多长时间。

我们如何计算出从我们没有明确数据的地板上掉下来需要多长时间? 在这种特殊情况下,我们可以使用已知的物理定律来解决它。 但是假设我们所拥有的只是数据,而我们不知道受其约束的基本法律。 那么我们可能会做一个数学上的猜测,比如也许我们应该用一条直线作为模型:

我们可以选择不同的直线。但这是最接近已知数据的一个。根据这条直线,我们可以估计掉到任何楼层的时间。

我们怎么知道在这里尝试使用直线呢?在某种程度上,我们并不知道。这只是数学方面普遍的使用方式,而我们已经习惯了这样的事实:即我们测量的大量数据被证明与数学上简单的东西非常吻合。我们可以尝试一些数学上更复杂的东西——比如说a+b x+c x2,在这种情况下,我们会做得更好:

不过,事情可能会出大问题。比如这里是我们用a+b/x+c sin(x)所能做到的最大值:

值得理解的是,从来没有一个 "无模型的模型"。你使用的任何模型都有一些特定的基础结构,然后有一组你可以转动的旋钮”(即你可以设置的参数)来适应你的数据。而在ChatGPT的案例中,使用了很多这样的“旋钮”——实际上是1,750亿个

但需要注意的是,ChatGPT 的底层结构——“仅仅”有这么多参数——足以使计算下一个单词概率的模型“足够好”,从而为我们提供合理的文章长度的文本。

类人的任务模型

我们上面列举的例子涉及为数值数据建立一个模型,这个模型本质上来自简单的物理学——几个世纪以来我们都知道“简单的数学适用”。但是对于 ChatGPT,我们必须制作一个由人类大脑产生的人类语言文本模型。对于这样的东西,我们(至少到目前为止)还没有类似“简单数学”这样的东西。那么它的模型可能是什么样的呢?

在我们谈论语言之前,让我们先谈谈另一项类似人类的任务:识别图像。作为一个简单的例子,让我们考虑一下数字的图像(是的,这是一个经典的机器学习例子):

我们可以做的一件事是为每个数字获取一堆示例图像:

然后,为了确定我们作为输入给出的图像是否对应于特定数字,我们可以与我们拥有的样本进行明确的逐像素比较。但作为人类,我们确实做得更好——因为我们仍然可以识别数字,即使它们是手写的,即使有各种修改和扭曲:

当我们为上面的数值数据建立模型时,我们可以取一个给定的数值x,然后为特定的a和b计算a+b x。因此,如果我们在这里将每个像素的灰度值视为某个变量xi,是否存在所有这些变量的某个函数,当被评估时,可以告诉我们图像的数字是多少?事实证明,构造这样一个函数是可能的。这并不奇怪,但它并不是特别简单。一个典型的例子可能涉及0万次数学运算。

但最终结果是,如果我们将一幅图像的像素值集合输入该函数,输出的数字将指定图像的哪个数字。稍后,我们将讨论如何构建这样的函数,以及神经网络的概念。但是现在让我们把这个函数当作黑匣子,我们输入例如手写数字的图像(作为像素值数组),然后我们得到这些数字对应的数字:

但是这里到底发生了什么?假设我们逐渐模糊了一个数字。 有一段时间,我们的函数仍然可以“识别”它,在这里它是“2”。但很快它就“失去了它”,并开始给出“错误”的结果:

但为什么说这是一个“错误”结果呢?在这种情况下,我们知道我们通过模糊“2”得到了所有图像。但如果我们的目标是建立一个人类识别图像的模型,那么真正要问的问题就是,如果某个人看到这些模糊的图像,而不知道它来自哪里,那么他会做什么。

如果我们从函数中得到的结果通常与人类所说的一致,那么我们就有了一个“好的模型”。重要的科学事实是,对于像这样的图像识别任务,我们现在基本上知道如何构建执行此操作的函数。

我们能“用数学证明”它们有效吗?不能。因为要做到这一点,我们必须对我们人类正在做的事情有一个数学理论。取“2”图像并更改几个像素。我们可能会想象只有几个像素“不合适”,我们仍然应该认为图像是“2”。但这应该到什么程度呢?这是一个关于人类视觉感知的问题。而且,是的,对于蜜蜂或章鱼来说,答案无疑会有所不同——而且对于假定的外星人来说,答案可能会完全不同。

神经网络

好吧,那么我们用于图像识别等任务的典型模型究竟是如何工作的呢?目前最流行,也是最成功的方法就是使用神经网络。神经网络是在20世纪40年代发明的,其形式与今天的使用形式非常接近,它可以被认为是对大脑工作方式的简单理想化。

人类大脑中大约有1,000亿个神经元(神经细胞),每个神经元都能产生每秒高达1,000次的电脉冲。这些神经元连接在一个复杂的网络中,每个神经元都有树状的分支,允许它将电信号传递给数千个其他神经元。粗略估计,任何给定神经元在给定时刻是否产生电脉冲取决于它从其他神经元接收到的脉冲——不同的连接有不同的“权重”。

当我们“看到一幅图像”时,所发生的事情是,当图像中的光子落在眼睛后部的“光感受器”细胞上时,它们会在神经细胞中产生电信号。这些神经细胞与其他神经细胞相连,最终信号通过一整个序列的神经元层。正是在这个过程中,我们识别”了图像,最终“形成了我们正在“看到一个2”的想法(也许最后会做一些事情,如大声说 "2 "这个词)。

上一节中的“黑匣子”函数是此类神经网络的“数学化”版本。它恰好有11层(尽管只有 4个“核心层”):

这个神经网络没有什么特别的“理论上推导出来的”; 早在 1998 年,它只是作为一项工程构建的,并且发现它是颗可行的。(当然,这与我们如何描述我们的大脑是通过生物进化过程产生的并没有太大区别。)

但是像这样的神经网络是如何“识别事物”的呢?关键在于吸引器的概念。假设我们有1和2的手写图像:

我们想让所有的1都“被吸引到一个地方”,而所有的2都“被吸引到另一个地方”。或者,换一种方式,如果一张图像在某种程度上“更接近于1”而不是2,我们希望它最终在“1的位置”,反之亦然。

打个简单的比方,假设我们在平面上有一些用点来表示的位置(在现实生活中,它们可能是咖啡店的位置)。然后我们可以想象,从平面上的任何一点出发,我们总是希望在最近的点结束(即我们总是去最近的咖啡店)。我们可以通过将平面划分为由理想化的分水岭”分隔的区域(“吸引盆地”)来表示这一点:

我们可以将其视为在执行一种“识别任务”,在该任务中,我们不是在做识别给定图像“看起来最像”哪个数字之类的事情,而是非常直接地看到给定图像最接近哪个点。(我们在这里展示的“Voronoi 图”设置在 2D 欧几里得空间中分离点;数字识别任务可以被认为是在做一些非常相似的事情——但却是在一个由每张图像中所有像素的灰度等级形成的784维空间中。)

那么,我们如何使一个神经网络 "完成识别任务"?让我们考虑一下这个非常简单的案例:

我们的目标是获取对应于位置 {x,y} 的“输入”——然后将其“识别”为与它最接近的三个点中的任何一个。或者,换句话说,我们希望神经网络计算 {x,y} 的函数,例如:

那么我们如何使用神经网络做到这一点呢? 最终,神经网络是理想化“神经元”的连接集合——通常分层排列——一个简单的例子是:

每个“神经元”都被有效地设置为评估一个简单的数值函数。为了“使用”网络,我们只需在顶部输入数字(比如我们的坐标x和y),然后让每一层的神经元“评估它们的功能”,并将结果通过网络向前输入,最终在底部产生最终结果:

在传统的(受生物启发的)设置中,每个神经元实际上都有一组来自上一层神经元的“传入连接”,每个连接都被分配了一定的“权重”(可以是正数或负数)。给定的神经元的值是通过将“先前神经元”的值乘以其相应的权重来确定的,然后将这些值相加并乘以一个常数,最后应用一个“阈值”(或“激活”)函数。用数学术语来说,如果一个神经元有输入x = {x1, x2 ...},那么我们计算f[w . x + b],其中通常为网络中的每个神经元选择不同的权重w和常数b;函数f通常是相同的。

计算w . x + b只是一个矩阵乘法和加法的问题。激活函数”f引入了非线性(并最终导致了非线性行为)。通常使用各种激活函数;这里我们只使用Ramp(或ReLU):

最终,每个神经网络都只对应于一些整体的数学函数——尽管写出来可能有点乱。对于上面的示例,它将是:

ChatGPT 的神经网络也恰好对应于这样的数学函数——但实际上有数十亿项。

但是让我们回到单个神经元。以下是有两个输入(代表坐标x和y)的神经元可在选择不同权重和常数(以及 Ramp 作为激活函数)进行计算的函数示例:

让我们看看其他神经网络的情况。在每种情况下,正如我们稍后将解释的那样,我们都在使用机器学习来找到最佳的权重选择。然后我们在这里展示带有这些权重的神经网络计算的结果:

现在,“正确答案”是什么就更不清楚了。不管输入是什么,神经网络都会生成一个答案。事实证明,这是一种与人类行为相一致的方式。正如我上面所说的,这不是一个我们可以“从第一原理推导”的事实。这只是经验之谈,少在某些领域是这样。但这是神经网络有用的一个关键原因:它们以某种方式捕获了“类似人类”的做事方式。

但总的来说,我们可能会说神经网络正在“挑选出某些特征”,并利用这些特征来确定图像的内容。 但是那些特征是我们为之命名的吗? 大多数情况下不是。

我们的大脑也在使用类似的特征吗?大多数情况下我们是不知道的。但值得注意的是,像我们在这里展示的神经网络的前几层,似乎可以挑出图像的某些方面(如物体的边缘),这些方面似乎与我们知道的由大脑中第一层视觉处理挑出的特征相似。

但假设我们想在神经网络中建立一个“猫识别理论”。我们可以说:“看,这个特定网络做到了”——这立即给了我们一些“问题有多难”的感觉(例如,可能需要多少神经元或层)。但至少到目前为止,我们还没有办法对网络正在做的事情进行“叙述性描述”。也许这是因为它确实在计算上是不可简化的,除了除了明确地跟踪每个步骤之外,没有一般的方法来找出它的作用。也可能只是我们还没有“弄清楚科学”,还没有确定“自然法则”,让我们能够总结出正在发生的事情。

当我们谈论用ChatGPT生成语言时,我们会遇到同样的问题。而且同样不清楚是否有办法“总结它在做什么”。但是语言的丰富性和细节(以及我们在这方面的经验)可能会让我们比图像走得更远。

机器学习和神经网络的训练

到目前为止,我们一直在谈论那些 "已经知道 "如何完成特定任务的神经网络。但是,神经网络之所以如此有用(估计也是在大脑中),是因为它们不仅在原则上可以完成各种任务,而且可以逐步 "根据实例训练 "来完成这些任务。

当我们制作一个神经网络来区分猫和狗时,我们实际上不需要写一个程序来明确地找到胡须;相反,我们只需展示大量的猫和狗的例子,然后让网络从这些例子中“机器学习”如何区分它们。

重点是经过训练的网络从它所展示的特定示例中“概括”。正如我们在上面看到的那样,网络并不是简单地让网络识别它所看到的猫咪图像的特定像素模式;相反,神经网络以某种方式设法根据我们认为是某种“一般的猫性”的基础上来区分图像。

那么神经网络训练实际上是如何运行的呢?从本质上讲,我们一直在尝试寻找能够使神经网络成功重现我们所给的例子的权重。然后,我们依靠神经网络以一种“合理”的方式在这些例子之间“插入”(或“概括”)。

让我们看一个比上面的最近点问题更简单的问题。 让我们试着让神经网络来学习这个函数:

对于这项任务,我们需要一个只有输入和输出的网络,例如:

但我们应该使用什么权重呢?对于每组可能的权重,神经网络都会计算出一些函数。下面是它对一些随机选择的权重集所做的处理:

我们可以清楚地看到,在这些情况下,它甚至都没有接近再现我们想要的函数。那么,我们如何找到能够重现该函数的权重呢?

基本思想是提供大量“输入→输出”示例以“学习”,然后尝试找到能够重现这些示例的权重。 以下是使用逐渐增多的示例执行此操作的结果:

在这个“训练”的每个阶段,网络中的权重都被逐步调整,我们看到,最终我们得到了一个能够成功再现我们想要的函数的网络。那么,我们如何调整权重呢?基本的想法是在每个阶段查看我们离我们想要的函数“还有多远”,然后以这样的方式更新权重,使之更接近。

为了找出“我们有多远”,我们计算了通常称为“损失函数”(或有时称为“成本函数”)的东西。这里我们使用一个简单的(L2)损失函数,它只是我们得到的值与真实值之间的差值的平方和。我们看到的是,随着训练过程的进行,损失函数逐渐减少(遵循针对不同任务的不同特定“学习曲线”),直到我们达到一个点,网络(至少是一个很好的近似值)成功地再现了我们想要的函数:

好了,最后一个需要解释的部分是如何调整权重以减少损失函数。正如我们所说,损失函数我们提供了我们得到的值和真实值之间的“距离”。但是“我们得到的值”在每个阶段都是由当前版本的神经网络和其中的权重决定的。但现在假设权重是变量,比如wi。我们想知道如何调整这些变量的值,以最小化依赖于它们的损失。

例如,想象一下(对实践中使用的典型神经网络进行了不可思议的简化),我们只有两个权重w1和w2。然后我们可能会损失w1和w2的函数,如下所示:

数值分析提供了多种技术来寻找这种情况下的最小值。但是,一种典型的方法是,从之前的 w1、w2开始,逐步遵循最陡峭的下降路径:

就像水从山上流下来一样,唯一能保证的是,这个过程会在表面的某个局部最小值(高山湖泊”)结束;它很可能不会达到最终的全球最小值。

在“重量景观”上找到最陡下降的路径并不明显。但是微积分可以帮助我们。正如我们上面提到的,人们总是可以将神经网络视为计算一个数学函数——这取决于它的输入和它的权重。 但现在考虑区分这些权重。事实证明,微积分的链式法则实际上可以让我们“解开”神经网络中连续层所做的操作。其结果是,我们可以,或者说至少在某些局部近似中——“反转”神经网络的操作,并逐步找到将与输出相关的损失最小化的权重。

上图显示了在只有 2 个权重的不切实际的简单情况下,我们可能需要进行最小化。但事实证明,即使有更多的权重(ChatGPT使用1,750亿),仍然可以进行最小化,至少达到某种程度是近似的。事实上,2011年左右发生的“深度学习”的重大突破与以下发现有关,即在某种意义上,当涉及很多权重时,比当涉及的权重很少时更容易进行(至少近似)最小化。

换句话说——有点违反直觉——用神经网络解决更复杂的问题比解决更简单的问题更容易。 大致原因似乎是,当一个人有很多“权重变量”时,他就有一个高维空间,“有很多不同的方向”,可以将其引向最小值——如果变量更少,就更容易陷入局部最小值(“高山湖泊”),没有“走出去的方向”。

值得指出的是,在典型情况下,有许多不同的权重集合,它们都将给神经网络提供几乎相同的性能。而在实际的神经网络训练中,通常会有很多随机的选择,导致“不同但等效的解决方案”,如下所示:

但是每个这样的“不同的解决方案”至少会有略微不同的行为。如果我们要求,比如说,在我们提供训练示例的区域之外进行“外推”,我们会得到截然不同的结果:

但是哪一个是 "正确的 "呢?真的没有办法说。它们都 "与观察到的数据一致"。但它们都对应着不同的 "先天 "方式来 "思考 "如何在 "盒子外 "做什么。有些对我们人类来说似乎比其他的“更合理”。

神经网络训练的实践与理论知识

特别是在过去十年中,在训练神经网络的艺术方面取得了许多进步。而且,它基本上是一门艺术。 有时回顾过去,人们至少可以看到一些正在进行的事情的“科学解释”。但大多数事情都是通过反复试验和失败发现的,添加的想法和技巧,逐渐建立了关于如何使用神经网络的重要知识。

有几个关键部分。首先是对于特定任务应该使用哪种神经网络架构的问题。然后是一个关键问题,即如何获取用于训练神经网络的数据。并且越来越多的人不再处理从头开始训练网络;相反,一个新网络可以直接合并另一个已经训练过的网络,或者至少可以使用该网络为自己生成更多训练示例。

人们可能认为,每一种特定任务都需要不同的神经网络架构。但我们发现,即使是表面上截然不同的任务,相同的架构似乎也能发挥作用。在某种程度上,这让人想起了通用计算的想法(以及我的计算等价原则)。但是,正如我稍后将讨论到的内容所说,我认为这更多地反映了这样一个事实,即我们通常试图让神经网络执行的任务“类似人类”的任务,而神经网络可以捕获相当普遍的“类似人类的过程”。

在早期的神经网络中,人们倾向于认为应该“让神经网络做尽可能少的事情”。例如,在将语音转换为文本时,人们认为应该首先分析语音的音频,将其分解为音素等等。但我们发现,至少对于“类人任务”来说,通常更好的做法是尝试在“端到端问题”上训练神经网络,让它自己“发现”必要的中间特征、编码等。

还有一种观点认为,应该在神经网络中引入复杂的单个组件,让它实际上“明确地实现特定的算法思想”。但事实再次证明,这在很大程度上是不值得的;相反,最好只是处理非常简单的组件,让它们“自我组织”(尽管通常以我们无法理解的方式),以实现与那些算法思想相当的东西。

这并不是说不存在与神经网络相关的“结构化思想”。例如,具有局部连接的2D神经元阵列似乎至少在处理图像的早期阶段非常有用。专注于“按顺序回顾”的连接模式似乎很有用——我们稍后会看到——在处理人类语言之类的事情时,例如在ChatGPT中。

但神经网络的一个重要特征是,就像一般的计算机一样,它们最终只是处理数据。目前的神经网络——用目前的方法进行神经网络训练——专门处理数字阵列的问题。但在处理过程中,这些数组可以被完全重新排列和重塑。举个例子,我们用于识别上述数字的网络从一个2D“类图像”阵列开始,迅速“增厚”到许多通道,但随后“集中”到一个1D数组,最终将包含代表不同可能输出数字的元素:

但是,好吧,如何判断完成一项特定任务需要多大的神经网络?这是一门艺术。在某种程度上,关键是要知道“任务有多难”。但对于类人任务来说,这通常很难估计是的,可能有一种系统的方法可以通过计算机非常“机械地”完成任务。但很难知道是否存在人们可能认为的技巧或捷径,可以让人们至少在“类人水平”上更容易地完成任务。可能需要列举一个巨大的游戏树才能“机械地”玩某个游戏;但可能有一种更容易(“启发式”)的方式来实现“人类水平的游戏”。

当人们在处理微小的神经网络和简单的任务时,有时可以明确地看到 "从这里无法到达那里"。例如,在上一节的任务中,使用几个小型神经网络似乎可以做到最好:

而我们看到的是,如果网络太小,它就无法再现我们想要的功能。但如果超过一定的规模,它就没有问题了——至少如果一个人用足够长的时间和足够多的例子对它进行训练。顺便说一句,这些图片说明了一个神经网络知识:如果中间有一个“挤压”迫使一切都通过较小的中间神经元数量,那么我们通常可以用较小的网络来解决。(值得一提的是,“无中间层”或所谓的“感知器”——网络只能学习基本的线性函数——但只要有一个中间层,原则上总是可以更好地近似任何函数,如果有足够的神经元,尽管为了使其易于训练,通常会有某种正则化或规范化。)

假设我们已经确定了某种神经网络架构。现在有一个问题,就是如何获得数据来训练网络。围绕着神经网络和一般机器学习的许多实际挑战都集中在获取或准备必要的训练数据上。在许多情况下(“监督学习”),人们希望获得输入和输出的明确示例。因此,举例来说,人们可能希望通过图像中的内容或一些其他属性来标记图像。也许我们必须明确地去做-——通常是付出很大的努力去做标记。但通常情况下,我们可以利用一些已经完成的东西,或者将其作为某种代理。因此,举例来说,我们可以使用网络上已经提供的图片的alt标签。或者,在另一个领域,我们可以使用为视频创建的封闭式字幕。或者在语言翻译训练中,可以使用不同语言的网页或其他文件的平行版本。

你需要向神经网络展示多少数据来训练它完成一项特定任务?同样,这很难从第一原理上估计。当然,通过使用“迁移学习”来“迁移”诸如已经在另一个网络中学习过的重要特征列表的东西,可以大大降低要求。但一般来说,神经网络需要“看到大量的例子”才能训练好。至少对于某些任务来说,神经网络知识中很重要的一点是,这些示例可以极有可能是重复的。事实上,一遍又一遍地向神经网络展示所有的例子是一个标准策略。在每一个“训练回合”(或“epochs”)中,神经网络至少会处于一个略微不同的状态,以某种方式“提醒”它某个特定的例子对于让它“记住那个例子”是很有用的。(是的,也许这类似于人类记忆中的重复的作用)。

但通常只是一遍又一遍地重复同样的例子是不够的。还需要演示示例的神经网络变化。而神经网络知识理论的一个特点是,那些“数据增强”变化并不需要复杂才能有用。只要用基本的图像处理稍微修改一下图像,就可以使它们在神经网络训练中“像新的一样”。同样地,当一个人没有真正的视频等来训练自动驾驶汽车时,他可以继续在一个类似视频游戏的模型环境中运行模拟来获取数据,而不需要真实世界场景的所有细节。

像ChatGPT这样的东西怎么样?它有一个很好的特性,那就是它可以进行“无监督学习”,这使得它更容易从样本中得到训练。回想一下,ChatGPT的基本任务是找出如何继续给定的一段文本。因此,要获得它的“训练示例”,我们所要做的就是获取文本,屏蔽掉它的结尾,然后将其用作“训练的输入”-“输出”是完整的、未屏蔽的一段文字。我们稍后会详细讨论这个问题,但重点是,与学习图像中的内容不同,不需要“明确的标签”;ChatGPT 实际上可以直接从给定的任何文本示例中学习。

那么神经网络的实际学习过程是怎样的呢?归根结底,这一切都是为了确定什么权重能够最好地捕捉所给的训练实例。有各种详细的选择和“超参数设置”(之所以被称为超参数,是因为可以把权重看作是 "参数"),可以用来调整如何完成这一过程。损失函数有不同的选择(平方和、绝对值和等)。有不同的方法来将损失最小化(每一步要在权重空间中移动多远等)。然后还有一些问题,比如要显示多少“批次”的例子才能得到一个人试图最小化的每个连续损失的估计。人们可以应用机器学习(就像我们在Wolfram Language中所做的那样)来自动化机器学习,并自动设置超参数之类的东西。

但最终,整个训练过程的特点是通过观察损失是如何逐渐减少的(就像这个Wolfram Language的小型训练进度监视器):

而人们通常看到的是,损失在一段时间内减少,但最终在某个恒定值上趋于平缓。如果这个值足够小,那么可以认为训练是成功的;否则,这可能是一个应该尝试改变网络结构的标志。

有人能说出“学习曲线”变平需要多长时间吗?与许多其他事物一样,似乎存在近似的幂律比例关系,这取决于神经网络的大小和一个人使用的数据量。但总的结论是,训练神经网络很困难——并且需要大量的计算工作。实际上,绝大多数工作都花在了对数字数组的操作上,这是GPU擅长的——这就是为什么神经网络训练通常受到GPU可用性的限制。

在未来,是否从根本上会有更好的方法来训练神经网络,或者通常做神经网络所做的事情?我想几乎可以肯定。神经网络的基本思想是用大量简单的(本质上相同)组件创建一个灵活的“计算结构”,并使这个“结构”可以逐步修改以从示例中学习。在目前的神经网络中,人们基本上是使用微积分的思想——应用于实数——来进行增量修改。 但越来越清楚的是,拥有高精度数字并不重要;即使使用当前方法,8位或更少可能就足够了。

对于像细胞自动机这样的计算系统,基本上是在许多单独的比特上并行运行的,一直不清楚如何进行这种增量修改,但没有理由认为这是不可能的。 事实上,就像“2012 年的深度学习突破”一样,这种增量修改在更复杂的案例中可能比在简单的案例中更容易。

神经网络——也许有点像大脑——被设置为具有基本固定的神经元网络,修改的是它们之间连接的强度(“权重”)。(也许至少在年轻的大脑中,大量全新的连接也可以增长。)虽然这对生物学来说可能是一个方便的设置, 但并不清楚它是否是实现我们所需函数的最佳方式。而涉及渐进式网络重写的东西(也许让人想起我们的物理项目)最终可能会更好。

但即使在现有神经网络的框架内,目前也存在一个关键限制:现在所做的神经网络训练基本上是连续的,每批示例的效果都会被传播回来更新权重。事实上,对于当前的计算机硬件而言——即使考虑到GPU——大多数神经网络在训练期间的大部分时间都是“空闲”的,每次只更新一个部分。从某种意义上来说,这是因为我们当前的计算机往往具有与其CPU(或 GPU)分离的内存。但在大脑中,它可能是不同的——每个“记忆元素”(即神经元)也是一个潜在的活跃计算元素。如果我们能够以这种方式设置我们未来的计算机硬件,那么训练就有可能更加高效。

“当然,一个足够大的网络可以做任何事情!”

ChatGPT之类的功能似乎令人印象深刻,以至于人们可能会想象,如果可以“继续”训练越来越大的神经网络,那么它们最终将能够“无所不能”。如果一个人关心的是人类可以直接思考的事物,那么情况很可能就是这样。但过去数百年的科学经验告诉我们,有些事情可以通过形式化的过程来解决,但人类的直接思维却不容易理解。

但计算的不可简化性的发现意味着这并不总是有效的。相反,有些过程——可能就像下面这个过程——要想知道发生了什么,就必然需要对每个计算步骤进行追踪:

为此我们有了电脑计算机。有了计算机,我们可以很容易地做长时间的、计算上不可简化的事情。关键是这些通常没有捷径。

我们通常用大脑做的事情大概都是为了避免计算不可约性而特意选择的。在一个人的大脑中做数学需要特别的努力。在实践中,仅仅在一个人的大脑中“思考”任何重要程序的操作步骤基本上是不可能的。

是的,我们可以记住许多特定的计算系统中发生的具体例子。也许我们甚至可以看到一些(“计算上可简化的”)模式,这些模式可以让我们进行一些概括。但关键是,计算不可约性意味着我们永远无法保证不会发生意想不到的事情——只有通过明确的计算,你才能知道在任何特定情况下实际发生了什么。

最后,可学习性和计算的不可约性之间存在根本的紧张关系。学习实际上是通过利用规律性来压缩数据。但计算不可约性意味着最终可能存在的规律性是有限的。

作为一个实际问题,我们可以想象将小型计算设备(如细胞自动机或图灵机等)构建到神经网络等可训练系统中。事实上,这样的设备可以作为神经网络的好“工具”,就像Wolfram|Alpha可以是ChatGPT的好工具。但计算不可约性意味着人们不能指望“进入”这些设备并让它们学习。

或者换句话说,能力和可训练性之间存在最终权衡:你越想让系统“真正利用”其计算能力,它就越会表现出计算的不可约性,而其可训练性就越低。而它越是从根本上可训练,它进行复杂计算的能力就越小。

(对于目前的ChatGPT,情况其实要极端得多,因为用来生成输出的每个token的神经网络是一个纯粹的“前馈”网络,没有循环,因此没有能力做任何具有非复杂 "控制流 "的计算)

当然,有人可能想知道能够进行不可约计算是否真的很重要。事实上,在人类历史的大部分时间里,这并不是特别重要。但是我们的现代技术世界是建立在至少使用数学计算的工程之上的,而且越来越多地使用更普遍的计算。如果我们看一下自然界,它充满了不可简化的计算——我们正在慢慢理解如何模拟和使用我们的技术目的。

是的,神经网络当然可以注意到自然界中的各种规律性,我们也可以通过“独立的人类思维”轻松地注意到这些规律性。但是,如果我们想解决属于数学或计算科学范畴的事情,神经网络是无法做到的——除非它有效地“将”“普通”计算系统“用作工具”。

但所有这一切都可能令人困惑。在过去,有很多任务--包括写文章--我们认为对计算机来说“从根本上来说太难了”。 现在我们看到它们是由ChatGPT等完成的,我们倾向于突然认为计算机一定变得更加强大了,特别是超越了它们基本上已经能够做到的事情(比如逐步计算像细胞自动机这样的计算系统的行为)。

但这并不是正确的结论。计算上不可约的过程仍然是计算上不可约的,而且对计算机来说仍然是根本性的困难-——即使计算机可以轻易地计算它们的每个步骤。相反,我们应该得出的结论是,我们人类可以完成的,但我们认为计算机无法完成的任务,比如写文章,实际上在某种意义上比我们想象的更容易计算。

换句话说,神经网络之所以能够成功地写出一篇文章,是因为写一篇文章被证明是一个比我们想象的“计算更浅”的问题。 从某种意义上说,这使我们更接近“拥有一种理论”,即我们人类如何设法完成诸如撰写文章或一般情况下处理语言的事情。

如果你有一个足够大的神经网络,那么,是的,你可能能够做任何人类能够轻易做到的事情。但是,你不会捕捉到自然界一般能做的事情-——或者我们从自然界创造出来的工具可以做的事情。而正是这些工具的使用--无论是实用的还是概念性的——-使我们在近几个世纪里能够超越 "纯粹的独立人类思想维 "所能达到的界限,并为人类的目的捕获更多的物理和计算宇宙中的东西。

嵌入的概念

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

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

而且,是的,我们所看到的在捕捉典型的日常印象方面做得非常好。但是我们怎样才能构建这样的嵌入呢?大致的想法是查看大量文本(这里有50亿个单词来自网络),然后看不同的词出现的“环境”有多相似。例如,“鳄鱼”和“鳄鱼”通常会在其他相似的句子中互换出现,这意味着它们将被放置在嵌入的附近。但是“turnip”和“eagle”不会出现在其他类似的句子中,因此它们在嵌入中会相距很远。

但是如何使用神经网络实际实现这样的东西呢? 让我们先谈谈嵌入,不是文字嵌入,而是图像嵌入。我们想找到一些方法,通过数字列表来描述图像,以便为“我们认为相似的图像”被分配到相似的数字列表中

我们如何判断我们是否应该“考虑图像相似”?好吧,如果我们的图像是手写数字,或者它们是相同的数字,我们可能会“认为两个图像是相似的”。之前我们讨论了一个经过训练可以识别手写数字的神经网络。 我们可以认为这个神经网络被设置为在其最终输出中将图像放入10个不同的容器中,每个数字一个容器。

但是,如果我们在做出“它是‘4’”的最终决定之前“拦截”神经网络内部正在发生的事情呢? 我们可能期望在神经网络内部,有一些数字将图像描述为“大部分像4,但有点像2”或类似的东西。而我们的想法是选择这些数字作为嵌入的元素。

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

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

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

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

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

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

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

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

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

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

而标准的此类任务是“单词预测”。 假设我们得到了“the ___ cat”。基于大量文本语料库(比如网络文本内容),不同单词可能“填空”的概率是多少?或者换句话说,给定“___ black ___”,不同“侧翼词”的概率是多少?

我们如何为神经网络设置这个问题?归根结底,我们必须用数字来表述一切。一种方法是为大约 5万个常用词中的每一个分配一个单独的编号。 例如,“the”可能是914,而“cat”(前面有一个空格)可能是3,542。(这些是GPT-2所使用的实际数字。)所以对于 "the ___ cat "问题,我们的输入可能是{914, 3542}。输出应该是什么样子的呢?好吧,它应该是一个由5万个左右的数字组成的列表,有效地给出了每个可能的“填充”词的概率。再一次,为了找到一个嵌入,我们要在神经网络“得出结论”之前“拦截”它的“内部”——然后选择在那里出现的数字列表,我们可以把它看作是 "每个词的特征"。

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

在它们的原始形式中,这些“嵌入向量”提供的信息非常少。例如,这是 GPT-2 为三个特定单词生成的原始嵌入向量:

如果我们做诸如测量这些向量之间的距离之类的事情,那么我们就可以找到诸如单词“接近性”之类的事情。 稍后我们将更详细地讨论我们可能认为这种嵌入的“认知”意义是什么。 但现在更重点是我们有一种方法可以有效地将单词转换为“神经网络友好”的数字集合。

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

(严格地说,ChatGPT不处理单词,而是处理“代币”——方便的语言单位,可能是整个单词,也可能只是像“pre”、“ing”或“ized”这样的片段。使用代币可以使ChatGPT更容易地处理罕见的、复合的和非英语的词汇,有时,无论好坏,都可以发明新的词汇。)

内部聊天GPT

好的,我们终于准备好讨论ChatGPT内部的内容了。是的,最终,它是一个巨大的神经网络——目前是所谓的GPT-3网络的一个版本,它有1,750亿个权重。在许多方面,这是一个与我们讨论过的其他网络非常相似的神经网络。但它是一个专门为处理语言而设置的神经网络。它最显著的特征是一个叫做 "转化器 "的神经网络架构。

那么这种完全连接的网络(大概)是矫枉过正的。 因此,例如,在处理图像的早期阶段,通常使用所谓的卷积神经网络(“convnets”),其中神经元有效地布置在类似于图像中的像素的网格上——并且只与网格上附近的神经元相连。

转换器的想法是对构成一段文本的标记序列做一些至少有点相似的事情。 但是转化器并不只是在序列中定义一个可以有连接的固定区域,而是引入了“注意力”的概念——以及对序列的某些部分比其他部分更“注意”"的概念。 也许有一天,启动一个通用的神经网络并通过训练进行所有定制会将变得有意义。但至少就目前而言,将事情“模块化”在实践中似乎很关键——就像转换器所做的那样,可能就像我们的大脑所做的那样。

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

它的操作分为三个基本阶段。首先,它获取与迄今为止的文本相对应的标记序列,并找到代表这些标记的嵌入(即一个数字阵列)。然后,它以“标准神经网络方式”对这一嵌入进行操作,数值“波及”网络中的连续,以产生一个新的嵌入(即一个新的数字阵列)。然后,它从这个数组的最后一部分中生成一个大约5万个值的数组,这些值变成了不同可能的下一个标记的概率。(碰巧的是,使用的标记数量与英语中的常见单词数量大致相同,尽管只有大约3,000个标记是完整的单词,其余的是片段。)

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

然而,架构的设置方式上也有很多细节,反映了各种经验和神经网络知识。而且,尽管这肯定会成为杂草,但我认为讨论其中的一些细节很有用,尤其是了解构建像 ChatGPT 这样的东西需要什么。

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

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

那么,在经历了所有这些注意力区块之后,转化器的净效果是什么?从本质上讲它是将标记序列的原始嵌入集合转换为最终集合。然后,ChatGPT 的特定工作方式是选取该集合中的最后一个嵌入,并将其“解码”以生成下一个应该出现的代币的概率列表。

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

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

它与典型的计算系统(如图灵机)的设置截然不同,在图灵机中,结果由相同的计算元素反复“再处理”。在这里,至少在生成一个特定的输出符号时,每个计算元素(即神经元)只被使用一次。

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

但让我们回到ChatGPT的核心:被重复用于生成每个代币的神经网络。在某种程度上,它非常简单:一整套相同的人工神经元。网络的某些部分仅由(“完全连接”)的神经元层组成,其中某一层的每个神经元都与前一层的每个神经元相连(具有一定权重)。但尤其是在它的转换器架构中,ChatGPT的部分结构更加复杂,其中仅连接不同层上的特定神经元。 (当然,我们仍然可以说“所有神经元都是相连的”——但有些神经元的权重为零)

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

如果我们看一下ChatGPT的最长路径,大约有400个(核心)层参与其中,这在某些方面并不是一个很大的数字。但是有数百万个神经元——总共有1,750亿个连接,因此1,750亿个权重。需要认识到的一点是,每当ChatGPT生成一个新的代币时,它都必须对这些权重中的每一个进行计算。在实现方面,这些计算可以“按层”组织成高度并行的阵列操作这些操作可以方便地在GPU上完成。但是,对于产生的每一个代币,仍然要进行1,750亿次计算(最后还要多一点).因此,使用ChatGPT生成一个长的文本可能需要一段时间也就不足为奇了。

但最终值得注意的是,所有这些操作——它们单独来看都很简单——可以以某种方式共同完成如此出色的“类似人类”的文本生成工作。必须再次强调的是,没有“最终的理论原因”来解释这样的工作 事实上,正如我们将要讨论的那样,我认为我们必须将此视为一个可能令人惊讶的科学发现:在某种程度上,在像ChatGPT这样的神经网络中,有可能捕捉到人类大脑在生成语言时所做的事情的本质。

ChatGPT的训练

好的,我们现在已经概述了 ChatGPT 设置后的工作方式。但是它是如何设置的呢?它的神经网络中的所有1,750亿个权重是如何确定的?基本上,它们是非常大规模训练的结果,基于大量的文本语料库——在网络上,在书籍中等等——由人类编写。正如我们所说,即使给定了所有训练数据,神经网络能否成功生成“类似人类”文本当然也不是显而易见的。而且,似乎需要详细的工程来实现这一目标。但 ChatGPT 的最大惊喜和发现是它完全有可能。而且实际上,一个“只有”1,50 亿个权重的神经网络可以为人类书写的文本建立一个“合理的模型”。

在现代,有很多人类编写的文本是以数字形式存在的。公共网络至少有数十亿个人工编写的页面,总共可能有一万亿个单词的文本。如果其中包含非公开网页,则该数字可能至少要大100倍。到目前为止,已经提供了超过500万本数字化书籍可供使用(在已经出版的大约1亿本图书中),又提供了另外1,000亿左右的文字。这甚至还没有提到从视频或语音等提取的大量文本。(作为个人比较,我一生发表的材料总字数不到300万字,而在过去的30年里,我写了大约1,500万字的电子邮件,总共输入了大约5,000万个字。在过去的几年里,我在直播中说了超过1,000万个字。而且,是的,我会用所有这些来训练一个机器人。)

但是,好吧,鉴于所有这些数据,我们如何从中训练出一个神经网络呢?基本过程与我们在上面的简单示例中讨论的非常相似。你提出一批示例,然后调整网络中的权重,使网络在这些示例上的误差(“损失”)降至最小。从错误中“反向传播”的主要问题是,当每次执行此操作时,网络中的每个权重通常至会发生一点点变化,并且只有很多权重需要处理。(实际的“反向计算”通常只比正向计算难一个小常数)。

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

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

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

超越基础训练

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

一旦它从显示的原始文本语料库完成“原始训练”,ChatGPT中的神经网络就准备好开始生成自己的文本,继续继续等。但是,虽然由此产生的结果通常看起来是合理的,但它们往往——尤其是对于较长的文本——以通常非常不像人类的方式“游荡”。这不是人们可以通过对文本进行传统统计而轻易检测到的东西。但这是真正阅读文本的人很容易注意到的东西。

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

总的来说,有趣的是,“最初训练的”网络似乎只需要很少的“戳”才能让它有效地朝着特定的方向发展。人们可能认为,要让网络表现得好像它“学到了一些新东西”一样,就必须运行训练算法、调整权重等。

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

事实上,就像人类一样,如果你告诉它一些完全不符合它所知道的框架的、奇怪和意想不到的东西,它似乎无法成功地“整合”。只有当它基本上以一种相当简单的方式在它已有的框架之上运行时,它才能“整合”它。

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

真正让 ChatGPT 发挥作用的是什么?

人类的语言,以及产生语言的思维过程——似乎一直代表着一种复杂性的顶峰。事实上,人类的大脑——“仅仅”有1,000亿左右的神经元网络(可能还有100万亿个连接)——能够负责这项工作。也许,人们可能会想象,除了神经元网络之外,大脑还有更多的东西——比如一些新的未被发现的物理学层。但现在通过ChatGPT,我们获得了一条重要的新信息:我们知道,一个纯粹的人工神经网络,其连接数量与大脑神经元数量相当,能够出色地生成人类语言。

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

那么这些法律可能是什么样的呢?最终,他们必须为我们提供某种语言,以及我们用它说的话是如何组合在一起的步骤方法。稍后我们将讨论“深入了解ChatGPT”如何能够为给我们一些这方面的提示,以及我们从构建计算语言中了解到的知识是如何为我们指明前进的道路的。但首先让我们讨论两个众所周知的例子,说明什么是“语言法则”——以及它们与 ChatGPT 的操作有何关系。

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

ChatGPT 对此类规则没有任何明确的“了解”。但在训练过程中,它以某种方式隐含地“发现”了它们,然后似乎熟练地跟随这种语法方式。那么这是如何工作的呢? 在“大局”层面上还不清楚。

那么,这对像ChatGPT和像英语这样的语言的语法意味着什么呢?在英语中,能够根据当地的单词选择和其他提示“猜测”语法上适合的内容要现实得多。而且,神经网络在这方面要好得多——尽管它可能会错过一些“形式上正确”的情况,而人类也可能会错过。但主要的一点是,语言有一个整体的句法结构这一事实,以及它所暗示的所有规律性,在某种意义上限制了神经网络必须学习的“程度”。 一个关键的“类自然科学”观察是,像ChatGPT中的神经网络的转换器架构,似乎能够成功地学习所有人类语言中似乎都存在(至少在某种程度上是近似的)的那种嵌套树状的句法结构:

但是有没有一种通用的方法来判断一个句子是否有意义?这方面没有传统的整体理论。但我们可以将 ChatGPT 视为在用来自网络等的数十亿(可能有意义的)句子进行训练后隐含地“开发了一套理论”。

这个理论可能是什么样的?好吧,有一个小小的角落,基本上两千年来一直为人所知,这是合乎逻辑的。当然,在亚里士多德发现它的对偶形式中,逻辑基本上是一种说法,即遵循某些模式的句子是合理的,而其他句子则不是。

但除了逻辑这个狭隘的例子之外,对于如何系统地构建(或识别)甚至是合理的有意义的文本,又能说些什么呢?是的,像Mad Libs这样的东西使用非常具体的“短语模板”。但不知道什么原因,ChatGPT 隐含了一种更普遍的方法来做到这一点。 也许除了“当你有1,750 亿个神经网络权重时,它会以某种方式发生”之外,对于如何做到这一点没有什么可说的。但我强烈怀疑还有一个更简单、更强大的故事。

意义空间和语义运动定律

我们在上面讨论过,在 ChatGPT 中,任何一段文本都可以有效地由一组数字阵列表示,我们可以将这些数字视为某种“语言特征空间”中的一个点的坐标。因此,当ChatGPT继续一段文本时,这相当于在语言特征空间中追踪一个轨迹。但是现在我们可以问是,什么让这个轨迹对应于我们认为有意义的文本。是否可能存在某种“语义运动定律”来定义(或至少限制)语言特征空间中的点如何在保持“意义”的同时四处移动?

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

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

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

在上图中,我们展示了“轨迹”中的几个步骤——在每个步骤中,我们都挑选了ChatGPT认为最有可能的词(“零温度”情况)。但我们也可以问,在给定的时间点,哪些词可能“下一个”出现的概率是多少:

我们在这种情况下看到的是,有一个高概率词的“扇形”似乎在特征空间中或多或少地朝着明确的方向移动。但是如果我们走得更远又会发生什么?以下是我们“沿着”轨迹“移动”时出现的连续“扇形”:

这是一个3D表示,总共需要40个步骤:

这似乎看起来一团,并且没有做任何事情来特别鼓励这样的想法,我们可以期望通过实证研究“ChatGPT在内部做什么”来识别“"类似数学物理学”的“语义运法则律”。但也许我们只是查看了“错误的变量”(或错误的坐标系),如果我们只查看正确的变量,那么我们会立即看到ChatGPT正在做一些“数学-物理学-简单”的事情,比如遵循测地线。但截至目前,我们还没有准备好从其“内部行为”中“实证解码”ChatGPT“发现”的关于人类语言如何“组合”的内容。

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

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

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

为了语法的目的,我们识别名词和动词等事物。但出于语义的目的,我们需要“更精细的等级”。例如,我们可能会识别“移动”的概念,以及“保持其身份独立于位置”的“对象”的概念。 这些“语义概念”中的每一个都有无穷无尽的具体例子。 但是为了我们的语义语法的目的,我们只是有一些通用的规则,基本上说“对象”可以“移动”。关于这一切如何运作,还有很多话要说。我将在这里只发表一些说明潜在发展道路的言论。

值得一提的是,即使一个句子按照语义文法完全OK,也不代表它在实践中已经实现(甚至可以实现)。

当我们开始谈论“语义语法”时,我们很快就会问“它的背后是什么?”它假设了什么样的“世界模型”?句法语法实际上只是关于从单词构建语言的问题。但是语义语法必然涉及某种“世界模型”——充当“骨架”的东西,由实际词语构成的语言可以在上面分层。

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

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

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

这一切都与语义语法的想法有关——目标是提供一个通用的概念符号 "构造工具包",这将为我们提供说明什么可以与什么相匹配的规则,从而为我们可能转化为人类语言的 "流程 "提供规则。

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

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

给定一种符号话语语言,我们可以用它来做出“独立陈述”。但我们也可以用它来询问有关世界的问题,“Wolfram|Alpha 风格”。或者我们可以用它来陈述我们“想要这样做”的事情,大概是通过某种外部执行机制。或者我们可以用它来做出断言——也许是关于现实世界,或者是关于我们正在考虑的某个特定世界,无论是虚构的还是其他的。

人类语言从根本上来说是不精确的,尤其是因为它没有“束缚”到特定的计算实现上,而且它的意义基本上只是由用户之间的“社会契约”来定义。但计算语言,就其本质而言,具有一定的基本的精确性——因为最终它指定的内容总是可以“在计算机上明确执行”。人类语言通常可以带有一定的模糊性。(当我们说“行星”时,它是否包括系外行星,等等)但是在计算语言中,我们必须对我们所做的所有区分做到精确而清楚。

我们应该如何找出适合一般符号话语语言的基本“本体论”?这并不容易。这也许就是为什么自从亚里士多德两千年前的原始开端以来,在这些方面做得很少。但这真的很有帮助,今天我们对如何以计算方式思考世界了解得如此之多(而且,从我们的物理学项目ragiad的想法中得到“基本形而上学”也无伤大雅)。

但是,在 ChatGPT 的背景下,这一切意味着什么?通过其训练来看,ChatGPT有效地“拼凑”了一定数量的语义语法。但它的成功让我们有理由认为,以计算语言的形式构建更完整的东西将是可行的。而且,与我们迄今为止对ChatGPT内部结构的理解不同的是,我们可以期望设计出易于人类理解的计算语言。

当我们谈论语义语法时,我们可以类比三段论逻辑。起初,三段论逻辑本质上是关于用人类语言表达的语句规则的集合。但是在两千年后,当形式逻辑得到发展时,如今的三段论逻辑的原始基本结构就可以用来建造巨大的“形式塔”,例如现代数字电路的运行。因此,我们可以预期,更一般的语义语法也将如此。起初,它可能只能处理简单的模式,比如以文本形式表达。但是一旦它的整个计算语言框架建立起来,我们可以期待它能够被用来竖起“广义语义逻辑”的高塔,让我们能够以精确和形式化的方式处理各种我们以前从未接触过的东西,而只是在 "底层 "通过人类语言,以其所有的模糊性来处理。

我们可以将计算语言和语义语法的构造视为代表事物的一种最终压缩。因为它使我们能够谈论什么是可能的本质,而不用去处理普通人类语言中存在的所有“短语转折”。我们可以将 ChatGPT的巨大优势视为有点类似的东西:因为它在某种意义上也已经“钻透”到它可以“以一种有语义的方式将语言组合在一起”的程度,而无需担心不同的可能的措辞。

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

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

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

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

但出乎意料的是,这个过程可以产生成功地“像”网络上、书籍中内容的文本。它不仅是连贯的人类语言,而且利用它“读”到的内容,“所说的东西”也遵循它的提示。它并不总会说出“全局有意义”(或对应于正确的计算)的东西——因为(例如,在没有获得Wolfram|Alpha的“计算能力”的情况下)它只是说出根据培训材料中“听起来像”而说的。

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

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

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

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

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

*本文由CoinTime整理编译,转载请注明来源。

评论

所有评论

推荐阅读

  • 4月19日晚间要闻速递

    1. BTC跌破64000美元

  • 诈骗者利用谷歌平台推广虚假Whales Market网站来窃取加密货币

    据 BleepingComputer 的一份报告称,威胁行为者已经发现了一种方法,诈骗者利用谷歌平台推广假冒 Whales Market 的钓鱼网站来窃取加密货币,这些假冒网站会作为赞助链接(即广告)被置于谷歌搜索结果页面的顶部,尽管在搜索结果页面上显示的域名地址看起来像是真实的,但用户在点击后会被重定向到假冒网站。

  • Tether在以太坊上增发10亿枚USDT(已授权暂未发行)

    据Whale Alert监测,Tether Treasury在以太坊上新增铸造10亿枚USDT。对此Tether首席执行官Paolo Ardoino表示,此次10亿枚USDT是对以太坊库存的补充。这是一笔已授权但未发行的交易,意味着本次增发将用于下一期发行请求和跨链交换的库存。

  • 币安高管保释申请再次推迟,仍被关押

    尼日利亚法院再次推迟了对币安高管Tigran Gambaryan的保释申请审理,他仍被关押在Kuje矫正中心。审理定于4月22日举行,EFCC要求时间回应辩方提出的新观点。Gambaryan的律师批评控方未能及时回应。币安被指控隐瞒收入来源,Gambaryan则被指控洗钱,此外,他还起诉政府侵犯其人权。

  • 过去24小时全网爆仓 2.82 亿美元,多空双爆

    Coinglass 数据显示,过去 24 小时全网爆仓 2.82 亿美元,多空双爆,多单爆仓 1.5 亿美元,空单爆仓 1.32 亿美元。其中 BTC 爆仓 1.03 亿美元,ETH 爆仓 5516 万美元。

  • BTC突破64000美元

    行情显示,BTC突破64000美元,现报64012.44美元,日内涨幅达到4.95%,行情波动较大,请做好风险控制。

  • SEC指控孙宇晨曾频繁赴美销售代币

    美国 SEC 已修改对 Tron 创始人孙宇晨的诉讼,称他在美国多地频繁出行,从而使得法院具备相应管辖权。SEC 指控孙宇晨及其公司通过 Tron 和 BitTorrent(BTT)代币销售未注册证券,并进行操纵性洗钱交易。SEC 声称,孙宇晨在 2017 年至 2019 年间在美国度过超过 380 天,旅行目的地包括纽约、波士顿和旧金山等地。孙宇晨则表示,代币销售完全在海外进行,避免了美国市场,因此 SEC 无权对其及总部位于新加坡的 Tron 基金会施加管辖。(Cointelegraph)

  • BTC突破63000美元

    行情显示,BTC突破63000美元,现报63062.48美元,日内涨幅达到3.53%,行情波动较大,请做好风险控制。

  • 发布1周年,一文理清ChatGPT时间线

    AI 元年,历史上的今天。

  • ChatGPT语音功能向所有用户免费开放

    OpenAI宣布,ChatGPT语音功能已向所有用户免费开放,用户可下载手机App使用该功能。