当前位置: 首页 > news >正文

开始深度学习

一.深度学习流程

1. 定义一个函数(模型)

  • 假设现实世界x与y之间的函数关系我们可以估计一个函数(模型),这个就是我们常说的深度学习模型,它代表我们认为的从输入到输出的映射关系。
  • 可以把理解成一个“黑箱”通过堆叠神经网络层(如卷积层、全连接层)来构建这个函数的具体形式。
  • 常见的模型包括 CNN(用于图像)、RNN(用于序列)、Transformer(用于文本和多模态)等。

2. 定义一个合适的损失函数

  • 损失函数用来衡量模型预测值和真实标签之间的差距(或)
  • 它是模型优化的 “指南针”,目标是让损失值尽可能小
  • 不同任务对应不同的损失函数
    • 分类任务:交叉熵损失(Cross-Entropy Loss)
    • 回归任务:均方误差(MSE)
    • 生成任务:对抗损失(GAN Loss)

3. 根据损失,对模型进行优化

  • 这一步通过反向传播(Backpropagation)计算损失(Loss)对模型参数的梯度,再用优化器(如 SGD、Adam)更新参数,从而最小化损失。
  • 核心思想是让模型在训练数据上不断 “学习”,调整自身参数以提升预测准确性。
  • 优化过程中还会用到正则化(如 Dropout、L2 正则)和学习率调度等技巧,防止过拟合并加速收敛。

4. 实例(以线性模型为例)

1.定义模型

这里的真实生成规律是是随机噪声),所以理想模型是。表格里的特征(输入)是带噪声的标签(输出),我们要从这些数据里学习出最接近真实规律的模型。

我们假设模型形式为:;其中:

  • (weight):权重,代表特征对预测值的影响大小。
  • (bias):偏差,代表模型的基准输出。
  • :模型的预测值。
2.定义损失函数(Loss Function)
  • 损失函数用来衡量模型预测值和真实标签的差距,这里使用绝对值损失
  • (损失值要求平均值)
  • 它的作用:
    • 评价参数:损失值越小,说明当前我们假设的越接近真实值。
    • 优化目标:我们的任务就是找到能让损失值最小的(在这个例子里,理想值是)。
3.模型优化环节(用梯度下降法找到让损失函数最小的模型参数)
1.核心目标

找到最优参数,使得损失函数最小这里的损失函数是之前提到的绝对误差:

2. 梯度下降的基本思想

梯度下降是一种迭代优化算法,它通过不断沿着损失函数负梯度方向更新参数,来逐步逼近最小值点。

  • 梯度(​):表示损失函数在当前参数点的变化率和方向,对于图上例子来讲,即为=

  • 学习率(:控制每一步更新的幅度,是一个超参数。

3. 梯度下降的步骤(以参数为例)
  1. 随机初始化:随机选择一个初始参数(右上标表示迭代的版本号,表示第0代版本)

  2. 计算梯度:在=处计算损失函数的偏导数

  3. 更新参数:沿着负梯度方向更新的值:;重复步骤 2-3,直到梯度接近 0(损失值不再明显下降,即取到最接近最小值的情况)

图中的 V 形曲线是损失函数关于参数的图像:曲线的最低点就是损失值最小的位置,对应最优参数。当在处时,梯度为正,说明需要向左(负梯度方向)移动才能让损失变小。当在最低点左侧时,梯度为负,说明需要向右移动

梯度下降天然不会停在极大值,核心原因:梯度下降固定往负梯度走:

  • 如果当前处在极大值附近,梯度指向损失变大的方向;
  • 减去 梯度 × 学习率,参数会立刻往损失更小的区域逃离,不会收敛到极大值。

易错点:梯度计算参数更新是两个完全独立的阶段

梯度计算阶段:从输出层到输入层逐层顺序进行

参数更新阶段:逻辑上是所有参数同时更新的,不存在 “逐层依次更新”

为什么梯度更新要逐层进行?

反向传播的数学基础是链式法则,这个特性决定了梯度的计算顺序必须是自顶向下的。

以下图中例子为例:

http://www.cnnetsun.cn/news/3392616.html

相关文章:

  • MSP430FR247x引脚复用与低功耗设计实战解析
  • 工业级推荐系统实战:从召回到重排的全链路穿透
  • 从0到1开发个性化圆形菜单:FanMenu源代码深度剖析与二次开发指南
  • 如何为 wd 编写自动化测试:保证插件稳定性的最佳实践
  • DRA75P/DRA74P McASP虚拟IO模式配置与高速时序设计实战
  • HCCL_VM单元测试脚本
  • CANN/asc-devkit SIMD向量减法API文档
  • 计算机网络物理层核心概念与典型习题精讲(附详细解析)
  • ngx-ui主题与样式定制:快速创建品牌化UI界面的终极指南
  • 从理论到实践:基于LabVIEW与USRP的无线通信系统核心模块构建指南
  • Agent 每次调用工具都要问用户吗?Janus 揭示权限管理的三难困境
  • 提升用户体验:UITextField-Shake在表单验证中的最佳实践 [特殊字符]
  • Python ctypes调用C DLL实战:从基础到高级应用
  • OpenVINO版本升级指南:从旧版本迁移到2024.3.0在openEuler上的注意事项
  • 【限时解密】ChatGPT竞品技术底牌:MoE架构差异、上下文窗口压缩算法、推理加速芯片兼容性——一线厂商CTO亲授3个未公开参数
  • 终极Blender 3MF插件指南:如何完美解决3D打印格式兼容性问题
  • MMPlayerView:打造如YouTube般流畅的自定义AVPlayerLayer视频播放体验
  • DLPA100电源管理与电机驱动芯片在4K UHD显示系统中的应用与设计
  • PythonOcc进阶——基于零件形心的智能爆炸图生成与交互式UI设计
  • Unity游戏多语言实时翻译解决方案:XUnity.AutoTranslator深度解析
  • AI视频分析技术深度解析足球明星互动情感细节
  • 2026年Spine安装与配置全攻略:从下载到上手指南
  • S25FL256S Quad SPI Flash在FPGA中的高效驱动与实战优化
  • 从训练到部署:YOLOv5自定义模型在RK3588上的端到端实时摄像头应用
  • 如何扩展kaniko:自定义构建上下文和存储后端的实现方法
  • 基于MATLAB/Simulink的无刷直流电机双闭环调速系统建模与仿真实践
  • 从零构建Android远程控制工具:MediaProjection与WebSocket实战
  • 【环境管理实战】从零开始:用Miniconda搭建你的第一个Python隔离开发环境
  • 66AK2G12时钟与接口时序设计:从PLL配置到GPMC同步模式实战
  • Claude Code国产化适配指南:CC Switch+settings.json本地部署实战