首页 > 其他分享 >直观解释大语言模型如何储存事实 | Chapter 7 | Deep Learning | 3Blue1Brown

直观解释大语言模型如何储存事实 | Chapter 7 | Deep Learning | 3Blue1Brown

时间:2024-10-26 13:50:37浏览次数:3  
标签:Chapter 3Blue1Brown color 模型 乔丹 矩阵 迈克尔 Deep 向量

目录

前言

3Blue1Brown 视频笔记,仅供自己参考

这几个章节主要解析 GPT 背后的 Transformer,本章主要是剖析 Transformer 中的多层感知器,解释它们如何来储存事实

官网:https://www.3blue1brown.com

视频:https://www.bilibili.com/video/BV1aTxMehEjK

1. 大语言模型中的事实储存在哪里?

在这里插入图片描述

如果你向大语言模型中输入:迈克尔乔丹玩__,让它预测填什么,其正确输出:篮球

在这里插入图片描述

这说明在其数千亿个参数中的某处,融入了有关这个特定人物及其特定运动的知识

在这里插入图片描述

我觉得,任何用过这种模型的人应该都能感觉到,它记住了大量的事实,据此你可能会问,这究竟是如何做到的呢?这些事情存储在哪呢?

在这里插入图片描述

去年十二月,谷歌 DeepMind 的一些研究人员发表了相关的成果,他们举的例子就是将运动员与其运动相匹配

在这里插入图片描述

尽管关于事实存储的完整机制尚未揭示,但他们还是得到了一些有趣的结果,包括一条普适的高级结论:事实似乎存储在神经网络中的一个特定部分,形象地称为 多层感知器(Multilayer Perceptron)缩写 MLP

在这里插入图片描述

在前几章中我们深入研究了 Transformer 的各种细节,其为大语言模型的基础架构,也是众多现代 AI 的底层结构,在最新的章节中我们主要探讨了 注意力机制,接下来本章将研究 多层感知器 内部的细节,它们构成了神经网络的另一大部分

在这里插入图片描述

这部分的计算相对简单,尤其是和注意力机制比的话,本质上就是一对矩阵乘法里面夹了个简单运算,然而,解释这些计算究竟做了什么却极具挑战性

在这里插入图片描述

我们的主要目标是逐步解析计算过程使其便于记忆,但我想通过具体的例子来说明,至少从理论上这些模块能够存储一条具体事实,具体来说即如何存储 “迈克尔乔丹打篮球” 这一事实

在这里插入图片描述

大多数时候,我会假设大家已经看了前两章内容,亦或是已经对 Transformer 有基本认知,但温故而知新,下面我们先来快速回顾一下

2. 快速回顾一下Transformer

在这里插入图片描述

之前学的模型一直是输入一段文字预测接下来的内容,输入文本先被分解成一列 token,通常是单词或单词片段,每个 token 对应一个高维向量即一长串数字

在这里插入图片描述

然后这些向量序列重复进行两种操作,注意力机制,能让向量之间传递信息,多层感知器,也就是本章要研究的,当然其间还有个归一化步骤

在这里插入图片描述

这些向量经过多次这些模块的迭代后,最终的希望是每个向量都能吸收足够的信息,包括上下文(输入文本中的所有其他单词)以及通过训练融合模型权重的通用知识,从而能够推断下一个 token 是什么

在这里插入图片描述

我希望你记住的一个关键概念是,这些向量都存在于非常非常高维的空间中,并且在该空间中 不同的方向可以编码不同的含义

在这里插入图片描述

我喜欢举的一个经典例子是取 “女人” 和 “男人” 的嵌入向量之差,再将差值加到另一个男性名词上,比如 “叔叔”,得到的向量会非常接近对应的女性名词,也就是说这个特定方向编码了性别信息

在这里插入图片描述

类似的,该超高维空间中的其他方向也可能对应着模型想要刻画的其他特征

在这里插入图片描述

