热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习篇:卷积神经网络DNN和CNN

0前言常言道,温故而知新,那有没有什么东西是每一次看到都像是接触了一种新的知识呢?或许机器学习相关技术发展太过迅速,或许是我之前每次接触都未深入,我总感觉机器学习相关的技术我并

0 前言

常言道,温故而知新,那有没有什么东西是每一次看到都像是接触了一种新的知识呢?或许机器学习相关技术发展太过迅速,或许是我之前每次接触都未深入,我总感觉机器学习相关的技术我并不能建立一个完整的概念,或者说并不深入研究的话,对于机器学习的概念都太过零碎了。

几次想要开始整理,但是因为我对机器学习的某些方面还是欠缺了解,总感觉整理不下去,初步定下以下话题吧。

  1. 卷积神经网络DNN和CNN

  2. 循环神经网络RNN

  3. 神经网络发展历史

  4. 自然语言处理 NLP

这里想要整理的是DNN和CNN,主要涉及

  1. 常见的视觉任务

  2. 神经网络DNN

  3. 卷积神经网络CNN

1、 常见的视觉任务

卷积神经网络最常见的应用在于计算机视觉任务,计算机视觉是关于研究计算机视觉能力的学科,或者说是使机器能对环境和其中的刺激进行可视化分析的学科。图像识别从图像分类到定位(目标检测、语义分割、实例分割)到目标追踪,主要包括以下任务:

  • 图像分类:是图像识别的基础,识别出图像中有哪几类的物体

  • 目标检测:识别出每一类物体具体的位置并用规则的形状框出来

  • 语义分割/实例分割:每一类物品具体的形状位置识别/每一类物品种单个个体识别出来

  • 场景文字识别

  • 图像生成

  • 目标追踪

  • 人体关键点检测:人体姿势估计

  • 视频分类:通常是几秒的小视频

  • 度量学习:通常应用于人脸检测

2、 神经网络

神经网络技术起源于上世纪五六十年代,当时叫感知机(perceptron),包含有输入层、输出层和一个隐藏层。输入的特征向量通过隐藏层变换到达输出层,由输出层得到分类结果。但是单层感知机对稍微复杂一些的函数都无能为力,直到上世纪八十年代HitionRumelhart等人发明了多层感知机,即具有各层隐藏层的感知机。

多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoidtanh等连续函数模拟神经元对激励的响应,在训练算法上使用Werbos发明的反向传播BP(Back-propagation algorithm)算法。这就是所说的神经网络NN

神经网络的层数直接决定了它对现实的刻画能力--利用每层更少的神经元你和更加复杂的函数。但是随着神经网络层数的加深,出现了两个问题:

  1. 优化函数越来越容易陷入局部最优解

  2. 梯度消失

2006年,Hition提出了深度学习的概念,引发了深度学习的热潮。具体是利用预训练的方式缓解了局部最优解的问题,将隐藏层增加到了7层,实现了真正意义上的“深度”。

为了克服梯度消失,ReLU,maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。结构跟多层感知机一样。如下图所示:

维度灾难:然而DNN中每一个下层神经元都连接着上一层全部的神经元的输出作为输入,而且需要为每一个输入配置权重w,这就导致了参数数量膨胀。譬如处理一张200×200的图像,输入层包含40000维,隐藏层400000神经元,那么就需要160亿参数,现在的图像就没有200×200那么小的了。

因此引入了卷积神经网络CNN,使用卷积核实现了局部连接、权值共享。

后面为了应对时间顺序的输入,引入了循环神经网络RNN。

img

3、CNN(卷积神经网络)

卷积神经网络基本的整体结构包含多个CONV(卷积层)+RELU(激活函数)+POOL(池化层)以及最后的全连接神经网络分类层。

3.1 卷积计算

每一层卷积层共用一个卷积核,实现了局部连接、权值共享。权值共享极大地减少了参数的数量,大大提高了计算速度,减少内存消耗。

