三、BP算法

    多层前馈网络的反向传播 (BP)学习算法,简称BP算法,是有导师的学习,它是梯度下降法在多层前馈网中的应用。

    BP学习算法由正向传播与反向传播组成:

        前向传播指的是按顺序(从输⼊层到输出层)计算和存储神经⽹络中每层的结果。

        反向传播指的是计算神经⽹络参数梯度的⽅法。简⾔之,该⽅法根据微积分中的链式规则,按相反的顺序从输出层到输⼊层遍历⽹络。

    在训练神经⽹络时,前向传播和反向传播相互依赖。在训练神经⽹络时,在初始化模型参数后,我们交替使⽤前向传播和反向传播,利⽤反向传播给出的梯度来更新模型参数。由于需要保存中间值,所以需要更多的内存(显存)。

四、性能优化方法

       优化目标: 对于深度学习问题,我们通常会先定义损失函数。⼀旦我们有了损失函数,我们就可以使⽤优化算法来尝试最⼩化损失。但本质上,优化和深度学习的⽬标是根本不同的。前者主要关注的是最⼩化⽬标,后者则关注在给定有限数据量的情况下寻找合适的模型。前者优化目标是减少训练误差,后者的优化目标则是减少泛化误差。

        此处讨论的是前者的优化方法,即最小化目标函数。优化中最常见的阻力:

        1.局部最小值

        2.鞍点

        3.梯度消失

        面对这些问题,我们采用随机梯度下降法:

        通常,⽬标函数通常是训练数据集中每个样本的损失函数的平均值。给定n个样本的训练数据集,我们假设fi(x)是关于索引i的训练样本的损失函数,其中x是参数向量。

则目标函数为:

目标函数的梯度为:

在随机梯度下降的每次迭代中,我们对数据样本随机均匀采样⼀个索引i,其中i ∈ {1, . . . , n},并计算梯度∇fi(x)以更新x:

采用这种方式:每次迭代的计算代价从梯度下降的O(n)降⾄常数O(1),且随机梯度∇fi(x)是对完整梯度∇f(x)的⽆偏估计。

         可是,这样仍有问题,在这样嘈杂的梯度下,我们在选择学习率需要格外谨慎。如果衰减速度太快,收敛就会停滞。相反,如果 太宽松,我们可能⽆法收敛到最优解。为了解决这一问题,我们采用动量法。

        动量法更新公式:

动量法采用过去梯度的平均值来替换梯度,这⼤⼤加快了收敛速度。对于⽆噪声梯度下降和嘈杂随机梯度下降,动量法都是可取的。它可以防⽌在随机梯度下降的优化过程停滞的问题。

       但有时候我们还会遇见一些不太常见的问题,例如:对于稀疏特征的模型训练时,鉴于学习率下降,我们可能最终会⾯临这样的情况:常⻅特征的参数相当迅速地收敛到最佳值,⽽对于不常⻅的特征,我们仍缺乏⾜够的观测以确定其最佳值。解决此问题的⼀个⽅法是记录我们看到特定特征的次数,然后将其⽤作调整学习率。

        AdaGrad(自适应梯度算法)算法通过将粗略的计数器s(i, t)替换为先前观察所得梯度的平⽅之和来解决这个问题。他有两个优点:

        1):不再需要决定梯度何时算⾜够⼤

        2):它会随梯度的⼤⼩⾃动变化

通常对应于较⼤梯度的坐标会显著缩⼩,⽽其他梯度较⼩的坐标则会得到更平滑的处理。AdaGrad算法会在单个坐标层⾯动态降低学习率。它利⽤梯度的⼤⼩作为调整进度速率的⼿段:⽤较⼩的学习率来补偿带有较⼤梯度的坐标。也就是说,具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率。它带来的问题是将导致学习率是单调递减的,训练后期学习率过小会导致训练困难, 甚至提前结束。

        RMSProp 便是为了解决 AdaGrad 方法中学习率过度衰减的问题。RMSProp 使用指数衰减平均以丢弃遥远的历史,使其能够快速收敛;此外,RMSProp 还加入了超参数 𝜌 控制衰减速率。

        Adam 在 RMSProp 方法的基础上更进一步:

        1): 除了加入历史梯度平方的指数衰减平均(𝑟)外,

        2):还保留了历史梯度的指数衰减平均(𝑠),相当于动量。

五、卷积神经网络

        卷积神经⽹络是⼀类强⼤的、为处理图像数据⽽设计的神经⽹络。当今⼏乎所有的图像别、 ⽬标检测或语义分割相关的学术竞赛和商业应⽤都以这种⽅法为基础。

        为什么需要卷积神经网络?因为需要减少全连接层导致的巨大的参数开销!

基本概念:        

        1.互相关运算

0 × 0 + 1 × 1 + 3 × 2 + 4 × 3 = 19

        2.卷积层

        卷积层对输⼊和卷积核权重进⾏互相关运算,并在添加标量偏置之后产⽣输出。所以,卷积层中的两个被训练的参数是卷积核权重和标量偏置。就像我们之前随机初始化全连接层⼀样,在训练基于卷积层的模型时, 我们也随机初始化卷积核权重。

        3.填充

        在应⽤多层卷积时,我们常常丢失边缘像素。由于我们通常使⽤⼩卷积核,因此对于任何单个卷 积,我们可能只会丢失⼏个像素。但随着我们应⽤许多连续卷积层,累积丢失的像素数就多了。解决这个问 题的简单⽅法即为填充(padding):在输⼊图像的边界填充元素(通常填充元素是0)。

        4.步幅

        在计算互相关时,卷积窗⼝从输⼊张量的左上⻆开始,向下、向右滑动。在前⾯的例⼦中,我们默认每次滑动⼀个元素。但是,有时候为了⾼效计算或是缩减采样次数,卷积窗⼝可以跳过中间位置,每次滑动多个元素。我们将每次滑动元素的数量称为步幅(stride)。

        5.多输入通道

        当输⼊包含多个通道时,需要构造⼀个与输⼊数据具有相同输⼊通道数的卷积核,以便与输⼊数据进⾏互相 关运算。假设输⼊的通道数为ci,那么卷积核的输⼊通道数也需要为ci。

        6.多输出通道

        ⽤ci和co分别表⽰输⼊和输出通道的数⽬,并让kh和kw为卷积核的⾼度和宽度。为了获得多个通道的输出,我 们可以为每个输出通道创建⼀个形状为ci × kh × kw的卷积核张量,这样卷积核的形状是co × ci × kh × kw。

        7.池化

        使用局部统计特征,如均值或最大值。解决特征过多问题

LeNet-5:

         LeNet(LeNet-5)由两个部分组成:

        • 卷积编码器:由两个卷积层组成;

        • 全连接层密集块:由三个全连接层组成。

架构如下图:

结构详解:

C1层:6个Feature map构成 ; 每个神经元对输入进行5*5卷积 ; 每个神经元对应5*5+1个参数,共6个feature map, 28*28个神经元,因此共有 (5*5+1)*6*(28*28)=122,304连接

S2层:

C3层:

S4层:与S2一样 

C5层:120个神经元;每个神经元同样对输入进行5*5卷积,与S4全连接;总连接数(5*5*16+1)*120=48120

 F6层:84个神经元;与C5全连接;总连接数(120+1)*84=10164

输出层:由欧式径向基函数单元构成;每类一个单元;输出RBF单元计算输入向量和参数向量之间的欧式距离

Logo

更多推荐