我们现在来谈谈重构,这是rbms的一个重要部分。在我们所讨论的示例中,我们正在学习一组图像出现哪些像素组(即打开)。当一个隐藏层节点被一个重要的权重激活时(无论决定打开它的权重是什么),它表示正在发生的事情的共同发生,在我们的例子中,是狗还是猫。如果这是一只猫,尖耳朵、圆脸、小眼睛可能就是我们要找的。大耳朵+长尾巴+大鼻子可能会让你的形象变成一只狗。这些激活表示RBM“认为”原始数据的样子。实际上,我们正在重建原始数据。
我们还应该迅速指出,RBM有两个偏见,而不是一个。这是非常重要的,因为这是区别于其他自动编码算法。隐藏的偏差帮助我们的RBM在向前传递时产生我们需要的激活,而可见的层偏差帮助我们在向后传递时学习正确的重构。隐藏的偏差很重要,因为它的主要工作是确保无论我们的数据有多么稀疏,一些节点都会被触发。稍后您将看到这将如何影响一个深层信仰网络的梦想。
分层一旦我们的RBM了解了输入数据的结构,它与在第一个隐藏层中进行的激活相关,数据就会传递到下一个隐藏层。第一个隐藏层然后成为新的可见层。我们在隐藏层中创建的激活现在成为我们的输入。它们将乘以新隐藏层中的权重,以产生另一组激活。
这个过程在我们的网络的所有隐藏层中继续进行。隐藏层变成可见层,我们有另一个隐藏层,我们将使用它的权重,然后重复。每个新的隐藏层都会产生调整后的权重,直到我们能够识别来自前一层的输入为止。
为了更详细地说明,这在技术上被称为无监督的、贪婪的、分层的培训。改进每一层的权值不需要输入,这意味着不涉及任何类型的外部影响。这进一步意味着我们应该能够使用我们的算法来训练以前没有见过的无监督数据。
正如我们一直强调的,我们拥有的数据越多,我们的结果就越好!随着每一层图像的质量越来越好,也越来越准确,我们就可以更好地通过每一个隐藏层来提高我们的学习能力,而权重的作用就是引导我们在学习的过程中进行正确的图像分类。
但是在讨论重构时,我们应该指出,每次重构工作中的一个数字(权重)都是非零的,这表明我们的RBM从数据中学到了一些东西。在某种意义上,您可以像处理百分比指标一样处理返回的数字。数字越大,算法对它所看到的东西就越有信心。记住,我们有我们要返回的主数据集,我们有一个参考数据集用于我们的重建工作。当我们的RBM遍历每个图像时,它还不知道它在处理什么图像;这就是它想要确定的。
让我们花一点时间来澄清一些事情。当我们说我们使用贪婪算法时,我们真正的意思是我们的RBM将采用最短路径来获得最佳结果。我们将从所看到的图像中随机抽取像素,并测试哪些像素引导我们找到正确答案。
RBM将根据主数据集(测试集)测试每个假设,这是我们的正确最终目标。请记住,每个图像只是我们试图分类的一组像素。这些像素包含了数据的特征和特征。例如,一个像素可以有不同的亮度,其中深色像素可能表示边框,浅色像素可能表示数字,等等。
但如果事情不像我们想的那样,会发生什么呢?如果我们在给定步骤中学到的东西不正确会发生什么?如果出现这种情况,就意味着我们的算法猜错了。我们要做的就是回去再试一次。这并不像看上去那么糟糕,也不像看上去那么耗时。
当然,错误的假设会带来时间上的代价,但最终的目标是我们必须提高学习效率,并在每个阶段减少错误。每一个错误的加权连接都会受到惩罚,就像我们在强化学习中所做的那样。这些连接会减少重量,不再那么强。希望下一个遍历可以在减少误差的同时提高精度,并且权重越大,影响就越大。
假设我们对数字图像进行分类,也就是数字。有些图像会有曲线,比如2、3、6、8、9等等。其他数字,如1、4和7,则不会。这样的知识是非常重要的,因为我们的RBM,会用它来不断提高自己的学习,减少错误。如果我们认为我们处理的是数字2,那么这个路径的权值就会比其他路径的权值更重。这是一个极端的过度简化,但希望它足以帮助你理解我们将要开始的内容。
当我们把所有这些放在一起,我们现在有了一个深层信仰网络的理论框架。虽然我们比其他章节更深入地研究了理论,但是正如您所看到的我们的示例程序所工作的那样,它将开始变得有意义。您将更好地准备在应用程序中使用它,了解幕后发生的事情。