当神经网络缩小或增大(按节点数,连接数等)时,是否存在连续训练和神经网络优化降级的已知方法?
就我而言,我所读到的关于神经网络的一切都是从静态角度出发的。你定义网,然后训练它。
如果某些神经网络X具有N个节点(神经元,无论如何),是否可以训练网络(X),以便在N增加或减少时,网络仍然有用,能够表演吗?
答案 0 :(得分:5)
一般而言,一旦网络已经过培训,改变网络架构(添加新层,在现有层中添加更多神经元)在深度学习领域中是有意义的并且是相当常见的操作。一个例子是辍学 - 在训练期间,一半的神经元被随机地完全关闭,只有剩下的一半参与特定迭代期间的训练(每次迭代或时期'因为它经常被命名具有不同的随机切换列表关闭神经元)。另一个例子是转移学习 - 您可以在一组输入数据上学习网络,切断部分输出图层,用新图层替换它们,然后在另一个数据集上重新学习模型。
为了更好地解释为什么它有意义让我们退一步。在深层网络中,每个层都有很多隐藏层,可以从传入数据中学习一些抽象。每个附加层使用前一层学习的抽象表示,并在它们的基础上构建,将这种抽象结合起来形成更高级别的数据表示。例如,您可能尝试使用DNN对图像进行分类。第一层将从图像中学习相当简单的概念 - 如数据中的边或点。下一层可以结合这些简单的概念来学习基元 - 如三角形或正方形圆。下一层可以进一步驱动它并组合这些基元来表示你可以在图像中找到的一些物体,比如汽车'或者'房子'并使用softmax计算您正在寻找的答案的概率(实际输出的内容)。我需要提一下,这些事实和学到的陈述可以实际检查。您可以可视化隐藏图层的激活并查看其学习内容。例如,这是通过Google的项目' inceptionism'完成的。考虑到这一点,让我们回到我之前提到的。
Dropout 用于改善网络的泛化。它迫使每个神经元“不那么确定”。来自前一层的一些信息将可用,并使其尝试学习依赖于来自前一层的不太有利和信息丰富的抽象的表示。它迫使它考虑来自前一层的所有表示来做出决定,而不是将其全部重量放在它最喜欢的几个神经元中。通过这样做,网络通常可以更好地准备新数据,其中输入将与训练集不同。
问:"据您所知,存储知识的质量(对网络进行的任何培训)在辍学后仍然可用吗?也许随机的一半可以被随机的10次替换,只有10次下降,这可能会导致过渡期间知识损失减少。"
答:不幸的是,我无法正确回答为什么精确地关闭了一半神经元而不是10%(或任何其他数字)。也许有一个解释,但我还没有看到它。一般来说它只是起作用而且就是这样。 另外我需要提一下,辍学的任务是确保每个神经元都不会考虑前一层的几个神经元,并且即使通常帮助它做出正确决定的神经元也不准备做出决定。可用。这仅用于推广,有助于网络更好地处理以前未见过的数据,没有其他方法可以实现辍学。
现在让我们再次考虑转移学习。考虑一下你有一个4层的网络。你训练它来识别图片中的特定物体(猫,狗,桌子,汽车等)。比你切断最后一层,用三个额外的层替换它,然后你在一个数据集上训练得到的6层网络,例如,对这个图像上显示的内容做出短句('一只猫在上面)汽车','房子附近有窗户和树木等等。我们用这种手术做了什么?我们原来的4层网络能够理解我们提供的图像中是否有某些特定的对象。它的前3层学习了很好的图像表示 - 第一层学习了可能的边缘或点或图像中的一些非常原始的几何形状。第二层学到了一些更精细的几何图形,比如“圆圈”。或者' square'。最后一层知道如何将它们组合成一些更高级别的对象 - ' car' cat' cat' house'。现在,我们可以重新使用我们在不同域中学习的这种良好表示,并添加更多层。他们每个人都将使用原始网络的最后(第3)层的抽象,并学习如何将它们结合起来创建有意义的图像描述。虽然您将对图像作为输入和句子作为输出的新数据集进行学习,但它将调整我们从原始网络获得的前3层,但这些调整将主要是次要的,而3个新层将通过显着学习进行调整。我们通过转学的方式取得的成就是:
1)我们可以学到更好的数据表示。我们可以创建一个非常擅长于特定任务的网络,而不是建立在该网络上以执行不同的任务。
2)我们可以节省培训时间 - 第一层网络已经训练得足够好,以便您接近输出的图层已经获得了相当好的数据表示。因此,使用预先训练好的第一层训练应该更快完成。
所以最重要的是,对一些网络进行预训练,而不是在另一个网络中重新使用部分或整个网络,这是非常有意义的,并不是不常见的。
答案 1 :(得分:1)
这是我在这个视频中看到过的......
视频说明中有更多资源的链接。
基于一个名为NEAT的过程。扩展拓扑的神经演化。
它使用遗传算法和进化过程从头开始设计和演化神经网络,而不需要预先假设神经网络的结构或复杂性。
我相信这就是你要找的东西。