人工智能是建立在向量算法的基础上的,但最新的进展表明,对于某些 AI 应用程序而言,它们可以使用其他二进制来表示(例如神经哈希),以提供更小的内存占用和更快的反馈速度。
事实上,人工智能的许多领域都可以从向量变为基于哈希的结构,带来飞跃的提升。本文将简要介绍哈希背后的应用逻辑,以及它为什么可能会成为 AI 的未来。
1
哈希
哈希函数(Hash function):一个哈希函数H(x)可用于将任意大小的数据 x 映射成固定大小(通常选256bit)的值。返回值(映射后的值)又称为哈希值(hash values)、摘要(digests)或哈希(simply hashes)。
哈希在数据的准确性识别、数据存储大小、性能、检索速度等方面具有突出的优势。更重要的是,它们本质上是概率性的,因此多个输入项可以共享相同的哈希值。
在向量表示中,浮点数往往是首选的数据表示形式,尽管它们在本质上比哈希更绝对,但它们却并不精确。
2
浮点数
要了解 AI,首先需要了解计算机是如何表示非整数数字的。
对于微小的数值变化(关于向量计算),二进制表示也可以有很大的不同,这些数值变化对模型预测几乎没有影响。
例如:取 0.65 vs 0.66 在 float64(64 位浮点)二进制中可以分别用这两个二进制数表示:
-
11111111100100110011001100110011001100110011001100110011001101
-
11111111100101000111101011100001010001111010111000010100011111
从这里可以非常清楚看到,虽然从 0.65 到 0.66 仅仅只有 1% 的大小变化,但是转化为二进制后,在 64 位数字中就有 25 位是不同的,差别巨大。
对于神经元来说,这听起来像是一件愚蠢的事情,人类的大脑肯定不会这样工作,它们显然不会使用浮点二进制表示来存储数字,除非有人可以记住圆周率小数点后六万多位。
事实上,我们的大脑神经网络是非常形象的,在处理复杂的小数和分数方面非常擅长。但是,当我们算到一半或四分之一时,就会立即想象出一些东西,比如半杯水、四分之一杯水或者披萨等其他东西,可能根本没有想到尾数和指数。
一个常用的提高浮点运算速度和使用更少空间的方法是将分辨率降低到 float16(16位),甚至是float8 (8位),它们的计算速度非常快,但缺点是,它会造成分辨率的明显下降。
由于浮点数运算很慢,所以它真的没有一点优势吗?
答案是否定的。芯片硬件和它们的指令集被设计来提高效率,并使更多的计算并行处理,而 GPU 和 TPU 现在正在被广泛使用,因为它们处理基于浮点的矢量算法