← 全部极客知识库

大模型通识 / AI 理论基础

5. 模型怎样表示信息:从数字、向量到学到的特征

原文备份 · 第 6 / 14 篇 · 查看极客时间原知识库 ↗

本篇目录 · 7 节

来源:AI 理论基础

你的复习助手现在已经有了一批来源清楚、内容完整的笔记。接下来,你希望它在打开一篇笔记时,推荐几篇相关材料。

人看到“网页布局”和“CSS 排版”,容易判断它们可能相关;程序却需要一种可计算的比较方式。直接比较文件名不够,数相同的字也不一定有效。另一边,一张纸质笔记的照片又完全不是一串普通文字。

要处理这些信息,必须先解决“表示”的问题:用什么数字保存输入,又用什么计算把它变成适合任务的形式?

本篇从可以手算的小例子解释标量、向量、矩阵,以及模型学到的表示。读完后,你应该能看懂一组数字的形状,完成一次简单的相近程度比较,并解释为什么向量不等于语义、向量维数也不等于模型参数量。下面的数据全部是教学构造,没有调用真实嵌入模型,不需要安装软件。

一个数字,怎样变成一组数字

先暂时离开电子笔记,看看两本纸质笔记本。

假设你想按页数与价格寻找相近商品,可以约定:每本用两个数字记录,第一个是页数,第二个是以元计的价格。

笔记本甲:[80, 12]
笔记本乙:[100, 10]
约定顺序:[页数, 价格(元)]

单独的一个数,例如价格 12,可以称为标量,scalar。按照固定顺序排列的一组数,例如 [80, 12],可以用作一个向量,vector。这里向量包含两个分量,也就说它是二维向量。

在机器学习的这个语境里,可以先把向量理解为一条有固定位置含义的数字记录;矩阵则把数字按行和列组织起来。这些是后续模型计算常用的基本对象。《动手学深度学习》:线性代数基础

顺序不能随便变。[80, 12] 与 [12, 80] 包含相同的两个数,在刚才的约定下却描述不同商品。单位也不能混用:把 12 元记成 1200 分之后,比较方法就必须相应处理,不能直接拿它与按元记录的数据相减。

因此,“变成向量”并不是某种理解过程。我们还没有训练模型,只是规定了一种表示。它保留了页数和价格,却没有保留封面颜色、纸张手感和装订方式。如果推荐结果忽略了你最在意的纸张,可能是表示里根本没有相关信息。

给笔记做一个最简单的向量

回到电子笔记。我们先采用很粗糙的规则:只数正文中 CSS 和 SQL 两个字符串出现的次数,并固定顺序为 [CSS 次数, SQL 次数]。

假设三篇笔记得到以下计数:

笔记 CSS 次数 SQL 次数 向量
A:以网页样式为主 8 1 [8, 1]
B:以页面布局为主 7 2 [7, 2]
C:以数据库查询为主 1 8 [1, 8]

这些次数为演示而设定,不是对本表标题进行实际统计。它们表示假想正文的计数。

如果把三条向量按行放在一起,会得到一个三行两列的矩阵,matrix:

         CSS  SQL
笔记 A    8    1
笔记 B    7    2
笔记 C    1    8

形状:3 × 2,即 3 个样本、每个样本 2 个特征。

这里的行与列承担不同职责。新增一篇笔记,会多一行;增加一个统计词,会多一列。三个样本不意味着“三维特征”,它们仍然各自用二维向量表示。

程序里的形状信息,也就是常见的 shape,就是在说明这些轴上各有多少元素。先读清每个轴代表什么,比背“模型输入是一个矩阵”更有用。

数字准备好了,怎样计算“更接近”

对这三个向量,我们选一种简单比较方式:同位置相减,把差平方,再加起来。

A 与 B 的差异值:
(8 − 7)² + (1 − 2)² = 1 + 1 = 2

A 与 C 的差异值:
(8 − 1)² + (1 − 8)² = 49 + 49 = 98

上标 2 表示这个数乘以自身,例如 (-1)²=1。这个差异值叫作欧氏距离的平方。真正的欧氏距离还要开平方,不过这里只比较大小,开平方不会改变排序,所以可以省掉这一步。

按照选定的表示与比较方式,B 比 C 更接近 A。于是,一个极简的推荐程序就可以把 B 排在 C 前面。