卷积计算包含一维卷积计算,二维卷积计算,多通道卷积计算和三维卷积计算。其中二维卷积计算是针对图像二维矩阵的处理,多通道卷积计算是针对彩色三通道二维矩阵的处理,而三维卷积计算是针对视频的处理,这里暂不涉及。

3.1.1一维卷积计算

一维卷积是两个信号之间的运算,其本质是卷积核从左到右滑过信号,每滑动一格做一次点积。

卷积有三种方式

valid:卷积核完全在信号内

same:卷积核中心在信号内(padding:不够的位置补零)

 

full:卷积核边沿在信号内(padding:不够的位置补零)

3.1.2 二维卷积计算

二维卷积通常用于图片的计算,图片在计算机底层就是一个矩阵,矩阵中的每个元素都是0-255。

二维卷积参与运算的元素:二维卷积核(filter)和二维信号。二维卷积同样也包含valid、same、full三种计算方式,这里仅展示valid方式。

3.1.3 多通道卷积计算

虽说二维卷积可以处理图像的二维矩阵表示,但是彩色图像一般是三通道(RGB通道)的二维矩阵数据。而多通道的卷积计算参与运算的元素有:N通道的二维卷积核和N通道的二维信号,最后的结果是二维信号,其过程是各通道二维信号核卷积进行点积操作后将各通道对应位置的值相加。

3.1.4 卷积核的分析与计算

有关于卷积计算的细节还包括两个细节步长(stride)和边界填充(Padding)。

步长stride:反映了filter滑动一次的距离,上面的记录都默认步长为1。

边界填充Padding上面就有提过,默认是使用0,好像有人也尝试过通过拓展原图边界的方式来进行边界填充,但是效果并不佳。

从上面可以观察到,似乎原信号进行了卷积之后长度和体积都会改变。如下图,二维矩阵就从6×6变成了4×4

 

关于输出特征图体积的计算,当输入大小为W1×H1×D1: 指定卷积核(filter)个数为K,卷积核filter大小为(F),步长S,边界填充P,那么输出特征图的体积为:

W2 = (W1-F+2P)/S+1
H2 = (H1-F+2P)/S+1
D2=K

譬如一个6×6×3的输入,卷积核个数为2,大小为3,步长为1,边界填充P=0。最后的结果是4×4×2。

3.2 池化POOLING

3.2.1 池化和上下采样

缩小图像,也称下采样(subsampled)或降残阳(downsampled),主要目的是使得图像符合显示区域的大小或者生成缩略图。

放大图像,也称上采样(upsampling)或图像插值(interpolating),主要目的是方法原图像,从而科一显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息,因此图像的质量将不可避免地受到影响。然而却是有一些缩放方法能够增加图像地信息,从而使得缩放后地图像质量超过原图质量的。

POOLING:池化、汇聚、汇合,它是卷积神经网络中的一个重要的概念,实际上是一种形式的降采样。它会压缩输入的特征图,一方面减少特征,导致了参数减少,进而简化了卷积神经网络计算时的复杂度;另一方面保持了特征的某种不变性(旋转、平移、伸缩等)。

池化的作用在于:

  1. 特征不变形:池化操作时模型更加关注是否存在某些特征而不是特征具体的位置。

  2. 特征降维:池化相当于在空间范围内做了维度的约减,从而使模型科一抽取更加广泛的特征,同时减少了下一层输入大小,进而减少计算量和参数个数。

  3. 在一定程度上防止过拟合

3.2.2 平均池化和最大池化

池化层的操作就是窗口滑动。计算取值,池化的窗口一遍不重叠即它的滑动窗口的步长stride=滑动窗口的大小。池化窗口的计算方式有两种,一种是平均池化(Avgrage pooling),取窗口中数值的平均值,一种是最大池化(Max pooling),取窗口中数值的最大值。

4、全连接层

