矢量时代已经结束,哈希是人工智能的未来
Hamish Ogilvy -6分钟阅读
人工智能一直是建立在矢量算术的基础上的。最近的进展表明,对于某些人工智能应用,这实际上可以被其他二进制表示法(如神经哈希)大幅超越(内存、速度等),而没有明显的性能损失。
一旦你与神经哈希这样的东西打交道,就会发现人工智能的许多领域可以从矢量转向基于哈希的结构,并引发人工智能发展的巨大加速。这篇文章简要介绍了这背后的想法,以及为什么这很可能最终成为一个巨大的转变。
哈希值
散列函数是任何可用于将任意大小的数据映射到固定大小的值的函数。散列函数返回的值被称为散列值、散列码、摘要或简单的散列。
你可以在这里阅读更多关于哈希值的信息。维基百科上的例子说明如下。
哈希值对于权衡准确性、数据存储大小、性能、检索速度等方面是非常好的。
重要的是,它们在本质上是概率性的,所以多个输入项目有可能共享相同的哈希值。这很有趣,因为其核心是放弃较慢的精确性以换取极快的高概率。这里的比喻是,在世界任何一个城市的郊区随机飞行1秒钟与在你选择的城市中把你送到你想要的确切房子的10小时旅行之间的选择。前者几乎总是更好的,在10小时内在郊区导航是小菜一碟。
当考虑到向量时,浮点数是首选的数据表示。虽然它们在本质上比哈希值更绝对,但它们也不是精确的。下面有更多关于浮点数的内容...
浮点数
要了解人工智能,你需要了解计算机如何表示非整数的数字。如果你没有读过这方面的书,你可以在这里做。
浮点数的问题在于它们占用了相当大的空间,计算起来相当复杂,而且还是一种近似值。看罗伯-派克谈论双值计算器可能是我第一次想到这个问题。从那以后,它就一直困扰着我。谢谢罗伯。
对于对模型预测影响几乎为零的微小数值变化(关于矢量计算),二进制表示法也会有巨大的不同。比如说。
以0.65对0.66为例,在float64(64位浮点)二进制中可以分别用这两个二进制数字表示。
11111111100100110011001100110011001100110011001100110011001101
11111111100101000111101011100001010001111010111000010100011111
这并不容易看到,但就这1%的数字变化,几乎有一半(64位中的25位)是不同的从矩阵计算中的矢量角度来看,这两个数字非常非常相似,但在底层二进制中(所有重头戏发生的地方),它们是天壤之别。
我们的大脑绝对不是这样工作的,所以它们显然不使用浮点二进制表示法来存储数字。至少这听起来像是神经元做的一件蠢事,除了有人能记住Pi的小数点后6万多位,所以也许我不知道。但说真的,我们的大脑是视觉的,从视觉上看,我们大脑的神经网络很擅长处理代表强度的小数点。但是,当你想到二分之一或四分之一时,我敢打赌,你马上就会想到杯子里有一半或四分之一满的东西,或者是一个比萨饼或其他东西。你很可能没有想到尾数和指数的问题。
为了加快浮点运算速度和减少空间使用,一个常用的想法是将分辨率降到float16(16位),甚至float8(8位),这样计算速度会快很多。这里的缺点是分辨率的明显损失。
所以你是说浮点运算很慢/很糟糕?
并非如此。事实上,事实证明,这是一个人们花了很多心血的问题。芯片硬件及其指令集的设计使其更加有效,并有更多的计算被并行处理,因此它们可以更快地被解决。GPU和TPU现在也被使用,因为它们处理基于浮点的大量向量算术的速度更快。
你可以用蛮力提高速度,但你需要这样做吗?你也可以放弃分辨率,但同样你需要这样做吗?反正浮点也不是绝对的。在这里,与其说是慢,不如说是如何走得更快。
神经散列
因此,事实证明二进制比较,如位集上的XOR,可以比基于浮点的算术计算快很多很多。那么,如果你能在一个对位置敏感的二进制哈希空间中表示0.65和0.66呢?这是否能使模型在推理方面快得多?
注意:看一个单一的数字是一个特意设计的例子,但对于包含许多浮点数的向量,哈希实际上也可以压缩所有维度之间的关系,这才是真正神奇的地方。
事实证明,有一个哈希算法系列可以做到这一点,叫做位置敏感哈希算法(LSH)。原始项目越接近,其哈希值中的比特就越接近。
不过这个概念并不新鲜,只是更新的技术发现了更多的优势。在历史上,LSH使用了随机投影、量化等技术,但它们的缺点是需要一个大的哈希空间来保持精度,所以好处在一定程度上被否定了。
对于单个浮点来说,这很简单,但对于高维度的向量(许多浮点)来说,该怎么办?
因此,神经散列(或有时称为学习散列)的新技巧是用神经网络创建的散列来取代现有的LSH技术。由此产生的哈希值可以使用非常快速的汉明距离 计算来估计其相似性。
这最初听起来很复杂,但实际上并不太困难。神经网络优化了一个哈希函数。
- 与原始矢量相比,保留了几乎完美的信息
- 产生的哈希值远远小于原始矢量的大小
- 的计算速度明显更快
这意味着你可以得到两方面的好处,一个较小的二进制表示,可用于非常快的逻辑计算,而信息分辨率几乎没有变化。
使用案例
我们最初调查的用例是用于密集信息检索的近似近邻(ANN)。这个过程允许我们使用矢量表示来搜索信息,因此我们可以找到概念上相似的东西。因此,为什么哈希中的位置敏感性是如此重要。我们现在已经把这一点做得更进一步,更广泛地使用哈希值来对复杂数据进行快速和近似的比较。
密集信息检索
你能想到多少个数据库?可能有很多。搜索索引呢?可能很少,而且大部分都是基于相同的老技术。这主要是因为历史上语言是一个基于规则的问题。代号、同义词、词根、词义化等问题占据了非常非常聪明的人的整个职业生涯,但它们仍然没有得到解决。
拉里-佩奇(谷歌创始人)被引述说,在我们的有生之年,搜索不会成为一个解决的问题。想一想,一代人中最伟大的头脑,简直是数十亿美元的投资,而它不可能被解决?
搜索技术已经落后于数据库,主要是由于语言问题,然而在过去的几年里,我们已经看到了语言处理的革命,而且它还在加速发展从技术角度来看,我们看到基于神经的哈希值为新的搜索和数据库技术降低了障碍(包括我们!)。
如果你正在研究基于哈希值的神经网络和索引,我很想听听你对下一步的想法。