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 中实现这一点,以及其中的一些独特的挑战和优势。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java项目之驾校预约管理系统(ssm框架)

项目简介 校预约管理系统实现了以下功能: 管理员:首页、个人中心、学员管理、驾校教练管理、驾校车辆管理、预约管理、取消预约管理、驾校公告管理、系统管理。驾校教练:首页、个人中心、驾校教练管理、预约管理、取消预约管理。学员&#…

编译环境里存在yaml-cpp的多个版本时可能引起的问题

有时要编译的程序自带了特定版本的yaml-cpp,同时系统目录下也安装了更高版本的yaml-cpp,这时可能引起编译错误,就是某些yaml-cpp的API不认识,例如: 出现这种问题倒好办,正常情况下不可能,肯定能…

【Unity PlasticSCM】记录:从介绍 下载 到拉取项目

实习的时候项目是svn管理的,这次mini的项目管理最后选择了美术策划友好的plasticSCM,但之前没有接触过,所以决定花费一点时间去了解,然后记录一下中间遇到的一些问题。 了解及下载Plastic b站很详细介绍PlasticSCM:Un…

电力巡检/电力抢修行业解决方案:AI+视频技术助力解决巡检监管难题

一、行业背景 随着国民经济的蓬勃发展,工业用电和居民用电需求迅速增加,电厂、变电站、输电线路高负荷运转,一旦某个节点发生故障,对生产、生活造成巨大的影响。目前电力行业生产现场人员、设备较多,而生产监督员有限…

JMeter简单使用

JMeter是一个功能强大的开源性能测试工具,用于对各种应用程序、协议和服务器进行性能和负载测试。它被广泛用于测试Web应用程序的性能,并可以模拟多种负载条件和行为。 JMeter使用 添加线程组 设置线程组的配置 设置请求 配置请求 添加监听器 查看压…

【网络安全】Seeker内网穿透追踪定位

Seeker追踪定位对方精确位置 前言一、kali安装二、seeker定位1、ngrok平台注册2、获取一次性邮箱地址3、ngrok平台登录4、ngrok下载5、ngrok令牌授权6、seeker下载7、运行seeker定位8、运行隧道开启监听9、伪装链接10、用户点击(获取定位成功)11、利用经…

2023年N1叉车司机证模拟考试题库及N1叉车司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年N1叉车司机证模拟考试题库及N1叉车司机理论考试试题是由安全生产模拟考试一点通提供,N1叉车司机证模拟考试题库是根据N1叉车司机最新版教材,N1叉车司机大纲整理而成(含2023年…

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞 一、蓝凌EIS简介二、漏洞描述三、影响版本四、fofa查询语句五、漏洞复现六、深度复现1、发送如花2、哥斯拉直连 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者…

一文教你解决git请求github时候超时的问题

前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一文教你解决git请求github的时候超时问题 一. 问题二. 当前 ssh 实现原理三. 创建ssh key3.1 将ssh key加入github配置中3.2 测试连…

如何在 Mac 上切换用户?

如果您想与其他人共享您的 Mac,创建一个独立于您的个人帐户的新用户帐户可能会有所帮助。然而,不利的一面是,时不时地在不同的用户帐户之间切换可能是一件耗时的事情。幸运的是,我创建了本指南,解释如何在 Mac 上快速切…

使用 Pyro 和 PyTorch 的贝叶斯神经网络

一、说明 构建图像分类器已成为新的“hello world”。还记得当你第一次接触 Python 时,你的打印“hello world”感觉很神奇吗?几个月前,当我按照PyTorch 官方教程并为自己构建了一个运行良好的简单分类器时,我也有同样的感觉。 我…

Android应用:实现网络加载商品数据【OKHttp、Glide、Gson】

实现网络加载商品数据的功能: 1、在AndroidManifest.xml中声明网络权限; 2、在app/build.gradle中添加okhttp, glide, gson等必需的第3方库; 3、在MainActivity中通过OkHttpClient连接给定的Web服务,获取商品数据;对…

RISC-V IDE MRS无感远程协助模块详解

RISC-V IDE MRS无感远程协助模块详解 一、说明 1.1 概述 针对RISC-V/ARM等内核MCU的嵌入式集成开发环境MRS(MounRiver Studio)从V1.90版本开始内置无感远程协助模块(Sensorless Remote Assistant Module,以下简称SRA模块)。SRA模块是一款支…

Leetcode刷题详解——按摩师

1. 题目链接:面试题 17.16. 按摩师 2. 题目描述: 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师…

无线渗透|Wi-Fi渗透思路

对于WPA2 WPA3的一些渗透思路 0x00 进行渗透时需知晓的基础知识 1.WPA2:是WPA的升级版,是针对保护无线网络安全而设计的无线网络保护系统,引入了PSK(预共享密钥模式)秘钥,加强了WPA的不足之处,但是因为使…

技术栈 业务架构 插件库

大前端 技术栈 业务架构 插件库

yolov5 pt转成nccn_yolov5

一:转换环境准备 python版本为Python 3.8.0,需要安装对应的版本包,torch1.10.0 torchvision0.11.0 torchaudio0.10.0 pip3 install torch1.10.0 torchvision0.11.0 torchaudio0.10.0 -f https://download.pytorch.org/whl/torch_stable.html…

yum 命令

基本语法 yum [选项] [参数] 选项说明 -y 对所有提问都回答“yes” 参数说明 实操 yum list | grep firefox yum -y remove firefox yum -y install firefox

前端打印表格功能+单号生成条形码

第一种打印方法:不需要下载任何插件 浏览器自带打印功能(不太推荐),原理是生成新的页面后被打印,当打印完成或者取消打印时,页面需要强制刷新,否则页面无法回显。 //打印功能 print() {var pr…