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

深度学习开篇

首先我们要知道深度学习和机器学习的关系——深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。

深度学习简介

        我理解的深度学习就通过多层感知器,对数据进行训练,可以达到非线性变换,如何可以提取非线性的特征,深度学习里面这个多层结构叫做神经网络,我们先了解下人的神经网络。

就是有神经元,如何有突触进行连接,如何就可以传递信息了,那么我们取这个名字肯定和这个原理差不多的。

        

原理介绍

首先我们先以一层的来进行分析,就是把所有特征加上权重然后相加,最后进行非线性变换,然后再传给下一个神经元,这样我们就完成了第一次非线性变换了。

这里我们引入多个神经元,如下

这样我们就对一个数据进行了多次非线性的变换了,所以我们得到我们想要的图像了。

数学计算

像上面这样的两层神经网络,叫做感知器,因为只对数据做了一次非线性变换,所以只能进行线性的划分。

神经网络的本质

通过参数与激活函数来拟合特征与目标之间的真实函数关系。但在一个神经网络的程序中,不需要神经元和线,本质上是矩阵的运算,实现一个神经网络最需要的是线性代数库。

偏置项

其实神经网络中,输入节点都是有一个偏置项的,只是我们不会画出来,但我们要知道

中间层的确定

输入层的节点数:与特征的维度匹配
输出层的节点数:与目标的维度匹配。
中间层的节点数:目前业界没有完善的理论来指导这个决策。一般是根据经验来设置。较好的方法就是预先设定几个可选值,通过这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。

损失函数

常用的损失函数:


        0-1损失函数、均方差损失、平均绝对差损失、交叉熵损失、合页损失

神经网络既可以进行分类又可以进行回归预测,那么我们在进行分类和回归该怎么选这损失函数呢?

回归预测

回归问题是用均方差损失函数来进行衡量的,因为这个可以更好的衡量预测值和真实值之间的损失值

分类预测

分类预测是要用交叉熵损失函数

如上,我们经过多层感知器得到三个值,如果这个图片是0号图片,我们就关注第一个值,可以忽略其他值,对于这个值,我们想的肯定是越大越好,然后其他值肯定是越小越好,所以我们就先指数扩大这样就可以扩大差距了那么就更明显了,归一化,进行-log运算,至于为什么要进行-log运算,具体可以看-log的图像,就是对于值越大的映射出的就越小,如果为1那么映射的就是0,这也就符合我们的预期了,我们可以把这个看成损失值。

深度学习框架介绍

我先简述一下大致框架

输入层导入数据,先随机给一组w权值和b偏置,然后一层一层进行计算计算到最后一层输出层,前面这段叫做前向传播,对输出层进行均方差损失(回归)或者交叉熵损失(分类)计算,然后进行梯度下降,然后从后向前进行w权重的调整,这些叫做反向传播。

详细版

1. 前向传播(Forward Propagation)​

1.1 数据输入与初始化

神经网络的计算从输入层(Input Layer)​开始,输入数据(如图像像素、文本特征等)被传入网络。在训练之前,我们需要为每一层的权重(w)​偏置(b)​随机初始化一组值。这些初始值通常是较小的随机数​(如高斯分布或均匀分布),目的是打破对称性,避免所有神经元学习相同的特征。

1.2 逐层计算(线性变换 + 激活函数)​

数据从输入层开始,​逐层向前计算,直到输出层(Output Layer)。每一层的计算分为两个步骤:

​(1) 线性变换(Linear Transformation)​

对于第 l 层的某个神经元,其输入是上一层的输出 a^{[l-1]},计算方式如下:

                ​​​​​​​        

  • w^{[l]}:当前层的权重矩阵(形状取决于输入和神经元的数量)。
  • b^{[l]}:当前层的偏置向量(通常每个神经元一个偏置)。
  • z^{[l]}:线性变换后的结果(未激活的原始输出)。
​(2) 激活函数(Activation Function)​

线性变换后的 z^{[l]} 通常不能直接用于计算(因为线性组合无法学习复杂模式),因此需要通过非线性激活函数进行转换:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

  • 常见的激活函数:
    • ReLU(Rectified Linear Unit)​​:a = max(0, z)(适用于隐藏层,计算高效)。
    • Sigmoid​:a = 1 / (1 + e^{-z})(适用于二分类输出层)。
    • Softmax​:a_i = e^{z_i} / \sum_j e^{z_j}(适用于多分类输出层)。

这样,数据经过线性变换 + 激活函数后,逐层传递,最终到达输出层,得到模型的预测结果 y_pred


2. 损失计算(Loss Calculation)​

2.1 回归任务:均方差损失(MSE)​

如果任务是回归(预测连续值,如房价、温度)​,我们使用均方误差(Mean Squared Error, MSE)​计算预测值 y_pred 和真实值 y_true 的差异:

        ​​​​​​​        ​​​​​​​        

  • 特点​:对异常值敏感(因为平方放大了大误差的影响)。

2.2 分类任务:交叉熵损失(Cross-Entropy)​

如果任务是分类(如图像识别、文本分类)​,我们使用交叉熵损失(Cross-Entropy Loss)​衡量预测概率分布与真实分布的差异:

  • 二分类(Sigmoid 输出)​​:
  • 多分类(Softmax 输出)​​:

       (C 是类别数,y_{true}^{(i,c)} 是真实标签的 one-hot 编码)

