深度学习的基本概念

深度学习基础知识

什么是深度学习?

  • 机器学习的分支,是一种以人工神经网络 (ANN) 为架构,对资料进行表征学习的算法
  • 观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等,深度学习的好处是用非监督式机器学习或半监督学习 (semisupervisedlearning) 的特征学习和分层特征提取高效算法来替代手工获取特征

深度学习适合不适合解决什么样的问题?

  • 适合
  • ** 解决数据量大:** 数据比较规范,但是决策函数高度非线性的问题
  • 局部相关特性:图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。
  • 不适合
  • 数据集太小:数据样本不足时,深度学习相对其它机器学习算法,没有明显优势
  • 数据集没有局部相关特性:对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果

面对训练样本少的问题,深度学习该如何解决?

  • 方法一: 利用预训练模型进行迁移模型微调 (finetune),预训练模型通常在特征上拥有很好的语义表达。此时,只需将模型在小数据集上进行微调就能取得不错的效果。这也是目前大部分小数据集常用的训练方式
  • 方法二: 单样本或者少样本学习(one-shot,few-shot learning),这种方式适用于样本类别远远大于样本数量的情况等极端数据集。例如有 1000 个类别,每个类别只提供 1-5 个样本
  • 其他方法: 数据集增强、正则或者半监督学习

什么是基准 (baseline)

  • 一种简单的模型或启发法,用作比较模型效果时的参考点

什么是神经网络 (neural network)

  • 320x320
  • 按照一定规则将多个神经元连接起来的网络。不同的神经网络,具有不同的连接规则

什么是神经元 (neuron)

  • 神经网络中的节点,通常会接收多个输入值并生成一个输出值
  • 神经元通过将激活函数(非线性转换)应用于输入值的加权和来计算输出值

什么是参数 (parameter)

  • 机器学习系统自行训练的模型的变量。例如,权重就是一种参数,机器学习系统通过连续的训练迭代逐渐学习到的。与超参数相对

什么是权重 (weight)

  • 线性模型中特征的系数,或深度网络中的边
  • 训练线性模型的目标是确定每个特征的理想权重
  • 如果权重为 0,则相应的特征对模型来说没有任何贡献

什么是 NaN 陷阱 (NaN trap)

  • 模型中的一个数字在训练期间变成 NaN,这会导致模型中的很多或所有其他数字最终也会变成 NaN。NaN 是 “非数字” 的缩写

什么是参数服务器 (PS, Parameter Server)

  • 一种作业,负责在分布式设置中跟踪模型参数

什么是参数更新 (parameter update)

  • 在训练期间(通常是在梯度下降法的单次迭代中)调整模型参数的操作

什么是 ill-condition 病态问题、well-conditioned 良态问题?

  • 指输出结果相对于输入非常敏感的问题,输入数据中哪怕是极少(或者极微妙)的噪声也会导致输出的较大改变; 相反的,对于输入不敏感的问题,我们就称为良态问题
  • 在神经网络模型学习的目标为最小化模型输出和正确值之间的误差,如果 Hessian 矩阵的条件数太多,则网络是病态的
  • 导致网络的病态问题通常与训练数据、网络结构以及网络的初始化权重有关。常见的问题是输入训练数据过大、网络层结构大小不一、初始权重过大或过小

在神经网络中,有哪些办法防止过拟合?

  • 丢弃正则化 (Dropout)
  • 批规范化 (BatchNormalization,BN)
  • 早停法 (earlystopping)
  • 加 L1/L2 正则化
  • 数据增强

深度学习中,导致模型不收敛的原因有哪些?

  • 没有对数据做归一化、正则化
  • 参数初始化错误
  • Batch Size 设的太大
  • 学习率设的不对
  • 最后一层的激活函数用的不对
  • 网络存在坏梯度。比如 Relu 对负值的梯度为 0,反向传播时,0 梯度就是不传播

在图像分类任务中使用 CNN(卷积神经网络)而不是 ANN,为什么?

  • 参考人工神经网络 (ANN) 的缺点 ,ANN 需要大量参数匹配图像,并且丢失空间信息
  • 卷积神经网络的特性可识别平移不变性、缩放不变性的图片,并且通过权重共享减少大量参数

