今天的 AI 模型有数十亿或数万亿个参数,即输入和权重。所以我们需要巨大的内存来激活。这当然会对芯片设计产生巨大影响,因为激活存储器经常支配平面布局。我们可以尝试使用量化、稀疏性、权重共享等概念来减少所需的内存。但它们只能走这么远,尤其是在模型庞大且持续增长的情况下。要是有办法压缩激活就好了!好吧,Perceive 的 CEO Steve Teig 想出了一个办法。 所以很多人都在谈论压缩重量。人们甚至谈到了压缩激活,你知道,用 8 位激活而不是更大的激活来运行它。但有趣的是,当代网络的激活足迹通常比它们在内存中的权重足迹大得多。因此,对于量化和稀疏性以及人们在权重上所做的所有努力,这很棒。在某些方面,更大的问题被忽略了,那就是激活支配了网络的内存占用,它既占用空间又占用能量和时间,因为你必须四处移动激活。 所以当我看到这个问题时,我首先意识到,如果你能做到的话,激活压缩将是一件好事。其次,应用人们用于激活权重的一些微不足道的技术总比没有好,但不会让你走得太远。所以,是的,如果你能以较低的精度逃脱,你应该使用较低的精度,实践中激活的稀疏性并不是很好,因为稀疏性是如此随机,如此不可预测,以至于很难建设性地利用这种缺乏结构。 但更进一步,人们对重量所做的压缩类型,你会得到 2 倍或 4 倍。那么,您将如何获得可能需要的 20 倍或 50 倍来摆脱激活通常需要的千兆字节?因此,这促使我们想出更有创意、更开箱即用的方法来解决这个问题。事实证明,数量级的压缩是可能的。所以这就是谈话的内容。 如果你要做图像处理,为了具体、超分辨率或图像降噪或类似的东西,你真的不必看在图片的总另一端的像素处,对图片这一端的降噪部分进行降噪。因此,您实际上不必将整个图像处理为平面。如果你这样做了,它将占用大量的激活内存。 但是,如果您有足够的计算量来足够快地完成工作,您实际上可以将图像分段并按顺序执行,这是一件半显而易见的事情,这可能会增加您的计算时间,也许是因为您没有这样做一切并行。但是您现在已经减少了激活足迹。 所以人们可以概括这个想法并说,好吧,关于神经网络的最酷的事情之一就是在编译时,当你拿到神经网络时,你完全了解所有的计算依赖关系。大家都知道,神经网络用气泡表示神经元,箭头表示数据移动。好吧,这些箭头告诉您您的计算是否取决于我的数据。如果是这样,您必须等我完成后才能开始。如果没有,我们可以并行进行。 好吧,我完全了解情况。你不需要在我之后立即进行。只需要你跟在我后面。所以我有难以置信的灵活性,只是在空间中移动计算的难以置信的灵活性,它们在物理并行设备上进行,并且及时,因为只要依赖关系按顺序发生,我就可以开始了。我仍然可以得到正确的答案。嗯,在空间和时间上、在时空中重新安排计算块的灵活性是巨大的。而且我可以在空间和时间上打包计算,以一种非常灵活的方式在吞吐量和激活内存之间进行权衡。 所以举个简单的例子,为了直觉,让我们假设我们正在对图像进行降噪,图像有 8 兆像素。好吧,如果我分成 100,000 个像素块,(我选择它是为了让我可以在脑海中进行数学计算),我刚刚完成了 1/80 的工作,所以我刚刚将激活足迹压缩了大约 80折叠。现在,我可能已经减慢了计算速度。但是今天的硬件真的很快。如果我以每秒 30 帧的速度运行来完成工作,我有整整 1/30 秒的时间。但这表明即使是 80 倍压缩对我来说也很容易获得。 我们生活在一个有趣的世界,计算几乎是免费的,而内存也几乎不是免费的。内存占据了我们大部分的芯片,如果你必须把内存从芯片上取下来,它几乎占据了所有的能量。在我们的例子中,我们在芯片上做所有事情,但即便如此。因此,让我们利用我们拥有这些快得离谱的晶体管以及其中的大量晶体管来节省内存这一宝贵资源的事实。 所以合理的做法是,当你有比你想要的更多的激活内存时,压缩它,将它的压缩版本存储在架子上,然后根据需要解压它。而且您几乎总是可以不只是有损压缩,而是残酷的有损压缩,因为您真正需要哪些原始数据以供下游计算使用?它需要一些东西,或一些东西,但不是一切。所以我的建议是我们可以制作简单的小工具,我称之为 X 网络。它看起来像一个 x,因为你有一个看起来像沙漏的上半部分的压缩器和一个看起来像沙漏的下半部分的减压器,可以这么说。因此,您可以通过狭窄的瓶颈挤压数据,然后根据需要对其进行扩展。您可以在构建大量激活数据时将其压缩部分并放入。你可以在消费者所在的地方安装减压器。在这两者之间,你现在已经压缩了你的足迹。 在这里,我们的实践经验也是,您可以获得令人难以置信的压缩量,并且不会放弃任何准确性,在大多数实际网络中,您需要它保留的实际数据量非常小。所以在这里,我们再次谈论的是可能的一个或两个数量级,而不是您可能从降低精度等琐碎事情中获得的 2 或 4 倍。 大多数从事神经网络工作的人还没有真正内化的关于计算的令人惊讶的事情之一是信息论中称为数据处理的东西。不等式。并且在这个讨论中没有过多的技术和数学,虽然我会在谈话中谈论它,基本上说的是,计算本身不能添加信息。因此,如果您获取数据体并通过一些计算将其传递,则计算是可逆的,在这种情况下,您可以重建输入并保留信息,或者不是,在这种情况下,您已经丢失本质上不可重构的信息。但是没有新的信息来源。 所以这就是说,你不可能需要比你输入网络更多的激活。通常你需要的比这要多得多、少得多。但这是一个上限。所以这表明我们拥有巨大激活的唯一原因是因为它可以非常方便地以一种便于下游计算的方式表示事物。但是,大型激活并不是必然的。事实上,相反的情况是可以证明的:原则上你永远不需要大的激活。因此,这是引入技术以利用这一机会的强大动力。 神经网络世界很有趣,尤其是现在。神经网络每年都在变得越来越大。人们双手叉腰说,好吧,我什至没有压缩我的网络;我可以把它平放。而且我认为当你说这样的话时你应该感到尴尬。事实是,如果我们正确地进行压缩,我们的网络可能是一百万倍——我并没有夸大其词,而是说一百万——可能比它们小一百万倍。没有人能做到这一点。我的团队,我们看到了 100 的因数。所以我们要去参加比赛了。但我们感到尴尬的是,我们将剩下的 10,000 个鸡蛋留在了桌子上。但每个人都应该认识到,我们的网络比计算所说的要大得多。