全连接层有卷积层都可以互相转换:对于任意一个卷积层,要把它变成全连接层只需要把权重变成一个巨大的矩阵,其中除了一些特定区块,大部分都是0(因为局部感知),而且好多区块的权值还相同(由于权重共享)。相反的,任何一个全连接层也可以变成卷积层。

5、正向传播和反向传播

上面解释了CNN网络的基本结构,将图像的二维矩阵从输入层输入卷积神经网络,经过一系列神经元提取特征,处理特征最后得到分类结果,似乎好像很简单,但是好像有一件很重要的事情没有解释:无论是全连接层还是实现了权值共享的卷积层,我们都需要确认各个神经元中各层的全连接权重参数和卷积核中的参数,这就要涉及到模型训练了。

对于已有的打好了标签的数据进行模型训练包括两个过程:正向传播和反向传播。一般来说我们会为模型设置初始权重,对输入特征进行计算后得出模型预测值y\',通过比较其与真实值y之间的差距并将结果反馈给模型按照偏导值更改权重参数并重新计算y\',如此反复,直到y\'无限逼近y。

在模型训练初步得出结果后,会使用另一部分打好标签的验证集验证模型的可用性,由此引出两个概念:欠拟合和过拟合。欠拟合是指在模型训练集中模型都不能很好地拟合数据集,而过拟合是指模型能很好地拟合训练集,但是在验证集中表现极差,主要原因是模型太过关心训练集某些特定特征而导致整个模型缺乏普适性。

6、卷积神经网络地优缺点

优点:

  • 共享卷积核、对高维数据处理无压力

  • 无需手动选取特征,训练好权重后特征分类效果就比较好

缺点;

  • 需要调参,需要大样本量,深度训练需要大量计算资源支撑

  • 物理含义不明确(我们并不清楚卷积层提取到的到底是什么特征,神经网络本身就是一种难以解释的“黑箱模型”)

7、经典卷积神经网络

7.1 LeNet

1998年LeCun等人发布了LeNet网络,从而揭开了深度学习的面纱,之后的深度神经网络都是在这个基础上进行改进的。LetNet被用来做手写字符和打印字符的识别任务,效果很好,曾被广泛的应用于美国银行指标写体识别,取得很大的成功。

  LetNet-5是一个较简单的卷积神经网络:输入二维图像,先经过两次卷积层和池化层,再经过全连接层,最后使用softmax分类作为输出层。其层数包含

  1. 输入层:灰度化、二值化并归一化成为32×32的二维矩阵

  2. C1卷积层:输入图片32×32,卷积核大小5×5,卷积核个数6。

  3. S2池化层:池化窗口大小2×2,池化方式:4各输入相加后乘以一个可训练参数,再加上一个可训练偏置后通过sigmoid。

  4. C3卷积层:卷积大小5×5,个数16

  5. S4池化层:池化窗口大小2×2,池化方式:4各输入相加后乘以一个可训练参数,再加上一个可训练偏置后通过sigmoid。

  6. C5卷积层:卷积大小5×5,个数120

  7. F16全连接层:计算输入向量和权重向量之间的点积后再加上一个偏置,结果通过sigmoid函数输出。

  8. 输出层

 

7.2AlexNet

2012 ILSVRC(大规模视觉识别挑战赛)冠军,远超第2名。

其主要贡献包括:

  • ReLu非线性单元:传统的激活函数一般是sigmoid和tanh两种饱和非线性函数。在使用梯度下降算法进行训练时,使用这些饱和的非线性函数会比使用非饱和的非线性函数ReLu慢很多,模型收敛需要更长的时间。所以使用ReLu非线性函数能够加速训练。

  • 多GPU训练

  • 局部响应多归一化层(Local Response Normalization Layer):其主要是为了防止过拟合,增加模型泛化能力。但是这种方法已经很少使用,取而代之的是BN。

  • 重叠的池化层:论文指出能够“稍微”减轻过拟合,不过目前主流的还是不重叠的池化层

  • 数据增广:当有标注的图片素材过少,可以通过平移、水平翻转,随机裁剪,色彩抖动,加入噪点等方法增广数据。

  • Dropout:缓解过拟合,主要原理是随机删除某些神经元的结果(不参与前向计算和反向传播)。该方法已经被申请专利,并且与BN的使用有冲突。

