深度学习相关问题

  • 深度学习

  • 数据降维(特征提取)

    • 对高纬度特征数据进行预处理,保留重要特征,取出噪点和不重要特征,提高数据处理速度
    • 优点
      • 数据集更易使用
      • 降低算法的计算开销
      • 取出噪声
      • 使得结果更易理解
    • 算法
      • 奇异值分解(SVD)
      • 主成分分析(PCA)
      • 因子分析(FA)
      • 独立成分分析(ICA)
  • 激活函数

    • 作用
      • 现实中的数据往往不是线性可分的,所以我们需要引入非线性函数(【引入非线性函数】即在每一层输出后面添加一个激活函数)或者线性变换(【线性变换】从当前特征空间通过一定的线性映射转换到另一个空间,使数据更好的分类)
    • sigmoid
      • 以0.5作为阈值,划分等价的0-0.5和0.5-1两块
      • 缺点
        • 梯度消失(gradient vanishing)问题,即当输入非常大或者非常小的时候,会使得这些神经元的梯度接近于0
        • sigmoid的output是非零均值,导致下一层神经元会接收到一个非零均值的信号作为输入
    • 双曲正切函数(tanh)
      • 以0作为阈值,分为了-1-0和0-1;output为零均值;但还是存在梯度消失
    • 线性修正单元(relu)
      • f(x)=max(0,x),当输入信号小于0时,输出0,当输入信号大于0时,输出即输入
      • 优点
        • 使用relu得到的SGD的速度比sigmoid和tanh快,不需要大量的计算,只需要一个阈值即可
      • 缺点
        • 比较脆弱,当一个非常大的梯度流过relu神经元,更新参数后将不会对数据有激活现象,learning rate过高会导致这种问题(【注】若不幸出现这种情况,可以使用Xavier初始方法,避免)
    • softmax
  • 损失函数

    • 均方差
  • 优化器

    • 梯度下降
      • 批量梯度下降(Batch Gradient Descent,BGD)
        • 每一次迭代时使用全部的样本进行梯度更新
        • 对目标函数求偏导,对每次迭代对象对参数进行更新,更新时存在一个求和函数,对所有的样本进行计算处理
        • 优点
          • 一次迭代是所有样本进行计算,利用矩阵操作,实现了并行操作
          • 全数据集确定的方向更能代表样本整体,更准确的走向极值的方向,当目标函数为凸函数时,BGD最优
        • 缺点
          • 样本数量大的时候,需要对每个样本进行计算,训练速度慢
        • 从迭代次数上看,BGD的迭代次数较少
      • 随机梯度下降(Stochastic Gradient Descent,SGD)
        • 每次迭代使用单独样本进行参数更新,训练速度加快
        • 对目标函数求偏导,对每个迭代对象对参数进行更新,没有求和操作
        • 优点
          • 不是全部训练集上的损失函数,而是在每轮迭代中,随机优化某一条训练集上的损失函数,这样每一轮的参数更新速度加快
        • 缺点
          • 准确度下降,可能会收敛到局部最优,单个样本不能表示全体样本,不易并行实现
        • 迭代次数较多,搜索过程是盲目的
      • 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)
        • 每次迭代使用batch_size个样本进行参数更新
        • 优点
          • 每一个batch上优化神经网络参数并不比单个数据慢
          • 每次使用一个batch可以大大减少收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果
          • 可实现并行化
        • 缺点
          • 不当选择batch_size会带来一定问题
        • 合理的batch_size
          • 内存率提高,并行化效率提高
          • 跑完整个数据集的迭代次数下降
          • 在一定范围内,增大bath_size,其下降的方向越准,引起的训练震荡越小
        • 盲目增大batch_size
          • 内存容易撑不住
          • 增加到一定程度,下降方向基本不再改变
          • 跑完全数据集迭代次数少,要想达到相同的精度,花费的时间大大增加,对参数的修正速度慢
    • 动量梯度下降法(Momentum)
    • Adagrad(【注】学习率和梯度有关,也就是自适应学习率)
  • BP算法(back propagation)

    • 神经网络组成:网络架构,激活函数,找出最优权重值的参数学习算法
    • 学习过程由信号正向传播求损失与误差回传两个过程组合
    • 过程
      • 正向传播(FP,求损失),该过程根据输入的样本,给定初始权重和偏置项,计算输出值与实际值之间的损失值,若不在给定的范围内,则启动反向传播过程;否则停止w和b更新
      • 反向传播(BP,回传误差),将输出以某种形式从隐层逐渐反馈到输入层,并将误差反摊到各层的所有单元,获得各单元的误差信号,此误差信号作为修正各单元权重的依据
    • 优化
      • 增加动量项
      • 自适应调节学习率
      • 引入抖动因子
      • 从梯度方面进行优化
  • 超参数

    • 普通参数可以不断地学习得到,即训练模型的过程;超参数无法学习得来,如学习率
  • 过拟合问题

    • 过拟合是因为模型的学习能力太强,除了学习了样本空间的共有特性外,还学习到了训练集中的噪声,噪声的存在导致模型泛华性能下降
    • 数据增强,增加训练样本
      • 图像处理函数
        • tf.image.resize_images(img,[size,size],method)【图像缩放,插值】
        • tf.image.resize_image_with_crop_or_pad(img,[size,size])【样本裁剪】
        • tf.image.flip_left_right(image)【水平翻转】
        • tf.image.flip_up_down(image)【竖直翻转】
        • tf.image.adjust_contrast(image,rate)【修改对比度】
        • tf.image.per_image_standardization(image)【白化处理】
    • droupout,随机失活,随机丢弃部分神经元,主要作用于全连接层
      • 通过droupout可以降低节点之间的耦合度,这样节点对其他节点就没那么敏感了
      • 每一层上的每个节点都没有得到充分的训练,这样就可以避免节点过度学习
    • 正则化
      • 正则化越强,能够容忍更多的错误,关心模型的复杂度,不关心每个样本的错误,可以很好地做到过拟合
      • 正则化越弱,更加关注样本点,容易造成过拟合
      • 当训练集和测试集相差比较大的时候,要注意使用正则项进行惩罚,避免过拟合
      • 当训练集和测试集相差不大的时候,没必要使用,否则可能会造成欠拟合
  • 欠拟合问题

    • 训练的模型在训练集上面的表现很差,验证集上也表现很差,原因:模型训练的过于简单,通用特征模型未学习到
    • 措施
      • 做特征工程
      • 减少正则化参数
      • 使用更深或者更广的模型进行训练
      • 使用集成方法(boost或bagging算法)
  • CNN

    • 输入层
    • 卷积层
      • 提取特征值,对原信号特征增强,并降低噪音
    • 池化层
      • 对输入的特征图进行压缩,进行降采样,选择一块区域的最大值(平均值)代替该区域
      • 最大池化(max pooling)
        • 提高空间不变性,不管像素最大值在池化框哪个位置,都可以取得最大值
      • 均值池化(average pooling)
        • 将池化框中的值求平均,能够减小池化框大小带来的误差
    • 全连接层
      • 将学习到的分布式特征表示映射到样本标记空间,起到“分类器”的作用
      • 第一层全连接
        • 池化层到全连接层,中间做卷积,将前面卷积提取的抽象特征展开,映射到标记好的样本空间
      • 第二层全连接
        • 标记的样本空间,最后用softmax做分类即可
          【注】ResNet和GoogleNet取消了全连接层,换成了1*1卷积核做的卷积,最后进行分类
    • 输出层
  • 经典模型

    • AlexNet模型(激活函数使用relu)
      • 输入层为2242243
      • 第一层:卷积层,卷积核为11*11,滑动步数为4,池化层使用最大池化
      • 第二层:卷积层,卷积核为5*5,池化层使用最大池化
      • 第三层:卷积层,卷积核3*3
      • 第四层同第三层
      • 第五层:卷积层,卷积核3*3,池化层使用最大池化
      • 第六层+第七层:全连接层,4096神经元
      • 第八层:softmax层,进行分类
    • VGG-16模型(激活函数使用relu)
      • 输入层
      • 第一层:两个卷积层和一个最大池化层,卷积核3*3
      • 第二层:两个卷积层和一个最大池化层,卷积核3*3
      • 第三层:三个卷积层和一个最大池化层,卷积核3*3
      • 第四层:三个卷积层和一个最大池化层,卷积核3*3
      • 第五层:三个卷积层和一个最大池化层,卷积核3*3
      • 第六层,七层,八层:全连接层,4096个神经元
    • GoogleNet
    • RestNet
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章