深度学习思维导图
2022-09-04 23:43:59   1  举报             
     
         
 AI智能生成
  深度学习思维导图,基于nndl
    作者其他创作
 大纲/内容
  基础知识    
     机器学习基本概念    
     机器学习:通常指一类问题以及解决这类问题的方法,即如何从观测数据(样本)中寻找规律,并利用学习到的规律(模型)对未知或无法观测的数据进行预测  
     特征:反映对象在某方面的表现/性质  
     标签:是对对象的评判结果  
     样本:特征+标签  
     数据集:是一组样本的集合    
     训练集  
     测试集  
     基本流程:  
     基本要素    
     模型:从输入空间到输出空间的函数映射  
     学习准则:评价模型的好坏  
     优化算法:在假设空间中如何找到最优的模型    
     批量梯度下降  
     随机梯度下降  
     小批量梯度下降  
     欠拟合:对训练样本的一般性质尚未学好
  
     过拟合:学习器把训练样本学习得“太好”,将训练样本本身的特点当作所有样本的一般性质,导致泛化性能下降  
     正则化:是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法,比如引入约束,提前停止等    
     L1和L2正则化  
     提前停止  
     常见的机器学习类型    
     监督学习  
     无监督学习  
     强化学习  
     线性模型    
     线性模型:是机器学习中硬用最广泛的模型,指通过样本特征的线性组合来进行预测的模型  
     线性回归:是一种典型的线性模型:输出标签是连续值  
     分类问题:输出目标y是一些离散的标签,而特征的线性组合本身是连续值,即f(x,w)的值域为实数,需要引入一个非线性的决策函数g(·),使输出符合预期离散值的目标  
     Logistic回归
                  
     介绍:将分类决策问题看作条件概率估计问题
  
     采用Logistic函数把线性函数的值域从实数区间“挤压”到(0,1)之间,可以用来表示概率  
     学习准则:逻辑回归使用交叉熵作为损失函数    
     交叉熵:按照概率分布q的最优编码方式对真实分布p的信息进行编码的长度           
     在给定p的情况下,如果q和p越接近,交叉熵越小  
     如果q和p差别越大,交叉熵越大  
     优化算法:梯度下降           
     Softmax回归    
     介绍:Softmax回归也称为多项(Multinomial)或多类 (Multi-Class)的Logistic 回归,是 Logistic 回归在多分类问题上的推广  
     模型:  
     学习准则:交叉熵损失  
     优化算法:梯度下降  
     感知机    
     介绍:感知机由 Frank Rosenblatt 于1958年提出,是一种广泛使用的线性分类器。感知器可谓是最简单的人工神经网络, 只有一个神经元。  
     模型:  
     学习准则:  
     优化算法:随机梯度下降  
     小结:  
     前馈神经网络    
     人工神经网络    
     人工神经元:M-P神经元模型           
     神经元接收到来自其他𝑑个神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值(bias)进行比较,然后通过“激活函数”处理产生神经元的输出  
     人工神经网络    
     介绍:把许多人工神经元按照一定的层次结构连接起来,就行成人工神经网络  
     人工神经网络的三大要素             
     节点:采用什么激活函数?  
     连边:权重(参数)是多少?  
     连接方式:如何设计层次结构?  
     万能近似定理应用到神经网络:对于神经网络,只要其隐藏层神经元的数量足够多,它就可以以任意精度来近似任何一个定义在实数空间中的有界闭集函数。
  
     解决异或问题    
     单层感知器无法解决异或问题           
     双层感知器可以解决异或问题  
     神经网络结构    
     为什么要深度           
     单隐层网络可以近似任何函数,但其规模可能巨大,在最坏的情况下,需要指数级的隐藏单元才能近似某个函数  
     随着深度的增加,网络的表示能力呈指数增加  
     更深层的网络具有更好的泛化能力,模型的性能随着深度的增加而不断提升  
     更深的模型往往表现更好,不仅仅是因为模型更大,想要学得的函数应该由许多更简单的函数复合在一起而得到  
     常见的神经网络结构    
     前馈网络           
     各个神经元按照接受信息的先后分成不同的组,每一组可看作一个神经层  
     每一层中的神经元接受来自前一层神经元的输出,并输出给下一层神经元  
     整个网络中信息朝一个方向传播,没有反向的信息传播,可以用一个有向无环图表示  
     前馈网络包括全连接前馈神经网络和卷积神经网络  
     记忆网络           
     也称反馈网络  
     神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息  
     神经元具有记忆功能,在不同的时刻具有不同的状态  
     信息传播可以是单项或者双向传递,可用一个有向循环图或无向图来表示  
     记忆网络包括循环神经网络、Hopfield网络、玻尔兹曼机、受限玻尔兹曼机等  
     图网络           
     图网络是定义在图结构数据上的神经网络  
     途中的每个节点都是由一个或者一组神经元构成  
     节点之间的连接可以是有向的,也可以是无向的  
     每个节点可以接收来自相邻节点或者自身的信息  
     图网络是前馈网络和记忆网络的方法,包含许多不同的实现方式,如图卷积网络、图注意力网络、消息传递网络等。  
     前馈神经网络    
     前馈神经网络的结构与表示    
     结构           
     前馈神经网络(Feedforward Neural Network, FNN)是最早发明的简单人工神经网络  
     前馈神经网络也经常被称为多层感知器(Multi-Layer Perceptron, MLP),但这个叫法并不十分合理(激活函数通常并不是感知器所采用的不连续阶跃函数)  
     第0层为输入层,最后一层为输出层,其他中间层称为隐藏层  
     信号从输入层向输出层单向传播,整个网络中无反馈,可用一个有向无环图表示
  
     形式化表示    
     符号表示  
     信息传递  
     隐藏单元——激活函数    
     激活函数的性质要求    
     连续并可导(允许少数点上不可导)的非线性函数.可导的激活函数可以直接利用数值优化的方法来学习网络参数。
  
     激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
  
     激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。  
     Sigmoid型函数::S型曲线函数,为两端饱和函数
                  
     Logistic函数  
     Tanh函数  
     Hard-Logistic函数  
     Hard-Tanh函数
  
     整流线性单元(ReLU)函数及其扩展
    
     ReLU                  
     带泄露的ReLU(Leaky ReLU)
                  
     指数线性单元ELU                  
     Softplus                  
     其他激活函数    
     Swish函数                  
     高斯误差线性单元(GELU)                  
     Maxout单元                  
     输出单元    
     线性输出单元                         
     线性输出单元经常用于产生条件高斯分布的均值  
     适合连续值预测(回归)问题
  
     基于高斯分布,最大化似然(最小化负对数似然)等价于最小化均方误差,因此线性输出单元可采用均方误差损失函数:
  
     Sigmoid单元
                                
     Sigmoid输出单元常用于输出Bernoulli分布  
     适合二分类问题
  
     Sigmoid输出单元可采用交叉熵损失函数:
  
     Softmax单元
                         
     Softmax输出单元常用于输出Multinoulli分布  
     适合多分类问题  
     Softmax输出单元可采用交叉熵损失函数:  
     参数学习    
     学习准则:使结构化风险最小化           
     结构风险 = 经验风险 + 正则化项  
     经验风险越小,模型决策函数越复杂,其包含的参数越多,当经验风险函数小到一定程度就出现了过拟合现象。也可以理解为模型决策函数的复杂程度是过拟合的必要条件,那么我们要想防止过拟合现象的方式,就要破坏这个必要条件,即降低决策函数的复杂度。也即,让惩罚项J(f)最小化,现在出现两个需要最小化的函数了。我们需要同时保证经验风险函数和模型决策函数的复杂度都达到最小化,一个简单的办法把两个式子融合成一个式子得到结构风险函数然后对这个结构风险函数进行最小化。  
     梯度下降           
     基于学习准则和训练样本,网络参数可以通过梯度下降法进行学习  
     𝛼为学习率  
     通过链式法则可以逐一对每个参数求偏导,但是效率低下  
     在神经网络的训练中经常使用反向传播算法来高效地计算梯度  
     反向传播算法  
     自动梯度计算    
     数值微分  
     符号微分  
     自动微分    
     数值微分强调一开始直接代入数值近似求解,而符号微分强调直接对表达式进行求解,最后才代入数值  
     自动微分将符号微分法应用于最基本的算子,比如常数、幂函数、指数函数、对数函数、三角函数等,然后将其代入数值,保留中间结果,最后再应用于整个函数
  
     灵活性高
    
     微分求解过程对用户是透明的
  
     不需要专门的数学语言和编程  
     采用图的方式进行计算,可以做很多优化  
     计算图           
     将复合函数分解为一系列基本操作,并以图的形式连接起来  
     是数学运算的图结构表示,每个非叶子节点代表一个基本操作,每个叶
