CIFAR-10 数据集测试
Hinton 接着在 CIFAR‑10 数据集上测试了 FF 算法的性能,证明了 FF 训练出的网络在性能上能够媲美反向传播。该数据集有 50,000 张 32x32 的训练图像,每个像素具有三个颜色通道,因此,每个图像都有 3072 个维度。由于这些图像的背景复杂且高度可变,并且在训练数据很有限的情况下无法很好地建模,除非隐藏层非常小,否则包含两到三个隐藏层的全连接网络在使用反向传播进行训练时会严重过拟合,因此,目前几乎所有研究的结果都是针对卷积网络的。反向传播和 FF 都是用权重衰减来减少过拟合,Hinton 对两种方法训练的网络性能进行了比较。对于 FF 训练的网络,测试方法是使用单个前向传播,或者让网络对图像和 10 个标签中的每一个运行 10 次迭代,并在第 4 到 6 次迭代中累积标签的能量(即当基于优度的错误最低时)。结果,虽然 FF 的测试性能比反向传播差,但只稍微差了一点。同时,二者间的差距不会随着隐藏层的增加而增加。不过,反向传播可以更快地减少训练误差。另外,在序列学习上,Hinton 也通过预测序列中下一个字符的任务证明了用 FF 训练的网络比反向传播更好。用 FF 训练的网络可以生成自己的负数据,更符合生物学。
FF 算法与玻尔兹曼机、GAN、SimCLR 的关系
Hinton 进一步将 FF 算法与其他已有的对比学习方法做了对比。他的结论是:FF 是对玻尔兹曼机和简单的局部优度函数的结合;FF 不需要反向传播来学习判别模型和生成模型,因此是 GAN 的一个特例;在真实的神经网络中,与 SimCLR 这类自监督对比方法相比,FF 能够更好地衡量两种不同表示之间的一致性。
FF 吸收了玻尔兹曼机的对比学习
在 20 世纪 80 年代初期,深度神经网络有两种最被看好的学习方法,一个是反向传播,另一个便是做无监督对比学习的玻尔兹曼机(Boltzmann Machines)。玻尔兹曼机是一个随机二元神经元网络,具有成对连接,在两个方向上具有相同的权重。当它在没有外部输入的情况下自由运行时,玻尔兹曼机通过将其设置为开启状态来重复更新每个二元神经元,其概率等于它从其他活动神经元接收到的总输入的逻辑。这个简单的更新过程最终从平衡分布中采样,其中每个全局配置(将二进制状态分配给所有神经元)具有与其负能量成比例的对数概率。负能量只是该配置中所有神经元对之间权重的总和。玻尔兹曼机中的神经元子集是「可见的」,二进制数据向量通过将它们夹在可见神经元上呈现给网络,然后让它重复更新其余隐藏神经元的状态。玻尔兹曼机器学习的目的是使网络运行时可见神经元上二元向量的分布与数据分布自由匹配。最令人惊讶的是,自由运行的玻尔兹曼机在热平衡时,可见神经元上显示的数据分布和模型分布之间的 Kullback-Liebler 散度具有一个非常简单的导数(对于任何权重):其中尖括号表示对热平衡时随机波动的期望以及第一项的数据。这个结果令人兴奋的地方在于,它给出了网络深处权重的导数,而无需显式传播误差导数。它在清醒和睡眠两个不同阶段传播神经活动。但是,要在数学上使得学习规则最够简洁,代价会非常高。它需要一个深度玻尔兹曼机来接近其平衡分布,那么它就无法作为一种切合实际的机器学习技术,作为一种皮层学习模型也不可信:因为大型网络在感知过程中没有时间接近其平衡分布。而且,没有证据表明皮层连接的详细对称性,也没有明显的方法来学习序列。此外,如果权重的许多正更新后跟随着大量负更新,且负阶段对应于快速眼动睡眠,那玻尔兹曼机器学习程序就会失败。但尽管存在以上缺点,玻尔兹曼机仍是一种很聪明的学习方法,因为它用两个工作原理相同但在可见神经元上具有不同边界条件的迭代设置(即限制在数据上 vs. 不予限制),取代了反向传播的前向和后向传递。玻尔兹曼机可以看作是两种思想的结合:
通过最小化真实数据上的自由能(free energy)和最大化负数据上的自由能来学习网络本身产生的数据。
使用 Hopfield 能量作为能量函数,并使用重复随机更新从能量函数定义的玻尔兹曼分布中采样全局配置。
第一种关于对比学习的思路可以与许多其他能量函数一起使用。例如,使用前馈神经网络的输出来定义能量,然后通过该网络使用反向传播来计算能量对权重和可见状态的导数。然后通过跟踪能量对可见状态的导数来生成负数据。另外,负数据不必通过从能量函数定义的玻尔兹曼分布中采样数据向量来产生,不从均衡分布中采样,也能提高具有单个隐藏层的玻尔兹曼机的学习效率。在 Hinton 看来,等式 2 的数学简洁性以及随机更新过程对所有可能的隐藏配置做贝叶斯积分,这个过程实在非常优雅,所以,用只需要传播神经活动的两个解决方案来代替反向传播的前向+反向传播这种想法,仍然与马尔可夫链蒙特卡罗(Markov Chain Monte Carlo)的复杂性纠缠在一起。简单的局部优度函数比二元随机神经元网络的自由能更易于处理, FF 则对玻尔兹曼机的对比学习与这种函数做了结合。
FF 是 GAN 的特例
GAN(生成对抗网络)使用多层神经网络生成数据,并使用多层判别网络来训练其生成模型,使其相对于生成模型输出给出导数,且该导数是真实数据而非生成数据的概率GAN 很难训练,因为判别模型和生成模型相互对抗。GAN 能生成非常漂亮的图像,但会遭受模式崩溃的困扰:可能会存在大片从不生成示例的图像空间区域。而且它使用反向传播来适应每个网络,因此我们很难看出如何在皮质中实现它们。FF 可以看作是 GAN 的一个特例,其中判别网络的每个隐藏层对输入的正负都会自己做贪心决策,因此不需要反向传播来学习判别模型和生成模型,因为它不是学习自己的隐藏表示,而是重用判别模型学习的表示。生成模型唯一需要学习的是如何将这些隐藏的表示转换为生成的数据,如果使用线性变换来计算 softmax 的对数,则不需要反向传播。对两个模型使用相同的隐藏表示的一个优点,是它消除了当一个模型相对于另一个模型学习太快时出现的问题,还避免了模式崩溃。
FF 比 SimCLR 更容易衡量一致性
像 SimCLR 这类自监督对比方法,是通过优化一个目标函数来学习,该函数能够支持对同一图像的两种不同剪裁的表示之间的一致性,以及来自两幅不同图像的剪裁的表示之间的不一致性。这类方法通常使用许多层来提取剪裁的表示,并通过反向传播目标函数的导数来训练这些层。如果两种剪裁总是以完全相同的方式重叠,它们就不起作用,因为这样它们就可以简单地报告共享像素的强度并获得完美的一致性。但在真实的神经网络中,测量两个不同表示之间的一致性并非易事,且没办法使用相同的权重同时提取两种剪裁的表示。而 FF 使用不同的方式来衡量一致性,这对于真实的神经网络来说似乎更容易。许多不同的信息来源为同一组神经元提供输入。如果来源就激活哪些神经元达成一致,将产生正干扰,从而导致高平方活动,如果它们有分歧,则平方活动将降低。通过使用正干扰来测量一致性比比较两个不同的表示向量要灵活得多,因为不需要将输入任意分成两个单独的源。SimCLR 这类方法的一个主要弱点是大量计算用于推导两个图像裁剪的表示,但目标函数仅对表示提供适度的约束,这限制了有关域的信息的速率可以注入权重。为了使剪裁的表示更接近其正确的配对而非替代品,只需要 20 比特信息。FF 的问题更严重,因为它只需要 1 比特来区分正例和负例。解决这种约束贫乏的方法是将每一层分成许多小块,并强制每个块分别使用其预归一化活动向量的长度来决定正例和负例。然后,满足约束所需的信息随块数线性缩放,这比在类似 SimCLR 的方法中使用更大的对比度集实现的对数缩放要好得多。
堆栈对比学习存在的问题
学习多层表示的一种无监督方法,是首先学习一个隐藏层,该隐藏层捕获数据中的某些结构,然后将该层中的活动向量视为数据、并再次应用相同的无监督学习算法。这就是使用受限玻尔兹曼机 (RBM)或堆栈自编码器(stacked autoencoder)学习多层表示的方式。但它有一个致命的缺陷。假设我们通过随机权重矩阵映射一些随机噪声图像。生成的活动向量将具有由权重矩阵创建的相关结构,与数据无关。当将无监督学习应用于这些活动向量时,它会发现其中的一些结构,但这不会告诉系统任何关于外部世界的信息。最初的玻尔兹曼机器学习算法旨在通过对比由两种不同外部边界条件引起的统计数据来避免此缺陷。这抵消了所有只是网络其他部分的结果的结构。在对比正负数据时,无需限制布线,也不要求剪裁之间具有随机空间关系以防止网络作弊。这样便很容易获得大量相互连接的神经元组,每个神经元组都有自己的目标即区分正数据和负数据。
在未来非永生计算机上,FF 是最佳学习算法
Mortal Computation 是 Hinton 近期的重要观点之一(注:该术语尚未有公认的中文翻译,暂译为「非永生计算」)。他指出,目前的通用数字计算机被设计为忠实地遵循指令,人们认为让通用计算机执行特定任务的唯一方法,就是编写一个程序,以极其详细的方式准确指定要做的事。主流的想法仍然是坚持软件应该与硬件分离,以便相同的程序或相同的权重集可以在硬件的不同物理副本上运行。这就会使得程序或权重中包含的知识变得「不朽」:即硬件死亡时,知识不会随之消亡。但这已经不再成立,研究界还未充分理解深度学习对计算机构建方式的长期影响。软件与硬件的分离是计算机科学的基础之一,它的确带来了很多好处,如可以研究程序的特性而不必关心电气工程,而且它使得编写一次程序、并将其复制到数百万台计算机成为可能。但 Hinton 指出:如果我们愿意放弃这种「不朽」,就可以大大节省执行计算所需的能量以及制造执行计算的硬件的成本。这样一来,执行相同任务的不同硬件实例在连接性和非线性上就有可能发生较大的变化,并从学习过程中发现有效利用每个特定实例的未知属性的参数值硬件。这些参数值仅对特定的硬件实例有用,因此它们执行的计算是并非不朽,而是会随硬件一起消亡。将参数值复制到工作方式不同的不同硬件本身的确没有任何意义,但我们可以用一种更生物学的方法可以将一个硬件学到的东西转移到另一个硬件。对于图像中对象分类这样的任务,我们真正感兴趣的是将像素强度与类标签相关联的函数,而不是在特定硬件中实现该函数的参数值。函数本身可以通过使用蒸馏转移到不同的硬件:训练新硬件不仅给出与旧硬件相同的答案,而且输出相同的概率对于不正确的答案。这些概率更丰富地表明了旧模型如何概括,而不仅仅是它认为最有可能的标签。因此,通过训练新模型来匹配错误答案的概率,我们正在训练它以与旧模型相同的方式进行概括。这样的神经网络训练实际上优化了泛化性,这个例子十分罕见。如果想让一个万亿参数神经网络只消耗几瓦特,非永生计算可能是唯一的选择。它的可行性取决于,我们能否找到一种可以在精确细节未知的硬件中高效运行的学习过程,在 Hinton 看来,FF 算法就是一个很有前途的方案,只是它在扩展到大型神经网络时的表现还有待观察。论文最后,Hinton 指出了以下悬而未决的问题:
FF 能否生成足够好的图像或视频生成模型来创建无监督学习所需要的负数据?
如果负向传递在睡眠期间完成,正向和负向传递能否可以在时间上非常广泛地区分开来?
如果负相位被消除了一段时间,其效果是否与严重睡眠剥夺的破坏性影响相似?
使用什么哪种 goodness 函数最好?本文在大多数实验中使用活动平方和,但最小化正数据的活动平方和和最大化负数据的活动平方和似乎效果稍好一些。
最好使用哪种激活函数?目前只研究了 ReLU。使激活成为 t 分布下密度的负对数是一种可能性。
对于空间数据,FF 是否可以从图像不同区域的大量局部优化函数中获益?如果可行,就能加快学习速度。
对于顺序数据,是否可以使用快速权重来模拟简化的转换器?
一组试图最大化其平方活动的特征检测器和一组试图最小化其平方活动的约束违反检测器,能否支持 FF?