python从零开始学习深度学习01——神经网络反向传播的链式求导

server/2024/10/18 12:29:32/

自我介绍

最懂保险的算法工程师,致力于保险理念的推广,让每个程序员在35岁时都能够免除后顾之忧。通过构建保险组合,避免中年因病致穷,苦攒多年积蓄全部花费在医疗上,因此返贫。有兴趣的朋友后台私信加V:Archangle3_14,加不上可私信,常驻深圳,可约面谈。

交叉熵损失函数+sigmoid激活函数的链式求导

如果损失函数是交叉熵损失(entropy loss),通常用于分类任务中评估模型的输出与实际标签之间的差异。假设我们处理的是一个二分类问题,使用的输出层激活函数是sigmoid函数,那么交叉熵损失函数可以表达为:

交叉熵损失函数

对于一个给定的样本,交叉熵损失定义为:
L = − ( y log ⁡ ( y ^ ) + ( 1 − y ) log ⁡ ( 1 − y ^ ) ) L = -\left(y \log(\hat{y}) + (1 - y) \log(1 - \hat{y})\right) L=(ylog(y^)+(1y)log(1y^))
其中 y y y 是实际的标签, y ^ \hat{y} y^ 是模型的预测概率,这里 y ^ = σ ( z ) \hat{y} = \sigma(\mathbf{z}) y^=σ(z),且 z \mathbf{z} z 是隐藏层通过激活函数之前的线性输出。

链式求导

为了应用链式求导,我们首先计算 ∂ L ∂ y ^ \frac{\partial L}{\partial \hat{y}} y^L
∂ L ∂ y ^ = − ( y y ^ − 1 − y 1 − y ^ ) \frac{\partial L}{\partial \hat{y}} = -\left(\frac{y}{\hat{y}} - \frac{1 - y}{1 - \hat{y}}\right) y^L=(y^y1y^1y)

然后,考虑 y ^ = σ ( z ) \hat{y} = \sigma(\mathbf{z}) y^=σ(z),其导数 σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma'(z) = \sigma(z)(1 - \sigma(z)) σ(z)=σ(z)(1σ(z)),所以我们有:
∂ y ^ ∂ z = σ ( z ) ( 1 − σ ( z ) ) = y ^ ( 1 − y ^ ) \frac{\partial \hat{y}}{\partial \mathbf{z}} = \sigma(\mathbf{z})(1 - \sigma(\mathbf{z})) = \hat{y}(1 - \hat{y}) zy^=σ(z)(1σ(z))=y^(1y^)

现在,利用链式法则计算 ∂ L ∂ z \frac{\partial L}{\partial \mathbf{z}} zL
∂ L ∂ z = ∂ L ∂ y ^ ⋅ ∂ y ^ ∂ z = ( − y y ^ + 1 − y 1 − y ^ ) ⋅ y ^ ( 1 − y ^ ) \frac{\partial L}{\partial \mathbf{z}} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial \mathbf{z}} = \left(-\frac{y}{\hat{y}} + \frac{1 - y}{1 - \hat{y}}\right) \cdot \hat{y}(1 - \hat{y}) zL=y^Lzy^=(y^y+1y^1y)y^(1y^)
简化上式,我们得到:
∂ L ∂ z = − y ( 1 − y ^ ) + ( 1 − y ) y ^ = y ^ − y \frac{\partial L}{\partial \mathbf{z}} = -y(1 - \hat{y}) + (1 - y)\hat{y} = \hat{y} - y zL=y(1y^)+(1y)y^=y^y

最终,根据 z = W x + b \mathbf{z} = \mathbf{Wx} + \mathbf{b} z=Wx+b,我们得到权重 W \mathbf{W} W 和偏置 b \mathbf{b} b 的梯度:
∂ L ∂ W = ( y ^ − y ) x T \frac{\partial L}{\partial \mathbf{W}} = (\hat{y} - y) \mathbf{x}^T WL=(y^y)xT
∂ L ∂ b = y ^ − y \frac{\partial L}{\partial \mathbf{b}} = \hat{y} - y bL=y^y

总结

这种方式提供了更新权重 W \mathbf{W} W 和偏置 b \mathbf{b} b 的直接方法,适用于通过梯度下降方法优化二分类问题的神经网络模型。这种推导清楚地显示了从损失函数到模型权重的依赖关系,也是反向传播算法中的关键步骤。


http://www.ppmy.cn/server/41185.html

相关文章

springboot+excel导入导出相关

在我们日常研发工作中很多的地方需要用到导入导出excel的功能&#xff0c;在这里我将需要的代码进行总结方便自己也方便别人。 一、导出篇&#xff1a; 1.首先我们需要pom文件中配置上需要的maven包 <dependency><groupId>cn.afterturn</groupId><artifac…

如何解决NodeJS内存不足引起的程序崩溃问题?

当你的内存量不足&#xff08;比如云服务器上&#xff09;&#xff0c;可以给系统设置虚拟内存&#xff0c;然后用这个方法增加NodeJS可用内存量&#xff0c;以此解决内存不足而导致的程序崩溃问题。 具体的&#xff0c;就是使用--max-old-space-size参数来增加V8引擎的最大内…

【java-数据结构-栈和队列】

上篇文章&#xff0c;我们已经完成链表的收尾工作&#xff0c;从本篇文章开始&#xff0c;将进入栈和队列的学习&#xff0c;j觉得小编写的还可以的可以留个关注支持一下~话不多说&#xff0c;上正文~ 1.栈 概念&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端…

(接上一篇linux rocky 搭建DNS高阶版)实现不同网段访问解析不同的服务器并加域

上一篇链接&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域-CSDN博客文章浏览阅读417次&#xff0c;点赞13次&#xff0c;收藏7次。使用linux rocky 搭建DNS服务&#xff0c;用于独立AD域控DNS存在&#xff0c;并且实现加域。https://blog.c…

虹科Pico汽车示波器 | 免拆诊断案例 | 2010款凯迪拉克SRX车发动机无法起动

故障现象 一辆2010款凯迪拉克SRX车&#xff0c;搭载LF1发动机&#xff0c;累计行驶里程约为14.3万km。该车因正时链条断裂导致气门顶弯&#xff0c;大修发动机后试车&#xff0c;起动机运转有力&#xff0c;但发动机没有着机迹象&#xff1b;多起动几次&#xff0c;火花塞会变…

Redis详解(二)

事务 什么是事务&#xff1f; 事务是一个单独的隔离操作&#xff1a;事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作&#xff1a;事务中的命令要么全部被执行&#xff0c;要么全部都…

ruoyi-nbcio 基于flowable规则的多重并发网关的任意跳转

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

组合商标申请如何风控提高通过率!

最近一个老客户找到普推知产老杨&#xff0c;说要申请注册一个新的商标&#xff0c;是一个组合商标&#xff0c;有图形&#xff0c;两行文字&#xff0c;一行文字的拼音&#xff0c;还有三个字母的简称&#xff0c;组合商标在申请时会进行拆分审查&#xff0c;图形、文字、拼音…