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

AI(1)-神经网络(正向传播与反向传播)

🍋🍋AI学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


在神经网络的训练过程中,正向传播反向传播是两个关键步骤。在这两个阶段中,激活函数和损失函数扮演着不同的角色,并以特定的方式参与其中。下面我将详细说明这两个阶段中激活函数和损失函数是如何工作的。

一、正向传播(Forward Propagation)

1. 输入层到隐藏层

  • 输入数据:首先,输入数据 X 被传递给网络的第一层。

  • 线性变换:对于每一层 ll,输入通过权重矩阵 W[l] 和偏置向量 b[l]进行线性变换。

  • 应用激活函数:然后对 Z[l] 应用激活函数 g[l],得到该层的激活输出。

注意:这里激活函数输出其实就是每个神经元传递给下一层的输入。

2. 隐藏层到输出层

  • 最后一层:在输出层,通常会使用一个特定的激活函数来适应任务的需求。例如:

    • 二分类问题:Sigmoid 激活函数,其输出范围为 (0, 1),适合表示概率。
    • 多分类问题:Softmax 激活函数,用于将多个输出值转换为概率分布。
    • 回归问题:可能不使用激活函数或使用线性激活函数。
  • 计算预测值:最后一层的输出 A[L] 就是我们模型的预测值 Y^。

3. 损失函数

  • 计算损失:根据预测值 Y^ 和真实标签 Y,使用选定的损失函数 L(Y,Y^)L(Y,Y^) 来衡量模型的表现。常见的损失函数包括:
    • 均方误差(MSE):适用于回归任务。
    • 交叉熵损失:适用于分类任务,特别是与 Sigmoid 或 Softmax 配合使用时。

二、反向传播(Backward Propagation)

1. 从输出层开始

  • 起点梯度:反向传播从计算输出层的梯度开始。具体来说,我们首先需要计算损失函数对输出层激活值的导数 ∂L∂A[L]∂A[L]∂L​。这个梯度被称为“起点梯度”,因为它标志着梯度回传过程的起始点。

    对于不同的损失函数,起点梯度的形式有所不同:

    • 均方误差(MSE)+ 线性输出
    • 交叉熵 + Sigmoid/Softmax

2. 计算激活函数的导数

  • 激活函数导数:接下来,我们需要计算激活函数的导数。这取决于使用的激活函数:

  • 结合起点梯度,我们可以计算出损失相对于线性组合 Z[L] 的梯度

3. 逐层向前传播梯度

  • 正向传播中的作用

    • 激活函数:用于引入非线性,使得网络能够学习复杂的模式。每层的输出都是前一层的激活输出经过线性变换再通过激活函数的结果。
    • 损失函数:用于评估模型预测值与真实值之间的差距,提供了一个衡量模型性能的标准。
  • 反向传播中的作用

    • 激活函数:其导数决定了梯度如何从当前层传递到前一层。不同激活函数的导数特性影响了梯度的传播效率和稳定性。
    • 损失函数:提供了起点梯度,即损失相对于最后一层激活值的导数。这个初始梯度随后通过链式法则逐层向前传播,用于更新各层的参数。

三、总结:

在正向传播过程中:

1.首先从输入层到隐藏层经过线性变换得到输出值Z,再将输出值经过应用激活函数得到该层的的激活输出A。

2.隐藏层到输出层,在这里通常会使用一个他特定的激活函数来适应任务需求:

  • 二分类问题:Sigmoid 激活函数,其输出范围为 (0, 1),适合表示概率。

  • 多分类问题:Softmax 激活函数,用于将多个输出值转换为概率分布。

  • 回归问题:可能不使用激活函数或使用线性激活函数。

最终计算得到最后一层的输出,也就是我们的预测值。

3.损失函数L:我们开始计算损失根据模型的差异使用不一样的损失函数(最后一层的输出A就是预测值Y)

在反向传播过程中:

1.首先计算损失函数对输出层激活值的导数,这个梯度也就是起点梯度,标志着梯度回传的起始点。

2.计算激活函数的导数A对Z求导,这里取决于使用的激活函数:Sigmoid、ReLU、Tanh等。

结合上起始点的梯度,我们可以计算出损失相对于线性组合 Z[L] 的梯度:

3.逐层向前传播梯度

http://www.xdnf.cn/news/1274185.html

相关文章:

  • String AOP、事务、缓存
  • Java数据结构——LinkedList
  • Python与MySQL数据库交互实践:自动化数据插入系统
  • Radiology:经颅交流电刺激调节轻度阿尔茨海默病皮层与海马功能连接
  • 【Docker实战】将Django应用容器化的完整指南
  • YOLOv8算法改进--通过yaml文件添加注意力机制【附代码】
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • JavaScript垃圾回收机制
  • 106-基于Flask的重庆充电桩投建数据可视化分析系统
  • Redis 监控与优化方案(C++项目)
  • ShadowKV 机制深度解析:高吞吐长上下文 LLM 推理的 KV 缓存“影子”方案
  • WSL创建虚拟机配置VNC
  • ADK【4】内置前端调用流程
  • Python数据分析常规步骤整理
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型对决传统方法:多语言漏洞修复能力大比拼
  • C# 中常用集合以及使用场景
  • 服务器硬件电路设计之 I2C 问答(三):I2C 总线上可以接多少个设备?如何保证数据的准确性?
  • Redis如何实现一个分布式锁?
  • ubuntu22.04安装autoware.universe
  • 进度、质量、安全的关系随笔
  • scala 样例类
  • 计算机视觉(CV)——图像相关基本概念
  • #C语言——刷题攻略:牛客编程入门训练(八):分支控制(二)
  • 7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序
  • scanpy单细胞转录组python教程(二):单样本数据分析之数据质控
  • Spring Boot 开发三板斧:POM 依赖、注解与配置管理
  • 第三章 向量
  • 锂电池SOH预测 | 第35讲 Matlab基于BiLSTM的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • Python高阶
  • spring-boot-starter-data-redis 与 org.redisson 区别 联系