Elasticsearch:标量量化 101 - scalar quantization 101

作者:BENJAMIN TRENT

什么是标量量化以及它是如何工作的?

大多数嵌入模型输出 float32 向量值。 虽然这提供了最高的保真度,但考虑到向量中实际重要的信息,这是浪费的。 在给定的数据集中,嵌入永远不需要每个单独维度的所有 20 亿个选项。 对于高维向量(例如 386 维及更高维)尤其如此。 量化允许以有损方式对向量进行编码,从而稍微降低保真度并节省大量空间。

桶里的乐趣

标量量化采用每个向量维度并将它们分成一些较小的数据类型。 对于博客的其余部分,我们将假设将 float32 值量化为 int8。 要准确地对值进行分桶,并不像将浮点值四舍五入到最接近的整数那么简单。 许多模型输出的向量的维度连续在 [−1.0,1.0] 范围内。 因此,两个不同的向量值 0.123 和 0.321 都可以向下舍入为 0。最终,向量将仅使用 int8 中 255 个可用存储桶中的 2 个,丢失太多信息。

图 1:量化目标的图示,将从 -1.0 到 1.0 的连续值分桶为离散的 int8 值。

数值转换背后的数学并不太复杂。 由于我们可以计算浮点范围的最小值和最大值,因此我们可以线性移动这些值,然后对中间的值进行存储。

图 2:int8 和 float32 之间转换的方程式。 请注意,这些是有损变换并且不精确。 在下面的示例中,我们仅使用 int8 内的正值。 这与 Lucene 实现一致。

桶里的乐趣

分位数 (quantile) 是包含一定百分比值的分布切片。 所以,举例来说,我们的浮点值可能有 99% 都在 [−0.75, 0.86] 之间,而不是真正的最小值和最大值 [−1.0,1.0] 之间。 任何小于 -0.75 和大于 0.86 的值都被视为异常值。 如果你在尝试量化结果时包含异常值,则最常见值的可用存储桶将会减少。 更少的存储桶意味着更低的准确性,从而导致更大的信息损失。

图 3:99% 置信区间和各个分位数值的图示。 所有值的 99% 都落在 [−0.75,0.86] 范围内。

这一切都很好,但是既然我们知道如何量化值,那么我们如何实际计算两个量化向量之间的距离呢? 它和普通的点积 (dot_product) 一样简单吗?

是时候记住你的代数了

我们仍然缺少一个重要的部分,即如何计算两个量化向量之间的距离。 虽然我们在这个博客中还没有回避数学,但我们即将做更多的事情。 是时候拿出你的铅笔来尝试记住多项式和基本代数了。

dot_product 和 cosine 相似度的基本要求是能够将浮点值相乘并将它们的结果相加。 我们已经知道如何在 float32 和 int8 值之间进行转换,那么我们的转换中的乘法是什么样的呢?

然后我们可以展开这个乘法,为了简化,我们将用 α 代替 (max-min)/127

更有趣的是,这个方程只有一部分需要同时使用两个值。 然而,dot_product 不仅仅是两个浮点数相乘,而是向量每个维度的所有浮点数相乘。 有了向量维度计数 dim,以下所有内容都可以在查询时和存储时预先计算。

并且可以存储为单个浮点值。

可以预先计算并存储为单个浮点值或在查询时计算一次。

可以预先计算并存储为单个浮点值。

所有这一切:

dot_product 所需的唯一计算就是 dotProduct(int8,int8′) 以及一些预先计算的值与结果相结合。

但是,这如何准确呢?

那么,这到底有多准确呢? 我们不会因为量化而丢失信息吗? 是的,我们是,但是量化利用了我们不需要所有信息的事实。 对于学习嵌入模型,各个维度的分布通常不存在肥尾 (fat-tails)。 这意味着它们是本地化的并且相当一致。 此外,通过量化每个维度引入的误差是独立的。 这意味着,对于我们典型的向量运算(如 dot_product)来说,错误被抵消了。

结论

哇,这真是太多了。 但现在你已经很好地掌握了量化的技术优势、其背后的数学原理,以及如何在考虑线性变换的同时计算向量之间的距离。 接下来看看我们如何在 Lucene 中实现这一点,以及其中的一些独特的挑战和优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/123846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)

本文主要讲述了一体化模型进行去噪、去雨、去模糊,也就是说,一个模型就可以完成上述三个任务。实现了良好的图像复原功能! 先来看一下美女复原.jpg 具体的: 在图像恢复任务中,需要在恢复图像的过程中保持空间细节…

vue使用百度富文本

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 1、下载UEditor 链接已放到文章中了 2、上传到项目目录中 一般上传到public下,方便到时候打包进去,以免…

InnoDB - 双写机制

双写机制用于提高数据持久性和可靠性。 双写机制的核心思想是,将写操作先写入一个临时缓冲区,然后再写入实际的数据文件。这个临时缓冲区通常是固定大小的内存缓冲区,称为双写缓冲。这个机制的主要目的是避免数据文件在写入时出现损坏或数据…

2.6、微调算法

