许多计算机视觉应用程序可以实现推抵式驾驶和面部检测的原因。但是,许多人可能不知道近年来,计算机视觉中的突破是由特定类型的网络架构驱动的,这就是如此。- 称为残留网络(残基)。实际上,我们看到的许多先进的人工智能成就,而没有残留块的发明。这是一个简单而优雅的概念的残留块的概念,这使我们真正的“深”为“深度”网络。
本文将带您讨论剩余网络背后的基本原理,并介绍如何简单地在Pytorch中实现剩余网络并进行培训重新连接以进行图像分类。
从理论上讲,具有变量的更深的网络应该更好地完成诸如图像理解之类的完整困难任务。但是,有证据表明,根据传统方法,加深主要数量的网络实际上更难训练,并且其性能甚至比它更差浅网络。这就是我们所说的除法预言。
降解问题似乎在我们的直觉中是不合理的。如果我们有两个具有相同数量层的网络,并在第二个网络的前面添加X层,那么最坏的情况应该是前X层输出亨格和其他映射,导致两个网络的性能相同。一个可能的猜想是,网络的性能差,因为网络忽略了恒定的映射。因此,在2010年代初期,诸如VGG之类的网络,-16通常仅限于约10-20层。
剩余网络为上述降解问题提出了一个简单明了的解决方案。残留网络可以创建一个称为Skip Connection的快捷方式,该快捷方式将原始输入放入网络中,并在几个堆叠层后将输出功能的最终组合组合在一起。
如图1所示,堆叠层的输入设置为x,中间的堆栈层是函数f。然后,最终输出y是
$ $ y = f(x)+x $ $
当F(X)和X的尺寸不匹配时,我们可以简单地在跳跃连接的过程中执行线性投影以更改X的维度。
我们将整个管道称为上方的残差块。我们可以使用多个残差块来构建一个非常深的网络,并避免原始的退化问题。
库我们将使用pytorch(包括火炬)来构建残差网络。以下代码可以导入我们需要的所有库:
为了显示残差网络的强大功能,我们将使用两个数据集测试:简单的MINST数据集(包括60,000个手写的阿拉伯数字图像)和更复杂的CIFAR-10数据集。
下载链接如下:1。MNIST数据集2. CIFAR-10数据集数据集
在测试网络的过程中,我们经常需要参考多个不同数据集的培训结果。网格钛的开放数据集平台提供了一个停机平台的获取,筛选和高质量数据集的管理,而且我们的工作将变得非常方便。有许多众所周知的非结构性数据集。通过网格钛提供的SDK,我们甚至可以将这些数据集直接集成到我们的培训和测试代码中。
通常,尽管我们可以使用CPU来训练神经网络,但最好的选择实际上是GPU,因为这可以大大提高训练速度。这篇文章带领每个人设定的残留网络,CPU和GPU都可以运行,但更复杂的网络都可以运行(例如RESNET-152)将出现在实际应用中。通常,GPU更好。我们可以使用以下代码来测试是否可以使用GPU培训我们的机器:
在这里,我们将介绍如何在卷积神经网络上创建最简单的残差块,其输入和输出尺寸相同。以下代码结合了Pytorch的NN.Module,以创建消失。
实际上,许多使用残差结构的网络在使用大型数据集(例如ImageNet)进行训练后都非常好。我们可以在不重复轮子的情况下使用这些现有模型。Torchvision在其库中提供了Rynet-34,Resnet-50和Resnet-152的预构建模型和体系结构。我们可以通过以下代码获取上述模型:
但是,应该注意的是,如果我们需要在Imagenet外部使用数据集来微调模型,则必须注意更改Resnet的最后一层,因为最后一个单热矢量的尺寸需要等于到数据集类的数量。
经过50轮训练后,我们建立的网络可以轻松达到MNIST数据集中约99%的准确性,而CIFAR-100数据集上的Resnet-34和Resnet-152可以达到90%。在He Kaiming等人中,我们还可以看到,ImageNet数据集上残留结构的性能明显优于VGG,并且它也比具有相同层但没有残留结构的网络强。
可以说He Kaiming和其他人的残留结构是最近计算机视觉中神经网络领域的最佳发明之一。TODAY,几乎所有网络(甚至超过卷积网络的网络)也可以保持良好的性能。在大量的层堆积之后保持良好的性能,并且剩余块的结构或多或少。这种简单而优雅的方法创造了无数的可能性来促进机器对人类世界的理解。
作者:Ta-Ying Chen,牛津大学机器学习的博士生,媒介著名的技术博客作者
翻译:Songxian