在 Transformer 中这些向量不仅仅编码单个单词的含义,随着它们在神经网络中流转,它们基于周围的上下文以及模型的知识吸收了更丰富的含义,最终每个向量需要包含远超单个单词的信息以足以预测接下来的内容

在这里插入图片描述

我们已经了解了注意力模块如何结合上下文,但模型参数的大部分其实存在于多层感知器模块中,有理论认为它们提供了额外的容量来存储事实

3. 针对示例所做的假设

在这里插入图片描述

正如我之前所说,本章将主要着眼于一个简单例子,模型究竟如何存储 “迈克尔乔丹打篮球” 这一事实

在这里插入图片描述

这个简单例子需要我们现在对这个高维空间做一些假设

在这里插入图片描述

首先,假设一个方向代表 “名字是迈克尔” 的概念,另一个几乎垂直的方向代表 “姓式是乔丹” 的概念,第三个方向则代表 “篮球” 的概念

在这里插入图片描述

更明确地,从神经网络中提取一个正在处理的向量,若其与 “名字迈克尔” 方向的点积为 1 就说明该向量编码了一个名字为迈克尔的人,否则点积为 0 或负数,说明该向量与该方向不一致

在这里插入图片描述

为了简化,我们完全忽略一个合理问题即点积大于 1 是什么意思

在这里插入图片描述

同样地,向量与其他方向的点积将说明其与 “姓氏乔丹” 及 “篮球” 的一致度,假设一个向量代表全名 “迈克尔·乔丹”,那么它与这两个方向的点积都必为 1

在这里插入图片描述

由于 “迈克尔·乔丹” 这一文本跨越两个 token,我们也需要假设前面的注意力模块成功将信息传递给这俩向量中的第二个,确保能编码全名

4. 多层感知器内部机理

在这里插入图片描述

有了上面这些假设,我们现在来深入本期的核心内容,多层感知器内部发生了什么?

在这里插入图片描述

可以考虑一系列向量流入模块,要注意每个向量最初都对应输入文本的一个 token

在这里插入图片描述

接下来流程是每个单独的向量都会通过一些操作,我们等下再解释,最终得到另一个维数相同的向量,将得到的向量与原本的向量相加,相加的结果就是输出值

在这里插入图片描述

这一系列操作会对每个向量进行,对应输入的每个 token 全部并行运算,要注意,在这一步向量之间不再相互交流,它们各自为营

在这里插入图片描述

这下理解就简单多了,因为只需要理解一个向量的情况就能推广到全体向量了

在这里插入图片描述

我说这个模块能够编码 “迈克尔乔丹打篮球” 这一事实,我的意思是若一个编码了 “名字迈克尔”、“姓氏乔丹” 的向量流入,那么这一系列的计算能够输出包含 “篮球” 方向的向量,再将其与原向量相加得到输出向量

在这里插入图片描述

该过程第一步是将输入向量与一个超大矩阵相乘,不要感到意外,深度学习常规操作,这个矩阵就像我们之前见过的那些全是从训练集习得的模型参数,可以想象为一堆可调旋钮及滑块,它们决定了模型的行为方式

在这里插入图片描述

一个理解矩阵乘法的好方式是想象矩阵的每一行都是一个向量,每一行都与正在处理的向量作点积

在这里插入图片描述

举个例子,假设第一行恰好为假想存在的 “名字迈克尔” 这一方向,这说明输出向量的第一个分量即上图红框内的点积,若向量编码了 “名字迈克尔” 则为1,否则为 0 或负数

在这里插入图片描述

