深度学习中的常见问题汇总(一)

深度学习中的常见问题汇总(一)

转自

1.CNN复杂度分析

在深度学习基础网络不断进化的过程中,可以发现新的模型不仅性能有极大地提升,网络的复杂度通常也会更低。深度学习网络模型的复杂度直接关系到其实际应用中的速度与可行性,因此这里总结一下 CNN 复杂度的含义与计算方式。

1.1时间复杂度

通常,我们假设计算机运行一行基础代码需要一次运算,那么模型的时间复杂度即为模型的运算次数,用浮点运算次数 FLOPs(FLoating-point OPerations) 表示。首先来看一个最简单的单层卷积的时间复杂度。

其中,

  • M 为每个卷积核输出特征图(Feature Map)的尺寸长度
  • K 为卷积核(Kernel)的尺寸大小
  • C_in 输入的通道数,即上一层的输出通道数目
  • C_out 卷积层具有的卷积核个数,即输出通道数目

而特征图的尺寸 M 又与输入矩阵大小 X,卷积核尺寸 K,Padding 和步长 Stride 有关,其计算公式为:

M = (X - K + 2 * Padding )/Stride + 1

注:为了方便说明,上述所提到的卷积核尺寸 K 与输入矩阵大小 X 均为正方形;
且为了简洁,省略了模型中的偏置 bias。

对于整体的卷积网络而言,其时间复杂度的计算方式为各层复杂度的累加。其计算方式如下:

其中,

  • D 为卷积层的数目
  • i 为第 i 个卷积层
  • Ci 为第 i 层卷积的输出通道数目

1.2空间复杂度

在深度学习中,空间复杂度一般指的是访存量,包括两个部分:参数量,输出特征图。

参数量:模型所有带参数的层的权重参数总量(即模型体积,下式左半部分)。

特征图:模型在实时运行过程中,每层输出的特征图大小(下式右半部分)。

  • 参数量只与卷积核的尺寸 K 、通道数 C 、卷积的总层数 D 相关,而与输入数据的大小无关。
  • 输出特征图的空间占用比较容易,就是其空间尺寸 M^2 和通道数 C 的连乘。

注:实际上有些层(例如 ReLU)其实是可以通过原位运算完成的,此时就不用统计输出特征图了。

2.CNN网络的感受野

2.1感受野的含义

感受野是深度学习中最为重要的概念之一,定义为:在卷积神经网络CNN中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野(Receptive Field)。通俗来说就是卷积层输出的一个点映射到输入矩阵上的区域大小。感受野的大小直接影响到模型的输出特征,如对于目标检测模型,不同尺寸的目标所适配的感受野大小也不同,因此为了让模型能够适应多尺度的目标检测,通常会借助图像金字塔,或融合多个卷积层的特征,以获得最佳的检测性能。

为了更直观的理解感受野,可以借助如下的示意图(为了方便,将二维简化成一维)。这是一个三层的 CNN 网络,每一层卷积核的 kernel_size=3, stride=1 ,那么最上层的特征所对应的感受野为7x7。

2.2感受野的计算方式

其中 RF 表示特征感受野大小, l 表示层数,l=0 表示输入层, 此时 RF0=1 , feature_stride_0=1 。

根据感受野的计算公式可以得到每一层的感受野大小:

第一层

第二层

第三层

但如果有dilated conv的话,计算公式为

3.梯度消失、爆炸的解决方案

深度学习的模型训练通常采用梯度更新的方法,且一般层数越深,就可以处理更为复杂的问题。但是随之也带了许多弊端,如梯度消失与梯度爆炸。

3.1梯度消失

神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。

产生的原因:

  • 网络层数较深
  • 采用不合适的损失函数,比如sigmoid

3.2梯度爆炸

梯度爆炸与梯度消失类似,当每层的偏导数值都大于1时,经过多层的权重更新之后,梯度就会以指数形式增加,即为梯度爆炸。

产生原因:

  • 网络层数较深
  • 权重初始值太大
  • 训练样本有误

3.3解决方法

  • 逐层训练加微调

    该方法由 Geoffrey Hinton 于2006年提出,具体流程为每次只训练一层神经网络,待权重稳定之后,再使用该层网络的输出进行后一层网络的输入,重复该步骤至训练所有网络层。最后再对整个模型进行finetune,得到最优的模型。

  • 梯度剪切

    梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。

  • 权重正则化

    比较常见的是L1正则,和L2正则,在各个深度框架中都有相应的API可以使用正则化。

  • relu、leakrelu、elu等激活函数

    Relu: 如果激活函数的导数为1,那么就不存在梯度消失爆炸的问题了,每层的网络都可以得到相同的更新速度,relu就这样应运而生。

  • batchnorm

    batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化到均值为0,方差为1,保证网络的稳定性。

  • 残差结构

    残差结构中的 shortcut 有效地避免了梯度消失与爆炸问题。

  • LSTM

    LSTM全称是长短期记忆网络(long-short term memory networks),是不那么容易发生梯度消失的,主要原因在于LSTM内部复杂的“门”(gates),如下图,LSTM通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“,因此,经常用于生成文本中。

持续更新ing 。。。

原文地址:https://www.cnblogs.com/danpe/p/10774125.html

时间: 2024-10-06 01:14:36

深度学习中的常见问题汇总(一)的相关文章

