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

【CV】神经网络中哪些参数需要被学习?

在这里插入图片描述
在这张图示的卷积神经网络中,通过反向传播需要学习的参数是以下四组:

  1. 第一层卷积核g(1)g^{(1)}g(1)

    • 这是网络的第一层,用于从输入图像(企鹅)中提取初级特征。
  2. 第二层卷积核g(2)g^{(2)}g(2)

    • 这是网络的第二层,用于从第一层的输出 a(1)a^{(1)}a(1) 中提取更高级的特征。
  3. 第一个全连接层权重W(1)W^{(1)}W(1)

    • 在特征图经过展开后,第一个全连接层的权重矩阵。
  4. 第二个全连接层权重W(2)W^{(2)}W(2)

    • 最后一个全连接层的权重矩阵,其输出 z(4)z^{(4)}z(4) 会传递给 softmax 函数以产生最终的预测 y^\hat{y}y^

总结一下:需要学习的参数是 g(1)g^{(1)}g(1), g(2)g^{(2)}g(2), W(1)W^{(1)}W(1), W(2)W^{(2)}W(2)

这些参数的值在训练开始时是随机初始化的,然后通过反向传播算法,根据网络输出 y^\hat{y}y^ 与真实标签之间的误差,逐步进行调整和优化,以使网络的预测变得越来越准确。图中所示的 Max Pooling 层和 Sigmoid/Softmax 激活函数本身没有需要学习的参数,它们执行的是固定的运算。


那z和a需要改变吗?

简短的回答是: 是的,z 和 a 的值在训练期间肯定会改变,但它们本身不是通过梯度下降直接“学习”的参数,而是作为计算梯度所必需的中间变量。

下面我们来详细解释这其中的区别:

1. 需要“学习”的参数 vs. 前向传播的“结果”

  • 参数:指的是 g(1)g^{(1)}g(1), g(2)g^{(2)}g(2), W(1)W^{(1)}W(1), W(2)W^{(2)}W(2)

    • 这些是模型的本质。它们定义了网络如何从输入映射到输出。
    • 它们在训练开始时被初始化,并在整个训练过程中被持续更新和保存。训练完成后,我们就是用这些学到的参数来对新数据进行预测。
    • 它们是我们要通过梯度下降直接优化的目标
  • z 和 a:指的是 z(1),a(1),z(2),a(2),z(3),a(3),z(4)z^{(1)}, a^{(1)}, z^{(2)}, a^{(2)}, z^{(3)}, a^{(3)}, z^{(4)}z(1),a(1),z(2),a(2),z(3),a(3),z(4)

    • 它们是特定输入(比如这张企鹅图片)在当前参数下,通过网络前向传播时产生的中间结果
    • 它们是动态的
      • 对于不同的输入图片,它们的值不同。
      • 随着参数 g,Wg, Wg,W 在训练中被更新,即使是同一张图片,再次前向传播时,产生的 z 和 a 也会不同。
    • 训练完成后,我们不保存某张特定图片的 z 和 a。我们只保存学到的参数 g,Wg, Wg,W。当有新图片需要预测时,我们将其输入网络,用学到的参数重新计算 z 和 a。

一个很好的类比:
想象一个函数 y=wx+by = wx + by=wx+b

  • 参数wwwbbb。这是我们通过数据要学习的。
  • 中间变量:对于某个特定的输入 xxx,计算出的 yyy 就是结果。这个 yyy 依赖于 x,w,bx, w, bx,w,b。我们不会去“学习”这个 yyy,它只是计算过程中的一个值。

2. z 和 a 在反向传播中扮演的关键角色

虽然我们不直接“学习” z 和 a,但它们在反向传播中至关重要。它们的值被用来计算参数的梯度。