子节点代表一个输入变量或常量
  
    子节点代表一个输入变量或常量
 静态图与动态图
    
     静态计算图    
     在编译时构建计算图,构建好后在程序运行时不能改变  
     在构建时可以进行优化、并行能力强
  
     灵活性较差
  
     动态计算图    
     在程序运行时动态构建计算图  
     不容易优化,当不同输入所使用的网络结构不一样时,难以并行计算
  
     灵活性比较高  
     在当前深度学习框架中,Theano和Tensorflow采用的是静态计算图,而DyNet、Chainer 和PyTorch 采用的是动态计算图。Tensorflow 2.0 也开始支持动态计算图。  
     神经网络参数优化的主要问题
    
     非凸优化
  
     梯度消失  
     深度模型优化与正则化    
     两类问题    
     网络优化    
     在训练集上是否有好的结果  
     神经网络模型是一个非凸函数,再加上在深度网络中的梯度消失问题,很难进行优化  
     深层神经网络模型一般参数比较多,训练数据也比较打,会导致训练的效率比较低  
     正则化(泛化问题)    
     测试集上是否有好的结果  
     因为神经网络的拟合能力强,反而容易在训练集上产生过拟合。因此,在训练深层神经网络时,同时也需要通过一定的正则化方法来改进网络的泛化能力。  
     网络优化
    
     难点    
     网络结构多样性    
     神经网络种类繁多:FNN、CNN、RNN、GNN
  
     不同网络结构不同,不同参数的作用有差异  
     很难找到一种通用的、高效的、稳定的优化方法  
     超参数一般也比较多
  
     非凸优化问题    
     如何初始化参数  
     如何逃离局部最优  
     深度神经网络的参数非常多,其优化是高维空间中的非凸优化问题  
     非凸优化问题
    
     在高维空间中,非凸优化最大难点并不在于如何逃离局部最优点,而是如何逃离鞍点。  
     在高维空间中,局部最小值(Local Minima)要求在每一维度上都是最低点,这种概率非常低。也就说是,高维空间中大部分驻点都是鞍点。
  
     网络优化的改善方法    
     改善网络优化的方法的目标是找到更好的局部最小值和提高优化效率。  
     对于网络结构多样性    
     寻找高效的、稳定的优化方法    
     小批量梯度下降  
     自适应学习率、梯度优化
  
     参数初始化、数据预处理
  
     逐层归一化
  
     超参数通常比较多    
     超参数优化  
     对于非凸优化问题    
     逃离局部最优    
     自适应学习率、梯度优化  
     小批量梯度下降    
     批量梯度下降:利于寻找全局最优解,梯度方差小;但样本数目很多时,训练过程会很慢。
  
     随机梯度下降:训练速度快;准确度下降,不利于寻找全局最优,梯度方差大。  
     小批量梯度下降法:同时兼顾两种方法的优点。  
     批量大小(batch-size) K 的影响    
     批量越大,梯度的方差越小,训练也越稳定,因此可以设置较大的学习率。
  
     批量较小时,需要设置较小的学习率,否则模型会不收敛。  
     学习率与梯度优化    
     学习率    
     学习率过大:不收敛。学习率过小:收敛太慢  
     学习率衰减                  
     根据经验,学习率在一开始要保持大些来保证收敛速度,收敛到最优点附近时要小些以避免来回震荡。
  
     分段常数衰减  
     逆时衰减、  
     指数衰减、  
     自然指数衰减余弦衰减  
     学习率预热    
     当batch-size比较大时,需要比较大的学习率。但开始训练的参数是随机初始化的,梯度往往也比较大,加上比较大的初始学习率,会使得训练不稳定
  
     学习率预热:为提高训练稳定性,可以在最初几轮迭代时采用较小的学习率,等梯度下降到一定程度后再恢复到初始学习率
  
     逐渐预热(Gradual Warmup):假设预热的迭代次数为 ,预热过程中,学习率为:
  
     当预热过程结束,再选择一种学习率衰减方法来逐渐降低学习率  
     周期性学习率调整    
     为了逃离局部最小值或鞍点,可在训练过程中周期性地增大学习率。短期内有损收敛稳定性,长期来看有助于找到更好的局部最优解。  
     循环学习率:让学习率在一个区间内周期性地增大和缩小。
    
     三角循环学习率(Triangular Cyclic Learning Rate):使用线性缩放来调整学习率
  
     带热重启的随机梯度下降(Stochastic Gradient Descent with Warm Restarts ):周期性地重启并采用余弦衰减  
     从学习率衰减到自适应学习率
    
     学习率衰减的局限性    
     非自适应,不能够根据当前梯度情况做出调整
  
     每个参数的收敛速度各不相同,应该根据不同参数的收敛情况分别设置学习率
  
     从稀疏特征的角度来看    
     某些特征出现的频率较低,与其相关的参数更新的频率也比较低
  
     常见特征的相关参数可以迅速地收敛到最佳值  
     而不常见特征的相关参数由于缺乏足够的观测样本,所以其最佳值难以确定
  
     学习率要么对于常见特征的相关参言衰减太慢,要么对于不常见特征的相关参数衰减太快  
     AdaGrad算法:Adaptive Gradient Algorithm,该算法借鉴了L2正则化的思想,每次迭代时,自适应地调整每个参数的学习率。  
     RMSprop算法:AdaGrad的学习率不断衰减,而RMSProp学习率可能变大也可能变小  
     梯度修正
    
     在小批量梯度下降中,如果每次选取样本数量比较小,损失会呈现震荡的方式下降
  
     随机梯度下降方法中每次迭代的梯度估计和整个训练集上的最优梯度并不一致,具
