专栏名称: 机器学习算法与Python学习
作为沟通学习的平台,发布机器学习与数据挖掘、深度学习、Python实战的前沿与动态,欢迎机器学习爱好者的加入,希望帮助你在AI领域更好的发展,期待与你相遇!
目录
相关文章推荐
51好读  ›  专栏  ›  机器学习算法与Python学习

用最直观的动画,讲解LLM如何存储事实,3Blue1Brown的这个视频又火了

机器学习算法与Python学习  · 公众号  ·  · 2024-09-02 16:39

正文

机器之心报道
近日,3Blue1Brown 的《深度学习》课程第 7 课更新了,其中通过生动详实的动画展示了 LLM 存储事实的方式。视频浏览量高达 18 万次。
在 3Blue1Brown 刚刚更新的这期视频中,他们用 23 分的视频演示了大型语言模型如何存储和处理信息,主要包括以下部分:
  • L LM 中隐藏的事实是什么
  • 快速回顾 Transformers
  • 示例
  • 多层感知器
  • 计算参数
视频地址: https://www.youtube.com/watch?v=9-Jl0dxWQs8
在演示视频中,3b1b 的作者口齿清晰、语言标准,配合着高清画面,让读者很好地理解了 LLM 是如何存储知识的。

接下来我们就深入 MLP 的细节

为了简单,下面继续通过「乔丹打篮球」这个具体示例进行说明吧。
首先,我们先简单了解一下 Transformer 的工作流程。 Transformer 的训练目标是基于已有 token 预测下一个 token(通常表示词或词组),而每个 token 都关联了一个高维向量。
这些向量会反复通过两类运算:注意力(允许向量之间彼此传递信息)与多层感知器(MLP)。当然,它们之间还存在一个特定的归一化步骤。
在向量经过多次如此迭代之后,我们希望每个向量都已经吸收了足够多的信息。这些信息有的来自训练模型时植入模型权重的一般性知识,也有的来自上下文。这些知识就是模型预测下一 token 的依据。
需要注意的是,这些向量编码的并不仅仅是单个词汇,而是会在信息在网络中流动时根据周围的环境和模型的知识吸收更加丰富的含义。
总之,每一个向量编码的信息都远远超过了单个词汇的含义,如此模型才能预测接下是什么。而存储这些信息就是 MLP(注意力的作用是将上下文结合在一起),也因此大模型的大多数参数都在 MLP 中(约三分之二)。
继续「乔丹打篮球」这个示例。 MLP 是如何存储这一事实的。
首先我们做一些假设: 在高维空间中有这样三个不同的向量,它们分别定义了乔丹的姓 Jordan 和名 Michael 以及篮球 Basketball。
现在,如果该空间中有一个向量与 Michael 向量的乘积为 1,则我们认为该向量编码了 Michael 这一概念; 而如果这个乘积为 0 甚至负数,则认为该向量与 Michael 没有关联。
同样,我们可以计算该向量与 Jordan 或 Basketball 的乘积,以了解其与这两个概念的关联程度。
而通过训练,可让该向量与 Michael 和 Jordan 的乘积均为 1,此时就可以认为该向量编码了 Michael Jordan 这个整体概念。

MLP 的内部细节

当这个编码了上述文本的向量序列穿过一个 MLP 模块时,该序列中的每个向量都会经历一系列运算:
之后,会得到一个与输入向量同维度的向量。 然后再将所得向量与输入向量相加,得到输出向量。
序列中的每个向量都会经历这样的操作,此时这些操作都是并行执行的,彼此之间互不影响。
对于「乔丹打篮球」,我们希望对于输入的「Michael Jordan」,经过一系列运算之后,能得到「Basketball」的向量。
首先来看这个过程的第一步。 这个线性投射过程就相当于让输入向量乘以一个大型矩阵。 这个矩阵里面的数据就是所谓的模型参数(model parameter)。 你可以将其视为一个布满控制旋钮的仪表盘 —— 通过调整这些参数,我们就能控制模型的行为。
对于矩阵乘法,视频中分享了一个视角。 我们可以将矩阵乘法看作是将矩阵的每一行都视为一个向量,然后将这些行与被处理的向量(这里用 E 表示,意为 embeding,即嵌入)进行一系列点乘。
如果我们假设该矩阵的第一行刚好编码了「First Name Michael」且被处理向量也编码了它,那么所得的点积就约为 1。
而如果它们同时编码了姓和名,那么所得的结果应该约等于 2。
你可以认为该矩阵的其它行正在并行地处理其它问题。
另外,通常来说,这一步还会向输出添加另一个向量,也就是所谓的偏置向量,其中的参数是从数据中学习得到的。
在这个例子中,我们可以看到这个偏置向量的第一个元素为 -1。 也就是说在最终的输出向量中,之前得到的相关点积减去了 1。 为什么要这样操作? 这是因为这样一来,当且仅当向量编码了全名「Michael Jordan」时,所得向量的第一项为正数,否则就为 0 或负数。
在实践中,模型矩阵的规模非常大,比如 GPT-3 的矩阵有 49152 行和 12288 列(这个列数就是嵌入空间维度)。
事实上,这个行数恰好是嵌入空间维数的四倍。 其实这只是一种设计选择,你可以让它更多,也可以让它更少。
接下来我们用更简洁的方式表示这个矩阵和向量,如下动图所示:

经过上述线性过程之后,需要对输出向量进行整理。 这里通常会用到一个非常简单的函数: 整流线性单元(ReLU)。






请到「今天看啥」查看全文