从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
本文由云栖志愿小组谭昊整理,编辑百见
数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
20天前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
51 3
图卷积网络入门:数学基础与架构设计
|
10天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
46 2
|
17天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
43 3
|
24天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
122 0
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
115 1
|
2月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
156 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
33 1
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
下一篇
DataWorks