前言 在 PPQ 中我们目前提供两种不同的算法帮助你微调网络 这些算法将使用 calibration dataset 中的数据,对网络权重展开重训练 经过训练的网络不保证中间结果与原来能够对齐,在进行误差分析时你需要注意这一点 在训练中使用 with ENABLE_CUDA_KERNEL…

Ubuntu学习---跟着绍发学linux课程记录(第4部分)

第3部份内容记录在:Ubuntu学习—跟着绍发学linux课程记录(第3部分) 文章目录 14 ubuntu服务器上的java14.1 Java的安装14.2 运行java程序14.3 Java启动脚本 15 ubuntu服务器上的tomcat15.1 Tomcat服务器15.2 Tomcat的配置15.3 Tomcat启动日志…

加速度中标云尖信息「电子元器件商城」开发项目——加速度jsudo

深圳市加速度软件开发有限公司在电子元器件和工业品行业有着多年得商城开发经验,服务过半导体、元器件、工业品行业的多家上市公司或实力工厂。选择加速度合作的60%的客户,或多或少都有踩坑的经历,这一次他们在选择商城开发商的时候格外谨慎&…

Spring@Lazy是如何解决构造函数循环依赖问题

Spring实例化源码解析之循环依赖CircularReference这章的最后我们提了一个构造函数形成的循环依赖问题,本章就是讲解利用Lazy注解如何解决构造函数循环依赖和其原理。 准备工作 首先创建两个构造函数循环依赖的类,TestA和TestB,代码如下&am…

qt-C++笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度

qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度 code review! 文章目录 qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt7.上述代码中QVBoxLayout&#xff0c…

世界前沿技术发展报告2023《世界航空技术发展报告》(四)无人机技术

(四)无人机技术 1.无人作战飞机1.1 美国空军披露可与下一代战斗机编组作战的协同式无人作战飞机项目1.2 俄罗斯无人作战飞机取得重要进展 2.支援保障无人机2.1 欧洲无人机项目通过首个里程碑2.2 美国海军继续开展MQ-25无人加油机测试工作 3.微小型无人机…

TextureView和SurfaceView

1、Surface Surface对应了一块屏幕的缓冲区,每一个window对应一个Surface,任何View都是画在Surface上的,传统的View共享一块屏幕缓冲区,所有的绘制都必须在UI线程上进行。 2、SurfaceView 顾名思义就是Surface的View,…

NSS刷题 js前端修改 os.path.join漏洞

打算刷一遍nssweb题(任重道远) 前面很简单 都是签到题 这里主要记录一下没想到的题目 [GDOUCTF 2023]hate eat snake 这里 是对js的处理 有弹窗 说明可能存在 alert 我们去看看js 这里进行了判断 如果 getScore>-0x1e9* 我们结合上面 我觉得是6…

数据结构 -- ArrayList与LinkedList的区别

一、二者的相同点 1,它们都是继承自List接口。 二、二者的区别 1,数据结构:ArrayList是(Array动态数组)的数据结构;而LinkedList是(Link双向链表)的数据结构。ArrayList 自由性较…

RabbitMQ基础

目录 RabbitMQ的可靠性投递 确保消息正确地发送至 RabbitMQ 确保消息接收方消费了消息 流程分析 1.生产者发送消息给Broker 2.交换机路由消息到队列 3.消息存储在队列 4.消费者订阅并消费消息 三个重要概念 RabbitMQ集群模式 RabbitMQ的可靠性投递 在 RabbitMQ 中&a…

BUUCTF qr 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 这是一个二维码,谁用谁知道! 密文: 下载附件,得到一张二维码图片。 解题思路: 1、这是一道签到题,扫描二维码得到flag。 flag:…

一文了解Elasticsearch

数据分类 数据按数据结构分类主要有三种:结构化数据、半结构化数据和非结构化数据。 结构化数据 结构化数据具有明确定义数据模型和格式的数据类型。 特点: 数据具有固定的结构和模式。 数据项明确定义数据类型和长度。 适合用于数据查询、过滤和分…

377. 组合总和 Ⅳ 70.魔改爬楼梯

377. 组合总和 Ⅳ 题目: 给一个正整数数组和一个正整数目标值,数组的每个元素可取无限次,求总额达到目标值的最大排列数。 dp[j]含义: dp[j]:达到目标值j的整数组合数为dp[j] 递推公式: 求装满背包有几…

在CARLA中手动开车,添加双目相机stereo camera,激光雷达Lidar

CARLA的使用逻辑: 首先创建客户端 设置如果2秒没有从服务器返回任何内容,则终止 client carla.Client("127.0.0.1", 2000) client.set_timeout(2.0) 从客户端中get world world client.get_world() 设置setting并应用 这里使用固定时…

【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性

🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入门技术皆在 我…

【年终特惠】基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升

根据生态环评内容庞杂、综合性强的特点,依据生态环评最新导则,将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

前端Vue页面中如何展示本地图片

<el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"imgUrl" label"图片"><template v-slot"scope"><img :src "http://localhost:8888/image/ scope.row.imgUrl&qu…