深度学习为什么使用深层表示?

  • 深度神经网络是一种特征递进式的学习算法,浅层的神经元直接从输入数据中学习一些低层次的简单特征,例如边缘、纹理等。而深层的特征则基于已学习到的浅层特征继续学习更高级的特征,从计算机的角度学习深层的语义信息
  • 深层的网络隐藏单元数量相对较少,隐藏层数目较多,如果浅层的网络想要达到同样的计算结果则需要指数级增长的单元数量才能达到

为什么深层神经网络难以训练?

  • 梯度消失 (gradient vanishing):回传过程中,梯度会变的越来越小
  • 梯度爆炸 (gradient exploding):在深度网络或 RNN 等网络结构中,梯度可在网络更新的过程中不断累积,变成非常大的梯度,导致网络权重值的大幅更新,使得网络不稳定;在极端情况下,权重值甚至会溢出,变为 NaN 值,再也无法更新
  • 网络退化:随着深度增加,退化过程会变得越来越快。下图随着深度的增加,输入空间(左上角所示)会在输入空间中的每个点处被扭曲成越来越细的单丝,只有一个与细丝正交的方向影响网络的响应。沿着这个方向,网络实际上对变化变得非常敏感

深度学习输入数据不是 “独立同分布” 的,会导致什么问题?

  • 上层网络需要不断适应新的输入数据分布,降低学习速度
  • 下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止
  • 每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎

改善模型一般从哪些方面出发?

  • 数据角度:增强数据集,(1) 更多的数据:数据对良好的模型能带来更好的稳定性和对未知数据的可预见性;(2) 更丰富的数据:更多的数据不是简单增加数据量,而是丰富数据种类,尤其是犯错的数据;(3) 模拟数据:考虑收集数据的成本,可以通过软件模拟出更多数据
  • 模型角度:(1) 使用效果更好的模型;(2) 使用领域内专业的模型
  • 调参优化角度: 一般可以包含模型初始化的配置,优化算法的选取、学习率的策略以及如何配置正则和损失函数等等。这里需要提出的是对于同一优化算法,相近参数规模的前提下,不同类型的模型总能表现出不同的性能。这实际上就是模型优化成本
  • 训练角度: 为了强调充分的训练。在越大规模的数据集或者模型上,诚然一个好的优化算法总能加速收敛。但你在未探索到模型的上限之前,永远不知道训练多久算训练完成。所以在改善模型上充分训练永远是最必要的过程。充分训练的含义不仅仅只是增大训练轮数。有效的学习率衰减和正则同样是充分训练中非常必要的手段

如何快速构建有效初始模型?

  • 1)了解数据,在得到数据时,第一步是需要了解数据特点和使用场合。了解数据特点能帮助我们快速定位如何进行建模。确定使用场合能帮助我们进一步确定模型需要优化的方向。数据特点一般需要了解例如数据集规模、训练集和验证集是否匹配、样本的分布是否均匀、数据是否存在缺失值等等
  • 2)站在巨人肩膀上。根据数据特点,我们通常能匹配到一个现有比较优秀的模型。这类模型都通常能在类似数据上表现出一个比较不错的性能
  • 3)一切从简。初始模型的作用在于迅速了解数据质量和特点,所以模型的性能通常不需要达到很高,模型复杂度也不需要很高。例如,做图像分类时,我们在使用预训练模型时,不需要一开始就使用例如 ResNet152 这类模型巨大,复杂度过高的模型。这在数据量较小时,很容易造成过拟合而导致出现我们对数据产生一些误导性的判断,此外也增加了额外训练构建时间。所以使用更小更简单的模型以及损失函数来试探数据是相比更明智的选择
  • 4)总比瞎猜强。构建模型的意义在于建立一个高效的模型,虽然初始模型我们不对性能做过高的要求。但前提在于必须要比随机猜测好,不然构建模型的意义就不存在了
  • 5)解剖模型。一旦确定了一个初始模型时,无论你对该模型多熟悉,当其面对一批新数据时,你永远需要重新去认识这个模型,因为你永远不确定模型内部到底发生了些什么。解剖模型一般需要在训练时注意误差变化、注意训练和验证集的差异;出现一些 NAN 或者 INf 等情况时,需要打印观察内部输出,确定问题出现的时间和位置;在完成训练后,需要测试模型的输出是否正确合理,以确认评价指标是否符合该数据场景。无论使用任何一种模型,我们都不能把它当做黑盒去看待