更加有趣一点的话,可以想象如果第一行是 “名字迈克尔” 加上 “姓氏乔丹” 的方向,方便起见,我将其记为向量 M ⃗ + J ⃗ \color{magenta}\vec{\mathrm{M}}\color{black}+\color{red}\vec{\mathrm{J}} M +J ,将其与嵌入向量 E ⃗ \color{gold}\vec{\mathrm{E}} E 做点积,分配律得 M ⃗ ⋅ E ⃗ + J ⃗ ⋅ E ⃗ \color{magenta}\vec{\mathrm{M}}\color{black}\cdot\color{gold}\vec{\mathrm{E}}\color{black}+\color{red}\vec{\mathrm{J}}\color{black}\cdot\color{gold}\vec{\mathrm{E}} M ⋅E +J ⋅E ,注意到若向量编码了全名 “迈克尔·乔丹” 则结果为 2,否则会小于等于 1

在这里插入图片描述

这只是矩阵的一行,可以想象其他行也在并行地提出各种问题,探查嵌入向量的其他各类特征

在这里插入图片描述

这一步通常还会在输出中加入另一个向量,也是由训练集习得的模型参数组成,该向量被称为 偏置,在本例中,我希望你想象一下偏置的第一个分量为 -1 及最终输出为对应点积 -1,你可能会问为什么我要假设模型是这样的

在这里插入图片描述

很快你就会看到这样假设的优势,使得当且仅当编码了全名 “迈克尔·乔丹” 时,输出值为正数,否则为 0 或负数

在这里插入图片描述

矩阵的总行数可以看作被提问的数量,在 GPT-3 的示例中,这个数字略少于 50000,实际上恰好是嵌入空间维数的四倍,这只是设计选择,你可以随意改变,但通常整数倍对硬件更友好

在这里插入图片描述

由于这一充满权重的矩阵将向量映射到更高维的空间,我将其记为 W ↑ \color{blue}W_{\uparrow} W↑​,继续用 E ⃗ \color{gold}\vec{\mathrm{E}} E 表示正在处理的向量,而偏置向量记为 B ↑ ⃗ \color{blue}\vec{\mathrm B_{\uparrow}} B↑​ ​,并全部放回图中

在这里插入图片描述

此处的问题在于该操作是纯线性的,但语言是高度非线性过程,若输入项 “迈克尔” 加 “乔丹” 的测量值高,它也可能被一些例如 “迈克尔·菲尔普斯” 或 “亚历克西斯·乔丹” 触发,尽管它们在概念上毫不相关,真正需要的是一个简单的判断:是/否是全名

在这里插入图片描述

所以下一步需要让这个大的过程向量通过一个简单的非线性函数,通常选择是将负值映射为 0,正值不变,延续深度学习花哨取名的传统,这个简单的函数通常被称为 线性整流函数(线性修正单元),简称 ReLU,函数图像见右上

在这里插入图片描述

继续之前的例子,过程向量的第一个分量当且仅当全名是 “迈克尔·乔丹” 时为 1,否则为 0 或负值,经过 ReLU 后得到的结果会很干净,所有 0 和负值都会被截断为 0,所以如果全名是 “迈克尔·乔丹” 输出值为 1 否则为 0,换句话说,它直接模仿了与门的行为模式

在这里插入图片描述

很多模型会用一个稍作修改的函数 GELU(高斯误差线性单元),基本形状相同只是平滑一点,但就学习的目的,只考虑 ReLU 会更清晰

在这里插入图片描述

此外,当你听到人们提到 Transformer 的 神经元 时指的就是这些值,每当你看到经典的点线神经网络示意图,它通常表示这一线性步骤(矩阵乘法)和简单的逐项非线性函数(如 ReLU)的组合

在这里插入图片描述

当该值为正时,神经元处于激活状态,当该值为 0 时,神经元未激活

在这里插入图片描述

下一步和第一步很像,先左乘一个超大矩阵然后加一个偏置项,此时,输出向量的维数降回到嵌入空间的维数,所以我将其称为 降维投影矩阵

在这里插入图片描述

并且这次不再逐行来考虑,改为逐列来考虑更为合适,另一个理解矩阵乘法的方式是,将矩阵的每一列乘以向量的对应项,然后将放缩后的列向量相加,这样思考更为合适,因为这里的列向量与嵌入空间维度相同,因此能将其视为该空间中的方向

在这里插入图片描述