回顾链式法则,为了计算损失 LLL 对参数 W(2)W^{(2)}W(2) 的梯度,我们需要:
∂L∂W(2)=∂L∂z(4)⋅∂z(4)∂W(2)\frac{\partial L}{\partial W^{(2)}} = \frac{\partial L}{\partial z^{(4)}} \cdot \frac{\partial z^{(4)}}{\partial W^{(2)}} W(2)L=z(4)LW(2)z(4)
z(4)=W(2)a(3)z^{(4)} = W^{(2)} a^{(3)}z(4)=W(2)a(3)(假设没有偏置项),所以 ∂z(4)∂W(2)=a(3)\frac{\partial z^{(4)}}{\partial W^{(2)}} = a^{(3)}W(2)z(4)=a(3)

这意味着,为了知道 W(2)W^{(2)}W(2) 应该怎么更新,我们必须知道前一层的激活值 a(3)a^{(3)}a(3)

同样地,在卷积层,计算 ∂L∂g(1)\frac{\partial L}{\partial g^{(1)}}g(1)L 时,公式中会用到输入 xxx 和上一层的误差信号。

所以,在反向传播过程中:

  1. 前向传播:我们计算并保存所有层的 zzzaaa。这是因为在反向计算梯度时,我们需要用到它们在前向传播时的具体数值。
  2. 反向传播:我们利用损失函数和保存的 z,az, az,a 值,从后往前依次计算每一层的梯度 ∂L∂z\frac{\partial L}{\partial z}zL∂L∂a\frac{\partial L}{\partial a}aL(误差信号),并最终计算出对参数 g,Wg, Wg,W 的梯度。
  3. 参数更新:我们使用计算出的梯度来更新参数 g,Wg, Wg,W

总结

  • 学习/更新:指的是通过梯度下降直接调整 g(1)g^{(1)}g(1), g(2)g^{(2)}g(2), W(1)W^{(1)}W(1), W(2)W^{(2)}W(2) 这些参数的值。
  • 改变zzzaaa 的值会间接改变,因为它们是参数和输入数据的函数。当参数被更新后,同样的输入再次通过网络时,会产生新的 zzzaaa。它们是计算梯度所必需的中间变量,而不是学习的最终目标。

因此,在训练过程中,我们主动更新的是参数(Weights),而中间变量(z和a)的值是随之被动变化的,它们记录了数据在前向传播时的状态,是反向传播的“路标”。

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

相关文章:

  • Spring两大漏洞可导致泄露敏感信息及安全防护绕过(CVE-2025-41253/41254)
  • 了解一个文件签名验证工具——sigverif
  • 河北建筑网站江小白网络营销案例
  • 张家口网站建设开发网站开发案例教程
  • 【NestJS】class-transformer什么用
  • 【word多文档docx合并】
  • Endnote | word中加载项消失不见,如何处理?
  • 聊聊 Unity(小白专享、C# 小程序 之 图片播放器)
  • 查询个人房产信息网站查看wordpress密码破解
  • 做网站用什么框架dede淘宝客网站
  • 高级篇:Python脚本(101-150)
  • pdf解析工具---Miner-u 本地部署记录
  • 怎么快速做网站文章新乡个人网站建设价格
  • 关于.net网站开发外文书籍wordpress子标题
  • 基于OpenIddict6.4.0搭建授权认证服务
  • 中国建设银行网站企业北京网站维护一般价格多少
  • shell编程语言---正则表达式,grep
  • JoyAgent问数多表关联Bug修复
  • 网站建设投标书报价表高端网站设计思路
  • 【玩泰山派】8、泰山派安装armbian,玩armbian
  • 雄安建设集团 网站推荐个在广州做网站的
  • vue3加载shp文件 并地图上展示
  • 实战:用PyTorch构建你的第一个图像分类CNN模型
  • 淄博网站建设优化公司wordpress后台登录网址
  • 每日一个网络知识点:网络层NAT
  • 不花钱网站怎么做推广小程序同步wordpress
  • 哈尔滨站建好了吗做网站机构图用什么工具
  • 基于ArcGIS的生态敏感性分析案例 | 绿水青山就是金山银山
  • adb root啥意思?adb remount啥意思?
  • PySide6 自定义文本查找对话框(QFindTextDialog)以及调用示例——重构版