前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习基础知识串烧

深度学习基础知识串烧

作者头像
用户9925864
发布2022-07-27 08:20:52
2270
发布2022-07-27 08:20:52
举报
文章被收录于专栏:算法工程师的学习日志

分享一些最近看到的深度学习文章,大概整理了一些基础知识作为入门,


1.CNN模型具体分析(AlexNet网络结构)

1.1 网络结构

AlexNet有5个卷积层和3个全连接层

C1:96×11×11×3 (卷积核个数/宽/高/深度) 34848个

C2:256×5×5×48(卷积核个数/宽/高/深度) 307200个

C3:384×3×3×256(卷积核个数/宽/高/深度) 884736个

C4:384×3×3×192(卷积核个数/宽/高/深度) 663552个

C5:256×3×3×192(卷积核个数/宽/高/深度) 442368个

R1:4096×6×6×256(卷积核个数/宽/高/深度) 37748736个

R2:4096×4096 16777216个

R3:4096×1000 4096000个

共6000万个参数

1.2 AlexNet模型内存大小计算

6000万(个参数)×32位(float32)=19.2亿位≈228.88MB

1.3 AlexNet模型计算力消耗

2. 卷积神经网络的层

卷积神经网络有三种层:卷积层、池化层和全连接层(Convolutional Layer, Pooling Layer, 及 Fully-Connected Layer)。 以处理CIFAR-10的卷积神经网络为例,简单的网络应包含这几层: [INPUT - CONV - RELU - POOL - FC]也就是[输入-卷积-激活-池化-分类],各层分述如下:

  • INPUT [32x32x3] 输入长32宽32带有三个通道的图片
  • CONV :计算图片的局部区域,如果我们想要使用12个过滤器fliters,他的体积将是 [32x32x12].
  • RELU :还是一个激励层max(0,x) ,尺寸还是 ([32x32x12]).
  • POOL:沿着图片的(width, height)采样, 减小长宽的维度,例如得到的结果是 [16x16x12].
  • FC (i.e. fully-connected) 计算分类得分最终尺寸是 [1x1x10], 这层是全连接的,每一个单元都与前一层的各个单元连接。

注意: 1. 卷及神经网络包含不同的层 (e.g. CONV/FC/RELU/POOL 也是最受欢迎的) 2. 每一层都输入输出3d结构的数据,除了最后一层 3. 有些层可能没有参数,有些层可能有参数 (e.g. CONV/FC do, RELU/POOL don’t) 4. 有些层可能有超参数有些层也可能没有超参数(e.g. CONV/FC/POOL do, RELU doesn’t)

下面展开讨论各层具体细节:

2.1 卷积层

卷积层是卷积神经网络的核心层,大大提高了计算效率。 卷积层由很多过滤器组成,每个过滤器都只有一小部分,每次只与原图像上的一小部分连接,UFLDL上的图:

这是一个过滤器不停滑动的结果, 我们这里要更深入些,我们输入的图像是一个三维的,那么每个过滤器也是有三个维度,假设我们的过滤器是5x5x3的那么我们也会得到一个类似于上图的激活值的映射也就是convolved feature 下图中叫作 activion map,其计算方法是wT×x+bwT×x+b其中w是5x5x3=75个数据,也就是权重,他是可以调节的。 我们可以有多个过滤器:

更深入一些,当我们滑动的时候有三个超参数: 1. 深度,depth,这是过滤器的数量决定的。 2. 步长,stride,每次滑动的间隔,上面的动画每次只滑动1个数,也就是步长为1. 3. 补零数, zero-padding,有时候根据需要,会用零来拓展图像的面积,如果补零数为1,变长就+2,如下图中灰色的部分就是补的0

下面是一个一维的例子:

其输出的空间维度计算公式是

(W−F+2P)/S+1(W−F+2P)/S+1

其中w是输入的尺寸,f是过滤器的尺寸,p是补零的尺寸,s是步长,图中如果补零为1那么输出为5个数,步长为2输出为3个数。 到现在为止我们好像都没有涉及到 神经这个概念哇,现在我们就从神经角度来理解: 上面提到每一个激活值都是:wT×x+bwT×x+b,这个公式我们熟悉哇,这就是神经元的得分公式呀,所以我们可以将每一个 activation map 其看做是一个filter的杰作,如果有5个过滤器,就会有5个不同的filter同时连接一个部分。 卷积神经网络还有一个重要的特征: 权重共享:在同一个filter上的不同的神经单元(滑动窗口)的权重是相同的。这样以来大大减少了权重的数量。

