导图社区 3Blue1Brown-深度学习-整理笔记
这张以思维导图形式呈现的3Blue1Brown深度学习系列解析模板,是渴望看懂ChatGPT却常被技术术语劝退的非专业人士、对人工智能技术充满好奇的爱好者以及想要初步了解深度学习概念的学生群体的绝佳学习工具。思维导图按照系列内容的时间线和知识逻辑,从神经网络基础(2017)一路剖析到Transformer前沿(2024)。在基础篇中,详细拆解了梯度下降、反向传播等核心概念,以直观的方式呈现这些在深度学习中至关重要的算法原理,帮助学习者建立扎实的基础认知。核心突破部分,将注意力机制进行可视化展示,并深入解析Transformer架构。注意力机制作为Transformer以及当下大语言模型的关键技术,通过思维导图的梳理,让学习者能够清晰地理解其运行逻辑和重要作用。同时,对2017年《Attention is All You Need》这篇具有里程碑意义的论文相关内容进行整合,使学习者把握技术发展的关键节点。在GPT实战板块,围绕数据流动、事实储存、大语言模型原理等展开。以动态数学演示的思路,用思维导图的形式呈现AI如何“思考”,让复杂的技术流程变得易于理解。
编辑于2026-04-10 15:47:43这张以思维导图形式呈现的3Blue1Brown深度学习系列解析模板,是渴望看懂ChatGPT却常被技术术语劝退的非专业人士、对人工智能技术充满好奇的爱好者以及想要初步了解深度学习概念的学生群体的绝佳学习工具。思维导图按照系列内容的时间线和知识逻辑,从神经网络基础(2017)一路剖析到Transformer前沿(2024)。在基础篇中,详细拆解了梯度下降、反向传播等核心概念,以直观的方式呈现这些在深度学习中至关重要的算法原理,帮助学习者建立扎实的基础认知。核心突破部分,将注意力机制进行可视化展示,并深入解析Transformer架构。注意力机制作为Transformer以及当下大语言模型的关键技术,通过思维导图的梳理,让学习者能够清晰地理解其运行逻辑和重要作用。同时,对2017年《Attention is All You Need》这篇具有里程碑意义的论文相关内容进行整合,使学习者把握技术发展的关键节点。在GPT实战板块,围绕数据流动、事实储存、大语言模型原理等展开。以动态数学演示的思路,用思维导图的形式呈现AI如何“思考”,让复杂的技术流程变得易于理解。
这是一篇关于B站《国家计算机二级python》整理笔记思维导图,【B站Python二级通关宝典】零基础速成教程 真题精讲,涵盖公共基础知识、编程题到综合应用全考点!在真题实战方面,详细拆解了15道综合题和25道编程题,同时搭配模拟题强化训练,让学习者通过实际案例深入理解考试要点和解题思路,如同拥有了一个真题题库的导航图,精准把握考试方向。思维导图为学习者提供了便捷的学习路径。分层教学是该模板的一大特色,从基础知识逐步过渡到综合应用,再到第三方库的学习,阶梯式的内容安排符合学习规律,让零基础的学习者也能循序渐进地攻克Python二级考试。无论是公共基础知识、编程题还是综合应用,各个考点的脉络都一目了然。对于备战Python二级考试的考生,这个思维导图模板能帮助他们快速梳理知识点,查漏补缺;Python编程初学者可以借助它建立完整的知识体系,扎实基础;希望提升编程技能的人士也能从中获取实用的技能和知识。强烈推荐使用这个思维导图模板,让Python二级备考和编程学习变得更加高效、轻松。
根据B站大佬3Blue1Brown的系列视频“线性代数的本质”整理出的个人笔记,旨在用几何直观的角度理解线性代数,现将笔记免费开源!
社区模板帮助中心,点此进入>>
这张以思维导图形式呈现的3Blue1Brown深度学习系列解析模板,是渴望看懂ChatGPT却常被技术术语劝退的非专业人士、对人工智能技术充满好奇的爱好者以及想要初步了解深度学习概念的学生群体的绝佳学习工具。思维导图按照系列内容的时间线和知识逻辑,从神经网络基础(2017)一路剖析到Transformer前沿(2024)。在基础篇中,详细拆解了梯度下降、反向传播等核心概念,以直观的方式呈现这些在深度学习中至关重要的算法原理,帮助学习者建立扎实的基础认知。核心突破部分,将注意力机制进行可视化展示,并深入解析Transformer架构。注意力机制作为Transformer以及当下大语言模型的关键技术,通过思维导图的梳理,让学习者能够清晰地理解其运行逻辑和重要作用。同时,对2017年《Attention is All You Need》这篇具有里程碑意义的论文相关内容进行整合,使学习者把握技术发展的关键节点。在GPT实战板块,围绕数据流动、事实储存、大语言模型原理等展开。以动态数学演示的思路,用思维导图的形式呈现AI如何“思考”,让复杂的技术流程变得易于理解。
这是一篇关于B站《国家计算机二级python》整理笔记思维导图,【B站Python二级通关宝典】零基础速成教程 真题精讲,涵盖公共基础知识、编程题到综合应用全考点!在真题实战方面,详细拆解了15道综合题和25道编程题,同时搭配模拟题强化训练,让学习者通过实际案例深入理解考试要点和解题思路,如同拥有了一个真题题库的导航图,精准把握考试方向。思维导图为学习者提供了便捷的学习路径。分层教学是该模板的一大特色,从基础知识逐步过渡到综合应用,再到第三方库的学习,阶梯式的内容安排符合学习规律,让零基础的学习者也能循序渐进地攻克Python二级考试。无论是公共基础知识、编程题还是综合应用,各个考点的脉络都一目了然。对于备战Python二级考试的考生,这个思维导图模板能帮助他们快速梳理知识点,查漏补缺;Python编程初学者可以借助它建立完整的知识体系,扎实基础;希望提升编程技能的人士也能从中获取实用的技能和知识。强烈推荐使用这个思维导图模板,让Python二级备考和编程学习变得更加高效、轻松。
根据B站大佬3Blue1Brown的系列视频“线性代数的本质”整理出的个人笔记,旨在用几何直观的角度理解线性代数,现将笔记免费开源!
3Blue1Brown-深度学习 (2017.10-2024.09)
【官方双语】深度学习之神经网络的结构 Part 1 ver 2.0 (2017-10-19)
例子:手写数字识别
本期视频仅介绍神经网络的结构(多层感知器MLP)
神经(元)网络(Neural network)
来源于人的大脑结构
什么是神经元
神经元(Neuron):装有一个数字的容器 函数Function
激活值(Activation):神经元中装着的数字:对应像素的灰度值
0:纯黑
1:纯白
网络
第一层
这些28*28=784个神经元组成网络的第一层
隐含层(Hidden layers)
大黑箱
上一层的激活值将决定下一层的激活值
模仿生物神经:某些神经元的激发,会促使另一些神经元激发
pattern:图案 /“模式识别”的“模式”
最后一层
代表输出结果
激活值同理在0~1,代表置信度
为什么要分层
例如学习部件来识别数字:圆圈、竖线、横线...
例如第一层是识别“短边”,然后第二层识别“短边”组成的“长边”
世界上各种人工智能的任务,都可以转化为抽象元素,一层层的抽丝剥茧
语言识别 Parsing speech:音源-音节-单词-短语-...
如何连接在一起
边赋上权重
第一层所有的激活值*权重值->加权和
表格
绿色:正权重
红色:负权重
颜色越暗:权重越接近于0
把加权和归一到0~1之间
sigmoid函数
又称logistic曲线
偏置(bias)
加上偏置值,保证不能随便激发,防止过早激发导致偏差
比如加权和>10时才激发,就在sigmoid里-10
总结
权重:第N层的神经元关注什么样的像素图案
偏置:加权和得有多大,才能让神经元的激发变得有意义
参数量
调参
数学表示
把某一层中所有的激活值统一成一列向量
再把它和下一层间所有的权重放到一个矩阵中(权重矩阵)
矩阵第n行:这一层的所有神经元和下一层第n个神经元所有连线的权重
权重矩阵和向量乘积的第n项=这一层的激活值和下一层第n个神经元间连线权重的加权和
加上偏置项
最终表达式
代码
很多库在矩阵乘法方面做了十足的优化(比如numpy)
整个神经网络相当于一个极其复杂的函数
784输入,10输出,13000个参数(权重和偏置)
矩阵乘法
sigmoid映射函数
Q&A
现在(2017)sigmoid已经过时,用ReLU(线性整流函数)效果更好
sigmoid学得慢,ReLU在特别深的神经网络上效果特别好
【官方双语】深度学习之梯度下降法 Part 2 ver 0.9 beta
代价函数
经验风险(Empirical Risk):代价的平均值
单个样本上代价也叫做Loss“损失/误差”,不过现在很多人都loss function,cost function混用了
代价函数=损失函数
输入:(13000多个)权重和偏置值
输出:一个数字,the cost
梯度下降法
梯度下降法:按照负梯度的倍数,不停调整函数输入值的过程
用斜率和每步的大小达到局部最优
让函数值最小的算法:先计算梯度,再按梯度反方向走一小步下山,然后循环
多元微积分
函数的梯度指出了函数的最陡增长方向
即:按梯度的方向走,函数值增长的最快
沿梯度的负方向走,函数值降低的最快
梯度向量的长度 代表了 这个最陡的斜坡有多陡
神经网络的本质:让代价函数的值最小,因此代价函数非常有必要是平滑的
这样才能每次挪一点点,最后找到一个局部最小值
这也是为什么人工神经元的激活值是连续的,而非直接沿袭生物学神经元那种二元式的
大小决定
哪些连线更重要
改变哪个参数,性价比最高
起码在这个取值范围内,改变x的值会造成更大影响
神奇的黑箱
Q&A
在随机打乱数据集标记后,发现仍能达到相同的训练准确率,就像用了个正确标记的数据集一样 即:这个网络数以百万计的权重足以让它记忆下所有随机的数据
也就是记住了整个正确分类的数据集
这些网络其实做到了更智能的东西
随机标记:代价下降特别慢,类似于线性下降,也就是很难找到可能存在的局部最小值,很难找到让准确率上升的权重
正确标记:一开始代价会浮动,然后就很快降到很低的地方了,也就是更容易找到局部最小值
如果数据集已经结构化了,那么就能更轻松找到局部最小
【官方双语】深度学习之反向传播算法 上/下 Part 3 ver 0.9 beta
反向传播算法(BP)
这个计算梯度的算法是神经网络的核心
作用:计算这个极其复杂的梯度
公式
输出层激活值的变动的大小应该与现在值和目标值之间的差呈正比
举例:增加数字“2”神经元的激活值就应该比减少数字“8”神经元的激活值来得重要
增加激活值
01 增加偏置
02 增加权重
03 改变上一层的激活值
赫布理论(生物神经学):一同激活的神经元关联在一起
目前只是在讨论单个训练样本对所有权重偏置的影响,如果只关注“2”,那么网络最后只会把所有图像都分类成是“2”,所以要对其他所有训练样本,同样过一遍反向传播,最后再取一个平均值
这里权重偏置的平均微调大小,不严格地说,就是代价函数的负梯度,至少是其标量的倍数
不严格:还没有准确地解释如何量化这些微调
随机梯度下降
实际操作中,如果梯度下降的每一步都用上每一个训练样本来计算的话,会很耗时,所以一般会这么做
01 把训练样本打乱,然后分成很多组mini-batch
假设每个mini-batch包含100个训练样本
02 然后算出这个mini-batch下降的一步
这不是代价函数真正的梯度,毕竟计算真实梯度得用上所有的样本,而非这个子集,所以这也不是下山最高效的一步
然而,每个mini-batch都会给你一个不错的近似
而且更重要的是,计算量会减轻不少
【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章
GPT:Generative Pre-trained Transformer 生成式预训练Transformer
Generative:用来生成新文本的机器人
Pre-trained:模型经历了从大量数据中学习的过程
预:模型能针对具体任务,通过额外训练来进行微调
Transformer:一种特殊的神经网络,一种机器学习模型
基于Transformer可以构建不同模型
voice-to-text 语音生成文本
文本生成语音
文本生成图片
机器翻译
Transformer概述
输入:一段文本,甚至伴随着一些图像和音频
输出:文段接下来的内容,即:接下来不同文本片段的概率分布
你可能会觉得预测下一个词和生成新文本的目标截然不同
要生成更长的文本,一个简单方法: 给它一个初始片段,然后从它给出的概率分布中取一个片段,追加到文末。再用所有文本,包括追加的内容,进行新一轮的预测
按理来说好像没什么用,用GPT-2生成毫无逻辑
GPT-3和GPT-2是同一个基础模型,但是大得多
数据如何在Transformer流动
01 Embedding
token:输入内容会被切分为许多小片段
文本中,token往往是单词或者单词片段
图像中,token是小块图像
语言中,token是声音片段
每个token对应一个向量,即一组数字,为了设法编码该片段的含义
如果将向量看作高维空间中的坐标,那么意思相近的词,对应的向量往往也相近
02 注意力模块(Attention block)
这些向量随后经过“注意力模块”处理,使得向量能够相互传递信息来更新自己的值
以多义词为例
比如,“机器学习模型”中的“模”的含义不同于“时尚模特”中的“模”
注意力模块的工作:就是找出上下文中的哪些词,会改变哪些词的含义,以及这些词应该更新为何种含义(语义)
而这些语义都已经通过某种形式完全编码进了这些向量
03 多层感知器/前馈层(Multilayer Perceptron, MLPs)
此阶段,向量不再相互交流,而是并行经历同一处理
有点像对每个向量提出一系列问题,然后根据这些问题的答案来更新向量
这两块的所有处理,本质都是大量的矩阵乘法
如何解读这些底层矩阵
两个模块是一个组合,一直迭代这个组合
04 Unembedding
最后的目标
能将整段文字的所有关键含义,以某种方式,融入到序列的最后一个向量
然后对这最后一个向量进行某种操作,得出所有可能token的概率分布,即每个小块文本接下来出现的概率
系统提示词(system prompt)
深度学习
深度学习是机器学习中的一种方法
机器学习
机器学习采用数据驱动、反馈到模型参数、指导模型行为
机器学习的理念
不要试图在代码中,明确定义如何执行一个任务,那是AI发展初期的做法
而是去构建一个具有可调参数的灵活架构,像是一堆旋钮和滑块
然后拿着大量实例,即给定一个输入时应该输出什么
线性回归
要让深度学习训练算法在大规模应用中有效运行,模型必须遵循某种特定的结构
深度学习模型展现出了出色的规模化能力,共同点是都使用相同的训练算法,即“反向传播”
首先,无论在构建何种模型,输入的格式必须为实数数组
可以是一维数组、二维数组、或是更常见的高维数组(张量Tensor)
权重(Weights):深度学习中,模型的参数
因为参数与待处理数据之间唯一的交互方式,就是通过“加权和”
矩阵向量相乘
虽然模型中也有一些非线性函数,但它们并不依赖于参数
GPT
GPT-3的参数有1750亿个,组成近28000个矩阵,矩阵分为8类
权重:是模型的大脑,决定了模型的行为模式
待处理的数据:仅仅编码了某次运行模型时的输入,比如一段示例文本
词嵌入
模型有一个预设的词汇库,包含所有可能的词汇
假设有50000个
嵌入矩阵(Embedding matrix)
每个词都对应一列——词向量
实际上维度更高
GPT-3有12288个维度
在空间中的方向,往往具有某种语义意义
一种形象的解释
目标:预测“女王”的位置
“女王”-“国王”≈“女人”-“男人”
女王的实际嵌入点,比这要偏离一点
家庭关系更符合这一规律
这个例子的结论:经过训练,模型觉得用空间中的一个方向编码性别信息,会更有优势
一个有意思的例子
两个向量的点积:值代表相似度,正负代表方向
相当于把人类语言语法以一种数学化的方式表达了出来
参数/权重的数量大小
总参数=token嵌入维度*token个数
6.17亿
这是词嵌入/词汇表的token
总参数≈1750亿
Attention
最开始,每个向量只能编码单个单词的含义,没有上下文信息
流经这种网络的目标:使这些向量能获得比单个词更丰富更具体的含义
上下文长度(Context size)
这种网络一次只能处理特定数量的向量,数量即上下文长度
GPT-3的上下文长度:2048
因此流经网络的数据有2048列
每列12288维
限制了Transformer在预测下一个词时能结合的文本量
目标输出:下一个可能token的概率分布
预测
01 首先用另一个矩阵,将上下文中的最后一个向量,映射到一个包含50000个值的列表,每个词对应词库里一个token
02 然后,一个函数将其归一化为概率分布,即softmax
为什么只用最后一个嵌入来做预测? 毕竟在最后一层中还有成千上万个其他的向量,都蕴含着丰富的上下文信息
因为在训练过程中,效率更高的方法是:利用最终层的每一个向量,同时预测一下紧随在这个向量之后的词
“马尔可夫链”
解嵌入矩阵(Unembedding matrix),记为Wu
和其他权重矩阵一样,它的初始值随机,但将在训练过程中学习
每行对应词汇库中的一词
每列对应一个嵌入维度
它与嵌入矩阵非常相似,只是行列对调
所以它也是6.17亿个参数
softmax
基本想法
若想将一串数字作为概率分布,比如所有可能下一个词的概率分布,那么每个值都必须介于0到1,并且总和为1
但是对于深度学习,每一步都像是矩阵向量乘法,那么默认输出完全不满足要求,经常会有负值,或是远大于1,而且几乎肯定不会总和为1
要把任意数列转化为合理概率分布,标准方法是使用softmax,它使最大值最接近1,而较小的数值则会非常接近0
具体原理
01 对每一项取以e为底的指数函数,使得数列中全是正数
02 然后求和
03 并将每一项除以该总和,得到归一化后的数列,它的总和为1
会发现,如果输入中某一项显著突出,那么输出中,对应项就会占绝对主导,这样从中抽样,几乎只会选到最大的输入值
但它比只选取最大值要柔和,即当有值靠近最大值时,概率分布中也会获得相当大的权重,并随着输入的连续变化,输出也连续变化
温度(Temp)
在某些情况下,比如ChatGPT利用该分布生成下一词时,可以给这个函数加入一点趣味性
叫温度,因为与某些热力学方程中温度的作用有些相似
给指数加个分母,常量T
当T较大时,会给低值赋予更多权重,使得分布更均匀一些
更有想象力,但是风险更大,可能会乱讲
当T较小时,较大的数值就会更占优势
生成的会比较没新意
当T为0,意味着所有权重都给到最大值,模型总是选择最可能的词
一般来说,API不允许T>2(人为限制)
输入输出
softmax的输出:概率(Probabilities)
softmax的输入:Logits
举例
输入一些文本,所有这些词嵌入都会流经网络,最后再与解嵌入矩阵相乘
预测下一个词的logits:原始的、未归一化的输出
【官方双语】直观解释注意力机制,Transformer的核心 |【深度学习第6章】
2017年《Attention is All You Need》
本章将深入探讨文章标题里的注意力机制是什么,并可视化其处理数据的过程
回顾Transformer
初始的token嵌入
多义词也是只有一个向量
因为初始的token嵌入,本质是没有上下文参照的查找表
向量的更新
要等到Transformer的这一步(Attention),周围的信息才能传递到该嵌入向量
嵌入空间中有多个方向,编码了[mole]一词的不同含义
而训练得好的注意力模块,能计算出,需要给初始的泛型嵌入加个什么向量,才能把它移动到上下文对应的具体方向上
tower
注意力模块不仅精细化了一个词的含义,还允许模型相互传递这些嵌入向量所蕴含的信息,甚至可以传递的很远
而且新嵌入向量的信息,可以比单个词丰富得多
预测下一个token的计算过程,完全基于序列中最后一个向量
举例来说,输入几乎整本推理小说
要预测:因此,凶手是?
如果模型要准确预测下一个词,该序列中的最后一个向量,即“是”的嵌入向量,必须经过所有注意力模块的更新,以包含远超单个词的信息量
也就是要设法编码整个上下文窗口中,与预测下一个词相关的所有信息
注意力模块(Attention)
单头注意力机制(Single head of attention)
叠甲过程
每个词的初始嵌入是一个高维向量,只编码了该单词的含义,和上下文没有关联
这么说其实也不太对
向量还编码了词的位置信息
现在,你只需知道该向量内的元素足以说明这个词是什么,以及它在文中的位置
用 E 表示嵌入向量
最后的目标是通过一系列计算,产生一组新的,更为精准的嵌入向量
qkv
查询(Query)
这样的提问被编码为另一个向量,也就是另一组数字,称为这个词的查询
查询向量的维度比嵌入向量小得多,例如只有128维
计算查询向量:先取一个矩阵(查询矩阵),记为WQ,再乘以嵌入向量
注意:每当我把矩阵放在箭头旁边,就表示用该矩阵,乘以箭头起点处的向量,得到箭头末端的向量
要训练的就是WQ
在这里,就是把查询矩阵分别与文中的所有嵌入向量相乘,给每个token算出一个查询向量
WQ矩阵内部的数值都是模型的参数,具体的行为模式是从数据中学得的
实际来看,这个矩阵在某个注意力头中的作用,非常难以解释
假设这个查询矩阵WQ,将嵌入空间中的名词映射到较小的查询空间中的某个方向,用向量来编码“寻找前置形容词”的概念
非名词的嵌入会怎样?黑箱
键(Key)
同时我们还需要第二个矩阵,叫做“键矩阵”,也会与每个嵌入向量相乘,产生第二个向量序列,称为“键”
从概念上讲,可以把“键”视为想要回答“查询”
键矩阵也填满了可调参数,和查询矩阵一样,也会将嵌入向量映射到相同的低维度空间
当键与查询的方向相对齐时,就能认为他们相匹配
就本例而言,键矩阵会将形容词“毛茸茸的”和“蓝色”映射到与名词“生物”对应的查询向量高度对齐的方向上
为了衡量每个键与每个查询的匹配程度,要计算所有可能的键-查询对之间的点积
我喜欢将其想象为充满圆点的网络,圆点越大,点积就越大,键与查询就越对齐
回到形容词-名词的例子
“Attend to”
反之将是较小值或负值,即这两个词互不相关
网络中的值,可以是负无穷到正无穷的任何实数 这个分数代表的是,每个词与更新其他词含义有多相关
这些分数的用法:就是对每一列进行加权求和,权重为相关性
这样一来,数值就不能是负无穷到正无穷,而是要介于0和1之间,而且每列总和为1,就像概率分布一样
因此对每列应用softmax函数进行归一化
注意力模式(Attention Pattern)
此时就能将每一列看作权重,表示左侧的键与顶部的查询 的相关度
论文原文
这里的Q和K分别包含了所有的查询向量和键向量,即通过将嵌入向量与查询矩阵和键矩阵相乘 得到的小向量
分子中的表达式,非常简洁地表示了 所有可能键-查询对之间点积的网络
技术细节:为了数值稳定性,建议将所有点积,除以键-查询空间维度的平方根
然后,整个表达式外层的softmax函数,应理解为逐列的计算
另一个技术细节
让它同时预测 每个初始token子序列之后,所有可能的下一个token
因为这样一个训练样本就能提供多次训练机会
掩码(masking)
就注意力模式而言
这意味着,不能让后词影响前词,不然就会泄露接下来的“答案”
也就是说,希望左下方 这些代表着后方token影响前方的位置,能被强制变为0
但如果直接设为0,每列总和就不再是1了,不再是归一化的了
所以常见方法是:在应用softmax之前,先把它们设为负无穷,这样应用softmax之后,它们就都会变为0,但列仍保持归一化
也有的注意力机制,不应用掩码
两个阶段里都会采用掩码,以防止后方token影响到前方token
注意力模式的大小等于上下文长度的平方
这就是为何上下文长度会成为大语言模型的巨大瓶颈
出于对更大上下文窗口的渴求,近年来,注意力机制出现了一些变体,旨在使上下文更具拓展性
值(Value)
算出该模式,就能让模型推断出每个词与其他哪些词有关,然后要做的,就是去更新嵌入向量,把各个词的信息,传递给与之相关的其他词
这个方法会用到第三个矩阵,我们称之为“值矩阵”(Value Matrix)
值矩阵(Value Matrix)乘以前面那个词的嵌入,得到的结果就是值向量(Value)
"单头注意力"机制
回过头来看网络图,这时候就不用管键和查询了,毕竟算出注意力模式后,这些都用不着了
这时用值矩阵分别乘以嵌入向量,就可以得到一系列向量
这些值向量,可以想成是 与对应的键向量相关联
对于网络中的每一列,你需要给每个值向量乘上该列的对应权重
例如,这里对于“生物”一词的嵌入,要加上“毛茸茸的”和“蓝色”的值向量 的大部分贡献
而其他词的值向量,贡献不是归零,就是在归零的路上
最后,为了更新该列对应的嵌入向量
也就是一上来没有上下文含义的“生物”的词嵌入
要做的是,将该列中所有带权值向量加和,得到想要引入的变化量,记为DE,然后把它加入到原始嵌入向量上。预期是能得到一个更精准的向量,编码了更丰富的上下文信息,比如一个“毛茸茸的蓝色生物”
当然,不能只对一个嵌入进行处理,而是对所有列分别进行加权求和,得到一系列变化量,将所有变化量加到对应的嵌入向量上,从而通过注意力机制,得到一系列更精准的嵌入向量
这个过程由三种填满了可调参数的矩阵实现
即 键矩阵、查询矩阵、值矩阵
GPT-3的总参数量
键矩阵和查询矩阵各有12288列,对应了嵌入维度,以及128行,对应了较小的键-查询空间维度,这样就各有约150万个参数
而对于值矩阵,是一个12288列12288行的方阵,因为它的输入和输出,都存在于高维的嵌入空间,即1.5亿个参数
设计上,值矩阵的参数量,可以比键矩阵和查询矩阵多几个数量级
但实际上,更高效的做法是:让值矩阵所需要的参数量 等于 键矩阵和查询矩阵的参数量之和 对于并行运行多个注意力来说,这一点尤为重要
将值矩阵分解为两个小矩阵相乘
从概念上,建议把它整体视为一个线性映射,输入和输出都在这个高维的嵌入空间
在实践上分为两个步骤
右边的第一个矩阵的行数较少,通常等于键-查询空间的维度
可以看作是,将较大的嵌入向量降维到较小的空间
值¯矩阵
左侧的第二个矩阵,则是从小空间映射回嵌入空间,得到的是用于实际更新的向量
值矩阵
用线性代数的话来讲,这种操作的实质就是: 对大矩阵进行“低秩分解”
一个注意力头包含约630万个参数
交叉注意力(Cross-attention)
目前讨论的都是“自注意力”头(Self-attention),与其他模型中的变体“交叉注意力”头(Cross-attention)有所不同
交叉注意力涉及的模型,会处理两种不同类型数据
原文与正在被翻译出来的译文
语音音频与正在被转录出来的文字
交叉注意力和自注意力几乎相同
唯一的区别是:键和查询矩阵作用于不同的数据集
例如 文本翻译模型中,键可能来自一种语言,而查询则来自另一种语言
可以描述 一种语言中的哪些词,对应另一种语言中的哪些词
在这种情况下,通常不会用到掩码
因为不存在后面token影响前面token的问题
多头注意力机制(Multi-head attention)
如何多次重复这一过程
每一种不同的上下文更新方式,键矩阵和查询矩阵的参数都会有所改变,以捕捉不同的注意力模式,而值矩阵的参数,也会因嵌入的更新值不同而改变
GPT-3每个模块内使用96个注意力头
意味着有96个不同的键和查询矩阵,产生96种不同的注意力模式
每个注意力头都有独特的值矩阵,用来产生96个值向量序列
全部都将以对应注意力模式作为权重,分别进行加权求和
也就是,对于上下文中的每个位置,也就是每个token,每个头都会给出一个要加入到该位置的嵌入中的变化量
把各个头给出的变化量加起来,然后给该位置的初始嵌入加上这个加和
这个总和,就是多头注意力模块输出的一列
子主题
通过并行多头运算,模型能学习到根据上下文来改变语义的多种方式
参数量
一共96个头
每个头都包括这四个矩阵
每个多头注意力模块,最终会有大约6亿个参数
这些“值矩阵”会合在一起被称作“输出矩阵”,与整个多头注意力模块相关联
而单个注意力头的值矩阵,则单指第一步的矩阵,即 将嵌入向量投影到低维度空间的“值¯矩阵”
“大概意思是说把一堆矩阵拼在一起然后乘一次,和分开乘96次数学上完全等价”
后续
流经Transformer的数据,并不只是经过单个注意力模块: 首先,它之后还会经过“多层感知器”模块,这将在下一章详细描述; 其次,它还会多次重复这两种操作
这意味着,某个词吸收了一些上下文信息后,含义细致的嵌入向量还有更多的机会被周围含义细致的词语所影响
越是接近网络的深处,每个嵌入就会从其他嵌入中吸收越多的含义,使得嵌入本身也越来越细致丰富
理论来说,对于输入的内容,这样能提炼出更高级、更抽象的概念,而不仅仅是修饰和语法结构,也许还包括情感、语气、诗意,以及话题涉及的科学原理等
GPT-3包括96个不同的层,因此键-查询值的参数总数,还得再乘以96,使得所有注意力头参数总数,将近580亿个,但只占网络总参数量1750亿的三分之一
因此,尽管注意力机制,吸引了所有的注意力,但实际上更多的参数来自于其间的模块
注意力机制成功的主要原因,并不在于它能实现什么特定的行为,而是它的可并行性,能用GPU在短时间内运行大量计算,可以轻易扩大规模
【官方双语】直观解释大语言模型如何储存事实 | 【深度学习第7章】
多层感知器(Multilayer Perceptron, MLP)
事实似乎存储在神经网络中的一个特定部分,即“多层感知器(MLP)”
这部分的计算相对简单,尤其是和注意力机制比的话,本质上就是一对矩阵乘法,里面夹了个简单运算
例子:模型如何存储“迈克尔乔丹打篮球”这一事实
对高维空间做一些假设
首先,假设一个方向代表“名字是迈克尔”的概念
另一个几乎垂直的方向代表“姓氏是乔丹”的概念
第三个方向则代表“篮球”的概念
从神经网络中提取一个正在处理的向量
若其与“名字迈克尔”方向的点积为1,就说明该向量编码了一个名字为迈克尔的人
否则,点积为0或负数,说明该向量与该方向不一致
假设一个向量代表全名“迈克尔·乔丹”
那么它与这两个方向的点积都必为1
由于这一文本跨越两个token,我们假设前面的注意力模块成功将信息转递给这两个向量的第二个,确保能编码全名
多层感知器内部发生了什么?
概述
要注意,每个向量最初都对应输入文本的一个token
每个单独的向量,都会通过一些操作,最终得到另一个维数相同的向量
将得到的向量与原本的向量相加,相加的结果就是输出值
这一系列操作会对每个向量进行,对应输入的每个token,全部并行运算
要注意,在这一步中,向量之间不会相互交流
Linear
将输入向量与一个超大矩阵相乘
一个理解矩阵乘法的好方式
想象矩阵的每一行都是一个向量
每一行都与正在处理的向量作点积,后者作为E,表示嵌入向量
向量分配律
偏置(bias)
这一步通常还会在输出中加入另一个向量,也是由训练集习得的模型参数组成
使得当且仅当编码了全名“迈克尔·乔丹”时,输出值为正数,否则为0或负数
矩阵的总行数,可以看作被提问的数量
在GPT-3的例子中,这个数字略少于50000
实际上恰好是嵌入空间维数的四倍(这只是设计选择,可以随意改变)
但通常整数倍对硬件更友好
由于这一充满权重的矩阵,将向量映射到更高维的空间,将其记为W
继续用E表示正在处理的向量
偏置向量记为B
ReLU
问题在于上一步操作是纯线性的,但语言是高度非线性过程
所以下一步需要让这个大的过程向量,通过一个简单的非线性函数
通常选择是将负值映射为0,正值不变
线性整流函数(线性修正单元)(ReLU)
延续深度学习花哨取名的传统
其实是一个简单的函数,就像“与门”
截断函数
很多模型会用一个稍作修改的函数GELU,基本形状相同,只是平滑一点
但就学习的目的,只考虑ReLU会更清晰
人们提到Transformer的“神经元”时指的就是这些值
经典的点线神经网络示意图也是
通常表示这一线性步骤(矩阵乘法)和简单的逐项非线性函数(如ReLU)的组合
该值为正时,神经元处于激活状态
该值为0时,神经元未激活
Linear
这一步和第一步很像,先左乘一个超大矩阵,然后加一个偏置项
降维投影矩阵:此处,输出向量的维数降回到嵌入空间的维数
这次改成逐列来考虑
另一个理解矩阵乘法的方式
将矩阵的每一列 乘以向量的对应项,然后将缩放后的列向量相加
这样思考更合适是因为
这里的列向量与嵌入空间维度相同,因此能将其视为该空间中的方向
矩阵的其他列会说明:如果对应的神经元活跃,最终结果中会加入哪些信息
此处的偏置就是:无论神经元值是多少,都往上加的东西
以GPT-3为例,这部分的神经元数=50000*输入的token数
这种结构是最基础的神经网络类型
GPT-3参数
偏置显得微不足道
96层多层感知器
占据神经网络总参数的2/3
1750
回顾
第一个矩阵的行可以视为嵌入空间中的方向,这意味着每个神经元的激活状态,能够说明给定向量与特定方向的一致程度 第二个矩阵中的列能够说明若该神经元被激活,则将在结果添加什么信息
这两点都是数学事实
然而,证据表明,单个神经元几乎不会代表像“迈克尔·乔丹”这样的单一特征
理由甚至非常充分,这与如今在可解释性研究人员中流传的一种概念有关——叠加(Superposition)
这假设有助于解释,为什么模型难以解释,以及为什么模型拓展性出奇地好
基本思想:在一个N维空间中,若是想用一堆正交基,表示各种不同的特征,那么最多只能容纳N个向量,即维数N
对数学家来说,这其实就是维数的定义
有趣之处在于,若是放宽一点限制,容忍一些噪声,比如允许这些特征对应的向量并不完全垂直,而是几近垂直,比如89~91之间
若是在二维和三维空间中,这没什么区别, 几乎没有额外空间容纳更多的向量
Python程序
向量数比维数高10倍
优化,迭代,使两两之间的角度尽可能靠近90
89~91之间
通常来说,“约翰逊-林登斯特劳斯引理”的一个结果是:能在空间中塞进几乎垂直的向量数量,随维数增加指数增长
这对LLM意义重大,能将相互独立的概念与几乎垂直的向量相关联而受益
意味着能在有限的空间维数中,存储数量多得多的各种概念
这可能部分解释了为什么模型性能随规模扩大而提升显著
有着十倍维数的空间,能存储远超十倍的独立概念数
也就是说,以GPT-3的规模,其探测的特征远不止50000个,而是利用空间中几乎垂直的方向,大幅度扩充了容量,大幅度提升了探测的特征数
“稀疏自编码器”