ChatGPT 的工作原理:神经网络训练的应用和理论
在过去的十年中,神经网络训练技术取得了许多进步。而且,是的,它通常很漂亮。有时,尤其是当你思考时,你至少可以找到所做的事情的“科学解释”。但大多数内容都是通过反复试验发现的,添加了一些想法和技巧,慢慢积累了有关神经网络使用的重要知识。
有几个大部件。首先,对于特定任务,应该使用什么神经网络架构。那么,还有一个大问题,就是如何获取数据来训练神经网络。 而且,从头开始解决训练网络的问题越来越不可能了:相反,新的网络可以直接与其他经过训练的网络集成,或者至少可以使用这个网络来生成示例,为他提供更多的训练。
人们可能认为每个人都需要不同的神经网络系统。然而,事实证明,即使是看似不同的任务,同一个系统也能发挥作用。
在某种程度上,这让人想起通用计算的概念(以及我的计算平等原则),但是,正如我稍后将讨论的,我认为它更能反映现实,也就是说,我们的行为往往是“类人”,而神经网络一般可以捕获“类人过程”。
在神经网络的早期,人们认为应该“让神经网络做得尽可能少”。 例如,当将语音转换为文本时,认为应该首先分析语音的声音,然后将其划分为音素等。但事实证明,至少对于“类人任务”来说,尝试在“端到端问题”上训练神经网络并让它“找到”必要的中间特征、处理往往会更好。 , ETC。
还有一种想法是,神经网络中应该包含单独的复杂组件,以“清楚地实现特定的算法概念”。 但是,事实证明这并不值得;但最好处理非常简单的元素,让它们“自我组织”(即使以我们不理解的方式)来实现(可能)与想法相同的算法。
这并不是说不存在与神经网络相关的“结构化思想”。因此,例如,具有局部连接的神经元的二维结构似乎至少在图像处理的第一阶段至关重要。在处理人类语言等事物时,例如在 ChatGPT 中,采用专注于“回溯序列”的协作方法似乎很有用(我们稍后会看到)。
但神经网络的一个重要特征是,像普通计算机一样,它们最终只是处理数据。 现代神经网络(现代神经网络训练方法)旨在处理大量数据。但在处理过程中,这些阵列可以完全修改和重新配置。例如,我们上面用来识别数字的网络以双“图像”数组开始,这些“图像”在多个通道中快速“稠化”,但随后“压缩”成代表潜力的单个图像数组。产品。数字单位:
但是,好吧,你怎么知道特定任务所需的神经网络的大小呢?这是一门艺术。在某种程度上,关键是要知道“努力工作”有多么困难。但对于类似人类的任务,这很难估计。
是的,可能有一种系统的方法可以用计算机执行非常“机械”的任务。然而,很难知道是否存在人们认为可以使这项任务变得更容易的技巧或捷径,至少在“类人水平”上是这样。玩游戏“机制”可能需要数一棵巨树;但可能有一种更简单(“启发式”)的方法来实现“人类游戏”。
当人们使用微小的神经网络和简单的任务时,有时很明显“你不能从这里去那里”。例如,这似乎是使用一些小型神经网络能够完成上一节任务的最佳方法:
在我们的例子中,如果网络太小,就无法返回我们想要的结果想。工作。但在一定水平以上,这不是问题——至少如果你训练它很长时间并且有足够的例子的话。事实上,这些图像揭示了关于神经网络的一个神话:如果中间存在一种“压力”,迫使所有东西都通过较小的中间神经元,那么我们通常可以使用较小的网络。
(值得一提的是,“没有中间层”——或者所谓的“感知器”——网络只能从真实的模式中学习——但只要有中间层,它就可以大得离谱.对于任何任务来说,这都是一个很好的近似,至少如果你有足够的神经元,尽管需要某种正则化或归一化来使其可以训练)。
好吧,假设我们已经确定了神经网络架构。现在有一个问题,如何获取数据来训练网络。围绕神经网络和机器学习的许多实际挑战通常集中在获取或准备必要的训练数据。在许多情况下(“监督学习”),希望有所需输入和输出的清晰示例。
因此,例如,您可能希望向内容或其他属性添加图像标签。也许我们必须说清楚——通常是强烈标记的。但通常,我们可以重复已经完成的工作,或者将其用作一种代理。
因此,例如,我们可以对网络上已有的图像使用 alt 标签。或者,在其他区域,您可以使用为视频创建的隐藏式字幕。即使在语言翻译训练中,也可以使用不同语言的网页或其他文件的并行版本。
您需要多少数据来表示神经网络来训练它执行特定任务?同样,很难根据第一原理进行估计。当然,通过“转移”诸如已经在另一个网络中学习的重要特征列表之类的东西,可以大大降低使用“转移学习”的要求。
但一般来说,神经网络需要“看到很多例子”才能训练得好。关于神经网络(至少对于某些任务而言)的一个重要误区是,这些示例可能非常重复。 事实上,一遍又一遍地展示神经网络的所有示例是一种标准策略。每个“训练轮”(或“周期”),神经网络都会处于至少略有不同的状态,并且以某种方式“提醒”它特定的示例是必要的“他会记住这个示例”非常有用。 (是的,这可能类似于人类记忆中重复的用处)。
但是经常重复同一个例子是不够的。这个例子中还需要展示神经网络。神经网络理论的一个特点是,这些“数据增强”转换不必很复杂就有用。只需用基本图像处理方法对图像进行轻微修改,就可以使它们“焕然一新”,用于神经网络训练。同样,当我们没有真实的视频等来训练自动驾驶汽车时,我们可以继续从模拟视频游戏世界中获取数据,而无需了解真实场景的细节。
ChatGPT 怎么样?嗯,它有一个很好的功能,那就是它可以进行“无监督学习”,这使得很容易获得训练样本。 回顾一下,ChatGPT 的主要功能是弄清楚如何继续处理给定的文本。因此,要获得“训练示例”,我们所要做的就是获取一段文本,隐藏其结尾,然后将其用作“训练示例”——“输出”是不带掩码的全文。我们稍后会详细讨论这一点,但主要的是,与图像学习不同,不需要“清晰的标签”; ChatGPT 可以直接从给定的任何示例中学习。
那么,学习神经网络的过程到底是怎样的呢? 最后,一切都是为了确定最适合您的重量训练。 有各种详细选项和“超参数设置”(称为超参数,因为您可以将权重视为“参数”),可用于微调此过程的工作方式。
有多种损失选项(平方数、绝对值之和等)。有多种方法可以减轻损失(每个阶段的空间有多远等)。然后存在显示的“部分”大小的问题,例如,对每个试图最小化的损失进行运行估计。是的,我们可以应用机器学习(例如,我们使用 Wolfram 语言所做的事情)来对机器学习进行编程 - 自动设置超参数等内容。
但最终,整个训练过程的特点是看到损失逐渐减少(就像 Wolfram 语言的小型训练的进度监视器):
常见的是损失随着时间的减少而减少,但最终会减小到一个恒定值。如果这个值很小,则可以认为训练是有效的;否则,这可能表明您应该尝试更改网络配置。
您能告诉我们学习曲线需要多长时间才能稳定下来吗?与许多其他事物一样,缩放幂律之间似乎存在某种关系,具体取决于神经网络的大小和使用的数据量。 但总体结论是神经网络训练很困难并且需要大量的计算工作。 事实上,这些努力大部分都花在了处理数字上,而这正是 GPU 所擅长的——这就是为什么神经网络训练通常会受到 GPU 可用性的限制。
未来是否会有更好的方法来训练通用神经网络,或者完成通用神经网络的工作?我想这几乎是肯定的。 神经网络的基本思想是从简单(通常相似)的组件创建一个灵活的“计算结构”,并让这个“结构”逐渐变化以供学习。 。
在当今的神经网络中,计算的概念一般被实数的人用来做这种额外的变换。但越来越明显的是,拥有精确的数字并不重要;重要的是。即使按照今天的风格,8 分或更少也可能足够了。
诸如蜂窝自动化之类的计算机系统对每个位进行并行操作,目前尚不清楚如何进行此类增量更改,但没有理由认为它无法完成。事实上,就像“2012 年的深度学习灾难”一样,这种增量变化在更复杂的情况下可能比在更简单的情况下更容易。
神经网络 - 也许类似于大脑 - 被设计为具有固定的神经元网络,并根据其连接的强度(“权重”)进行修改。 (也许,至少在年轻的大脑中,全新连接的数量也可能会增加。)但是,虽然这可能是生物学的合适适应,但尚不清楚它是否是执行我们所需任务的最佳选择。最好的办法。也许渐进式网络写作(也许让人想起我们的物理项目)会更好。
但即使使用现有的神经网络架构,目前也存在重大局限性:当前神经网络的训练是连续的,并且重复每组的效果来更新权重。事实上,在当今的计算硬件(甚至 GPU)下,神经网络在训练期间大部分时间都处于“停机”状态,并且一次只更新一部分。部分原因是我们的计算机现在拥有与 CPU(或 GPU)分开的内存。但在大脑中,很可能不一样——“记忆单元”(即神经元)也是一个功能计算单元。如果我们能够以这种方式构建未来的计算设备,就可以更有效地进行训练。
“当然,广泛的网络可以做任何事情!”
像 ChatGPT 这样的功能看起来令人印象深刻,人们可能会认为,如果它们能够“继续前进”并训练越来越大的神经网络,它们最终将能够“做任何事情”。如果人们关注的是人类容易直接思考的事情,那么情况很可能就是这样。 然而,过去百年科学的教训是,有些东西可以通过形式过程计算出来,但在人类思维的指导下却不容易理解。
抽象数学就是一个很好的例子。但一般情况是计算出来的。最后一个问题是计算效率低下。有些计算可能会被认为需要很多步骤才能完成,但实际上它们可以“简化”成简单的东西。但看到缺乏计算意味着它并不总是有效。另一方面,有一些步骤(也许像这样)需要检查计算的每个步骤以弄清楚发生了什么:但要避免将计算选择为不可约。在大脑中进行数学运算需要特别的努力。另外,在实践中,仅仅在头脑中“思考”非微观程序的工作步骤是不可能的。
当然,我们有计算机可以做到这一点。有了电脑,我们可以做很多电脑做不到的事情。重要的是,这些事情通常没有捷径。
是的,我们可以回忆起特定计算机系统中发生的许多具体示例。我们甚至可能会发现一些(“计算上可简化的”)模式,使我们能够进行一些概括。 但问题是,缺乏计算意味着我们永远无法保证意外情况不会发生——只有通过精确的计算,你才能知道在任何给定情况下实际发生了什么。
最后,学习能力和不重复数学能力之间存在根本性的紧张关系。学习通过不断使用来压缩数据。但缺乏计算意味着最终能够存在的条件是有限的。
作为一个实际问题,我们可以想象采用小型计算设备(例如细胞自动机或图灵机)并将它们构建成可训练的系统(例如神经网络)。而且,这种工具可以成为神经网络的一个很好的“工具”,就像 Wolfram|Alpha 是 ChatGPT 的一个很好的工具一样。但计算不可避免的本质意味着我们不能指望“利用”这些工具并让它们学习。
或者换句话说,功率和效率之间存在最终的权衡:你越希望系统“真正利用”计算能力,它就越在计算中表现出不可复制性,而该技能就是。底部。而且他受的训练越多,就越不会做复杂的计算。
(对于目前的ChatGPT来说,情况是极端的,因为用于生成每个产品标签的神经网络是一个“前馈”网络,没有循环,因此无法进行任何简单的“控制流”计算)。
当然,您可能想知道进行不可避免的计算的能力是否真的那么重要。事实上,对于人类历史的大部分时间来说,这并不重要。但我们的现代技术世界是建立在至少使用一些数学计算和更一般计算的工程师之上的。如果我们观察自然世界,就会发现它充满了无情的计算——我们可以慢慢模仿这些方法并将其用于我们的技术目的。
是的,很明显,神经网络可以检测自然界中的各种不一致之处,而这些不一致之处可以很容易地被“没有强大的人类思维”所检测到。但如果我们想要解决数学或计算机科学领域的问题,神经网络就无法做到——除非它使用“合法”的计算机系统“作为工具工作”。
然而,所有这些都可能会造成混乱。过去,我们认为许多任务(包括撰写文章)对于计算机来说“太难了”。而现在当我们看到ChatGPT之类所做的工作时,我们常常会突然想到计算机一定更强大,尤其是比它一般能够做的事情更强大(比如像元胞自动机这样的渐进式计算机系统的行为)。
然而,这并不是正确的结论。 不可约的计算过程在计算上仍然是不可约的,并且对计算机来说仍然很困难——尽管计算机可以轻松计算每个步骤。 基本上,我们应该得出的结论是,人类可以完成但我们认为计算机无法完成的任务,例如写文章,实际上比我们想象的更容易计算。
换句话说,神经网络之所以能够如此有效地编写文本,是因为编写文本已经成为一个比我们想象的更“计算浅层”的问题。在某种程度上,这让我们更接近于“拥有一个关于人类如何做写作或一般语言处理之类的事情的理论”。
如果你有一个大型神经网络,那么是的,你可能可以做人类能做的任何事情。但你不会理解大自然一般能做什么,或者我们用大自然制造的工具能做什么。正是这些工具的使用——无论是实用的还是智力的——使我们在近几个世纪中能够超越“弱人类思维”所能达到和捕捉的极限,以实现人类在物理和计算领域的更多目标。 。 。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。