信息检索(57):MINIMIZING FLOPS TO LEARN EFFICIENT SPARSE REPRESENTATIONS

MINIMIZING FLOPS TO LEARN EFFICIENT SPARSE REPRESENTATIONS

  • 摘要
  • 1 引言
  • 2 相关工作
  • 3 预期 FLOPS 次数
  • 4 我们的方法
  • 5 实验
  • 6 结论


发布时间(2020)


最小化 Flop 来学习高效的稀疏表示

摘要

1)学习高维稀疏表示
2)FLOP 集成到损失函数作为正则化项
3)相比 l1 损失更好
倒排索引浮点运算的数量 // 非零值的均匀分布

深度表示学习已成为视觉搜索、推荐和识别领域最广泛采用的方法之一。然而,从大型数据库中检索此类表示在计算上具有挑战性。基于学习紧凑表示的近似方法已被广泛用于解决此问题,例如局部敏感哈希、乘积量化和 PCA。在这项工作中,与学习紧凑表示相反,我们提出学习高维和稀疏表示,这些表示具有与密集嵌入相似的表示容量,同时由于稀疏矩阵乘法运算比密集乘法快得多而更高效。根据关键见解,如果非零项在维度上均匀分布,则运算次数会随着嵌入的稀疏性二次减少,我们提出了一种新方法来学习这种分布式稀疏嵌入,该方法通过使用精心构建的正则化函数直接最小化检索过程中发生的浮点运算 (FLOP) 数量的连续松弛。我们的实验表明,我们的方法与其他基线相比具有竞争力,并且在实际数据集上产生类似或更好的速度与准确度权衡。

1 引言

使用深度神经网络 (DNN) 学习语义表示现已成为视觉搜索 (Jing et al, 2015; Hadi Kiapour et al, 2015)、语义文本匹配 (Neculoiu et al, 2016)、单样本分类 (Koch et al, 2015)、聚类 (Oh Song et al, 2017) 和推荐 (Shankar et al, 2017) 等应用的一个基本方面。然而,从 DNN 生成的高维密集嵌入对于在具有数百万个实例的大规模问题中执行最近邻搜索提出了计算挑战。特别是,当嵌入维度很高时,评估任何查询与大型数据库中所有实例的距离成本很高,因此难以在不牺牲准确性的情况下进行有效搜索。与 SIFT (Lowe, 2004) 等手工制作的特征相比,使用 DNN 生成的表示通常具有更高的维度,而且是密集的。密集特征的关键警告是,与词袋特征不同,它们无法通过倒排索引进行有效搜索,也无法进行近似。

由于在实践中,高维度上的精确搜索成本过高(Wang,2011),因此人们通常不得不牺牲准确性来换取效率,而采用近似方法。因此,解决高效近似最近邻搜索 (NNS)(Jegou 等人,2011)或最大内积搜索 (MIPS)(Shrivastava 和 Li,2014)的问题是一个活跃的研究领域,我们将在相关工作部分简要回顾一下。大多数方法(Charikar,2002;Jegou 等人,2011)旨在学习保留距离信息的紧凑低维表示。

虽然在学习紧凑表示方面已经有大量研究,但学习稀疏的高维表示直到最近才开始得到解决(Jeong 和 Song,2018;Cao 等人,2018)。作为一个开创性的例子,Jeong 和 Song(2018)提出了一种端到端方法来学习稀疏和高维哈希,与密集嵌入相比,在基准数据集上的检索时间显著加快。这种方法也从生物学的角度(Li 等人,2018)出发,与果蝇的嗅觉回路有关,从而表明使用更高维度进行哈希的可能性,而不是降低维度

同样,在这项工作中,我们建议学习稀疏的高维嵌入,因此使用稀疏矩阵乘法运算可以有效地检索。与通常会导致表示能力下降的紧凑低维 ANN 式表示相比,我们的高维稀疏嵌入的一个关键方面是它们可以具有与初始密集嵌入相同的表示容量。我们方法背后的核心思想受到两个关键观察的启发:(i)检索平均非零值比例为 p 的 d(高)维稀疏嵌入可以加快 1=p 倍。(ii)通过确保非零值均匀分布在所有维度上,可以将速度进一步提高到 1=p2 倍。 这表明,仅靠稀疏性不足以确保最大加速;非零值的分布也起着重要作用。这促使我们考虑稀疏性对使用倒排索引进行检索所需的浮点运算 (FLOP) 数量的影响。 我们提出了一个嵌入向量惩罚函数,它是 FLOP 的精确数量的连续放松,并鼓励非零值在各个维度上均匀分布。