例如,我们假设模型已经学会将第一列表示为假想存在的 “篮球” 方向,这说明若对应的第一个神经元处于激活状态,结果中就会加上这一列,但若神经元未激活,值为 0,那么这一列不会造成影响

在这里插入图片描述

不一定是篮球,模型中这一列也可能包含很多与全名 “迈克尔·乔丹” 相关的其他特征,同时,矩阵的其它列会说明如果对应的神经元活跃,最终结果中会加入哪些信息,此处的偏置向量就是无论神经元值是多少都会往上加的东西

在这里插入图片描述

你可能会想问偏置项这是在做什么,与这些充满参数的对象一样,这很难解释,也许是网络需要做一些记账工作,大家可以先忽略这一问题

在这里插入图片描述

让式子更简洁一点,将大矩阵记为 W ↓ \color{blue}W_{\downarrow} W↓​,同样偏置向量记为 B ↓ \color{blue}B_{\downarrow} B↓​,再放回这个图,正如之前提过的,最终结果还要加上最开始对应的输入向量得到最后的输出

在这里插入图片描述

例如,如果输入向量编码了 “名字迈克尔” 及 “姓氏乔丹”,由于这一系列运算将触发与门逻辑,它会被加上一个 “篮球” 方向,输出结果会编码所有这些信息

在这里插入图片描述

请注意,这个过程对所有向量并行进行,以 GPT-3 为例,这意味着该模块不只有 50000 个神经元,而是 50000 乘以输入的 token 数

在这里插入图片描述

这就是整个的操作流程,两个矩阵乘法,每个都加上一个偏置项,以及中间一个简单的截断函数

在这里插入图片描述

看过本系列早期内容的人,会记得这种结构是最基础的神经网络类型,当时用的例子是识别手写数字

在这里插入图片描述

本章就大语言模型的 Transformer 而言,这只是大型架构中的一部分,任何试图解释其在做什么的尝试都将与信息编码进高维嵌入向量的想法密切相关

在这里插入图片描述

核心内容已介绍完,但我还想回头思考两件事情,第一个是某种记账工作,第二个是关于高维空间一个发人深省的事实,我直到深入了解 Transformer 才知道

5. 参数统计

在这里插入图片描述

在前两章中我们统计了 GPT-3 中的参数量,看它们分布在哪,我们来快速收个尾

在这里插入图片描述

我提到过这个 升维投影矩阵 行数略小于 50000 行,列数则与嵌入空间维数相等,对于 GPT-3 是 12288 列,两者相乘得到该矩阵的 6.04 亿个参数

在这里插入图片描述

降维投影矩阵 参数量相同,只是行列转置,加起来一共约 12 亿个参数

在这里插入图片描述

偏置向量也有一些参数,但相比总量占比微不足道,就不列出了

在这里插入图片描述

在 GPT-3 中,这一系列嵌入向量要经过 96 层多层感知器模块

在这里插入图片描述

里面所有参数量加起来约有 1160 亿,占据神经网络总参数的 2/3,将其与前面提到的参数量相加,注意力模块、嵌入矩阵、解嵌入矩阵,最终确实能得到宣传中的 1750 亿个总参数量

在这里插入图片描述

可能还值得一提的是,还有一组参数与归一化步骤相关,本章跳过了,但就和偏置向量一样,它们占比微不足道

6. 叠加

在这里插入图片描述

至于第二点思考,你可能会想,我们花了这么多时间探讨的这个简化例子,是否真实反映了事实在大语言模型中的存储方式

在这里插入图片描述

的确,第一个矩阵的行可以视为嵌入空间中的方向,这意味着每个神经元的激活状态,能够说明给定向量与特定方向的一致程度。同样,第二个矩阵中的列能够说明若该神经元被激活,则将在结果添加什么信息,这两点都是数学事实

在这里插入图片描述

然而,证据表明单个神经元几乎不会代表像 “迈克尔·乔丹” 这样的单一特征,理由甚至非常充分

