为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”( 七 )


为了训练特定任务的神经网络,需要展示多少数据给它?同样,很难从第一原理进行估计 。当然,使用“迁移学习”将已经在另一个网络中学到的重要特征列表“迁入”可以大大减少需求 。但通常神经网络需要“看到很多示例”才能进行良好的训练 。至少对于某些任务而言,神经网络的传统认识是示例可以极其重复 。事实上,一个标准的策略是反复向神经网络展示所有已有的示例 。在每个“训练轮次”(或“周期”)中,神经网络的状态至少会略有不同,并且以某种方式“提醒它”特定的示例有助于让它“记住那个示例” 。(是的,也许这类似于人类记忆中重复的有用性 。)
然而,仅仅重复相同的示例并不足够 。还需要向神经网络展示示例的变化 。神经网络的传统认识是,这些“数据增强”的变化并不需要很复杂就能发挥作用 。只需使用基本图像处理稍微修改图像,就可以使其在神经网络训练中变得“一样好” 。类似地,当用于训练自动驾驶汽车的实际视频等数据用尽时,可以继续在类似于模拟游戏的环境中运行模拟,并从中获取数据,而无需关注实际现实场景的所有细节 。
那么类似这样的模型呢?它有一个好的特点,即它可以进行“无监督学习”,从而更容易为其提供训练示例 。回想一下,的基本任务是弄清楚如何继续给定的一段文本 。因此,要获得“训练示例”,我们只需要获取一段文本,将其结尾部分屏蔽,并将其用作“训练输入”,同时将完整的、未屏蔽的文本作为“输出” 。我们稍后会更详细地讨论这一点,但主要观点是,与学习图像内容不同,不需要“显式标记”;它实际上可以直接从任何给定的文本示例中进行学习 。
那么神经网络的实际学习过程是如何进行的呢?最终的目标是确定哪些权重能够最好地捕捉到给定的训练示例 。有各种各样的详细选择和“超参数设置”(称为超参数,因为权重可以被视为“参数”),可以用来微调这个过程 。有不同的损失函数选择(平方和、绝对值和等) 。有不同的损失最小化方式(每步在权重空间中移动多远等) 。然后还有一些问题,例如每次展示多少个“批次”的示例来获得对要最小化的损失的每个连续估计 。是的,可以应用机器学习(例如我们在语言中所做的)来自动化机器学习,并自动设置超参数等 。
但最终,整个训练过程可以通过观察损失如何逐步减小来描述(如用于小型训练的进度监视器中所示):
(注: 是一种由沃尔夫勒姆研究公司开发的多模态编程语言。主要特点是符号计算、函数式编程和基于规则的编程 。它可以用来创建和表示任何结构和数据,内置了用于生成和运行图灵机、创建图形和音频、分析三维模型、矩阵操作、求解微分方程的内置函数 。)
通常情况下,损失会先减小一段时间,但最终会趋于某个常数值 。如果这个值足够小,那么训练可以被认为是成功的;否则,这可能是改变网络架构的信号 。
能否确定“学习曲线”趋于平稳需要多长时间?与许多其他事物一样,似乎存在与神经网络大小和使用的数据量有关的近似幂律关系 。但总的结论是,训练神经网络是困难的,并且需要大量的计算工作量 。而实际上,绝大部分工作量是在对数字数组进行运算,而这正是 GPU 擅长的领域,这也是神经网络训练通常受到 GPU 可用性限制的原因 。
在未来,是否会出现基本上更好的训练神经网络的方法,或者说执行神经网络的任务的方法?我认为几乎可以肯定会有 。神经网络的基本思想是利用大量简单(本质上相同)的组件创建一个灵活的“计算结构”,并使这个“结构”可以通过逐渐修改来从示例中学习 。在当前的神经网络中,我们基本上使用了微积分的思想(应用于实数)来进行这种逐步修改 。但越来越明显的是,高精度的数字并不重要;即使在当前方法下,8位或更少的精度可能已经足够 。