深度学习基本概念和CNN

深度学习

深度学习的最初级版本是人工神经网络,是机器学习的一个分支,其试图模拟人脑,通过更加复杂的结构自动提取特征。

深度学习与神经网络的区别

从广义上说深度学习的网络结构也是多层神经网络的一种。
传统意义上的多层神经网络是只有输入层、隐藏层、输出层。其中隐藏层的层数根据需要而定,没有明确的理论推导来说明到底多少层合适。
而深度学习中最著名的卷积神经网络CNN,在原来多层神经网络的基础上,加入了特征学习部分,这部分是模仿人脑对信号处理上的分级的。具体操作就是在原来的全连接的层前面加入了部分连接的卷积层与降维层,而且加入的是一个层级。
输入层 - 卷积层 -降维层 -卷积层 - 降维层 – … – 隐藏层 -输出层
简单来说,原来多层神经网络做的步骤是:特征映射到值。特征是人工挑选。
深度学习做的步骤是 信号->特征->值。 特征是由网络自己选择。

深度学习的框架

Tensorflow,Caffe,Theano,Torch,MXNet

基本概念

  1. 神经网络基础 神经元(Neuron) ,就像形成我们大脑基本元素的神经元一样,神经元形成神经网络的基本结构。想象一下,当我们得到新信息时我们该怎么做。当我们获取信息时,我们一般会处理它,然后生成一个输出。类似地,在神经网络的情况下,神经元接收输入,处理它并产生输出,而这个输出被发送到其他神经元用于进一步处理,或者作为最终输出进行输出。
  2. 权重(Weights) 当输入进入神经元时,它会乘以一个权重。例如,如果一个神经元有两个输入,则每个输入将具有分配给它的一个关联权重。我们随机初始化权重,并在模型训练过程中更新这些权重。训练后的神经网络对其输入赋予较高的权重,这是它认为与不那么重要的输入相比更为重要的输入。为零的权重则表示特定的特征是微不足道的。
    让我们假设输入为a,并且与其相关联的权重为W1,那么在通过节点之后,输入变为a * W1
  3. 偏差(Bias) 除了权重之外,另一个被应用于输入的线性分量被称为偏差。它被加到权重与输入相乘的结果中。基本上添加偏差的目的是来改变权重与输入相乘所得结果的范围的。添加偏差后,结果将看起来像a* W1 +偏差。这是输入变换的最终线性分量。
  4. 激活函数(Activation Function) 在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。 引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
    常见激活函数 :
    (1)逻辑函数(Sigmoid):
    使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。
    其自身的缺陷,最明显的就是饱和性。从函数图可以看到,其两侧导数逐渐趋近于0,杀死梯度。
    在这里插入图片描述
    Sigmoid
    (2)线性整流函数(Rectified Linear Unit,ReLU)
    无饱和区,收敛快、计算简单、有时候会比较脆弱,如果变量的更新太快,还没有找到最佳值,就进入小于零的分段就会使得梯度变为0,无法更新直接死掉了。

在这里插入图片描述
(3)Softplus函数:
在这里插入图片描述
(4)Maxout:他是ReLU和LReLU的一般化公式(如ReLU就是将w1和b1取为0)。所以他用于ReUL的优点而且没有死区,但是它的参数数量却增加了一倍。

maxout网络能够近似任意连续函数,且当w2,b2,…,wn,bn为0时,退化为ReLU。Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但增加了参数和计算量。
在这里插入图片描述
(5)正切函数(Tanh):非常常见的激活函数。与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。

相对于sigmoid的好处是他的输出的均值为0,克服了第二点缺点。但是当饱和的时候还是会杀死梯度。

