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

我们的目标是获取一个对应于 {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 作为激活函数)后可以计算的函数的一些例子:

但是,上面那个更大的网络是怎么回事?嗯,这是它的计算结果:

这不是很 “正确”,但它接近于我们上面展示的 “最近点” 函数。
让我们看看其他一些神经网络的情况。在每一种情况下,正如我们稍后所解释的,我们都在使用机器学习来寻找最佳的权重选择。然后,我们在这里展示带有这些权重的神经网络的计算结果: