美文网首页
ML+DL学习经验知识总结

ML+DL学习经验知识总结

作者: 90000Tank | 来源:发表于2020-12-21 23:29 被阅读0次

    机器学习

    建模方法

    • 曲面式建模:y=f(x,w),x为输入、w为可训练参数、y为输出
    • 概率式建模:p(y|x,w),代表有x和w的情况下输出y的概率
    • 两种建模方式没有本质区别,可以通用。
      • 大多数文献中,描述依赖和模型时都是使用概率描述。

    训练方法

    • 可以通过统计方式训练(KNN、贝叶斯等)
    • 可以通过求取函数梯度训练(神经网络等)
    • 可以通过采样方式求解(LDA)
    • 通用可以通过规则变换得到(特征值分解,LU分解)
    • 前两种方法没有本质区别。比如统计样本出现频率从另一个角度来说就是极大似然估计,估计过程使用了梯度、导数。

    数据和处理思路

    文本数据

    • 文本向量化:
      • 算法:ContVect等算法
      • 过程:文本->统计词频等->文本稀疏矩阵
      • 可以用于文本相似度比对(simhash)
    • 词向量化(有顺序文本):
      • 算法:WordEmbedding、Word2vec
      • 过程:词->OneHot向量->乘W->降维向量(线性降维)
    • 文本矩阵降维:
      • 算法:非负矩阵分解(NMF)、LDA、PCA
      • 过程:文本稀疏矩阵->LDA->密集矩阵、 文本密集矩阵(稀疏矩阵转化)->NMF->密集矩阵
      • 举例:可将降为后密集矩阵应用于文本分类
      • 可以用于文本相似度比对
    • 序列文本处理:
      • 算法:RNN(HMM)
      • 过程:词向量化矩阵->RNN网络->具体任务
      • 举例:文本分类、语句生成
    • 不定长序列转化:
      • 算法:Seq2Seq
      • 过程:词向量化矩阵->Encoder->Decoder->词向量化矩阵->词序列
      • 举例:自然语言翻译、对话机器人

    一维、二维连续数据(波形、图像类型)

    • 预处理和特征:
      • 算法:傅里叶变换,卷积、互相关,小波变换等
      • 过程:原始数据->特征变换算法->图形特征->其他变换
      • 举例:使用Haar小波变换后图形+局部敏感哈希可以对比图形相似度。或者利用傅里叶变换进行滤波
    • 数据压缩:
      • 算法:SVD、PCA、ICA、字典学习等
      • 过程:原始数据->压缩算法->降维
      • 举例:使用SVD算法对图像进行压缩。
    • 图像特征
      • 图像关键点检测
        • 拼图
        • 三维空间重建
          • 可以用于建筑物安全检测
          • 三维建模
    • 连续数据处理:
      • 算法:一维二维三维卷积、卷积神经网络天然适合处理连续数据。
      • 非均匀网格可以使用PointNet、PointConv、GraphCNN
      • 过程:连续数据->卷积->预期输出
      • 举例:人脸识别、语音识别

    二维非连续数据(表格类型)

    • 有缺失数据:

      • 算法1:特征工程
      • 过程1:填补缺失值->预期输出
      • 算法2:贝叶斯等算法
      • 过程2:缺失数据->贝叶斯算法->预期输出
    • 特征过多:

      • 算法:特征选择、降维、正则化
      • 过程1:原始数据->特征选择->分类
      • 过程2:原始数据->降维->分类
    • 对于二维表格类型数据来说可能传统机器学习算法更加合适。

    • 如果需要使用多层神经网络记得数据去均值等处理。

    学习流程

    step1:定义需求、确定问题->需要有将实际问题抽象化的能力
    step2:准备数据、了解数据->需要会做特征工程与数据处理能力
    setp3:选择算法->需要具备根据数据选择算法能力、以及算法调优能力
    setp4:算法调优->使得算法具备良好性能和可扩展性
    step5:模型部署->解决实际问题(需要时间累积)

    传统ML算法

    • 有监督学习
      • SVM:约束最优化问题
        • 对偶问题
        • 松弛边界
      • 朴素贝叶斯
        • 基础是变量间是独立的
      • 逻辑回归是分类算法
      • 集成学习类
        • Bagging
        • Boosting
        • Stacking
      • 回归
        • 线性回归
          • 鲁棒线性回归:huberloss
          • 加入不同正则化
        • 支持向量机回归
        • 神经网络回归
        • 二阶优化方法
          • 牛顿法
          • 拟牛顿法
      • 一阶优化算法
        • 随机梯度下降法
        • RMSProp
        • Adam
      • 极大似然估计
        • 从概率角度建模的
    • 无监督学习
      • 带隐藏变量的极大似然估计
        • 如何求证据下界
      • EM算法
        • 知道原理 **
      • 聚类算法
        • 记忆Kmeans,高斯混合模型
        • 层次聚类等属于了解 **
      • 降维
        • 线性降维
          • PCA
          • LDA:文本降维
          • 了解ICA,DL
        • 流形
          • TSNE:主要用于做可视化 **
        • 稀疏自编码器

    深度学习

    超参数选取

    • 一般而言学习率比DropOut、正则化参数更加重要。很多时候网络不收敛应该考虑减少学习率。
      • 现在这个学习阶段,可以不考虑预热。
    • 学习率选取可以以10的倍数选择。
    • 学习率很少看到1以上的取值。其可以随着迭代过程逐渐减少。而且当loss不变的时候可以考虑减少学习率实验。
    • 做数据和模型时避免出现Nan。
    • 可以考虑使用小的BatchSize(比如32),一方面可以减少内存和时间消耗,另一方面性能没有明显下降。
    • dropout取值0.5左右比较合适。
    • 要保证训练过程中样本均衡。
      • 绝大部分情况下,样本是非均衡的
      • 给非均匀样本进行加权
      • FocalLoss=(1-p)^\alpha log 1/p
    • 图形处理中kernel一般选择3*3大小卷积核心,多加层数。
      • 有了深度可分离卷积后,可以使用5*5的卷积核心增大感受野
      • 卷积神经网络可以使用ReLU(ReLU6)增加计算速度
      • 当然也可以考虑Inception+ResNet优化。
      • ReLU+BatchNrom。
      • BN层在推断的过程中需要调整参数
    • Adam优化器可以考虑。
    • xavier初始化可以考虑。
      • 通过初始化参数,使得正向传播的方差不变
      • 可以通过BN解决
        • 推断过程BN层与Conv层融合
        • 与选择初始化参数等价
    • 如果网络30层还不能解决问题那么很有可能继续增加深度也无济于是。
      • 现在这个学习阶段,慎重增加层数
      • 深度神经网络应当参考现有模型
    • 池化层可能使得网络性能降低。
      • Inception,池化层(平均池化)用于提取低频特征
    • 词Embedding可以选择128。
    • 全连接层数量超过w量级的基本没见过。
      • VGG:4096*4096
      • 全连接层需要较多的可训练参数
      • 在卷积层中难以提升精度
      • 决定卷积神经网络精度,主要在于Conv结构
    • 可以考虑恰当的可视化方式来观察训练。
    • 达到相同性能FC、CNN几乎总是比循环神经网络好训练。
      • 相同可训练参数CNN比RNN要快(10倍)
      • RNN比较容易获得文本特征
      • CNN更加容易量化
      • 循环神经网络梯度容易出现问题,可以限制梯度大小(梯度截断,不超过某个阈值)。现在这个学习阶段,不需要复杂处理,可以调整学习率。
    • 测试网络时可以选择小样本集进行测试。
    • 神经网络结构是可以通用的。
    • 统计可训练参数数量可预估时间。
    • 一般情况要求神经网络样本数量几倍于可训练参数数量。
    • 查文献寻找可行方法。
    • 不断的实践,积累经验

    参数调优

    • 对于学习率选取,开始迭代可以使用较小的学习率进行预热。

    • 之后训练过程使用正常学习率,在收敛过程中逐步减少学习率。

    • 如果网络不收敛可以尝试使用更小的学习率。

    • 建议使用Adam算法,其对超参数鲁棒性较强。其默认学习率是1e-3

    • 网络依然不收敛怎么办?80%都是数据问题,20%是网络过深

      • 方向1:尝试查看数据和标签读取是否有问题
        • 表现为精度与随机情况接近
        • 假设10类,精度10%。
      • 方向2:模型是否合理
        • 表现为精度有所提升,但最终精度并不高
          • 从随机的10%到15%
        • 是否网络过深,导致难以训练,出现梯度消失
        • 是否加入了BatchNorm
        • 是否丢失重要特征
        • 可能DropOut过大,很少,不可以和BatchNorm混用
    • 训练到一定程度精度突然降低

      • 表现为精度从一个较高的数值降低到较低的数值
      • 需考虑学习率是否逐渐减少,尝试减小学习率
      • 出现除0问题
        • 最可能的是数据问题,预处理中除0,使得网络全为Nan。
        • 建议保存模型中保存一个最优解
        • BatchNorm也可能出现除以0的问题。
        • epsilon选择过小,导致16位精度计算过程中出现除以0
    • 一般而言学习率比DropOut更加重要。

      • 测试时可以将DropOut的比例设置为1。
      • 如果DropOut设置比较小那么网络可能不收敛。
      • 通常用于全连接层中。
    • 正则化可以有效的避免过拟合问题。

      • 如果正则化选择比较大,那么网络可能不收敛。
      • 其可以减少网络过拟合风险。
    • BatchNorm(BN)操作

      • 现在的网中成为了一个标准的操作
      • 其可以用于卷积层中
      • 可以避免过拟合,并加快训练速度。
      • BN是放在激活函数前。
    • BATCHSIZE(BS)大小问题

      • 主要看自身硬件情况,可选择32~512
      • 自然语言处理中可以适当减少BS
      • 图像处理中BS中每类数据的概率是相同的(相当于样本均衡)
      • 图像处理中BS比自然语言处理中可以大一些
      • 建议测试网络过程中选择适当的BS
    • 图形处理中kernel可以选择33大小卷积核心,多加层数,来自于VGG的经验。使用MobileNet可以使用55的Kernel。

    • xavier, he初始化可以考虑。在有了BN后初始化影响较小。

    • 如果网络30层还不能解决问题那么很有可能继续增加深度也无济于是。也就是测试过程中过深网络可能更加难以训练。

    • 池化层可能使得网络性能降低。但是Inception中的池化思路不同。

    • 全连接层数量超过w量级的基本没见过。

    • 可以考虑恰当的可视化方式来观察训练。

    • 倾向于使用全连接、卷积网络代替RNN。

    • 统计可训练参数数量可预估时间。

    • 查文献寻找可行方法。

    • 不断的实践,积累经验

    • 可视化:sklearn:TSNE -> 比PCA效果好

    模型层次关系

    基础计算结构
    • 矩阵运算模块(BLAS、FBGEMM)
    • 激活函数模块
    • 量化模块(FBGEMM)
    基础模型结构:1~3维
    • 普通卷积
    • 深度可分离卷积
    • 转置卷积/反卷积
    • 空洞卷积
    基础模型
    • Inception(GoogleNet)
    • ResNet
    • DenseNet
    应用模型
    • 物体检测
    • 机器翻译
    • 图像超分辨率采样
    • 图像去噪
    • 图像生成
    • 图像分割
    • 视频帧生成

    DL学习算法

    基本结构
    • 全连接网络:FC
    • 卷积神经网络:CNN
    • 循环神经网络:RNN
    • 激活函数
    高层结构
    • 分类模型
      • CNN+FC:图像分类,人脸识别
      • RNN+FC:文本分类,文本生成
    • 卷积+反卷积
    • RNN+RNN:seq2seq
    • 优化结构
      • BatchNorm
      • DropOut
      • Inception
      • ResNet
      • Skip connection **
    损失函数
    • 用来回归的
      • 均方误差MSE
      • 绝对值
      • huber loss
    • 用来做分类的
      • 交叉熵
      • hinge loss
    • 其他
      • sequence loss
      • ctc loss
      • center loss
      • margin loss

    常用库

    • TensorFlow
      • 2.0以上版本最大特点Bug多
      • 建议2.0版本以PyTorch
    • PyTorch
      • 1.7版,量化功能需要完善
      • 与TF2.0版本类似
      • 动态计算图

    相关文章

      网友评论

          本文标题:ML+DL学习经验知识总结

          本文链接:https://www.haomeiwen.com/subject/vcfjnktx.html