我们将我们的方法应用于学习面部图像嵌入的大规模度量学习问题。我们的训练损失包括度量学习(Weinberger 和 Saul,2009)损失,旨在学习模仿所需度量的嵌入,以及 FLOPs 损失以最小化操作次数。我们在 Megaface 数据集(Kemelmacher-Shlizerman 等人,2016)上对我们的方法进行了实证评估,并表明我们提出的方法成功地学习了高维稀疏嵌入,速度提高了几个数量级。我们将我们的方法与多个基线进行了比较,证明了速度与准确度之间的权衡有所改善或相似。

本文的其余部分组织如下。在第 3 节中,我们分析了预期的 FLOP 数量,并推导出了其精确表达式。在第 4 节中,我们推导出可用作正则化器的连续松弛,并使用梯度下降进行优化。我们还为我们的松弛提供了一些分析依据。然后,在第 5 节中,我们在一个大型度量学习任务上比较了我们的方法,结果显示与基线相比,速度-准确度权衡有所改善。

2 相关工作

学习紧凑表示,ANN
对于从深度神经网络中学习到的高维密集嵌入,精确检索前 k 个最近邻居在实践中成本很高,从业者通常求助于近似最近邻居 (ANN) 来实现高效检索。 ANN 的流行方法包括依赖于随机投影的局部敏感哈希 (LSH) (Gionis 等,1999;Andoni 等,2015;Raginsky 和 ​​Lazebnik,2009)、基于通过在数据中查找聚类来构建有效搜索图的可导航小世界图 (NSW) (Malkov 等,2014) 和分层 NSW (HNSW) (Malkov 和 Yashunin,2018)、将原始空间分解为低维子空间的笛卡尔积并分别量化每个子空间的乘积量化 (PQ) (Ge 等,2013;Jegou 等,2011) 方法,以及谱哈希 (Weiss 等,2009),它涉及计算最佳二进制哈希的 NP 难题,该问题被放宽为连续值哈希,相似矩阵的谱。总体而言,为了紧凑表示并加快查询时间,这些方法中的大多数使用各种精心选择的数据结构,例如哈希(Neyshabur 和 Srebro,2015;Wang 等人,2018)、局部敏感哈希(Andoni 等人,2015)、倒排文件结构(Jegou 等人,2011;Baranchuk 等人,2018)、树(Ram 和 Gray,2012)、聚类(Auvolat 等人,2015)、量化草图(Jegou 等人,2011;Ning 等人,2016),以及基于主成分分析和 t-SNE 的降维(Maaten 和 Hinton,2008)。

端到端ANN
端到端学习 ANN 结构是最近越来越流行的另一项工作。Norouzi 等人(2012 年)提出通过最小化基于边距的三重态损失来学习汉明度量的二进制表示。Erin Liong 等人(2015 年)使用深度神经网络的有符号输出作为哈希,同时对哈希位施加独立性和正交性条件。其他用于学习哈希的端到端学习方法包括(Cao 等人,2016 年;Li 等人,2017 年)。端到端方法的一个优点是它们学习与特征表示最佳兼容的哈希码。

学习稀疏表示
稀疏深度哈希 (SDH) (Jeong and Song,2018) 是一种端到端方法,它涉及从预先训练的网络开始,然后执行由两个最小化步骤组成的交替最小化,一个用于训练二进制哈希,另一个用于训练连续密集嵌入。第一步涉及使用最小成本最大流方法计算与密集嵌入最兼容的最佳哈希。第二步是梯度下降步骤,通过最小化度量学习损失来学习密集嵌入。高维稀疏嵌入的思想也得到了稀疏提升方法 (Li et al,2018) 的强化,其中稀疏高维嵌入是从密集特征中学习的。这个想法受到受生物启发的苍蝇算法 (Dasgupta et al,2017) 的启发。实验结果表明,与依赖降维的 LSH 等传统技术相比,稀疏提升在精度和速度方面都有所提高。