在这里插入图片描述

  1. 神经网络(Neural Network) 神经网络由许多相互关联的概念化的人造神经元组成,它们之间传递相互数据,并且具有根据网络”经验“调整的相关权重。神经元具有激活阈值,如果通过其相关权重的组合和传递给他们的数据满足这个阈值的话,其将被解雇;发射神经元的组合导致“学习”。神经网络构成了深度学习的支柱。神经网络的目标是找到一个未知函数的近似值。它由相互联系的神经元形成。这些神经元具有权重和在网络训练期间根据错误来进行更新的偏差。激活函数将非线性变换置于线性组合,而这个线性组合稍后会生成输出。激活的神经元的组合会给出输出值。

  2. 输入/输出/隐藏层(Input / Output / Hidden Layer) 输入层是接收输入那一层,本质上是网络的第一层。而输出层是生成输出的那一层,也可以说是网络的最终层。处理层是网络中的隐藏层。这些隐藏层是对传入数据执行特定任务并将其生成的输出传递到下一层的那些层。输入和输出层是我们可见的,而中间层则是隐藏的。

  3. 正向传播(Forward Propagation) 正向传播是指输入通过隐藏层到输出层的运动。在正向传播中,信息沿着一个单一方向前进。输入层将输入提供给隐藏层,然后生成输出。这过程中是没有反向运动的

  4. 成本函数(Cost Function) 建立一个网络时,网络试图将输出预测得尽可能靠近实际值。我们使用成本/损失函数来衡量网络的准确性,如果我将成本函数定义为均方误差,则可以写为:
    C= 1/m ∑(y–a)^2,
    其中m是训练输入的数量,a是预测值,y是该特定示例的实际值。
    学习过程围绕最小化成本来进行。

  5. 梯度下降Gradient Descent梯度下降是一种最小化成本的优化算法.
    相关的一些概念:
    (1). 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
    (2).特征(feature):指的是样本中输入部分,比如2个单特征的样本(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0),第一个样本输出为y(0)。
    (3). 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,…m),可以采用拟合函数如下: hθ(x)=θ0+θ1x。
    (4). 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,…m),采用线性回归,损失函数为:
    在这里插入图片描述 其中xi表示第i个样本特征,yi表示第i个样本对应的输出,hθ(xi)为假设函数。

  6. 学习率(Learning Rate) 学习率被定义为每次迭代中成本函数中最小化的量。简单来说,我们下降到成本函数的最小值的速率是学习率。我们应该非常仔细地选择学习率,因为它不应该是非常大的,以至于较佳解决方案被错过,也不应该非常低,以至于网络需要融合。 学习率(Learning rate)作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。在这里插入图片描述

  7. 反向传播(Backpropagation) 当我们定义神经网络时,我们为我们的节点分配随机权重和偏差值,使用成本函数的梯度的权重的更新被称为反向传播.更新w,b是对w,b求偏导数。而不是x,y,因为x,y是输入与输出,为已知的。
    在这里插入图片描述

  8. 批次(Batches) 在训练神经网络的同时,不用一次发送整个输入,我们将输入分成几个随机大小相等的块。

  9. 周期Epochs向前和向后传播中所有批次的单次训练迭代.1个周期是整个输入数据的单次向前和向后传递。

  10. 丢弃(Dropout) Dropout是一种正则化技术,可防止网络过度拟合套。顾名思义,在训练期间,隐藏层中的一定数量的神经元被随机地丢弃。这意味着训练发生在神经网络的不同组合的神经网络的几个架构上。
    机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
    过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。
    Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器,让一半的隐层节点值为0,可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。
    Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征
    .首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变
    .然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)
    在这里插入图片描述

  11. 批量归一化(Batch Normalization) 批量归一化可以被认为是我们在河流中设定为特定检查点的水坝。这样做是为了确保数据的分发与希望获得的下一层相同。当我们训练神经网络时,权重在梯度下降的每个步骤之后都会改变,这会改变数据的形状如何发送到下一层。

  12. 卷积神经网络 滤波器(Filters) CNN中的滤波器与加权矩阵一样,它与输入图像的一部分相乘以产生一个回旋输出。我们假设有一个大小为28 * 28的图像,我们随机分配一个大小为3 * 3的滤波器,然后与图像不同的3 * 3部分相乘,形成所谓的卷积输出。滤波器尺寸通常小于原始图像尺寸。在成本最小化的反向传播期间,滤波器值被更新为重量值。在这里插入图片描述
    滤波器过滤图像时,会与图像每个等大的区域进行点乘,如果图像的某一区域与过滤器检测的特征很相似,那么当过滤器经过该区域时,就会激活该过滤器,得到一个很高的值,反之,如果图像的某一区域与过滤器检测的特征很不相似时,就不会激活该过滤器或者得到的数值很低。图像的过滤器在对整个图像滑动过滤时,每经过图像一个区域得到的值越高,则该区域与滤波器检测的特定特征相关度越高.但是我们能直观想到滤波器毕竟数量有限,而CNN可以自动学习滤波器,调整滤波器里的参数,用CNN自学习滤波器,让计算机自己去理解这图像所需的滤波器来检测特征,这对图像的特征分析是非常有用高效的。

  13. 卷积神经网络CNN卷积神经网络基本上应用于图像数据。假设我们有一个输入的大小(28 * 28 * 3),如果我们使用正常的神经网络,将有2352(28 * 28 * 3)参数。并且随着图像的大小增加参数的数量变得非常大。我们“卷积”图像以减少参数数量(如上面滤波器定义所示)。当我们将滤波器滑动到输入体积的宽度和高度时,将产生一个二维激活图,给出该滤波器在每个位置的输出。我们将沿深度尺寸堆叠这些激活图,并产生输出量.
    相关概念:
    a. 卷积核(convolutional kernel)卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,在文献中被称为“感受野(receptive field)”,其含义可类比视觉皮层细胞的感受野.
    b.卷积层参数
    卷积层参数包括卷积核大小、步长和填充,三者共同决定了卷积层输出特征图的尺寸,是卷积神经网络的超参数 [1] 。其中卷积核大小可以指定为小于输入图像尺寸的任意值,卷积核越大,可提取的输入特征越复杂 。
    由卷积核的交叉相关计算可知,随着卷积层的堆叠,特征图的尺寸会逐步减小,例如16×16的输入图像在经过单位步长、无填充的5×5的卷积核后,会输出12×12的特征图。为此,填充是在特征图通过卷积核之前人为增大其尺寸以抵消计算中尺寸收缩影响的方法。常见的填充方法为按0填充和重复边界值填充(replication padding)
    c. 激励函数(activation function)
    类似于其它深度学习算法,卷积神经网络通常使用线性整流单元(Rectified Linear Unit, ReLU).
    d.池化层(pooling layer)在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,由池化大小、步长和填充控制 。
    谱池化(spectral pooling)
    d.谱池化是基于FFT的池化方法,可以和FFT卷积一起被用于构建基于FFT的卷积神经网络 [40] 。在给定特征图尺寸 ,和池化层输出尺寸时 ,谱池化对特征图的每个通道分别进行DFT变换,并从频谱中心截取n×n大小的序列进行DFT逆变换得到池化结果 [40] 。谱池化有滤波功能,可以最大限度地保存低频变化信息,并能有效控制特征图的大小 [40] 。此外,基于成熟的FFT算法,谱池化能够以很小的计算量完成。
    e.全连接层(fully-connected layer)
    卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。全连接层通常搭建在卷积神经网络隐含层的最后部分,并只向其它全连接层传递信号。特征图在全连接层中会失去3维结构,被展开为向量并通过激励函数传递至下一层。
    算法:
    1.VGGNet
    VGG-16的隐含层由13个卷积层、3个全连接层和5个池化层组成,按如下方式构建:
    (3×3)×3×64的卷积层(步长为1,相同填充,ReLU),(3×3)×64×64的卷积层(步长为1,相同填充,ReLU),2×2极大池化(步长为2、无填充)
    (3×3)×64×128的卷积层(步长为1,相同填充,ReLU),(3×3)×128×128的卷积层(步长为1,相同填充,ReLU),2×2极大池化(步长为2、无填充)
    (3×3)×128×256的卷积层(步长为1,相同填充,ReLU),(3×3)×256×256的卷积层(步长为1,相同填充,ReLU),(3×3)×256×256的卷积层(步长为1,相同填充,ReLU),2×2极大池化(步长为2、无填充)
    (3×3)×256×512的卷积层(步长为1,相同填充,ReLU),(3×3)×512×512的卷积层(步长为1,相同填充,ReLU),(3×3)×512×512的卷积层(步长为1,相同填充,ReLU),2×2极大池化(步长为2、无填充)
    (3×3)×512×512的卷积层(步长为1,相同填充,ReLU),(3×3)×512×512的卷积层(步长为1,相同填充,ReLU),(3×3)×512×512的卷积层(步长为1,相同填充,ReLU),2×2极大池化(步长为2、无填充)
    3个全连接层,神经元数量为4096、4096和1000
    VGGNet构筑中仅使用3×3的卷积核并保持卷积层中输出特征图尺寸不变,通道数加倍,池化层中输出的特征图尺寸减半,简化了神经网络的拓扑结构并取得了良好效果
    在这里插入图片描述

发布了4 篇原创文章 · 获赞 8 · 访问量 760

猜你喜欢

转载自blog.csdn.net/Brilliant_orange/article/details/89505354