从AlexNet到MobileNet,带你入门深度神经网络

简介: 在2018年3月13日云栖社区,来自哈尔滨工业大学的沈俊楠分享了典型模式-深度神经网络入门。本文详细介绍了关于深度神经网络的发展历程,并详细介绍了各个阶段模型的结构及特点。

哈尔滨工业大学的沈俊楠分享了典型模式-深度神经网络入门。本文详细介绍了关于深度神经网络的发展历程,并详细介绍了各个阶段模型的结构及特点。
直播回顾请点击
以下是精彩视频内容整理:
问题引出
学习知识从问题引出入手是一个很好的方法,所以本文将可以围绕下面三个问题来展开:
1.DNN和CNN有什么不同?有什么关系?如何定义?
2.为什么DNN现在这么火,它经历怎么一个发展历程?
3.DNN的结构很复杂,怎么能实际入门试一下呢?
本文思维导图如下:

_1


发展历程
DNN-定义和概念
在卷积神经网络中,卷积操作和池化操作有机的堆叠在一起,一起组成了CNN的主干。
同样是受到猕猴视网膜与视觉皮层之间多层网络的启发,深度神经网络架构架构应运而生,且取得了良好的性能。可以说,DNN其实是一种架构,是指深度超过几个相似层的神经网络结构,一般能够达到几十层,或者由一些复杂的模块组成。

_2


ILSVRC(ImageNet大规模视觉识别挑战赛)每年都不断被深度学习刷榜,随着模型变得越来越深,Top-5的错误率也越来越低,目前降低到了3.5%附近,而人类在ImageNet数据集合上的辨识错误率大概在5.1%,也就是目前的深度学习模型识别能力已经超过了人类。
从AlexNet到MobileNet
Alexnet
AlexNet是首次把卷积神经网络引入计算机视觉领域并取得突破性成绩的模型。
AlexNet有Alex Krizhevsky、llya Sutskever、Geoff Hinton提出,获得了ILSVRC 2012年的冠军,再top-5项目中错误率仅仅15.3%,相对于使用传统方法的亚军26.2%的成绩优良重大突破。
相比之前的LeNet,AlexNet通过堆叠卷积层使得模型更深更宽,同时借助GPU使得训练再可接受的时间范围内得到结果,推动了卷积神经网络甚至是深度学习的发展。
下面是AlexNet的架构:

_3


AlexNet的特点有:
1.借助拥有1500万标签、22000分类的ImageNet数据集来训练模型,接近真实世界中的复杂场景。
2.使用更深更宽的CNN来提高学习容量。
3.灵活运用ReLU作为激活函数,相对Sigmoid大幅度提高了训练速度。
4.使用多块GPU提高模型的容量。
5.通过LRN引入神经元之间的竞争以帮助泛化,提高模型性能。
6.通过Dropout随机忽略部分神经元,避免过拟合。
7.通过缩放、翻转、切割等数据增强方式避免过拟合。
以上为典型的深度神经网络运用的方法。
AlexNet在研发的时候,使用的GTX580仅有3GB的显存,所以创造性的把模型拆解在两张显卡中,架构如下:
1.第一层是卷积层,针对224x224x3的输入图片进行卷积操作,参数为:卷积核11x11x3,数量96,步长4,LRN正态化后进行2x2的最大池化。
2.第二层是卷积层,仅与同一个GPU内的第一层输出进行卷积,参数为:卷积核5x5x48,疏朗256,LRN正态化后进行2x2的最大池化。
3.第三层是卷积层,与第二层所有输出进行卷积,参数为:3x3x256,数量384.
4.第四层是卷积层,仅与同一个GPU内的第三层输出进行卷积,参数为:卷积核3x3x192,数量384。
5.第五层是卷积层,仅与同一个GPU内的第三层输出进行卷积,参数为:卷积核3x3x192,数量256,进行2x2的最大池化。
6.第六层是全连接层,4096个神经元。
7.第七层是全连接层,4096个神经元。
8.第八层是全连接层,代表1000个分类的SoftMax。
VGGNet
VGGNet是Oxford的Visual Geometry Group提出的CNN模型,获得了ILSVRC 2014年定位比赛以25.3%错误率获得冠军,分类比赛仅次于GoogLeNet,top-5的错误率为7.32%。
VGGNet和GooLeNet分别独立采用了更深的网络结果,但是在设计上各有千秋。VGGNet继承了AlexNet的设计,但是做了更多的优化:
1.更深的网络,常用的有16层和9层,取得良好性能。
2.更简单,仅仅使用了3x3卷积核以及2x2最大池化,探索了深度与性能之间的关系。
3.收到Network in Network的影响,VGGNet的某些模型也用到了1x1卷积核。
4.采用多块GPU并行训练。
5.由于效果不明显,放弃了Local Response Normailzation的使用。
网络结构大致如下:

_4


在深度学习中,我们经常需要用到一些技巧,比如将图片进行去中心化、旋转、水平位移、垂直位移、水平翻转等,通过数据增强(Data Augmentation)以减少过拟合。
ResNet
ResNet(Residual Neural Network)由微软亚洲研究院的Kaiming He等提出,通过使用Residual Unit成功训练152层深的神经网络,在ILSVRC2015比赛中获得了冠军,top-5错误率为3.57%,同时参数量却比VGGNet低很多。
ResNet的灵感出自于这个问题:之前的研究证明了深度对模型性能至关重要,但随着深度的增加,准确度反而出现衰减。令人意外的是,衰减不是来自过拟合,因为训练集上的准确度下降了。极端情况下,假设追加的层都是等价映射,起码不应该带来训练集上的误差上升。
解决方案是引入残差:某层网络的输入是x,期望输出是H(x),如果我们直接把输入x传到输出作为等价映射,而中间的非线性层就是F(x)=H(x)-x作为残差。我们猜测优化残差映射要比优化原先的映射要简单,极端情况下把残差F(x)压缩为0即可。如图所示:

_5


以上就是ResNet的残差单元。残差单元的好处是反响传播的时候,梯度可以直接传递给上一层,有效率低梯度消失从而可以支撑更深的网络。同时,ResNet也运用了Batch Normalization,残差单元将比以前更容易训练且泛化性更好。
GoogLeNet
GoogLeNet是由Christian Szegedy等提出,主要思路是使用更深的网络取得更好的性能,同时通过优化来减少计算的损耗。
GoogLeNet的模型为Network in Network。AlexNet中卷积层用线性卷积核对图像进行内积运算,在每个局部输出后面跟着一个非线性的激活函数,最终得到的叫做特征函数。而这种卷积核是一种广义线性模型,进行特征提取时隐含地假设了特征是线性可分的,可实际问题往往不是这样的。为了解决这个问题,Network in Network提出了使用多层感知机来实现非线性的卷积,实际相当于插入1x1卷积同时保持特征图像大小不变。

_6


使用1x1卷积的好处有:通过非线性变化增加本地特征抽象能力,避免全连接层以降低过拟合,降低维度,只需要更少的参数就可以。Network in Network从某种意义上证实了,更深的网络性能更好。
GoogLenet把inception堆叠起来,通过稀疏的网络来建立更深的网络,在确保模型性能的同时,控制了计算量,从而更适合在资源有限的场景下进行预测。
MobileNet
传统的CNN模型往往专注于性能,但是在手机和嵌入式应用场景中缺乏可行性。针对这个问题,Google提出了MobileNet这一新模型架构。
MobileNet时小尺寸但是高性能的CNN模型,帮助用户在移动设备或者嵌入式设备上实现计算机视觉,而无需借助云端的计算力。随着移动设备计算力的日益增长,MobileNet可以帮助AI技术加载到移动设备中。
MobileNet有以下特性:借助深度方向可分离卷积来降低参数个数和计算复杂度;引入宽都和分辨率两个全局超参数,可以再延迟和准确性之间找到平衡点,适合手机和嵌入式应用;拥有颇具竞争力的性能,在ImageNet分类等任务得到验证;在物体检测、细粒度识别、人脸属性和大规模地理地位等手机应用中具备可行性。

理解实现-VGGNET风格迁移
风格迁移是深度学习众多应用中非常有趣的一种,我们可以使用这种方法把一张图片的风格“迁移”到另一张图片上生成一张新的图片。
深度学习在计算机视觉领域应用尤为明显,图像分类、识别、定位、超分辨率、转换、迁移、描述等等都已经可以使用深度学习技术实现。其背后的技术可以一言以蔽之:深度卷积神经网络具有超强的图像特征提取能力。
其中,风格迁移算法的成功,其主要基于两点:1.两张图像经过预训练好的分类网络,着提取出的高维特征之间的歇氏距离越小,则这两张图象内容越相似。2.两张图像经过预训练好的分类网络,着提取出的低维特在树枝上基本相等,则这两张图像风格越相似。基于这两点,就可以设计合适的损失函数优化网络。
对于深度网络来讲,深度卷积分类网络具有良好的特征提取能力,不同层提取的特征具有不同的含义,每一个训练好的网络都可以视为是一个良好的特征提取器,另外,深度网络有一层层的非线性函数组成,可以视为时复杂的多元非线性函数,此函数完成输入图像到输出的映射。因此,万千可以使用训练好的深度网络作为一个损失函数计算器。

_7


模型结构如图所示,网络框架分类两部分,其一部分时图像转换网络T(Image transform net)和预训练好的损失计算网络VGG-16,图像转换网络T以内容图像x为输入,输出风格迁移后的图像y,随后内容图像yc,风格图像ys,以及y’输入vgg-16计算特征。
在此次深度神经网络中参数损失函数分为两部分,对于最终图像y’,一本分是内容,一本分是风格。
损失内容: _8,其中代表深度卷积网络VGG-16感知损失: _9,其中G是Gram矩阵,计算过程为: _10
总损失定计算方式: _11
本文由云栖志愿小组谭昊整理,编辑百见
数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!
相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
目录
相关文章
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
30天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
56 0
|
3月前
|
网络协议
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(下)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
35 2
|
3月前
|
网络协议 Linux 数据处理
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)
82 3
|
1月前
|
安全 网络安全 数据安全/隐私保护
网络拓扑结构入门快速介绍
网络拓扑结构入门快速介绍
|
1月前
|
数据采集 Web App开发 数据处理
Ruby网络爬虫教程:从入门到精通下载图片
Ruby网络爬虫教程:从入门到精通下载图片
|
1月前
|
人工智能 监控 安全
网络安全知识入门:Web应用防火墙是什么?
网络安全知识入门:Web应用防火墙是什么?
22 1
|
2月前
|
机器学习/深度学习 人工智能 编解码
Backbone往事 | AlexNet~EfficientNet,10多个网络演变铺满了炼丹师们的青葱岁月
Backbone往事 | AlexNet~EfficientNet,10多个网络演变铺满了炼丹师们的青葱岁月
39 0
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
[Java]Socket套接字(网络编程入门)
38 0
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习入门:Python 与神经网络
深度学习是机器学习的一个分支,它涉及使用多层神经网络来处理和学习数据。在 Python 中,有许多流行的深度学习库和框架可以帮助我们轻松地构建和训练神经网络模型。在本文中,我们将介绍深度学习的基本概念,并使用 Python 中的 TensorFlow 和 Keras 库来构建一个简单的神经网络模型。