l1 正则化,Lasso
Lasso(Tibshirani,1996)是施加稀疏性的最流行方法,已用于各种应用,包括稀疏化和压缩神经网络(Liu et al,2015;Wen et al,2016)。组套索(Meier et al,2008)是套索的扩展,它鼓励同时选择指定组中的所有特征。另一方面,另一种扩展,排他套索(Kong et al,2014;Zhou et al,2010),旨在选择组中的单个特征。我们提出的正则化器最初是受最小化 FLOP 的想法的启发,与排他套索非常相似。然而,我们的重点是稀疏生成的嵌入,而不是稀疏参数。

度量学习
虽然学习嵌入存在许多设置(Hinton 和 Salakhutdinov,2006 年;Kingma 和 Welling,2013 年;Kiela 和 Bottou,2014 年),但在本文中,我们将注意力限制在度量学习的背景下(Weinberger 和 Saul,2009 年)。度量学习损失的一些示例包括 CNN 的大边距 softmax 损失(Liu 等人,2016 年)、三重态损失(Schroff 等人,2015 年)和基于代理的度量损失(Movshovitz-Attias 等人,2017 年)。

3 预期 FLOPS 次数

在本节中,我们研究稀疏性对检索所需的预期 FLOP 数量的影响,并推导出预期 FLOP 数量的精确表达式。本文的主要思想基于以下关键见解:如果嵌入的每个维度都以概率 p(不一定独立)非零,则可以使用嵌入集上的倒排索引将速度提高到 1=p2 的量级。考虑两个嵌入向量 u;v。 计算 u T v 只需要计算索引 k 处的逐点积,其中 uk 和 vk 都非零。这是使用倒排索引的主要动机,并导致上述加速。在更正式地分析它之前,我们先介绍一些符号。

令 D = f(xi ; yi)g n i=1 为根据分布 P 从 Z = X × Y 中抽取的 n 个独立训练样本集合,其中 X ; Y 分别表示输入空间和标签空间。令 F = ffθ : X ! R d j θ 2 Θg 为一类由 θ 2 Θ 参数化的函数,将输入实例映射到 d 维嵌入。通常,对于图像任务,选择合适的 CNN 作为函数(Krizhevsky et al, 2012)。假设 X; Y ∼ P,则定义激活概率 pj = P(fθ(X)j 6= 0),及其经验版本 p¯j = 1 n Pn i=1 I[fθ(xi)j 6= 0]。

我们现在证明稀疏嵌入可以带来二次加速。考虑一个 d 维稀疏查询向量 uq = fθ(xq) 2 R d 和一个由 n 个稀疏向量组成的数据库 fvi = fθ(x (i) )g n i=1 ⊂ R d ,它们形成一个矩阵 D 2 R n×d 。我们假设 xq;x (i) (i = 1; : : : ; n) 独立于 P 采样。计算向量矩阵乘积 Duq 只需要查看 D 中与 uq 的非零项相对应的列,由 Nq = fj j j 2 [1 : d];(uq)j 6= 0g 给出。 1 此外,在每一列中,我们只需要查看非零项。这可以在实践中通过将每列的非零索引存储在独立列表中来有效实现,如图 1a 所示。
产生的 FLOP 数量由下式给出:
请注意,对于固定的稀疏度 Pd j=1 pj = d p,当每个维度都以相等的概率 pj = p; 8j 2 [1 : d] 非零时,稀疏度会最小化,此时 F(fθ;P) = d p2(因此,作为正则化器,F(fθ;P) 反过来会鼓励跨维度的这种均匀分布)。给定这种均匀分布,与每行复杂度为 O(d) 的密集乘法相比,我们得到的改进是 1=p2 (p < 1)。因此,当所有条目中只有 p 部分非零,并均匀分布在所有列上时,我们实现了 1=p2 的加速。请注意,由于期望的线性,非零索引的独立性不是必需的。

4 我们的方法

l1 正则化是最常见的引入稀疏性的方法。但是,正如我们将通过实验验证的那样,它不能确保非零值在所有维度上均匀分布,而这是实现最佳加速所需的。因此,我们诉诸于将实际产生的 FLOP 直接纳入损失函数,这将导致搜索时间和准确度之间的最佳权衡。FLOP F(;P) 是模型参数的不连续函数,很难优化,因此我们将改用连续松弛法进行优化。