这一步说明,向量让某些比较变成了明确的计算。但它只证明两组关键词计数接近,没有证明文章一定讨论同一个问题。

例如,一篇只写“样式、排版、布局”的笔记可能一次也没出现 CSS,得到 [0,0];一篇介绍数据库但主要写“查询、索引、事务”的笔记,也可能得到 [0,0]。在这个表示中,它们的差异值为 0,尽管内容未必相近。

问题不是距离公式算错了,而是两个数字丢掉了太多信息。同样,把 A 全文复制一遍,就可能得到 [16,2]。主题没变,原始计数与距离却变了。用不用词频比例、怎样处理文章长度,都是表示设计的一部分。

前面的商品例子还有单位问题。直接比较“页数差”和“价格差”,实际上已经隐含了两种差异如何相互权衡;把元换成分会大幅改变价格项的数值。距离的意义依赖表示、尺度和任务,不能脱离这些条件理解。

图片也是数字,但数字排列有意义

文字可以先数词,图片又怎么办?

先看一张只有 2×2 个像素的灰度小图。约定每个像素用 0 到 255 之间的整数表示,0 是黑,255 是白:

视觉位置:     对应数值:
黑  白         0   255
白  黑       255     0

它可以表示为两行两列的矩阵。如果约定逐行读取,也可以展开成 [0,255,255,0]。只要保留读取顺序和原始形状,展开本身不必丢失像素信息;但后续计算是否有效利用上下、左右的关系,是另一件事。

彩色图片通常还要记录红、绿、蓝三个颜色通道。按“高、宽、通道”的约定,一张 2×2 的 RGB 图片可以组织为形状 2×2×3 的数组,共 12 个数。这里的“通道”,就是在同一像素位置分别存放不同颜色分量。

有更多轴的这类数组,在深度学习代码中通常统称为张量,tensor;向量与矩阵也可以看成它的简单情形。不同软件可能把通道放在不同轴,因此读代码时还要确认约定,不能只数出几个维度就直接使用。

这里容易混淆两种“维”:说一个向量是四维,指它有四个分量;说一个数组有三个轴,指需要三个位置索引来找到一个元素。2×2×3 有三个轴、十二个数,并不是一个只有三个分量的向量。

像素值仍然只是输入表示。它们没有直接写着“这是猫”或“这是课堂笔记”。同一张照片换个光照,许多像素都会改变;任务通常需要模型进一步提取比逐像素相等更有用的特征。

从人挑特征,走向学习怎样表示

刚才的关键词次数是人决定的:看哪两个词、怎样计数,都提前写在程序里。这种办法容易检查,但遇到同义表达、语序或上下文变化时,往往需要不断补规则。

另一条路线是把生成表示的过程也放进模型,让训练根据任务需要调整它。这个方向通常叫作表示学习,representation learning。相关研究关注的正是:怎样获得有助于后续任务的表示,而不完全依赖人为指定的一小组特征。表示学习研究综述

可以把两种路线放在一起看:

人工特征路线:
笔记 → 按预设规则统计 CSS/SQL → [8,1] → 比较或分类

学习表示路线:
笔记 → 可训练的编码过程 → 一组学到的特征值 → 比较或分类
                 ↑                         │
                 └──── 训练目标提供改进信号 ───┘

“编码过程”在这里就是把输入变成另一种表示的计算过程,不是指加密。

举一个训练目标的示意:如果希望找出表述不同但主题接近的笔记,可以准备相近与不相近的文本对,用目标函数鼓励适合匹配的文本表示更接近、不适合匹配的表示更容易区分。模型通过调整参数改变这种映射。实际方法有很多种,并不是所有表示学习都采用成对比较。

这与上一篇并不矛盾:训练目标和数据决定了模型受到什么信号,表示学习让模型有机会调整“利用哪些线索、怎样组合线索”。它并不能保证自动保留所有重要信息。

对图片也一样,学习的表示可以用于突出与识别任务有关的图案,减少某些无关变化的影响。但没有必要假定每一层必定对应一个人能准确命名的概念;更不能认为只要层数够多,就自然学到了我们想要的特征。神经网络怎样完成这些变换,第 07 篇再拆开讲。

Embedding:把对象放进可以比较的表示空间

