ChatGPT 如何工作:神经网络
我们用于图像识别等任务的典型模型如何工作? 目前最流行、最成功的方法是使用神经网络。 神经网络发明于 20 世纪 40 年代,与今天使用的形式非常接近,可以被认为是大脑工作方式的简单理想化。
人脑中大约有1000亿个神经元(神经细胞),每个神经元都可以产生电脉冲,每秒可能产生一千次。这些神经元连接在一个复杂的网络中,其中每个神经元都有树状分支,使其能够向潜在的数千个其他神经元发送电信号。
粗略地说,一个给定的神经元是否在给定的时间产生电脉冲取决于它从其他神经元接收到的脉冲——不同的连接有不同的“权重”贡献。
当我们“看到图像”时会发生什么,当图像的光子落在眼睛后部的(“感光器”)细胞上时,它们会在神经细胞中产生电信号。这些神经细胞通过整层神经元与其他神经细胞相连。正是在这个过程中,我们“认识”了图像,并最终“形成了一个想法”,即我们“看到了2”(也许最终会做一些类似大声说出“2”这个词的事情)。
上一节中的“黑盒”函数是此类神经网络的“数学化”版本。它正好有 11 层(尽管只有 4 个“核心”层)。
这个神经网络没有什么特别“理论”的地方;它只是 1998 年作为一个项目构建并被发现有效的东西。 (当然,这与我们描述我们的大脑是通过生物进化过程产生的没有什么不同)。
好吧,但是这样的神经网络是如何“识别事物”的呢?关键是吸引子的概念。想象一下,我们有 1 和 2 的手写图片:
我们希望所有 1 都“被吸引到一个地方”,所有 2 都被“吸引到另一个地方”。或者换句话说,如果图像在某种程度上“更接近 1”而不是 2,我们希望它最终位于“1 的位置”,反之亦然。
作为一个直接的类比,我们假设平面上有某些位置,用点表示(在现实生活中它们可能是咖啡店的位置)。那么我们可以想象,从飞机上的任何一点,我们总是会到达最近的点(即我们总是去最近的咖啡店)。我们可以通过将平面划分为由理想化“分水岭”分隔的区域(“吸引力池”)来表示这一点:
我们可以将其视为执行一种“识别任务”,我们没有做任何事情不是识别与给定图像“最相似”的数字 - 而是直接查看给定点最接近哪个点。 (我们在这里展示的“Voronoi 图”设置是在二维欧几里德空间中分离点;数字识别的任务可以被认为是做一些非常相似的事情 - 但在由每个图像中的所有点组成的地图中。 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)的神经元在选择不同的权重和常数(以及斜坡作为激活函数)后可以计算的一些函数示例:
但上面的更大。网络会发生什么?好吧,计算方法如下:
这不太“正确”,但它接近我们上面展示的“最近点”函数。
让我们看看其他一些神经网络。在每种情况下,正如我们稍后解释的,我们使用机器学习来找到权重的最佳选择。然后,我们在此展示具有这些权重的神经网络的计算结果:
较大的网络通常可以更好地逼近我们的目标函数。而在“每个吸引子池的中间”我们通常会得到我们想要的答案。 但在边缘——神经网络“很难做出决定”——事情可能会变得更加混乱。
在这个简单的数学“识别任务”中,“正确答案”是什么是很清楚的。但当涉及到识别手写数字时,情况就不太清楚了。如果有人把“2”写得很糟糕,看起来像“7”等怎么办?尽管如此,我们可以问神经网络如何区分数字 - 这给出了一个指示:
我们可以“用数学方式”说网络如何区分自己吗?这不是真的。它只是“做神经网络所做的事情”。但事实证明,这似乎与我们人类所做的区分非常吻合。
让我们举一个更复杂的例子。假设我们有猫和狗的照片。我们有一个经过训练来区分它们的神经网络。以下是它在一些示例中可以执行的操作:
现在更不清楚“正确答案”是什么。狗狗穿了猫服怎么办?等等。无论输入什么,神经网络都会产生响应。事实证明,这样做的方式与人类可以做的事情相当一致。
正如我上面所说,这不是我们可以“从第一原理推论出来”的事实。仅凭经验才发现它是正确的,至少在某些领域是如此。但这是神经网络有用的一个关键原因:它们以某种方式捕捉“类人”的做事方式。
向自己展示一张猫的照片并问“为什么它是一只猫?”。也许你开始说“嗯,我看到它尖尖的耳朵等等。”但要解释你如何认出这张照片是一只猫并不容易。这只是你的大脑以某种方式解决的问题。但目前还没有办法(至少目前还没有)“进入”大脑并看看它是如何计算出来的。
(人工)神经网络怎么样?好吧,当你展示一张猫的图片时,你可以直接看到每个“神经元”在做什么。然而,获得简单的可视化通常非常困难。
在我们用来解决上面“最近点”问题的最后一个网络中,有 17 个神经元。在识别手写数字的网络中,它是2190。在我们用来识别猫和狗的网络中,它是60,650。
通常,要可视化对应于60,650维的空间是相当困难的。但由于这是一个用于处理图像的网络,因此它的多层神经元被组织成数组,就像它正在查看的像素数组一样。
如果我们拍摄一张典型的猫图像:
,我们可以用一组派生图像来表示第一层神经元的状态 - 其中许多我们可以轻松地将其解释为“没有背景的猫”或“猫”剪影”等:
在第十级,更难解释发生的情况:
但总的来说,我们可以说神经网络“挑选出某些特征”(也许尖尖的耳朵就是其中之一)并使用这些功能用于找出图片是什么。但这些特征是我们所命名的吗,比如“尖耳朵”?大多数情况下不是。
我们的大脑使用类似的功能吗?大多数情况下我们不知道。但值得注意的是,像我们在这里展示的神经网络的第一层似乎能够挑选出图像的某些方面(例如物体的边缘),这些方面似乎与我们所知道的挑选的内容相匹配。大脑视觉处理的第一层。属性相似。
但是假设我们想要神经网络的“猫识别理论”。我们可以说“看,这个特定的网络做到了”——这立即让我们感觉到“问题有多难”(例如,可能需要多少个神经元或层)。
但至少到目前为止,我们还没有机会对网络的作用进行“叙述性描述”。 也许这是因为它在计算上确实是不可约的,除了显式跟踪每个步骤之外,没有通用的方法可以找出它在做什么。 也可能是我们还没有“弄清楚科学”,还没有确定让我们总结正在发生的事情的“自然法则”。 当我们谈论使用 ChatGPT 生成语言时,我们面临同样的问题。同样不清楚是否有一种方法可以“总结它的作用”。但语言的丰富性和细节(以及我们的经验)比图像更能让我们走得更远。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。