2.2 池化层

上面可以知道在卷积层之后得到的结果还是挺多,而且由于滑动窗口的存在,很多信息也有重合,于是有了池化pooling 层,他是将卷积层得到的结果无重合的分来几部分,然后选择每一部分的最大值,或者平均值,或者2范数,或者其他你喜欢的值,我们以取最大值的max pool为例:

2.3 其他层

  1. Normalization Layer,以前的时候用normalization 层的模拟人脑的抑制作用,但是逐渐认为没有多大的帮助,于是用的少了,这篇论文里有介绍其作用 Alex Krizhevsky’s cuda-convnet library API.
  2. Fully-connected layer,这个全连接层和以前学过的一样,前面提到过最后的分类层是全连接层。

2.4 Converting FC layers to CONV layers

全连接层和卷积层除了连接方式不一样,其计算方式都是内积,可以相互转换: 1. FC如果做CONV layer 的工作就相当于其矩阵的多数位置都是0(稀疏矩阵)。 2. FC layer 如果被转变为 CONV layer. 相当于每一层的局部连接变为了全部链接如FC layer with K=4096的输入是7×7×512那么对应的卷积层为 F=7,P=0,S=1,K=4096输出为1×1×4096。 例子: 假设一个cnn输入 224x224x3图像,经过若干变化之后某一层输出 7x7x512 到这里之后使用两4096的FC layer及最后一个1000的FC计算分类得分下面是把这三层fc转化为Conv 的过程: 1. 使用 F=7的conv layer 输出为 [1x1x4096]; 2. 使用F=1的过滤器,输出为 [1x1x4096]; 3. 使用F=1的卷积层,输出为 [1x1x1000]。

每次转化都会将FC的参数转变为conv的参数形式. 如果在转变后的系统中传入更大的图片,也会非常快速的向前运算。例如将384x384的图像输入上面的系统,会在最后三层之前得到[12x12x512]的输出, 经过上面转化的conv 层会得到 [6x6x1000], ((12 - 7)/1 + 1 = 6). 我们一下就得出了6x6的分类结果。 这样一次得到的比原来使用迭代36次得到的要快。这是实际应用中的技巧。 另外我们可以用两次步长16的卷积层代替一次步长为32的卷积层来输入上面的图片,提高效率。

3、模型训练相关的专业术语解释

3.1 名词解释

Step: 训练模型的步数

Batch Size(批尺寸):计算梯度所需的样本数量,太小会导致效率低下,无法收敛。太大会导致内存撑不住,Batch Size增大到一定程度后,其下降方向变化很小了,所以Batch Size是一个很重要的参数。

为什么需要有 Batch_Size :

batchsize 的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。

Epoch(回合):代表样本集内所有的数据经过了一次训练。

每个 epoch 都会进行shuffle,对要输入的数据进行重新排序,分成不同的batch。

Iteration(迭代):

理解迭代,只需要知道乘法表或者一个计算器就可以了。迭代是 batch 需要完成一个 epoch 的次数。记住:在一个 epoch 中,batch 数和迭代数是相等的。

比如对于一个有 2000 个训练样本的数据集。将 2000 个样本分成大小为 500 的 batch,那么完成一个 epoch 需要 4 个 iteration。

变量

含义

epoch

一个epoch表示所有训练样本运算学习一遍

iteration/step

表示每运行一个iteration/step,更新一次参数权重,即进行一次学习,每一次更新参数需要batch size个样本进行运算学习,根据运算结果调整更新一次参数。

batch size

1次迭代所使用的样本量

其关系为:

举例: 假设有20000个样本,batch size 为200,epoch为1, 则

3.2 例子

CIFAR10 数据集有 50000 张训练图片,10000 张测试图片。现在选择 Batch Size = 256 对模型进行训练。

每个 Epoch 要训练的图片数量:50000

训练集具有的 Batch 个数:50000/256 = 195 +1 = 196

每个 Epoch 需要完成的 Batch 个数:196

每个 Epoch 具有的 Iteration 个数:196

每个 Epoch 中发生模型权重更新的次数:196

训练 10 代后,模型权重更新的次数:196 * 10

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.CNN模型具体分析(AlexNet网络结构)
  • 2. 卷积神经网络的层
  • 2.1 卷积层
    • 2.2 池化层
      • 2.3 其他层
        • 2.4 Converting FC layers to CONV layers
          • 3.1 名词解释
          • 3.2 例子
      相关产品与服务
      批量计算
      批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档