深度学习网络训练技巧汇总

转载请注明:炼丹实验室新开了一个专栏,为什么叫炼丹实验室呢,因为以后会在这个专栏里分享一些关于深度学习相关的实战心得,而深度学习很多人称它为玄学,犹如炼丹一般.不过即使是炼丹也是可以摸索出一些经验规律的,希望和各位炼丹术士一起多多交流. 训练技巧对深度学习来说是非常重要的,作为一门实验性质很强的科学,同样的网络结构使用不同的训练方法训练,结果可能会有很大的差异.这里我总结了近一年来的炼丹心得,分享给大家,也欢迎大家补充指正. 参数初始化. 下面几种方式,随便选一个,结果基本都差不多.但是一定要做

浅谈深度学习中潜藏的稀疏表达

浅谈深度学习中潜藏的稀疏表达 “王杨卢骆当时体,轻薄为文哂未休. 尔曹身与名俱灭,不废江河万古流.” — 唐 杜甫<戏为六绝句>(其二) [不要为我为啥放这首在开头,千人千面千理解吧] 深度学习:概述和一孔之见 深度学习(DL),或说深度神经网络(DNN), 作为传统机器学习中神经网络(NN).感知机(perceptron)模型的扩展延伸,正掀起铺天盖地的热潮.DNN火箭般的研究速度,在短短数年内带来了能“读懂”照片内容的图像识别系统,能和人对话到毫无PS痕迹的语音助手,能击败围棋世界冠军.引

深度学习中得数学,高效计算基础与线性分类器

深度学习说到底就是要调节网络中得权重,使网络的分类结果更接近于训练值.这个重复迭代的过程又是一个线性回归的问题.在这种可能会用到高数,线性代数,概率论中的知识. 一.数学基础提一提. 1.高数中得知识. 高数中最重要的就是微积分了,那在深度学习中出现最多的一个概念就是梯度.什么是梯度呢?要说导数,学过高数的肯定都知道.其实梯度就是当把标量x变成向量X时,对X求导就是梯度.那为什么要用梯度呢?因为梯度等于0在凸函数中往往代表着一个极小值点.我们要求得就是损失函数的极小值,这正是我们需要的.梯度是指

深度学习中的Data Augmentation方法(转)基于keras

在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augmentation 2. Regularization. 数据量比较小会导致模型过拟合, 使得训练误差很小而测试误差特别大. 通过在Loss Function 后面加上正则项可以抑制过拟合的产生. 缺点是引入了一个需要手动调整的hyper-parameter. 详见 https://www.wikiwand.c

深度学习中 --- 解决过拟合问题(dropout, batchnormalization)

过拟合,在Tom M.Mitchell的<Machine Learning>中是如何定义的:给定一个假设空间H,一个假设h属于H,如果存在其他的假设h’属于H,使得在训练样例上h的错误率比h’小,但在整个实例分布上h’比h的错误率小,那么就说假设h过度拟合训练数据. 也就是说,某一假设过度的拟合了训练数据,对于和训练数据的分布稍有不同的数据,错误率就会加大.这一般会出现在训练数据集比较小的情况. 深度学习中避免过拟合的方法: Dropout      2012年ImageNet比赛的获胜模型A

资深程序员带你玩转深度学习中的正则化技术(附Python代码)!

目录 1. 什么是正则化? 2. 正则化如何减少过拟合? 3. 深度学习中的各种正则化技术: L2和L1正则化 Dropout 数据增强(Data augmentation) 提前停止(Early stopping) 4. 案例:在MNIST数据集上使用Keras的案例研究 1. 什么是正则化? 在深入该主题之前,先来看看这几幅图: 之前见过这幅图吗?从左到右看,我们的模型从训练集的噪音数据中学习了过多的细节,最终导致模型在未知数据上的性能不好. 换句话说,从左向右,模型的复杂度在增加以至于训练

卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮助您彻底理解卷积. 已经有一些关于深度学习卷积的博客文章,但我发现他们都对不必要的数学细节高度混淆,这些细节没有以任何有意义的方式进一步理解.这篇博客文章也会有很多数学细节,但我会从概念的角度来看待他们,在这里我用每个人都应该能够理解的图像表示底层数学.这篇博文的第一部分是针对任何想要了解深度学习中

关于深度学习中的batch_size

5.4.1 关于深度学习中的batch_size batch_size可以理解为批处理参数,它的极限值为训练集样本总数,当数据量比较少时,可以将batch_size值设置为全数据集(Full batch cearning). 实际上,在深度学习中所涉及到的数据都是比较多的,一般都采用小批量数据处理原则. 小批量训练网络的优点: 相对海量的的数据集和内存容量,小批量处理需要更少的内存就可以训练网络. 通常小批量训练网络速度更快,例如我们将一个大样本分成11小样本(每个样本100个数据),采用小批量

深度学习中的数据增强技术(二)

上篇文章介绍了深度学习中数据增强技术的应用,及部分TensorFlow实现代码.废话不说了,这篇接着介绍: TensorFlow实现图片数据增强 注:类似的方法放在了代码中注释的部分,实际调试时可以分别打开运行 ③图像色彩调整 import matplotlib.pyplot as plt import tensorflow as tf # 读取图片 image_data = tf.gfile.FastGFile("data/dog3.jpg", 'br').read() # 4中调整