神经网络在大小变化时可以训练吗?

是否有已知的方法可以让神经网络在节点数量、连接等方面增减时进行持续训练并实现平稳降级?

据我所知,我读过的关于神经网络的所有内容都是从静态角度出发的。你定义网络,然后对其进行训练。

如果存在一个具有N个节点(神经元等)的某种神经网络X,是否可能在N增加或减少的同时对网络(X)进行训练,使得网络仍然有用且能够执行任务?


回答:

一般来说,在网络已经训练好后改变网络架构(添加新层、在现有层中增加更多神经元)是合理的,并且在深度学习领域中这是一种相当常见的操作。一个例子是dropout——在训练过程中随机关闭一半的神经元,只有剩余的一半参与特定迭代的训练(每个迭代或通常称为的“epoch”都有不同的随机关闭的神经元列表)。另一个例子是迁移学习——你在一个输入数据集上训练网络,切断部分输出层,用新层替换它们,并在另一个数据集上重新训练模型。

为了更好地解释为什么这样做是有意义的,让我们先退一步。在深度网络中,你有很多隐藏层,每层从输入数据中学习某种抽象。每增加一层都会使用前一层学习到的抽象表示,并在此基础上构建,通过组合这些抽象形成数据表示的更高层次。例如,你可能试图用深度神经网络(DNN)对图像进行分类。第一层会从图像中学习较简单的概念——如边缘或数据中的点。下一层可以将这些简单概念组合起来,学习基本图形——如三角形或圆形或正方形。下一层可以进一步推进,将这些基本图形组合起来,代表图像中可能找到的一些对象,比如“一辆车”或“一所房子”,并使用softmax计算你所寻找的答案的概率(实际输出什么)。我需要提到的是,这些事实和学习到的表示实际上是可以被验证的。你可以可视化隐藏层的激活情况,看看它学到了什么。例如,谷歌的“inceptionism”项目就这样做了。考虑到这一点,让我们回到我之前提到的内容。

Dropout 用于提高网络的泛化能力。它迫使每个神经元“不要那么确定”来自前一层的一些信息将可用,并使其尝试依赖前一层中较少的有利且信息丰富的抽象片段来学习表示。它迫使它考虑前一层的所有表示来做出决策,而不是将所有的权重放在它“最喜欢的”几个神经元上。通过这样做,网络通常能更好地适应新数据,其中输入与训练集不同。

问:“据你所知,dropout后存储的知识质量(训练对网络所做的任何事情)是否仍然可用?也许可以用随机的十分之一替代随机的一半,只关闭一个十分之一,这样可能在过渡期间减少知识损失。”

答:不幸的是,我无法正确回答为什么要关闭一半的神经元而不是10%(或任何其他数字)。也许有解释,但我没见过。一般来说,它只是有效,仅此而已。我还需要提到,dropout的任务是确保每个神经元不仅仅考虑前一层的几个神经元,并且即使通常帮助它做出正确决定的神经元不可用,它也准备好做出一些决定。这仅用于泛化,并且帮助网络更好地处理之前未见过的数据,dropout不会实现其他任何事情。

现在让我们再次考虑迁移学习。假设你有一个具有4层的网络。你训练它识别图片中的特定对象(猫、狗、桌子、车等)。然后你切断最后一层,用三个额外的层替换它,现在你在这个结果的6层网络上训练一个数据集,该数据集例如写出关于图片上显示内容的简短句子(“一只猫在车上”,“房子附近有窗户和树”等)。我们通过这样的操作做了什么?我们最初的4层网络能够理解我们输入的图像中是否有特定对象。其前3层学习了图像的良好表示——第一层学习了可能的边缘、点或图像中的一些极端原始几何形状。第二层学习了一些更复杂的几何图形,如“圆”或“方”。最后一层知道如何将它们组合成更高层次的对象——“车”、“猫”、“房子”。现在,我们可以重用我们在不同领域学到的这种良好表示,只需添加几个额外的层。每层将使用原始网络的最后一层(第三层)的抽象,并学习如何将它们组合起来,创建图像的有意义描述。当你在新数据集上执行学习时,以图像作为输入,以句子作为输出,它将调整我们从原始网络获得的前3层,但这些调整大多是次要的,而3个新层将通过学习显著调整。我们通过迁移学习实现了以下目标:

1) 我们可以学习更好的数据表示。我们可以创建一个在特定任务上非常优秀的网络,然后在此基础上构建网络来执行不同的任务。

2) 我们可以节省训练时间——网络的前几层已经训练得足够好,因此更接近输出的层已经获得了相当好的数据表示。因此,使用预训练的前几层,训练应该完成得更快。

所以,底线是预训练某个网络然后在另一个网络中重用部分或整个网络是完全合理的,并且并非不常见。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注