7.3 VGG

VGG在2014年ILSVRC挑战赛中赢得了定位任务的冠军和分类任务的亚军。

AlexNet标明通过加深网络深度可能能够提升性能,VGG沿着这个思路做出了出色的工作,进一步证实了加深网络能够提升算法。

主要贡献:更深层次的网络,更小的卷积核、池化核。

  • VGG全部使用了3×3的卷积核和2×2的池化核

  • VGG的激活函数全部使用了ReLU

7.4 小卷积核

随着卷积神经网络研究的深入,小卷积核渐渐称为了主流,其中最常使用3×3的卷积核,而1×1的卷积核使用则是为了升维或者降维。

首先,引入感受野的概念,在卷积神经网络CNN中,决定某一层输出结果中的一个元素所对应的输出层的区域的大小被称作感受野(receptive field)。

 

而在感受野范围不变的情况下:

一个5×5的卷积核就可以用两个串联的3×3卷积核来代替,一个7×7的卷积核就可以用三个串联的3×3卷积核来代替。

那么三个3×3的卷积核相比一个7×7的卷积核有什么优势呢?一是包含了三个ReLU层而不是一个,使决策函数更有判别性。二是减少了参数,三个3×3卷积核需要的参数个数是 3(3×3×输入通道数×输出通道数)=27×输入通道数×输出通道数,而一个7×7卷积核需要7×7×输入通道数×输出通道数=49×输入通道数×输出通道数。

总结来说,小卷积核的优势在于:

  • 参数变少:计算时间变短、存储空间小

  • 非线性增强:拟合能力更强

  • 层级变高:抽象能力强,提取更加复杂的特征

参考

 

CNN、RNN、DNN区别

Deep learning CHAPTER 6

计算机视觉这一年:这是最全的一份CV技术报告

CNN网络的神经元是像素还是图片

一文读懂 CNN、DNN、RNN 内部网络结构区别

神经网络的发展历史

常用图像卷积核小结

理解上采样、下采样、池化

卷积神经网络(CNN)详解

反向传播算法推导-卷积神经网络

LeNet详解


推荐阅读
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 每日一书丨AI圣经《深度学习》作者斩获2018年图灵奖
    2019年3月27日——ACM宣布,深度学习之父YoshuaBengio,YannLeCun,以及GeoffreyHinton获得了2018年的图灵奖, ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • TensorFlow基础知识深化讲解
    批标准化批标准化(batchnormalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。深度神经网络随着深度加深,收 ... [详细]
  • lightgbm过去版本安装包_集成学习算法LightGBM
    LightGBM在Kaggle,KDD等各类数据竞赛中,无论是分类问题还是回归问题亦或是排序问题,以GBDT(分类回归决策树 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 分享篇:第十届“泰迪杯”数据挖掘挑战赛农田害虫图像识别(特等奖)一
    1.1赛题背景昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分。分辨益虫和害虫,保留益虫,消灭害虫,对于减轻害 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
  • 鄂维南:从数学角度,理解机器学习的「黑魔法」,并应用于更广泛的科学问题...
    作者|Hertz来源|科学智能AISI北京时间2022年7月8日晚上22:30,鄂维南院士在2022年的国际数学家大会上作一小时大会报告(plenarytalk)。今 ... [详细]
  • 基于深度学习的遥感应用
    文章目录深度学习的发展过程深度学习在遥感中的应用基于深度学习的遥感样例库建设基于深度学习的遥感影像目标及场景检索基于深度学习的建筑物提取基于深度学习的密集建筑物自动检测基于深度学习 ... [详细]
author-avatar
果粒粒1201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有