5 实验

6 结论

在本文中,我们提出了一种学习高维嵌入的新方法,目的是提高检索任务的效率。我们的方法将检索过程中产生的 FLOP 集成到损失函数中作为正则化器,并通过连续松弛直接对其进行优化。我们通过展示所提出的方法有利于非零激活在所有维度上的均匀分布,进一步深入了解了我们的方法。我们通过实验表明,与‘1 正则化器相比,我们的方法确实可以实现更均匀的分布。我们将我们的方法与许多其他基线进行了比较,并表明它具有更好的速度与准确度权衡。总的来说,我们能够证明稀疏嵌入比密集嵌入快 50 倍左右,而不会显着降低准确度。

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

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

相关文章

PyScript:在浏览器中释放Python的强大

PyScript&#xff1a;Python代码&#xff0c;直接在网页上运行。- 精选真开源&#xff0c;释放新价值。 概览 PyScript是一个创新的框架&#xff0c;它打破了传统编程环境的界限&#xff0c;允许开发者直接在浏览器中使用Python语言来创建丰富的网络应用。结合了HTML界面、Pyo…

WLAN 4-Way Handshake如何生成GTK?

关于Wi-Fi的加密认证过程&#xff0c;可以参考如下链接&#xff0c;今天我们来理解如何生成GTK。 WLAN数据加密机制_tls加密wifi-CSDN博客 1 GTK GTK&#xff08;Group Temporal Key&#xff09;是由AP通过GMK生成&#xff0c;长度为128位&#xff0c;并在四次握手的第三步中…

使用Netty框架实现WebSocket服务端与客户端通信(附ssl)

仓库地址&#xff1a; https://gitee.com/lfw1024/netty-websocket 导入后可直接运行 预览页面 自签证书&#xff1a; #换成自己的本地ip keytool -genkey -alias server -keyalg RSA -validity 3650 -keystore D:\mystore.jks -ext sanip:192.168.3.7,ip:127.0.0.1,dns:lo…

【STM32修改串口波特率】

STM32微控制器中的串口波特率调整通常涉及到USART&#xff08;通用同步接收器/发送器&#xff09;模块的配置。USART模块提供了多个寄存器来设置波特率&#xff0c;其中关键的寄存器包括BRR&#xff08;波特率寄存器&#xff09;和USART_CR1&#xff08;控制寄存器1&#xff09…

【云原生】加强理解Pod资源控制器

Pod控制器 文章目录 Pod控制器一、Replication Controller&#xff08;RC&#xff09;1.1、什么是RC1.2、RC应用1.3、RC滚动更新 二、Replication Set&#xff08;RS&#xff09;2.1、什么是RS2.2、RS应用 三、Deployment3.1、什么是Deployment3.2、更新节奏和更新逻辑3.3、自定…

uniapp - 微信小程序 - 自定义底部tabbar

废话不多说&#xff0c;直接行源码 这里需要的底部tabbar的图片在这里 我的资源里面呢 图片是这样的 先看成品吧 首先 - BaseApp\components\Tabbar.vue <script setup>import {ref,nextTick,watch} from "vue"// 核心 - 隐藏uniapp自带的底部tabbaruni.hi…

【机器学习】基于层次的聚类方法:理论与实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 基于层次的聚类方法&#xff1a;理论与实践引言1. 层次聚类基础1.1 概述1.2 距离…

ArrayList练习

练习1&#xff1a;添加字符串和整数并进行遍历 1、add方法向集合中添加元素&#xff1b; 2、get方法获取集合中的元素。 public class ArrayListDemo1 {public static void main(String[] args) {ArrayList<String> list new ArrayList<>();list.add("aaa…

python-斐波那契数列

[题目描述] 斐波那契数列是指这样的数列&#xff1a;数列的第一个和第二个数都为 1&#xff0c;接下来每个数都等于前面 2个数之和。 给出一个正整数 a&#xff0c;要求斐波那契数列中第 a 个数是多少。输入&#xff1a; 第 1 行是测试数据的组数 n&#xff0c;后面跟着 n 行输…