在这里插入图片描述

这与如今在可解释性研究人员中流传的一种概念有关,称作 叠加(Superposition),这个假设有助于解释为什么模型难以解释以及为什么模型扩展性出奇地好

在这里插入图片描述

其基本思想是,在一个 N 维空间中,若是想用一堆正交基表示各种不同的特征,这样在一个方向上添加分量不会影响其他的方向,那么最多只能容纳 N 个向量即维数 N,对数学家来说,这其实就是维数的定义

在这里插入图片描述

有趣之处在于,若是放宽一点限制,容忍一些噪声,比如允许这些特征对应的向量并不完全垂直,而是几近垂直比如 89°~91° 之间,若是在二维或三维空间中,这没什么区别,几乎没有额外空间容纳更多的向量

在这里插入图片描述

这就使得在高维度空间中情况相反显得更为反直觉

在这里插入图片描述

容我用一段简陋的 Python 代码来给你大致说明一下,这段代码将创建一个 100 维向量的列表,每个向量初始值随机,该列表将包含 10000 个向量,向量数比维数高 100 倍

在这里插入图片描述

上述图表显示了这些向量对之间的角度分布,由于起始值随机,角度可以是 0° 到 180° 任意值,但你也能注意到,虽然是随机向量但它们都有这样明显的偏好:它们更接近 90°

在这里插入图片描述

接下来运行一个特定的优化过程,对所有向量进行迭代调整,使两两之间的角度尽可能靠近 90°,重复多次实验后,角度图分布如上,放大后发现所有可能向量对之间的角度都在 89°~91° 范围之间

在这里插入图片描述

通常来说 约翰逊—林登斯特劳斯引理 的一个结果是,能在空间中塞进几乎垂直的向量数量随维数增加指数增长

在这里插入图片描述

这对大语言模型意义重大,能将相互独立的概念与几乎垂直的向量相关联而受益,意味着能在有限的空间维数中存储数量多得多的各种概念

在这里插入图片描述

这可能部分解释了为什么模型性能随规模扩大而提升显著,有着十倍维数的空间能存储远超十倍的独立概念数

在这里插入图片描述

这不仅与向量流动所在的嵌入空间有关,还与多层感知器内部那个充满神经元的向量有关

在这里插入图片描述

也就是说以 GPT-3 的规模其探测的特征远不止 50000,而是利用空间中几乎垂直的方向大幅度扩充了容量,大幅度提升了探测的特征数

在这里插入图片描述

若真是这样,那就意味着单个特征并不会如单个神经元激活状态般可见,而是会是某种特定的神经元组合,一种叠加

在这里插入图片描述

想要了解更多的话,可以尝试搜索 稀疏自编码器,这是一些可解释性研究人员用来尝试提取真实特征的工具,哪怕它们在神经元上高度叠加

7. 下期预告

在这里插入图片描述

至此,虽然没有深入到 Transformer 的每一个细节,但我们已经探讨了最重要的点,我想在下一章介绍的重点是训练过程

在这里插入图片描述

一方面,关于训练如何进行的,简而言之就是反向传播,本系列早期章节就详细讨论过反向传播

在这里插入图片描述

但还有更多细节,比如语言模型所用的特定损失函数,利用人类反馈强化学习(RLHF)进行微调的概念以及尺度定律的概念

相关资料

结语

本章我们主要学习了多层感知器这一可能存储事实的模块,它包含两个矩阵和其中间的非线性 ReLU 函数。第一个矩阵与正在处理的向量相乘,可以看作矩阵的每一个行向量与待处理的向量做点积,可以想象每行在提出各种问题,探查嵌入向量的特征。接着 ReLU 函数引入非线性,然后将得到的向量左乘第二个矩阵,此时矩阵的每一个列向量可以视为空间中的某个方向,最后得到的向量会与输入向量相加得到最终的输出

OK,以上就是本章的全部内容了,下个章节我们来学习训练过程,敬请期待

