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