社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

彻底搞懂深度学习-模型训练和推理(动图讲解)

架构师带你玩转AI • 1 周前 • 40 次点击  

深度学习就像是教一个人学习技能的过程,分为训练和推理两个截然不同的阶段。

  • 训练阶段:教会模型从数据中识别模式。就像学生时期,通过大量练习和反复纠错来掌握技能。
  • 推理阶段:使用训练好的模型对新数据进行预测。就像工作时期,运用已掌握的技能来解决实际问题。

这两个阶段在计算方式、资源需求和目标上都有本质的不同。让我们深入了解它们的工作原理。

Discover the Difference Between Deep Learning Training and Inference |  Exxact Blog

一、模型训练(学习阶段)

训练的本质是什么?从错误中学习

想象一下教小孩认识动物的过程。你给他看一张猫的照片,他说是"狗",你告诉他错了,这是"猫"。经过成千上万次这样的纠正,他最终学会了正确识别各种动物。神经网络的训练过程本质上就是这样一个不断试错、不断改进的过程。

在深度学习中,这个"纠错"过程是通过数学方法自动完成的。网络会根据每次预测的错误程度,自动调整内部的参数(权重和偏置),使下次预测更加准确。

GitHub - markhliu/ml_animated: Use animation to explain machine learning

训练过程的四个关键步骤是什么?
训练过程就像一个精密设计的学习循环,每一轮都包含"前向传播-损失计算-反向传播-权重更新"四个不可缺少的步骤。
步骤1:前向传播 - 做出预测
输入数据 → 第1层 → 第2层 → ... → 输出层 → 预测结果
这一步就像学生答题的过程。输入数据(比如一张图片)进入神经网络,就像题目交给学生一样。数据会依次经过网络的每一层,每一层都会对数据进行一定的处理和变换。
  • 第一层可能识别图片中的基本特征,如边缘和颜色
  • 中间层会识别更复杂的特征,如形状和纹理
  • 最后一层会综合所有信息,给出最终的预测结果
这个过程完全是自动的,就像水流从高处流向低处一样自然。每一层都使用当前的权重参数来处理接收到的信息,然后传递给下一层。
步骤2:损失计算 - 评估错误程度
预测结果 vs 真实标签 → 损失函数 → 损失值(错误程度)
当网络给出预测后,我们需要知道这个预测有多准确。这就像老师批改试卷一样,需要将学生的答案与标准答案进行对比。
损失函数就是这个"评分标准",它会计算出一个数值来表示预测的错误程度。
  • 损失值很大:说明预测很不准确,网络需要大幅调整
  • 损失值很小:说明预测比较准确,只需要微调
  • 损失值接近零:说明预测几乎完美
常用的损失函数包括:均方误差主要用于回归任务,计算预测值与真实值差值的平方;交叉熵损失主要用于分类任务,衡量预测概率分布与真实分布的差异。
彻底搞懂深度学习-激活函数和损失函数(动图讲解)
步骤3:反向传播 - 找出责任人
损失值 → 计算梯度 → 确定调整方向
这是训练过程中最核心也最神奇的一步。当我们知道预测有误差后,需要弄清楚网络中的哪些参数需要为这个错误负责,以及它们应该如何调整。
反向传播就像是一个"追责"的过程。
  • 从输出层开始,逐层向前追溯
  • 计算每个权重参数对最终错误的"贡献程度"
  • 确定每个参数应该向哪个方向调整,调整多少
这个过程被称为"反向",是因为信息流的方向与前向传播相反——从输出层流向输入层。通过链式法则这一数学工具,我们能够精确计算出每个参数的调整方向和幅度。
彻底搞懂深度学习-前向传播和反向传播(动图讲解)
步骤4:权重更新 - 付诸行动
旧权重 - (学习率 × 梯度) = 新权重
有了调整的方向和幅度,现在就要真正更新网络的参数了。这就像学生根据老师的指导来改正错误一样。
权重更新的公式看起来简单,但包含了深刻的学习智慧。
  • 梯度:告诉我们调整的方向(应该增大还是减小权重)
  • 学习率:控制调整的步长(一次改变多少)
  • 负号:确保我们朝着减少错误的方向前进