接触大模型应用时,你会频繁看到 Embedding,嵌入。在这里,可以把它理解为把词、句子或其他对象映射为向量表示;常见的学习型嵌入希望通过向量之间的关系,表达对任务有用的联系。

比如,对一个适合语义匹配的模型,我们希望“怎样调整网页排版”和“CSS 布局方法”的向量比较接近,即使两句话几乎没有相同词。但能否做到、哪些表达容易出错,要用实际模型检查。本篇没有生成它们的真实向量,也不预设相似度分数。

词向量研究曾展示从文本学习连续向量表示的路线;Sentence-BERT 则研究了适合句子比较的嵌入。这提醒我们,词、句子和整篇材料可以有不同的表示方式,不能随便取一个模型的内部数字,就认为它天然适合检索。词向量原论文、Sentence-BERT 原论文

学习到的向量往往不像 [页数,价格] 那样,每个位置都有清楚的中文名字。不能看到一个三维演示,就推断真实嵌入的第一个数字是“前端程度”、第二个是“数据库程度”。它们的各个分量通常共同参与表达关系,单独一维未必能被简单解释;表示也会随任务而不同。Google:实际嵌入空间

这里还有三条直接影响开发的边界。

第一,维数相同,不代表可以混用。 两个不同模型都输出几百个数字,不说明它们采用相同的表示空间。就像两套商品记录都写两个数,一套是页数和价格,另一套是重量和厚度,直接逐项比较就失去了原来的意义。实际使用应采用彼此兼容、按模型要求生成的查询与资料表示。

第二,接近不等于事实相同。 “这个操作需要登录”和“这个操作不需要登录”讨论相同对象,关键结论却相反。即使某个模型把它们排得很近,也不能据此认定它们互相支持。相似度通常帮助找候选资料,最终还要阅读内容。

第三,生成一个向量不等于训练一次模型。 已训练的编码模型处理新笔记时,可以在参数不变的情况下输出新向量。把向量存进资料库,改变的是保存的数据,不等于模型参数发生变化。判断一个数组是不是参数,要看它在计算中的作用,不能只看它是不是一组数字。

至于欧氏距离、余弦相似度等比较方法怎么选择,以及嵌入如何参与检索,第二部分第 10 篇会结合应用讲。本篇先建立表示与计算之间的关系。

用几个小问题,检查自己有没有把数字看明白

仍然使用前面的三个向量:A=[8,1],B=[7,2],C=[1,8]。新笔记 Q 的计数为 [6,2]。

  1. 按“对应分量相减、平方、求和”的方法,Q 与哪篇最接近?
  2. 把 Q 加进三行两列的表,矩阵形状变成什么?每篇笔记变成三维了吗?
  3. 两篇内容完全不同的文章都没有出现 CSS 或 SQL,它们在这个表示下距离为 0,能说明内容相同吗?
  4. 一个模型输出 768 个数的笔记向量,能否据此说这个模型只有 768 个参数?
  5. 一张 2×2 的 RGB 图片按“高、宽、通道”保存,共有几个轴、几个数?

第 1 题: 与 B 最接近。计算如下:

Q 与 A:(6−8)² + (2−1)² = 5
Q 与 B:(6−7)² + (2−2)² = 1
Q 与 C:(6−1)² + (2−8)² = 61

这个答案只在当前计数表示和比较方法下成立,不能把它当作真实语义匹配结果。

第 2 题: 变成 4×2,四个样本、每个两个特征。增加样本与增加特征,是不同操作。

第 3 题: 不能。两个表示相同,可能只是这套表示没有保留区分它们的信息。

第 4 题: 不能。768 描述这次输出向量的维数;模型参数是决定如何计算的内部数值,其数量不能从输出长度直接推断。这个数字只是假定的输出长度,不指某款产品。

第 5 题: 三个轴,2×2×3=12 个数。若把它们按确定顺序展开,可以得到十二个分量的向量;要还原像素位置,仍须知道原来的形状和顺序。

现在,当你再看到“把资料转成向量”时,已经可以追问:哪些信息被保留了,形状与顺序是什么,表示是人工设计还是训练得到的,比较方法能支持什么结论?下一篇会继续解释训练过程的另一半:模型给出预测后,怎样用概率与损失衡量它需要改进多少。


上一篇:04|数据怎样决定模型能学到什么

下一篇:06|概率、预测与损失:模型怎样知道自己需要改进

返回:第一部分大纲