深度学习模型建立的整体流程和框架

深度学习模型建立的整体流程和框架

框架图如下,纵向是建立模型的主要流程,是一个简化且宏观的概念,横向是针对具体模块的延展。
深度学习模型建立的整体流程和框架_第1张图片

数据处理

数据处理一般涉及到一下五个环节:

  1. 读入数据
  2. 划分数据集
  3. 生成批次数据
  4. 训练样本集乱序
  5. 校验数据有效性

模型设计

网络结构

网络结构指的就是通常所说的神经网络算法中的网络框架,如全连接神经网络,卷积神经网络以及循环神经网络等,不同的网络结构通常有各自最优的处理场景,所以在处理具体问题时选择合适的网络结构是十分重要的。

损失函数

损失函数是模型优化的目标,用于在众多的参数取值中,识别出最优的参数。损失函数的计算在训练过程的代码中,每一轮模型训练的过程都相同,分如下三步:

  1. 先根据输入特征数据正向计算预测输出
  2. 再根据预测值和真实值计算损失(误差)
  3. 最后根据损失反向传播梯度并更新参数

损失函数也有很多种,如均方差,交叉熵等,不同的深度学习任务需要有各自适宜的损失函数,具体可以参考该博客机器学习-损失函数

训练配置

优化算法

优化算法用来确定参数更新的方式以及快慢,常用的优化算法有如下四个:

  1. 随机梯度下降(SGD):随机梯度下降算法,每次训练少量数据,抽样偏差导致参数收敛过程中震荡。
  2. 动量(Momentum):引入物理“动量”的概念,累积速度,减少震荡,使参数更新的方向更稳定。
  3. AdaGrad: 根据不同参数距离最优解的远近,动态调整学习率。学习率逐渐下降,依据各参数变化大小调整学习率。
  4. Adam: 由于动量和自适应学习率两个优化思路是正交的,因此可以将两个思路结合起来,这就是当前广泛应用的算法。

下面是不同学习率优化算法的示意图:

深度学习模型建立的整体流程和框架_第2张图片

设置学习率

学习率代表参数更新幅度的大小,即步长。当学习率最优时,模型的有效容量最大,最终能达到的效果最好。学习率和深度学习任务类型有关,合适的学习率往往需要大量的实验和调参经验。探索学习率最优值时需要注意如下两点:

  • 学习率不是越小越好。学习率越小,损失函数的变化速度越慢,意味着我们需要花费更长的时间进行收敛,如 图2 左图所示。
  • 学习率不是越大越好。只根据总样本集中的一个批次计算梯度,抽样误差会导致计算出的梯度不是全局最优的方向,且存在波动。在接近最优解时,过大的学习率会导致参数在最优解附近震荡,损失难以收敛,

运算环境

深度学习模型的运算环境有CPU和GPU,可以在模型中设置在哪一个硬件设备上运行,还可以设置多个GPU的并行运算,针对比较大的模型可能需要在多个GPU上进行运算,具体的设置会根据所使用的深度模型框架而略有区别,但是大体思路都大同小异。

训练调试

训练过程优化思路主要有如下五个关键环节:

  1. 计算分类准确率,观测模型训练效果

    交叉熵损失函数只能作为优化目标,无法直接准确衡量模型的训练效果。准确率可以直接衡量训练效果,但由于其离散性质,不适合做为损失函数优化神经网络。

  2. 检查模型训练过程,识别潜在问题

    如果模型的损失或者评估指标表现异常,通常需要打印模型每一层的输入和输出来定位,分析每一层的内容来获取错误的原因。

  3. 加入校验或测试,更好评价模型效果

    理想的模型训练结果是在训练集和验证集上均有较高的准确率,如果训练集上的准确率高于验证集,说明网络训练程度不够;如果验证集的准确率高于训练集,可能是发生了过拟合现象。通过在优化目标中加入正则化项的办法,解决过拟合的问题。

  4. 加入正则化项,避免模型过拟合

    加入正则化项,以达到精细调整参数训练的效果。如L1、L2和dropout等正则化操作,加入惩罚项来限制模型的表现从而提高模型的泛化能力。

  5. 可视化分析

    可以通过使用matplotlib等可视化库作图。

模型保存

在训练过程中我们需要把模型保存下来,用来进行测试和后续使用。比较建议在每一轮次训练中都进行一次模型参数和优化器参数以及超参数等内容的保存,因为万一程序在运行途中崩溃,不至于从头开始训练,而是从上一轮次的基础上进行训练。

深度学习其他知识点

模型优化

从上述流程图可以看出,深度学习模型的可以从数据处理、网络结构、损失函数、优化器和资源配置等五个方面进行模型的整体优化,选择最合适的就是最好的。

卷积神经网络尺寸的计算

卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

参考资料:

  1. 飞桨官网教程

你可能感兴趣的:(深度学习,机器学习,神经网络,深度学习)