学习率的选择至关重要,太大可能会错过最优解,就像走路步子太大容易摔倒;太小学习导致过程会非常缓慢,就像蜗牛爬行;刚好才能够稳步而高效地找到最优解。

训练循环,重复是学习之母。单次的四步骤只能让网络稍微改进一点点。真正的学习需要成千上万次的重复。就像我们的深度学习,日拱一卒,让大脑不断构建深度学习和大模型的神经网络连接。

对于每个训练周期(epoch):  对于每批数据(batch):    1. 前向传播:让网络做预测    2. 损失计算:评估预测质量    3. 反向传播:计算改进方向    4. 权重更新:实际改进网络    重复处理下一批数据...  完成一个完整的数据遍历重复多个训练周期...

这个重复训练过程中有几个重要概念,给大家敲下黑板,划下重点。

  • 训练周期(Epoch):完整遍历整个训练数据集的次数。通常需要多个周期才能让网络充分学习。

  • 批次(Batch):为了提高效率,我们不是一次处理一个样本,而是一次处理一小批样本。这样既能保证学习的稳定性,又能充分利用计算资源。

  • 损失值(Loss):在训练过程中,我们会密切关注损失值的变化。理想情况下,损失应该随着训练的进行而逐渐降低,这表明网络正在不断进步。

二、模型推理(应用阶段)

模型推理的本质是什么?运用已学知识

如果说训练是"学习"的过程,那么推理就是"应用"的过程。就像一个经过多年训练的医生,面对新病人时能够快速做出诊断一样,训练好的神经网络能够对新的输入数据快速给出预测结果。

推理阶段最重要的特点是知识已经固化所有的权重参数都已经确定,不再发生变化。网络就像一个经验丰富的专家,运用已有的知识来解决新问题。

Introduction to Inference and Inference Servers · Praveen's Blog

推理过程的三个步骤是什么?
与复杂的训练过程相比,推理过程要简单得多,只需要三个步骤:
步骤1:加载训练好的模型
保存的模型文件 → 加载权重参数 → 构建网络结构 → 模型就绪
这一步就像从书架上取下一本已经写好的教科书。训练过程的所有成果——千辛万苦学到的权重参数,都被保存在模型文件中。加载模型时,我们要做如下工作。
  • 重建网络架构:按照训练时的结构搭建网络
  • 载入参数:将训练好的权重和偏置填入对应位置
  • 设置模式:将网络切换到"推理模式",关闭训练时的特殊功能
模型加载完成后,就像一台准备就绪的机器,随时可以接受新的输入并产生输出。
Using an ONNX model for inference in an image classification problem. | by  Hamed Javidpoor | Medium
步骤2:执行前向传播
新输入数据 → 第1层处理 → 第2层处理 → ... → 输出层 → 预测结果
这是推理的核心步骤,与训练时的前向传播几乎完全相同。数据依然是从输入层流向输出层,每一层依然使用相同的数学运算,唯一的区别如下。
  • 权重固定:所有参数都不会改变
  • 速度更快:不需要保存中间结果用于反向传播
  • 内存需求更低:不需要存储梯度信息
  • 批处理优化:可以同时处理多个输入以提高效率
整个过程就像清澈的溪流,数据平滑地从一端流向另一端,中途经过各种"过滤器"和"处理器",最终变成我们需要的预测结果。
步骤3:输出处理和解释
原始网络输出 → 格式化处理 → 后处理 → 最终可理解的结果
网络的原始输出通常需要进一步处理,才能变成人类可以理解和使用的结果。
彻底搞懂深度学习-正则化和归一化(动图讲解)

分类任务的处理如下。

  • 原始输出可能是一组数字,如 [2.1, -0.8, 1.5]
  • 通过softmax函数转换为概率,如 [0.7, 0.1, 0.2]
  • 解释为各类别的置信度:"70%可能是猫,10%可能是狗,20%可能是鸟"

回归任务的处理如下。

  • 原始输出可能需要反标准化
  • 转换回原始的数值范围
  • 添加单位和上下文信息

训练与推理是两种截然不同的工作模式,为了让大家更好地理解这两个阶段的区别,让AI整理了一个表格,将它们进行详细对比。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185848
 
40 次点击