当前位置: 首页 > 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.xdnf.cn/news/1353241.html

相关文章:

  • `strlen` 字符串长度函数
  • python 字典有序性的实现和OrderedDict
  • 计算机网络 各版本TLS握手的详细过程
  • 电脑零广告快响应提速(一)之卸载搜狗输入法使用RIME—东方仙盟
  • python re模块常用方法
  • MySQL详细介绍指南
  • 蓝牙aoa仓库管理系统功能介绍
  • [e3nn] 归一化 | BatchNorm normalize2mom
  • 【技术突破】动态目标误检率↓83.5%!陌讯多模态融合算法在智慧城管的实战优化
  • 基于电力电子变压器的高压脉冲电源方案复现
  • 使用 Certbot 申请 Apache 证书配置棘手问题
  • 【数据结构】计数排序:有时比快排还快的整数排序法
  • Ubuntu 操作系统深度解析:从入门到精通(2025 最新版)
  • Java JVM 超级详细指南
  • 在Linux环境中为Jupyter Lab安装Node.js环境
  • 云计算之云主机Linux是什么?有何配置?如何选?
  • JavaSpring+mybatis+Lombok,实现java架构[保姆教程]
  • Linux PCI 子系统:工作原理与实现机制深度分析
  • Bartender 5 Mac 多功能菜单栏管理
  • 【LeetCode】85. 最大矩形 (暴力枚举)
  • 嵌入式软件/硬件工程师面试题集
  • MySql知识梳理之DDL语句
  • 力扣hot100:搜索二维矩阵与在排序数组中查找元素的第一个和最后一个位置(74,34)
  • 知识蒸馏 Knowledge Distillation 概率链式法则(Probability Chain Rule)
  • Java接口响应速度优化
  • springboot项目结构
  • leetcode80:删除有序数组中的重复项 II(快慢指针法)
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(6):51-60语法
  • Day33 MLP神经网络的训练
  • 「ECG信号处理——(24)基于ECG和EEG信号的多模态融合疲劳分析」2025年8月23日