信息化建设中的安全底座:实施等保的法律依据与实际效益分析

随着信息技术的飞速发展&#xff0c;信息化建设已成为推动社会进步和经济发展的关键引擎。然而&#xff0c;伴随而来的是日益复杂多变的网络安全威胁&#xff0c;这对国家的安全、社会的稳定以及公众的利益构成了严峻挑战。在此背景下&#xff0c;信息安全等级保护&#xff08;…

【密码学】面向小白的古典密码基础入门笔记

目录 Mindmap 前言 破译方法 三类古典密码 替换密码 分类 单表替换密码 凯撒密码 简单替换密码 仿射密码 普莱费尔密码 培根密码 猪圈密码 摩斯密码 多表替换密码 维吉尼亚密码 移位密码 滚筒密码 栅栏密码 Mindmap 前言 1.所有古典密码都已不安全 2.密…

【云原生】Kubernetes高级功能

Kubernetes高级功能 文章目录 Kubernetes高级功能资源列表基础环境一、ConfigMap1.1、什么是ConfigMap1.2、ConfigMap能解决哪些问题1.3、ConfigMap应用场景1.4、ConfigMap局限性1.5、ConfigMap的创建方法1.5.1、命令行直接创建1.5.2、通过文件创建1.5.3、指定目录创建1.5.4、编…

生成和查看预定义宏

参考下面的指令 arm-none-eabi-gcc -marcharmv7e-m -dM -E - < /dev/null | grep SYNC这个指令是用来生成和查看预定义宏&#xff08;macros&#xff09;的一种方法。让我们逐步分解和解释这个命令的各个部分&#xff1a; arm-none-eabi-gcc: 这是 ARM 架构下的交叉编译器…

Github忘记了Two-factor Authentication code

意外重置了edge浏览器 码农家园github自从开启开启了2FA认证&#xff0c;每次输入auth code确实麻烦&#xff0c;于是下载了浏览器插件 Open two factor authenticator&#xff0c; 最近edge频繁宕机&#xff0c;而且提示磁盘空间不足&#xff0c;要不要立即清理并重置浏览器临…

【python】socket通信代码解析

目录 一、socket通信原理 1.1 服务器端 1.2 客户端 二、socket通信主要应用场景 2.1 简单的服务器和客户端通信 2.2 并发服务器 2.3 UDP通信 2.4 文件传输 2.5 HTTP服务器 2.6 邮件发送与接收 2.7 FTP客户端 2.8 P2P文件共享 2.9 网络游戏 三、python中Socket编…

Mathematica训练课(45)-- 一些常用的函数Abs[],Max[]等函数用法

①绝对值函数&#xff1a;Abs[]函数 ②最大值和最小值函数 ③反函数

微信小程序服务器从腾讯云迁移到阿里云出现的坑

微信小程序服务器从腾讯云迁移到阿里云出现的坑 背景 原先小程序后台服务器到期&#xff0c;因为之前买的是腾讯云新用户&#xff0c;便宜&#xff0c;到期后续费金额懂的都懂。就在阿里云用新用户买了个新的&#xff0c;遂把服务全转到了阿里云服务器上。 此时&#xff0c;域…

正则表达式教程:从入门到实战应用

正则表达式教程&#xff1a;从入门到实战应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨正则表达式的基础知识以及在实际应用中的实战技…

基于文本密度的网页正文提取的研究与实现

摘要&#xff1a; 随着互联网技术的迅猛发展&#xff0c;网页数量呈爆炸性增长&#xff0c;网页内容日趋复杂&#xff0c;如何在海量网页中快速、准确地提取出正文信息&#xff0c;成为了一个亟待解决的问题。本文提出了一种基于文本密度的网页正文提取方法&#xff0c;通过对…

AI 与 Python 实战干货:基于深度学习的图像识别

《AI 与 Python 实战干货&#xff1a;基于深度学习的图像识别》 今天咱不啰嗦&#xff0c;直接上干货&#xff01; 在 AI 领域&#xff0c;特别是图像识别方面&#xff0c;Python 简直是一把利器。咱就以手写数字识别为例&#xff0c;来看看怎么用 Python 实现一个深度学习模…