深度学习xmind思维导图,知道学习深度学习路线

思维导图下载地址:https://download.csdn.net/download/zhiwei_bian/12741569

1、神经网络训练流程

前项传播 --> 获得输出 --> 获得损失 --> 后向传播 --> 更新参数

2、基本元素

   1)、激活函数

           1、对于多分类的情况,最后一层softmax。 
           2、其它深度学习层中多用relu。 
           3、二分类可以用sigmoid。 
           4、另外浅层神经网络也可以用tanh。
          隐层激活函数多用:relu,tanh,sigmoid
          输出层激活函数多用:sigmoid,softmax

        a、relu    

                           x,if x>=0
               f(x) = ∫
                          0,if x<0
               f(x) = max(0,x)

        b、softmax

              f(x)=e^x/Σe^x

        c、sigmoid

              f(x)=1/(1+x^-x)

        d、tanh

              f(x)=(e^x-e^-x)/(e^x+e^-x)

      2)、损失函数

         a、交叉熵

             一、sigmoid_cross_entropy_with_logits

                 它对于输入的logits先通过sigmoid函数计算,载计算他们的交叉熵,但是他对交叉商的计算方式进行了优化,使得结果不至于溢出,它适用于每个类别相互独立但互不排除的情况;例如一幅图可以同时包含一条狗和一直大象,output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mean(loss)使用

             二、softmax_cross_entropy_with_logits

                 它对于输入的logits先通过softmax函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出,它适用于每个类别相互独立且排斥的情况,一幅图只能属于一类,而不能同时包含一条狗和一只大象,output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mean(loss)使用

            三、sparse_softmax_cross_entropy_with_logits

                  它对于输入的logits先通过softmax函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出,它适用于每个类别相互独立且排斥的情况,一幅图只能属于一类,而不能同时包含一条狗和一只大象 ,output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mean(loss)使用

           四、weighted_cross_entropy_with_logits

                   计算具有权重的sigmoid交叉熵sigmoid_cross_entropy_with_logits()

        b、均方差

           一、tf.square()与tf.reduce_mean()组合
                     mse = tf.reduce_mean(tf.square(a - b))

          二、tf.nn.l2_loss()

            tf.nn.l2_loss(t)的具体计算为:sum(t ** 2) / 2,也就是说相当于2倍的tf.square(t)。那么用于计算mse的话用法如下:
            mse = (2.0/9)*tf.nn.l2_loss(a - b)

          三、tf.losses.mean_squared_error()

            tf.losses.mean_squared_error()就是直接计算mse值了
            mse = tf.losses.mean_squared_error(a, b)

          c、优化器

                 主要用 : 
                        tf.train.GradientDescentOptimizer
                        tf.train.AdamOptimizer
                 如何选择?
                            如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。
                            RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。
                            Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum随着梯度变的稀疏,Adam 比 RMSprop 效果会好。
                            整体来讲,Adam 是最好的选择。
                            很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能  会被困在鞍点。
                            如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

                  一、梯度下降(Gradient Descent)
                           标准梯度下降法(GD)-每个样本都计算一次
                                    1、训练速度慢
                                    2、容易陷入局部最优解
                           批量梯度下降法(BGD)每批样本计算一次
                                    1、计算速度较快
                                    2、选择平均梯度最小的方向
                           随机梯度下降法(SGD)-每批样本计算一次
                                    1、训练速度快(不需要计算每个样本的梯度和平均梯度)
                                    2、从批样本随机选择一个方向进行下降(某次有可能不正确,最终会正确

                  二、动量优化法(加速下降)
                           momentum-使用动量的随机梯度下降法
                                    1、训练速度快(积攒历史梯度,有惯性的下降)
                                    2、波动更小(取前几次波动的平均值做这次的w)
                           NAG-牛顿加速梯度算法(Momentum的变种)
                                    1、训练速度快(校正积攒历史梯度,提前预知下一次的梯度)
                                    2、预支梯度最底部的位置(不仅增加了动量项,并且在计算参数的梯度是,在损失函数中减去了动量项。
                                         在底部速度会降下来,不会冲上另一个山坡)

                  三、自适应学习率优化算法
                           AdaGrad算法
                                    1、每个变量用不同的学习率,学习率越来越慢(对于已经下降的变量,则减缓学习率,对于还没下降的
                                         变量,则保持较大的学习率)
                                    2、模型收敛稳定(由于学习率越来越小,接近目标时候震荡较小)
                           RMSProp算法
                                    1、自适应调整学习率(避免了学习率越来越低的可能)
                                    2、模型收敛稳定(消除了摆动大的方向们各个维度的摆动都比较小)
                          AdaDelta算法-结合了AdaGrade和RMSProp
                                    1、训练速度快(模型训练初中期效果好,速度快)
                                    2、模型收敛不稳定(模型训练后期,会反复在局部最小值附近抖动)
                           Adam算法-结合了AdaGrad和TMSProp
                                    1、对内存需求较小(适用于大数据集合高纬度空间)
                                    2、不容参数有独立自适应学习率
                                    3、解决系数梯度和噪声问题(结合了AdaGrad和RMSProp算法最优的性能)
 

 

3、基础网络模型

全连接(MLP)

在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的。当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢。不适合处理空间问题、高纬度问题

卷积神经网络(CNN)
 

    ·卷积层:
        在卷积层中有几个重要的概念:
            local receptive fields (感受视野)(卷积核覆盖的区域)
            shared weights (共享权值)
        假设输入的是一个28*28的而为神经元,我们定义5*5的一个local reception fields(感受视野),即隐藏层神经元与输入层的5*5个神经元相连,这个5*5的区域就称为local reception fields(感受视野)
            
    ·神经网络:全局激活 VS 局部激活
        在介绍神经网络的时候,我们都知道,生物的神经网络是通过刺激而发生的连接,这说明在生物的神经网络中,什么时候需要哪部分神经网络的神经元,那部分神经元就会被激活。

    ·卷积后图像尺寸计算:
        假设原图为W*H,卷积核大小为F*F,边缘填充像素为pad,步长为stride。
        则卷积后图像的尺寸为:W=(W-F+2*pad)/stride+1,结果向下取整

        输入层
            用于数据的输入(多维NHWC):N:批次,H:高,W:宽,C:通道
        卷积层 
            使用卷积核进行特征提取和特征映射 (比如:3*3卷积核得出一个特征)
            特征提取
                卷积的过程(比如:3*3卷积核得出一个特征)
            特征映射
                将特征提取的值存储在下一层输入的位置
        激励层
            由于卷积也是一种线性运算,因此需要增加非线性映射(激活函数)
        池化层
            
进行下采样,对特征图稀疏处理,减少数据运算量
            Max pooling 取最大值
            average pooling 取平均值
        全连接层
            通常在CNN的尾部进行重新拟合,减少特征信息的损失
        输出层
            用于输出结果
        归一化层(Batch Normalization)
            在CNN中对特征的归一化
        Dropout层
            Dropout 层一般加在全连接层 防止过拟合 提升模型泛化能力。而很少见到卷积层后接Drop out (原因主要是 卷积参数少,不易过拟合) 
            类似卷积神经网络,只是在最后的全连接层使用dropout,循环神经网络一般在不同层循环结构体zhij使用dropout, 而不在同一层的循环结构之间使用
        切分层
            对某些(图片)数据的进行分区域的单独学习
        融合层
            对独立进行特征学习的分支进行融合

循环神经网络(RNN)

     长短期记忆网-LSTM( Long Short-Term Memory networks)

            如果我们把LSTM的 Forget Gate全部置0(总是忘记之前的信息),Input Gate全部 置1,Output Gate全部置1(把cell state中的信息全部输出),这样LSTM就变成一个标准的RNN。

        输入门(input gate)
            一个Sigmoid层,观察 h(t-1) 和 x(t),对于元胞状态c(​t−1) 中的每一个元素输出一个0~1之间的数。1表示“完全保留该信息”,0表示“完全丢弃该信息”.
        遗忘门(forget gate)
            一个Sigmoid层决定我们要更新哪些信息,并由一个tanh层创造了一个新的候选值(结果在(-1, 1)(−1,1)范围)
        输出门(output gate)
            控制哪些信息需要输出


        门控循环单元(GRU)

要注意的是,h只是一个变量,因此在每个时刻,包括最后的线性组合,h都是在用以前的自己和当前的备选答案更新自己
        Zt代表更新门
            更新门的作用类似于LSTM中的遗忘门和输入门,它能决定要丢弃哪些信息和要添加哪些新信息
        Rt代表重置门
            重置门用于决定丢弃先前信息的程度。
    

其他问题

    梯度问题

        梯度爆炸处理

            梯度爆炸原因
                初始化权重过大
                激活函数选择有误
                学习率过大
            解决梯度爆炸的方法
                重设初始化权值(标准正态分布采样)
                重选激活函数(中间层激活函数使用relu/leaky_relu)
                学习率调小

        梯度弥散处理

            梯度弥散原因
                激活函数的饱和
                数据中奇异样本引起模型无法收敛
                梯度连乘导致
                学习率过大
            解决梯度弥散的方法
                1、激活函数引起的梯度弥散问题
                    sigmoid函数值在[0,1],ReLU函数值在[0,+无穷],所以sigmoid函数可以描述概率,
                    * 使用ReLU,Leaky_Relu等激活函数代替Sigmoid
                2、ReLU适合描述实数
                    sigmoid函数的梯度随着x的增大或减小而消失,而ReLU不会
                3、奇异样本梯度弥散问题
                    引起训练时间增大
                    梯度弥散(爆炸)导致模型无法收敛。
                     * batch normalization(批量标准化),为了消除指标之间的量纲影响,需要进行数据的标准化处理,以解决指标之间的可比性,标准化的目的就是是的预处理的数据被限制在 一定的范围内([-1,1]),从而消除奇异样本导致的不良影响。
                                标准化(-1,1):x_ = (x-μ)/σ
                                归一化(0,1) :x_ = (x-min(x))/(max(x)-min(x))
                                归一化(-1,1):x_ = (x-mean(x))/(max(x)-min(x))
                4、多层网络中梯度连乘一起的梯度弥散问题
                    深度残差网络(ResNet)采用跳跃式的结构,打破了传统的神经网络n-1层的输出只能给n层最为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入
                5、学习率引起的梯度问题(learning Rate)
                    在后向传播计算损失是最好画出loss随更新参数次数的权限,关注前几次更新参数时权限的变化趋势,看是否出现梯度爆炸或者梯度弥散的问题。
                
              

    拟合问题

        产生欠拟合的原因和解决方法

                1、数据的特征项不够(ML),可以添加其他特征项来很好的解决
                2、训练时间不够(DL),可以增加训练时间,使模型学习到更多的特征。
                3、模型过于简单(DL),无法提取数据的高纬特征,增大模型以获取更多的特征。
                4、添加多项式特征,这个在机器学习算法里面用的很普遍,增大模型以获取更多特征。
                5、减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数

        产生过拟合的原因

                1、数据噪声过大
                2、训练数据太少
                3、模型训练过度
                4、模型过于复杂

        过拟合的解决办法

                1、重新清洗数据,降低数据噪声,将错误的label纠正或者删除错误的数据
                2、增大数据的训练量,让模型可以提取更多的数据特征
                3、训练提前停止,就是让模型训练的差不多的时候就停下来,比如继续训练带来提升不大或者连续几轮训练都不带来提升的时候,这样可以避免只是改进训练集的指标单降低了测试集的指标
                4、采用正则化方法,正则化方法主要包括L1正则和L2正则,正则一般是在损失函数之后加上对应的范数,正则化可以看做是损失函数的惩罚项
                5、Dropout是一种正则化技术,可以防止网络过度拟合套,顾名思义,在训练期间,隐藏层中的一定数量的神经元呗随机的丢弃,让神经元以一定的概率不工作,这意味着孙连发生在神经网络的不同组合的神经网络的几个架构上,你可以将Dropout视为一种综合技术,然后将多个网络的输出用于产生最终的输出。训练时部分激活,验证时全部激活    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值