标签:Chapter,3Blue1Brown,color,模型,乔丹,矩阵,迈克尔,Deep,向量
From: https://blog.csdn.net/qq_40672115/article/details/142675920

相关文章

  • C语言程序设计:现代设计方法习题笔记《chapter5》上篇
    第一题        题目分析:程序判断一个数的位数可以通过循环除以10求余,通过计算第一次与10求余为0的次数计算位数,由此可得示例1代码,另一种思路根据提示,可得示例2代码。代码示例1:#include<stdio.h>intmain(){ printf("Enteranumber:"); intnumber,temp; sc......
  • 13.4K+ Star!DeepFace:一个轻量级人脸识别和面部属性分析库
    DeepFace简介DeepFace[1]是一个用于Python的轻量级人脸识别和面部属性分析(年龄、性别、情绪和种族)库。DeepFace利用深度学习进行人脸识别和分析,它通过封装多种先进的人脸识别模型,提供了一个简单易用的接口。用户无需深入了解背后的复杂过程,只需通过简单的函数调用来实现......
  • 【读书笔记-《网络是怎样连接的》- 2】Chapter2_1-协议栈通信详细过程
    第二章从协议栈这部分来看网络中的通信如何实现,准备从两部分来进行分解。本篇是第一部分:详细介绍TCP协议栈收发数据的过程。首先来看下面的图。从应用程序到网卡需要经过如下几部分,上面的部分通过委托下面的部分来完成工作。首先是应用程序,通过Socket库来委托协议栈完成工......
  • DeepL翻译:全世界最准确的翻译
    DeepL翻译是一款高质量的机器翻译工具,以下从产品描述、产品特色、适用人群、适用场景四个方面对其进行介绍:体验地址:DeepL翻译:全世界最准确的翻译产品描述DeepL是一家德国公司,以其高质量的机器翻译服务而闻名。它利用先进的神经网络技术,提供接近人工翻译质量的翻译结果。Dee......
  • DeepCloner深度复制
    安装:Install-PackageDeepCloner示例代码:usingForce.DeepCloner;varpersonA=newPerson(){Name="张三",Address=newAddress(){City="杭州",Street="采荷"}};varpersonB=personA.DeepClone();personA.Name="李四&quo......
  • 阿里巴巴推出升级版AI翻译工具:Marco MT 性能超越Google、DeepL和ChatGPT
    阿里巴巴的国际业务部门于推出了一款升级版的AI翻译工具,名为MarcoMT。这款工具在翻译性能上超越了Google、DeepL和ChatGPT的同类产品。该工具的目标是帮助商户更好地在全球市场销售,尤其是在跨境电商领域,通过更加精准的翻译增强商户的国际竞争力。基于大语言模型:MarcoMT使......
  • Deepin 23 操作系统安装
    一、前言最近趁着国补,新买了一台笔本(机械革命极光x),安装完Windows系统后,再装一个Deepin操作系统。我的笔记本有两个固态硬盘,其中一个512G的固态上装了Windows11操作系统,另一个1T的固态,我分配了250G来安装Deepin操作系统。二安装前准备2.1.磁盘分配我安装的......
  • SDCN:《Structural Deep Clustering Network》
    代码:https://github.com/461054993/SDCN摘要聚类是数据分析中的一项基本任务。最近,主要从深度学习方法中获得灵感的深度聚类实现了最先进的性能,并引起了相当大的关注。当前的深度聚类方法通常借助深度学习强大的表示能力(例如自动编码器)来提高聚类结果,这表明学习有效的聚类表示......
  • HarmonyOS的连接艺术之六: 使用 Deep Linking,灵活定义链接规则
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。DeepLinking是一种基于URL链接的......
  • PyTorchStepByStep - Chapter 6: Rock, Paper, Scissors…
     https://storage.googleapis.com/download.tensorflow.org/data/rps.ziphttps://storage.googleapis.com/download.tensorflow.org/data/rps-test-set.zip ......