神经网络中包含哪些超参数?

  • 网络参数: 可指网络层与层之间的交互方式(相加、相乘等)、卷积核数量和卷积核尺寸、网络层数和激活函数等
  • 优化参数: 一般指学习率、批样本数量、不同优化器的参数以及部分损失函数的可调参数
  • 正则化: 权重衰减系数、丢弃比率

神经网络中超参数的重要性顺序?

  • 1)学习率: 损失函数上的可调参数,学习率直接控制着训练中网络梯度更新的量级,直接影响着模型的有效容限能力
  • 2)批样本数量,动量优化器(Gradient Descent with Momentum)的动量参数 β 批样本决定了数量梯度下降的方向。过小的批数量,极端情况下,例如 batch size 为 1,即每个样本都去修正一次梯度方向,样本之间的差异越大越难以收敛;而过大的 batch size,会使得梯度方向基本稳定,容易陷入局部最优解,降低精度。一般参考范围会取在 [1:1024] 之间
  • 3)Adam 优化器的超参数、权重衰减系数、丢弃法比率(dropout)和网络参数 在这里说明下,这些参数重要性放在最后并不等价于这些参数不重要。而是表示这些参数在大部分实践中不建议过多尝试

在神经网络中,部分超参数如何影响模型性能?

在神经网络中,部分超参数合适的范围?

在深度学习中,每秒处理多少帧算实时?有约定俗成的标注吗?

  • 没有统一的标准,只要处理帧率大于输入帧率,没有丢帧就算实时
  • 比如,手机录制 30 帧的视频,只要处理速度大于 30 帧,就是实时处理了

什么是 FLOPs、FOLOPS、TOPS、MACC?

  • FLOPs:floating point operations 指的是浮点运算次数,理解为计算量,可以用来衡量算法 / 模型的复杂度
  • FLOPS:Floating-point Operations Per Second,每秒所执行的浮点运算次数,理解为计算速度 , 是一个衡量硬件性能的指标
  • TOPS: 代表处理器每秒钟可进行一万亿次(10^12)操作,FLOPS 是浮点运算的单位,TOPS 是整数运算的单位
  • MACC:multiply-accumulate,乘加累积操作数,实际上 1MACs 包含一个乘法操作与一个加法操作,大约包含 2FLOPs

什么是孪生网络?

  • 深度学习的基本概念-20230704213046-1
  • 两个结构一模一样,而且共享权值的网络。它会衡量两个输入的相似程度。孪生神经网络有两个输入(Input1 and Input2), 将两个输入 feed 进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过 Loss 的计算,评价两个输入的相似度

FC、RNN、CNN 应用的场景,数据有什么区别?

  • Drawing-2023-03-26-21.33.14.excalidraw
  • FC:FC 每次前向计算 1 个样本 (0 D) 所有特征,输入可以是任意维度,只对最后维度变换
  • RNN:每次前向计算 1 个序列 (多个时间步,1D) 的所有特征,输入只能是 3D,可以对最后 2 维变换,看具体任务
  • CNN:每次前向计算 1 个感受野内 (多个 grid,2D) 的所有特征,输入只能是 4D,可以对最后 3 维变换
  • 处理样本数量:单从样本的角度,FC、RNN、CNN 分别处理 1 个、向量多个、矩阵多个
  • 计算方式:FC、RNN 的特征与权重矩阵进行的是 wx+b 的操作,也就是矩阵点乘运算,比如输入是 (B, L),权重矩阵是 (L, L’),那么输出就是 (B, L’);而 CNN 是卷积核与同等大小的特征区域执行的是矩阵相乘运算
  • 操作转换:CNN->FC,只要将一次处理 9 x 9 个数据,改为一次处理 1 x 1 个数据,即 1x 1 卷积;同理 RNN-> FC ,只要将序列长度改为 1;但是即使参数转换了,操作也是不同的,比如 CNN->FC,CNN 的参数对每个 1 x 1 位置是共享的,所以即使变换了,参数也比 FC 层少