有一定的随机性
  
    有一定的随机性
 梯度截断
           
     除了梯度消失之外,梯度爆炸也是影响学习效率的主要因素。
  
     为了避免这种情况,当梯度的模大于一定阈值时,就对梯度进行截断,称为梯度截断(Gradient Clipping)  
     梯度截断是一种比较简单的启发式方法,把梯度的模限制在一个区间内  
     按模截断  
     按值截断  
     动量法(Momentum )    
     当前时刻的速度不仅依赖于负梯度,还依赖于前序时刻的加权移动平均  
     在迭代初期,梯度方向都比较一致,动量法会起到加速作用,可以更快地到达最优点。  
     在迭代后期,梯度方向会不一致,在收敛值附近震荡,动量法会起到减速作用,增加稳定性。  
     Adam算法:自适应学习率(RMSprop)+梯度方向优化(动量法)
  
     参数初始化与数据预处理
    
     参数初始化    
     梯度下降法需要在开始训练时给每一个参数赋一个初始值  
     初始化为0:对称权重现象  
     初始化范围太小:导致信号慢慢消失,还会使得Sigmoid型激活函数丢失非线性能力
  
     初始化范围太大:导致信号变得过大,还会使得Sigmoid型激活函数变得饱和,从而导致梯度消失  
     初始化方法    
     预训练初始化:Pre-Training → Fine-Tuning
  
     固定值初始化:对于一些特殊的参数,我们可以根据经验用一个特殊的固定值来进行初始化,如偏置(bias)通常用0初始化
  
     随机初始化方法
    
     基于固定方差的参数初始化    
     从一个固定均值(通常为0)和方差𝜎2的分布中采样来生成参数的初始值
  
     高斯分布初始化:从一个固定均值和方差的高斯分布𝒩(0, 𝜎2)进行随机初始化。
  
     均匀分布初始化:在一个区间[𝑟,−𝑟]内采用均匀分布来初始化参数。 𝑟 = 3𝜎2
  
     基于方差缩放的参数初始化
           
     一般而言,参数初始化的区间应该根据神经元的性质进行差异化的设置  
     如果一个神经元的输入连接很多,它的每个输入连接上的权重就应该小一些以避免神经元的输出过大或过饱和
  
     初始化一个深度网络时,为了缓解梯度消失或者爆炸问题,须尽可能保持每个神经的输入和输出的期望始终为0,方差保持一致
  
     根据神经元的连接数量自适应地调整初始化分布的方差
  
     Xavier初始化  
     He初始化  
     正交初始化  
     数据预处理    
     数据归一化
    
     简单缩放:最小最大值归一化、图像像素值除以255  
     逐样本均值消减(也称为移除直流分量):若数据是平稳的(即数据每一个维度的统计都服从相同分布),那么可以考虑在每个样本上减去数据的统计平均值。  
     特征标准化:使得数据的每一个维度具有零均值和单位方差。  
     白化
    
     降低输入的冗余性,降低特征之间的相关性,使得所有的特征具有相同的方差.  
     PCA白化:先PCA进行基转换,降低数据的相关性,再对每个输入特征进行缩放(除以各自的特征值的开方),以获得单位方差,此时的协方差矩阵为单位矩阵。
  
     ZCA白化:ZCA白化只是在PCA白化的基础上做了一个逆映射操作,使数据转换到原始基下,使得白化之后的数据更加的接近原始数据。  
     实际建议  
     逐层归一化    
     目的    
     解决内部协变量偏移问题
  
     解决梯度消失、梯度爆炸
  
     获得更平滑的优化地形
  
     归一化方法    
     批量归一化(Batch Normalization,BN):批量归一化是对一个中间层的单个神经元进行归一化操作
  
     层归一化(Layer Normalization):层归一化是对一个中间层的所有神经元进行归一化
  
     批量归一化是一种更好的选择。当样本数量比较小时,可选择层归一化。  
     权重归一化(Weight Normalization)  
     超参数优化
    
     神经网络中的超参数:层数、每层神经元个数、激活函数、学习率(各优化算法中包含的参数)、正则化系数、mini-batch 大小
  
     优化难点    
     超参数优化是一个组合优化问题:无法像用GD来优化  
     评估一组超参数配置的时间代价非常高  
     优化方法    
     网格搜索  
     随机搜索  
     贝叶斯优化  
     动态资源分配  
     神经架构搜索  
     过拟合与正则化    
     ℓ1和ℓ2正则化
  
     提前停止
  
     Dropout
  
     数据增强  
     卷积神经网络    
     前言    
     在用全连接前馈网络来处理图像时, 存在以下两个问题
    
     参数太多,随着隐藏层神经元数量的增多,参数的规模也会急剧增加。这会导致整个神经网络的训练随着隐藏层神经元数量的增多,参数的规模也会急剧增加。这会导致整个神经网络的训练  
     局部不变性特征难以提取    
     自然图像中的物体都具有局部不变性特征,缩放、平移、旋转等操作不影响其语义信息  
     全连接前馈网络很难提取这些局部不变性特征,一般需要进行数据增强来提高性能  
     感受野    
     感受野(Receptive Field)机制主要是指听觉、视觉等神经系统中一些神经元的特性,即神经元只接受其所支配的刺激区域内的信号。  
     卷积神经网络(Convolutional Neural Network, CNN)是受生物学上感受野机制的启发而提出的  
     卷积神经网络有三个结构上的特性:局部连接、权重共享以及池化  
     卷积神经网络一般是由卷积层、池化层和全连接层交叉堆叠而成的前馈神经网络  
     卷积神经网络具有一定程度上的平移、缩放和旋转不变性
  
     与全连接神经网络相比,卷积神经网络的参数更少  
     卷积运算    
     卷积(Convolution)是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维或二维卷积
  
     一维卷积    
     一维卷积经常用在信号处理中,用于计算信号的延迟累积  
     假设卷积层的输入神经元个数为𝑀,卷积大小为𝐾 ,步长为𝑆,在输入两端各填补𝑃个 0(zero padding),那么该卷积层的神输出经元数量为 (𝑀 − 𝐾 + 2𝑃)/𝑆 + 1
  
     窄卷积:步长 𝑆=1,两端不补零 𝑃=0 ,卷积后输出长度为 𝑀 − 𝐾 + 1
  
     宽卷积:步长 𝑆=1,两端补零 𝑃=𝐾 − 1 ,卷积后输出长度 𝑀 + 𝐾 − 1 
  
     等宽卷积:步长 𝑆=1,两端补零 𝑃=(𝐾 − 1)/2 ,卷积后输出长度 𝑀
  
     二维卷积    
     二维卷积经常用在图像处理中。因为图像为一个二维结构,所以需要将一维卷积进行扩展  
     一幅图像在经过卷积操作后得到结果称为特征映射( Feature Map )
  
     输入图像经过一个卷积核处理后的输出为一个Feature Map
  
     𝐻2 = (𝐻1 − 𝐾 + 2𝑃)/𝑆 + 1  
     𝐻2是卷积后的feature map的宽度,𝐻1是卷积前图像的宽度;𝐾是滤波器的宽度,𝑃是零填充的数量(零填充:指在原始图像周围补几圈0,如果𝑃的值是1,那么就补1圈0);𝑆是步长  
     互相关运算代替卷积运算    
     根据卷积运算的原始定义,计算卷积的过程中,需要进行卷积核翻转。  
     在具体实现上,一般会以互相关操作来代替卷积,从而会减少不必要的翻转操作。
  
     互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现。  
     在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关。特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的。
  
     为了实现上的方便起见,很多深度学习工具中卷积操作其实都是互相关操作。
  
     卷积网络的动机    
     稀疏交互    
     在全连接前馈神经网络中,如果第𝑙层有𝑀𝑙个神经元,第𝑙 − 1层有𝑀𝑙−1个神经元,则连接边有𝑀𝑙 × 𝑀𝑙−1个,也就是权重矩阵有𝑀𝑙 × 𝑀𝑙−1参数。当𝑀𝑙 和𝑀𝑙−1 都很大时,权重矩阵的参数非常多,训练的效率会非常低。
  
     在卷积层(假设是第𝑙层)中的每一个神经元都只和下一层(第𝑙 − 1层)中某个局部窗口内的神经元相连,构成一个局部连接网络。这样,卷积层和下一层之间的连接数大大减少,由原来的𝑀𝑙 × 𝑀𝑙−1个连接变为𝑀𝑙 × 𝐾个连接,𝐾 为卷积核大小。
  
     权值共享    
     每个神经元用同一个卷积核去卷积图像(这样只提取了一种特征,要想提取多种特征可以使用多个卷积核)  
     平移不变性    
     卷积网络具有平移不变性,它是由卷积+池化共同实现的    
     卷积:图像经过平移后,通过卷积运算仍然能够捕捉到同样的特征  
     池化:图像经过平移后,通过池化操作仍然能够产生相同的输出  
     平移是一种几何变换:表示把一幅图像或一个空间中的每个点在相同方向移动相同距离  
     平移不变性意味着系统产生完全相同的响应(输出),不管它的输入是如何平移的。  
     池化    
     池化层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,从而减少参数数量。
  
     池化(Oiiling)是指对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括  
     卷积层虽然可以显著减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少。如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,可以在卷积层之后加上一个池化层,从而降低特征维数,避免过拟合。
  
     最大池化(Maximum Pooling 或Max Pooling):对于一个区域,选择这个区域内所有神经元的最大活性值作为这个区域的表示。不但可以有效地减少神经元的数量,还可以使得网络对一些小的局部形态改变保持不变性,并拥有更大的感受野。  
     平均池化(Mean Pooling):一般是取区域内所有神经元活性值的平均值。主要用来抑制邻域值之间差别过大造成的方差过大
  
     卷积神经网络    
     出现原因    
     动物和人的大脑如何识别图像?
  
     在 CNN 出现之前,图像对于人工智能来说是一个难题,有2个原因    
     图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高
  
     图像需要处理的数据量太大,导致成本很高,效率很低  
     全连接网络处理图像数据时将RGB三通道拉伸成1维失去图像的局部空间特征  
     CNN 解决了这个问题:他用类似视觉的方式保留了图像的特征,当图像做翻转、旋转或者变换位置时,它也能有效的识别出来是类似的图像。
  
     一般框架    
     卷积层(提取特征)->池化层(降维、防止过拟合)->全连接层(输出结果)  
     卷积层    
     利用卷积核提取特征  
     卷积核的本质    
     单个卷积核代表图像的某种简单特征。比如垂直边缘、水平边缘、颜色、纹理等。
  
     所有卷积核加起来就好比是整张图像的特征提取器集合。  
     堆叠多层的卷积可以逐步提取更高层次、更复杂、更抽象、更泛化的特征。  
     卷积核深度(通道数)应该与输入一致!
  
     利用卷积核进行卷积计算  
     卷积层输出大小    
     通道数    
     某卷积层使用的卷积核的通道数等于该层输入数据的通道数  
     某卷积层的输出通道数等于该层使用的卷积核的个数  
     长/宽                  
     (N – K+2P) / stride + 1  
     在实际中:常用零填充边框,保证输入输出尺寸相同
  
     总结    
     四个参数    
     卷积核数目F  
     卷积核大小K
  
     步长S  
     零填充个数P
  
     输入图片的大小𝑊1 × 𝐻1 × D1  
     经过卷积后输出大小为 𝑊2 × 𝐻2 × 𝐷2    
     𝑊2 = (𝑊1 − 𝐾 + 2𝑃)Τ𝑆 + 1
  
     𝐻2 = (𝐻1 − 𝐾 + 2𝑃)Τ𝑆 + 1
  
     𝐷2 = F  
     通过参数共享,每个滤波器引入K*K*D1 + 1 个参数,因此一共有F(K*K*D1) + F 个参数  
     输出结果中,第𝑑个切片(大小为W2*H2 )是对输入通过第𝑑个卷积核以步长𝑆做卷积然后加上𝑏𝑖𝑎𝑠的结果  
     池化层    
     池化层(下采样)——数据降维,避免过拟合  
     全连接层    
     将图像特征图的“分布式特征表示”映射到样本标记空间。在整个卷积神经网络中起到“分类器”的作用。
  
     卷积神经网络擅长什么    
     以(多维)数组形式出现的信号
  
     局部相关性强的信号  
     特征可以出现在任何位置的信号
  
     物体平移和变形不变的信号  
     一维卷积网络:循序信号,文本
    
     文本  
     音乐  
     音频  
     演讲  
     时间序列  
     二维卷积网络:图像,时频表示(语音和音频)    
     目标检测  
     定位  
     识别  
     三维卷积网络:视频,体积图像,断层扫描图像    
     视频识别/理解  
     生物医学图像分析  
     高光谱图像分析  
     设计和学习一个神经网络    
     Step 1:设计网络的结构:卷积层、池化层、全连接层  
     Step 2:设定超参数    
     卷积层的层数,每个卷积层中卷积核的尺寸、卷积核的个数、卷积操作的步长、是否padding、训练时的学习率、batch size等
  
     超参定义了关于模型的更高层次的概念,如复杂度或学习能力(容量)
  
     超参数是在开始学习过程之前设置的,而不是通过训练得到的参数数据
  
     通常情况下,需要对超参数进行优化,选择一组最优超参数,以提高学习的性能和效果。
  
     Step 3:参数学习    
     基于大量样本数据,通过误差逆传播算法进行参数学习 (有监督学习)  
     在卷积神经网络中,主要有两种不同功能的神经层:卷积层和池化层  
     参数为卷积核以及偏置,因此只需要计算卷积层中参数的梯度
  
     在全连接前馈神经网络中,梯度主要通过每一层的误差项𝛿进行反向传播,由此可以计算每层参数的梯度
  
     和全连接前馈网络类似,卷积网络也可以通过误差反向传播算法来进行参数学习
  
     其他卷积方式    
     普通卷积
  
     转置卷积
           
     在一些任务中,我们需要将低维特征映射到高维特征,并且依然希望通过卷积操作来实现  
     卷积操作其实可以写为仿射变换的形式  
     仿射变换(Affine Transformation)可以实现高维到低维的转换,也可以实现低维到高维的转换  
     我们将低维特征映射到高维特征的卷积操作称为转置卷积(Transposed Convolution)也称为反卷积(Deconvolution)  
     在卷积网络中,卷积层的前向计算和反向传播也是一种转置关系  
     我们可以通过增加卷积操作的步长𝑆>1 来实现对输入特征的下采样操作,大幅降低特征维数  
     我们也可以通过减少转置卷积的步长𝑆<1来实现上采样操作,大幅提高特征维数
  
     步长𝑆<1 的转置卷积也称为微步卷积(Fractionally-Strided Convolution)
  
     卷积操作的步长为𝑆,则其对应的转置卷积的步长为1/S  
     为了实现微步卷积,我们可以在输入特征之间插入(𝑆 − 1)个0来间接地使其移动速度变慢  
     空洞卷积    
     空洞卷积(Atrous Convolution)是一种不增加参数数量,同时增加输出单元感受野的方法
  
     也称为膨胀卷积(Dilated Convolution)  
     空洞卷积通过给卷积核插入“空洞”来变相地增加其感受野的范围
  
     如果在卷积核的每两个元素之间插入 𝐷 − 1 个空洞,卷积核的有效大小为:K' = K + (K - 1) * (D - 1)  
     其中𝐷 称为膨胀率(Dilation Rate)。当𝐷 = 1 时卷积核为普通的卷积核  
     典型网络简介           
     LeNet                  
     1. 输入图像是32x32的大小,第一个卷积层的卷积核的大小是5x5,使用6个卷积核,不做padding,因此C1层的大小是28x28,通道数为6。
  
     2. S2层是一个下采样层,即池化层。在LeNet-5系统,下采样层比较复杂,由4个点下采样的加权平均为1个点,因为这4个加权系数也需要学习得到,这显然增加了模型的复杂度。
  
     3. 第二个卷积层的卷积核的大小是5x5,不做padding,因此C3层的大小为10x10  
     4. 由S2的6通道到C3的16通道,使用连接表来进行组合。  
     5. S4 层是在C3层基础上进行下采样,与S2层类似。  
     6. C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连,故C5特征图的大小为1*1:这构成了S4和C5之间的全连接。
  
     AlexNet                  
     大数据训练:百万级ImageNet图像数据
  
     防止过拟合:Dropout, 数据增强
  
     分Group实现双GPU并行,局部响应归一化(LRN)层
  
     5个卷积层、3个池化层、3个全连接层
  
     非线性激活函数:ReLU  
     网络的技术特点    
     使用ReLU(Rectified Linear Units)作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度消失问题,提高了网络的训练速率。
  
     为避免过拟合,训练时使用Dropout随机忽略一部分神经元。
  
     使用重叠的最大池化(max pooling)。最大池化可以避免平均池化的模糊化效果,而采用重叠技巧可以提升特征的丰富性。
  
     提出了LRN(局部响应归一化)层,在ReLU后进行归一化处理,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
  
     利用GPU强大的并行计算能力加速网络训练过程,并采用GPU分块训练的方式解决显存对网络规模的限制。
  
     数据增强:利用随机裁剪和翻转镜像操作增加训练数据量,降低过拟合。
  
     Inception    
     Inception网络是由有多个Inception模块和少量的汇聚层堆叠而成。
  
     Inception 网络有多个版本,其中最早的Inception v1 版本就是非常著名的GoogLeNet [Szegedy et al., 2015]。GoogLeNet 不写为GoogleNet,是为了向LeNet 致敬。GoogLeNet 赢得了2014 年ImageNet 图像分类竞赛的冠军。
  
     残差网络    
     是否可以通过简单的层数堆叠学习更好的网络?
           
     梯度消失和爆炸:随着网络的加深,在网络中反向传播的梯度会随着连乘变得不稳定,变得特别大或者特别小。=> 通过Normalized initialization 和 Batch normalization得到解决。
  
     网络退化(degradation): 随着网络的加深,准确率首先达到饱和,然后快速退化。=> 在训练集上的错误率同样增加,因此并非受过拟合的影响。
  
     简单的层数堆叠不能提升网络性能,如何利用网络加深带来的优势?  
     实验表明,通过添加恒等映射不能提高网络准确率,因此,网络对恒等映射的逼近存在困难。
  
     相比于恒等映射,网络对恒等映射附近扰动的学习更加简单。
  
     为什么是残差?    
     非常深的残差网络能够很容易的优化。  
     深度残差网络能够容易地从增加的深度中得到精度收益,同时比先前的网络产生了更好的效果。
  
     残差映射                  
     循环神经网络    
     网络记忆能力
    
     延时神经网络(Time Delay Neural Network,TDNN)           
      建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)  
     自回归模型(Autoregressive Model,AR)           
     一类时间序列模型,用变量的历史信息来预测自己  
     有外部输入的非线性自回归模型(Nonlinear Autoregressive with Exogenous Inputs Model,NARX)
           
     是自回归模型的扩展,在 每个时刻都有一个外部输入  
     循环神经网络    
     循环神经网络结构           
     循环神经网络(Recurrent Neural Network,RNN)由输入层、一个隐藏层和一个输出层组成;
  
     隐藏层通过使用带自反馈的神经元,能够处理任意长度的输入序列;
  
     隐藏层的活性值 称为(隐)状态(hidden state)
  
     按时间展开的循环神经网络           
     循环神经网络可以迭代看前面的输入  
     循环神经网络可以看作在时间维度上权值共享的神经网络  
     神经网络模型通过训练“学”道德东西蕴含在“权值”中,基础的神经网络只在层与层之间建立权连接,RNN最大的不同之处在于层内部的神经元在时间维度上也建立了权连接  
     RNN-序列模型应用时的几种形式    
     one-to-many
  
     many-to-one  
     many-to-many (同步)  
     many-to-many (异步)  
     双向循环神经网络           
     基本循环神经网络中,信息是按着(时间)顺序从前向后传播的,因此无法对前后的信息同时进行建模。  
     双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成,它们的输入相同,只是信息传递的方向不同。
  
     循环神经网络的训练    
     循环神经网络的参数可以通过梯度下降方法来进行学习,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛;
  
     长程依赖问题    
     为什么在实际应用中,RNN很难处理长距离的依赖?
                         
     解决梯度消失与梯度爆炸    
     梯度爆炸更容易处理一些。因为梯度爆炸的时候,程序会收到NaN错误。也可以设置一个梯度阈值,当梯度超过这个阈值时直接截取。
  
     梯度消失更难检测,也更难处理一些。总的来说,我们有三种方法应对梯度消失问题    
     合理的初始化权重值初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
  
     使用ReLU代替Logistic和Tanh作为激活函数
  
     使用其他结构的RNNs,比如长短时记忆网络(LTSM)、Gated Recurrent Unit(GRU)
  
     长短期记忆网络(LSTM)
    
     Long Short-Term Memory network(以下简称LSTM),一种特殊的RNN网络,该网络设计出来是为了解决长程依赖问题。
  
     LSTM的关键,就是怎样控制长期状态c。LSTM使用三个控制开关:
    
     第一个开关,负责控制如何继续保存长期状态c(保持长期记忆)
  
     第二个开关,负责控制如何把即时状态输入到长期状态c(添加新的记忆)  
     第三个开关,负责控制如何把长期状态c用于当前时刻的输出h(使用记忆内容)
  
     图示                         
     LSTM的核心思想:单元状态    
     单元状态的传递类似于传送带,其直接在整个链上运行行,中间只有一些少量的线性交互,容易保存相关信息。
  
     遗忘门、输入门、输出门           
     LSTM用两个门来控制单元状态c的内容    
     一个是遗忘门(forget gate),它决定了上一时刻的单元状态ct-1有多少保留到当前时刻ct(记忆保留)
  
     另一个是输入门(input gate),它决定了当前时刻网络的输入[ht-1, xt]有多少添加到单元状态ct(记忆增加)
  
     LSTM还用一个输出门(output gate)来控制当前单元状态ct 有多少输出到LSTM的当前输出值ht(记忆使用)  
     逐步理解           
     遗忘门  
     输入门  
     更新单元状态  
     输出门  
     总图  
     门控循环神经网络(GRU)
           
     GRU(Gate Recurrent Unit)是循环神经网络RNN的一种。类似LSTM,其主要目的也是为了解决长期记忆和反向传播中的梯度等问题。  
     图示  
     LSTM引入了三个门函数:输入门、遗忘门和输出门来控制输入值、记忆值和输出值。而在GRU模型中只有两个门:分别是更新门和重置门。另外,GRU将单元状态与输出合并为一个状态h。GRU是LSTM的一种变体,它较LSTM网络的结构更加简单,而且效果也很好。
  
     LSTM与GRU
    
     GRU的参数更少,因而训练稍快或需要更少的数据来泛化。  
     如果你有足够的数据,LSTM的强大表达能力可能会产生更好的结果。  
     深层循环神经网络    
     循环神经网络是可深可浅的网络    
     深网络:把循环网络按时间展开,长时间间隔的状态之间的路径很长  
     浅网络:同一时刻网络输入到输出之间的路径 xt→yt 非常浅  
     增加循环神经网络的深度    
     增强循环神经网络的能力
  
     增加同一时刻网络输入到输出之间的路径 xt→ yt, 如增加隐状态到输出ht→ yt ,以及输入到隐状态 xt→ ht之间的路径的深度  
     堆叠循环神经网络  
     深层双向循环神经网络  
    
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多