为什么分类用交叉熵?​

  • 交叉熵对错误预测惩罚更大,能更快引导模型调整参数。
  • 如果用 MSE 训练分类任务,梯度会变得很小(接近 0),导致训练变慢(称为 ​​"梯度消失"​)。

3. 反向传播(Backward Propagation)​

前向传播计算了预测值,损失函数衡量了预测与真实值的差距,接下来就是调整参数(w 和 b)​,使得损失最小化。这个过程就是反向传播,其核心是 ​梯度下降(Gradient Descent)​

3.1 梯度下降(Gradient Descent)​

梯度下降是一种优化算法,其目标是找到损失函数的最小值。基本思想是:

沿着损失函数的负梯度方向,逐步调整参数,使损失减小。​

数学表达式:

  • α(学习率,Learning Rate):控制每次更新的步长(太大可能震荡,太小收敛慢)。
  • ∂L/∂w 和 ∂L/∂b:损失函数对权重和偏置的梯度​(表示参数变化对损失的影响)。

3.2 反向传播计算梯度

梯度下降需要计算 ​损失对每个参数的偏导数,但直接计算很困难。反向传播利用链式法则(Chain Rule)​,​从输出层向输入层逐层计算梯度​:

  1. 计算输出层的梯度​(如交叉熵 + Softmax 的梯度计算较简单)。
  2. 逐层回传梯度​(利用链式法则计算 ∂L/∂w 和 ∂L/∂b)。
  3. 更新参数​(w := w - α * ∂L/∂wb := b - α * ∂L/∂b)。

关键点​:

  • 反向传播的核心是 ​链式法则,确保梯度能正确回传。
  • 梯度下降的 ​学习率(α)​​ 非常重要,影响训练速度和稳定性。

4. 完整流程总结(流程图)​

开始│↓
【1. 初始化】随机初始化权重 w 和偏置 b│↓
【2. 前向传播】│   ├── 输入数据 → 输入层│   ├── 逐层计算(线性变换 z = w·a + b + 激活函数 a = σ(z))│   └── 输出层 → 得到预测值 y_pred│↓
【3. 损失计算】│   ├── 回归任务 → 均方误差(MSE)│   └── 分类任务 → 交叉熵损失(Cross-Entropy)│↓
【4. 反向传播】│   ├── 计算损失对 w 和 b 的梯度(链式法则)│   ├── 使用梯度下降更新参数(w := w - α * ∂L/∂w)│   └── 逐层回传梯度(从输出层 → 输入层)│↓
【5. 迭代训练】重复前向传播 → 损失计算 → 反向传播,直到损失足够小│↓
结束(模型训练完成)

5. 总结

  1. 前向传播​:数据从输入层逐层计算,经过线性变换和激活函数,最终得到预测值。
  2. 损失计算​:用 MSE(回归)或交叉熵(分类)衡量预测与真实值的差距。
  3. 反向传播​:利用链式法则计算梯度,并通过梯度下降调整 w 和 b,使损失最小化。
  4. 迭代优化​:重复上述过程,直到模型收敛(损失足够小)。

神经网络的核心就是 ​​"前向计算预测 → 计算误差 → 反向调整参数"​​ 的循环过程,而梯度下降则是优化参数的关键工具。理解这一框架,是掌握深度学习的基础! 🚀

http://www.dtcms.com/a/347170.html

相关文章:

  • 【通俗易懂】TypeScript 的类型守卫 (Type Guards)作用理解
  • iperf2 vs iperf3:UDP 发包逻辑差异与常见问题
  • [新启航]白光干涉仪与激光干涉仪的区别及应用解析
  • ubuntu 新登录修改root密码
  • 【攻防世界】Web_php_include
  • 力扣热题之动态规划
  • CryptSIPVerifyIndirectData函数分析
  • 鸿蒙开发进阶(HarmonyOS)
  • STM32 外设驱动模块八:红外反射式光电模块
  • 【大语言模型 15】因果掩码与注意力掩码实现:深度学习中的信息流控制艺术
  • 2-5.Python 编码基础 - 键盘输入
  • 2025钉钉十周年新品发布会,新品 “蕨”命名,到底是什么?
  • vue3 - 组件间的传值
  • nodejs和vue安装步骤记录
  • 【Golang】有关任务窃取调度器和抢占式调度器的笔记
  • 机器人 - 无人机基础(5) - 飞控中的传感器(ing)
  • 【大语言模型 16】Transformer三种架构深度对比:选择最适合你的模型架构
  • 云原生俱乐部-k8s知识点归纳(8)
  • 资深产品经理个人能力提升方向:如何系统化进阶并考取高价值证书?
  • 资深产品经理个人能力提升方向:如何系统化进阶与考证规划
  • 可视化-模块1-HTML-02
  • Node.js特训专栏-实战进阶:23. CI/CD流程搭建
  • 国产轻量级桌面GIS软件Snaplayers从入门到精通(21)
  • 复杂街景误检率↓79%!陌讯动态融合算法在街道垃圾识别的边缘计算优化​​
  • Text2SQL、ChatBI简介
  • AI agent开发与大模型工程师面试复习纲要与高频面试题答案(4)-- AI agent系统设计与项目实践
  • Rust系统编程实战:驾驭内存安全、无畏并发与WASM跨平台开发
  • Go语言实战案例-Redis连接与字符串操作
  • python 字典有序性的实现和OrderedDict
  • 字节跳动开源Seed-OSS:36B参数模型以512K上下文与可控思考预算重新定义AI实用主义