残差网络(ResNets)(Residual Networks
2021-10-18 本文已影响0人
丁功春
如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的加深,训练错误会越来越多。
但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。有人甚至在1000多层的神经网络中做过实验,尽管目前我还没有看到太多实际应用。但是对的激活,或者这些中间的激活能够到达网络的更深层。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。
普通网络 残差网络这里使用跳跃连接(Skip connection),它可以从某一层网络层获取激活,然后迅速反馈给另外一层。就是指跳过一层或者好几层,从而将信息传递到神经网络的更深层。
image.png
迁移学习(Transfer Learning)
相比于从头训练权重,如果使用别人已经训练好的网络结构的权重,通常能够进展得相当快,用这个作为预训练。
1
2 3
如果任务只有一个很小的数据集,如图1所示,我们可以完全使用它的权重,把前面的层都冻结;
要是有一个更大的训练集,如图2所示,我们冻结更少的层,然后训练后面的层;
或者如图3所示,换成自己的网络结构。
最后,如果有大量数据,我们应该用这些网络和它的权重当做初始化,用它们来代替随机初始化,接着你可以用梯度下降训练,更新网络所有层的所有权重。