(三)Logistic回归的梯度下降

news2025/8/14 18:55:24

一、单个样本的Logistic回归的梯度下降法

在本节中,我们学习如何计算偏导数来实现Logistic回归的梯度下降法。
我们将使用导数流程图来计算梯度。
首先回顾一下Logistic回归的公式

z = w T x + b z = w^Tx+b z=wTx+b

y ^ = a = σ ( z ) = 1 1 + e − z \widehat{y}=a = \sigma(z) = \frac 1 {1+e^{-z}} y =a=σ(z)=1+ez1

L ( a , y ) = − ( y l o g ( a ) + ( 1 − y ) l o g ( 1 − a ) ) L(a,y)=-(ylog(a) +(1-y)log(1-a)) L(a,y)=(ylog(a)+(1y)log(1a))

现在只考虑单个样本的情况
L ( a , y ) = − ( y l o g ( a ) + ( 1 − y ) l o g ( 1 − a ) ) L(a,y)=-(ylog(a) +(1-y)log(1-a)) L(a,y)=(ylog(a)+(1y)log(1a)),为Logistic的损失函数,a是Logistic回归的输出,y是样本的基本真值标签值。

现在写出该样本的偏导数流程图
假设样本只有两个,特征x1和x2,为了计算z,我们需要输出参数w1,w2和b,还有样本特征x1,x2,因此用来计算z的偏导数公式, z = w 1 ∗ x 1 + w 2 ∗ x 2 + b z=w1*x1+w2*x2+b z=w1x1+w2x2+b y ^ = a = σ ( z ) \hat y = a = \sigma(z) y^=a=σ(z)是偏导数流程图的下一步,最后计算L(a,y).
在这里插入图片描述

因此,在逻辑回归中,我们需要做的是变换参数w和b的值,来最小化损失函数。
在这里插入图片描述

接下来我们讨论怎样向后计算偏导数,想要计算损失函数 L ( a , y ) L(a,y) L(a,y)的导数,首先我们要向前一步,先计算损失函数的导数 d L ( a , y ) d a \frac {dL(a,y)} {d a} dadL(a,y),即L关于变量a的导数,在代码中,我们用da来表示这个变量。如果你熟悉微积分的话,这个da的结果为 d L ( a , y ) d a = d a = − y a + 1 − y 1 − a \frac { dL(a,y)} {da} = d a = \frac {-y} a+\frac {1-y} {1-a} dadL(a,y)=da=ay+1a1y,损失函数的导数计算公式就是这样,计算关于变量a的导数,就是这个式子。

现在计算出da,最终结果关于变量a的导数,现在可以在向后一步,计算dz,dz是代码中的变量名,dz是损失函数关于z的导数, d z = d L d z = d L ( a , y ) d z = a − y dz = \frac {dL} {dz} = \frac {dL(a,y)} {dz} = a-y dz=dzdL=dzdL(a,y)=ay;其中 d L d z = d L ( a , y ) d a ∗ d a d z \frac {dL} {dz} = \frac {dL(a,y)} {da}* \frac {da} {dz} dzdL=dadL(a,y)dzda,其中 d a d z = a ∗ ( 1 − a ) \frac {da} {dz} = a*(1-a) dzda=a(1a),这个推导的过程,即“链式法则”。
在这里插入图片描述

现在后向传播的最后一步,计算看看w和b需要如何变化,特别的关于w1的导数 d L d w 1 = d w 1 = x 1 ∗ d z \frac {dL} {dw1} = dw1 = x1 *dz dw1dL=dw1=x1dz,同样的 d L d w 2 = d w 2 = x 2 ∗ d z \frac {dL} {dw2} = dw2 = x2 *dz dw2dL=dw2=x2dz d L d b = d b = d z \frac {dL} {db} = db = dz dbdL=db=dz

因此关于单个样本的梯度下降法,你说需要做的就是这些事情。使用上面的公式计算dz、dw1、dw2、db。
更新 w 1 = w 1 − α ∗ d w 1 ; w 2 = w 1 − α ∗ d w 2 ; b = b − α ∗ d b w1= w1 - α*dw1;w2= w1 - α*dw2;b = b - α*db w1=w1αdw1;w2=w1αdw2;b=bαdb。这是单个样本实例的一次梯度更新的步骤。

详细的推导过程

z = w T x + b z = w^Tx+b z=wTx+b

y ^ = a = σ ( z ) = 1 1 + e − z \widehat{y}=a = \sigma(z) = \frac 1 {1+e^{-z}} y =a=σ(z)=1+ez1

L ( a , y ) = − ( y l o g ( a ) + ( 1 − y ) l o g ( 1 − a ) ) L(a,y)=-(ylog(a) +(1-y)log(1-a)) L(a,y)=(ylog(a)+(1y)log(1a))
在这里插入图片描述

∂ L ( a , y ) d a = − y a + ( 1 − y 1 − a ) \frac {\partial L(a,y)} {da} = -\frac y a + (\frac {1-y} {1-a}) daL(a,y)=ay+(1a1y)

= a − y a ( 1 − a ) =\frac {a-y} {a(1-a)} =a(1a)ay,其中 ∂ L ( a , y ) d a \frac {\partial L(a,y)} {da} daL(a,y)就是L(a,y)关于a的偏导数。

∂ L ( a , y ) d z = ∂ L ( a , y ) d a d a d z \frac {\partial L(a,y)} {dz} = \frac {\partial L(a,y)} {da} \frac {da} {dz} dzL(a,y)=daL(a,y)dzda,其中

d a d z = e − z ( 1 + e − z ) 2 \frac {da} {dz} =\frac {e^{-z}} {(1+e^{-z})^2} dzda=(1+ez)2ez

= 1 + e − z − 1 ( 1 + e − z ) 2 =\frac {1+e^{-z} - 1} {(1+e^{-z})^2} =(1+ez)21+ez1

= 1 1 + e − z − 1 ( 1 + e − z ) 2 =\frac 1 {1+e^{-z}} - \frac 1 {(1+e^{-z})^2} =1+ez1(1+ez)21

= a − a 2 = a ( 1 − a ) =a - a^2 = a(1-a) =aa2=a(1a)

因此,推导出, ∂ L ( a , y ) d z = a − y \frac {\partial L(a,y)} {dz} = a - y dzL(a,y)=ay,代码中用dz表示。

∂ L ( a , y ) d w 1 = ∂ L ( a , y ) d a ∗ d a d z ∗ d z d w 1 = d w 1 = x 1 ∗ d z \frac {\partial L(a,y)} {dw1} = \frac {\partial L(a,y)} {da} *\frac {da} {dz}* \frac {dz} {dw1} = dw1 = x1*dz dw1L(a,y)=daL(a,y)dzdadw1dz=dw1=x1dz,代码中,用dw1表示

∂ L ( a , y ) d w 2 = ∂ L ( a , y ) d a ∗ d a d z ∗ d z d w 2 = d w 2 = x 2 ∗ d z \frac {\partial L(a,y)} {dw2} = \frac {\partial L(a,y)} {da} *\frac {da} {dz}* \frac {dz} {dw2} = dw2 = x2*dz dw2L(a,y)=daL(a,y)dzdadw2dz=dw2=x2dz,代码中,用dw2表示

∂ L ( a , y ) d b = ∂ L ( a , y ) d a ∗ d a d z ∗ d z d b = d b = d z \frac {\partial L(a,y)} {db} = \frac {\partial L(a,y)} {da} *\frac {da} {dz}* \frac {dz} {db} = db = dz dbL(a,y)=daL(a,y)dzdadbdz=db=dz,代码中,用db表示

对参数w和b进行更新,其中α是学习率
w 1 = w 1 − α ∗ d w 1 w1= w1 - α*dw1 w1=w1αdw1
w 2 = w 1 − α ∗ d w 2 w2= w1 - α*dw2 w2=w1αdw2
b = b − α ∗ d b b = b - α*db b=bαdb

二、m个样本的Logistic回归的梯度下降法

首先,我们需要记住关于成本函数J(w,b)的定义
J ( w , b ) = 1 m ∑ i = 1 m L ( a ( i ) , y ( i ) ) J(w,b) = \frac 1 m \sum_{i=1}^m{L(a^{(i)},y^{(i)})} J(w,b)=m1i=1mL(a(i),y(i))
a ( i ) = y ^ ( i ) = σ ( z ( i ) ) = σ ( w T x ( i ) + b ) a^{(i)} = \hat{y}^{(i)} = \sigma(z^{(i)}) = \sigma{(w^Tx^{(i)}+b)} a(i)=y^(i)=σ(z(i))=σ(wTx(i)+b)
全局成本函数是一个求和,实际上是1到m项,损失函数和的平均。
它表明全局成本函数对w1的导数,也同样是各项损失函数对w1导数的平均。
∂ ∂ w 1 J ( w , b ) = 1 m ∑ i = 1 m ∂ ∂ w 1 L ( a ( i ) , y ( i ) ) \frac {\partial} {\partial w1} J(w,b) = \frac 1 m \sum_{i = 1}^m\frac {\partial} {\partial w1} L(a^{(i)},y^{(i)}) w1J(w,b)=m1i=1mw1L(a(i),y(i)),其中 ∂ ∂ w 1 L ( a ( i ) , y ( i ) ) = d w 1 ( i ) = ( x ( i ) , y ( i ) ) \frac {\partial} {\partial w1} L(a^{(i)},y^{(i)}) = dw1^{(i)} = (x^{(i)},y^{(i)}) w1L(a(i),y(i))=dw1(i)=(x(i),y(i)),即对单个训练样本进行计算,所以真正需要做的是计算这些导数,如我们之前的训练样本上做的,并且求平均,会得到全局梯度值,你可以将它直接应用到梯度下降算法中。
让我们将其使用到一个具体的算法中。
J = 0;dw1 = 0;dw2 = 0;db = 0
For i = 1 to m
         z ( i ) = w T x ( i ) + b z^{(i)} = w^Tx^{(i)} + b z(i)=wTx(i)+b
         a ( i ) = σ ( z ( i ) ) a^{(i)} = \sigma(z^{(i)}) a(i)=σ(z(i))
         J + = − [ y ( i ) l o g a ( i ) + ( 1 − y ( i ) ) l o g ( 1 − a ( i ) ) ] J+=-[y^{(i)}loga^{(i)}+(1-y^{(i)})log(1-a^{(i)})] J+=[y(i)loga(i)+(1y(i))log(1a(i))]
         d z ( i ) = a ( i ) − y ( i ) dz^{(i)} = a^{(i)} - y^{(i)} dz(i)=a(i)y(i)
         d w 1 + = x 1 ( i ) d z ( i ) dw1+=x1^{(i)}dz^{(i)} dw1+=x1(i)dz(i) 目前特征2个,n=2
         d w 2 + = x 2 ( i ) d z ( i ) dw2+=x2^{(i)}dz^{(i)} dw2+=x2(i)dz(i)
         d b + = d z ( i ) db +=dz^{(i)} db+=dz(i)
J/=m
dw1/=m
dw2/=m
db/=m
其中,
d w 1 = ∂ J ∂ w 1 dw1 = \frac {\partial J} {\partial w1} dw1=w1J
w 1 : = w 1 − α d w 1 w1:= w1 - \alpha dw1 w1:=w1αdw1
w 2 : = w 2 − α d w 2 w2:= w2 - \alpha dw2 w2:=w2αdw2
b : = b − α d b b:= b - \alpha db b:=bαdb
上述代码只应用了一次梯度下降法,因此,你需要重复上述内容很多次,以应用多次梯度下降。
上述计算中有两个缺点,即我们需要编写两个for循环,第一个for循环是遍历m个训练样本的小循环,第二个for循环是遍历所有特征的for循环,这个例子中,我们有两个特征,所以n等于2,n_x等于2,但是如果你有更多特征,你就需要一个for循环,来遍历所有的n个特征,当你应用深度学习算法,你会发现,在代码中显式的使用for循环,会使算法效率很低。同时在深度学习领域,会有越来越大的数据集,所以能够应用你的算法,完全不用显式for循环的话,会是重要的,会帮助你处理更大的数据集,有一门向量化技术,帮助你的代码,摆脱这些显式的for循环。在深度学习的早期,向量化技术有时候用来加速运算是非常棒的,在深度学习时代,用向量化来摆脱for循环已经变得相当重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会员中心通过AJAX、JSON、PHP、MySql等技术实现注册和登录功能(1+X Web前端开发中级 例题)——初稿

📄题目要求 阅读下列说明、效果图和代码,进行动态网页开发,补充代码(1)-(30)。会员中心,需要先注册后登录,先要求应用HTML、CSS、AJAX、JSON、PHP、MySql等技术实现注册…

反射机制(复习)

反射机制 反射机制定义反射机制的功能反射机制主要的API反射机制演示对 Class 的理解Class实例获取的四种方式Class 对应内存结构说明加载Properties文件的俩种方式调用运行时类的结构调用运行时类的指定属性调用运行时类指定的方法调用运行时类指定的构造器反射的应用&#xf…

技术公开课|深度剖析 Java 的依赖管理,快速生成项目 SBOM清单

背景 近年来软件供应链安全风险涌现,无论是 Fastjson、Log4j 等基础组件的 0day,来源于开源的风险事件不断上升,对于研发以及安全同学来说,都是在不断的摸索建立有效的预防及解决机制,公开课将以风险治理为最终目标、…

Java -- 每日一问:谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

典型回答 所谓隔离级别(Isolation Level),就是在数据库事务中,为保证并发数据读写的正确性而提出的定义,它并不是 MySQL 专有的概念,而是源于ANSI/ISO制定的SQL-92标准。 每种关系型数据库都提供了各自特…

(STM32)从零开始的RT-Thread之旅--PWM驱动ST7735调光

上一章: (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(1) 上一章我们先用SPI读取到了LCD的ID,这一章则是使用PWM调光点亮屏幕,因为测试这块屏幕时,发现直接设置背光引脚为高好像无法点亮,好像必须使用PWM调光&…

信而泰自动化OSPFv2测试小技巧

OSPFv2协议简介 OSPFv2(开放式最短路径优先版本2)是互联网协议(IP)网络的路由协议。它使用链路状态路由(LSR)算法,并且属于在单个自治系统(AS)内运行的内部网关协议&…

Inter RealSense深度相机ROS驱动

文章目录知识目标1. 深度相机的分类及工作原理2. Inter RealSense D415相机知识目标 学习深度相机的分类和工作原理; 学习Intel RealSense D415相机硬件构成和工作原理。 1. 深度相机的分类及工作原理 深度相机(可以测量物体到相机的距离)…

Java三大特性篇之——多态篇(千字详解)

JAVA面向对象编程有三大特性:封装、继承、多态,在我们学习了继承后,我们将继续学习多态。 文章目录前言:什么是多态?一、多态实现二、再谈重写三、向上转移四、多态优缺点五、多态案例最后前言:什么是多态?…

MR场景直播-帮助企业高效开展更有意思的员工培训

阿酷TONY / 2022-11-18 / 长沙 MR场景直播、MR培训场景和内容呈现以及直播互动功能,帮助企业高效开展员工培训,让整个培训过程更高效~~~ MR场景直播有哪些有意思的地方呢?先来一个图: ▲ 模拟真实光照还原现实景 丰富培训场景&a…

SQL实用功能手册

SQL实用功能手册 SQL基础复习 SQL结构化查询语言,是一种访问和处理数据库的计算机语言 对数据库操作对表操作对数据进行CRUD操作操作视图、存储过程、索引 环境基础操作 安装mysql、启动mysql、配置环境变量检查mysql版本:mysql --version链接mysql…

开源共建 | Dinky 扩展批流统一数据集成框架 ChunJun 的实践分享

一、前言 ChunJun(原FlinkX)是一个基于 Flink 提供易用、稳定、高效的批流统一的数据集成工具,既可以采集静态的数据,比如 MySQL,HDFS 等,也可以采集实时变化的数据,比如 binlog,Ka…

(九)DateTime——PHP

文章目录第九章 Date & Time1 time()获取时间戳2 getDate()转换时间戳3 date()转换时间戳第九章 Date & Time 1 time()获取时间戳 time()函数返回的整数表示自1970年1月1日格林尼治标准时间午夜起经过的秒数。这一时刻称为UNIX历元,自那时起经过的秒钟数称…

Metabase学习教程:提问-1

创建交互式图表 可以通过使用查询生成器、构建模型或添加自定义目标来创建图表。供用户在Metabase中钻取数据。类似: 图1。放大特定类别和时间范围,然后查看构成图表上某个条形图的订单。 如果您只使用SQL编写过问题,那么您可能会忽略这样一…

颠覆IoT行业的开发神器!涂鸦智能重磅推出TuyaOS操作系统【程序员必备】

1 前言 作为降低 IoT 技术门槛的开发神器,TuyaOS 操作系统重磅发布 3.6.0 新版本啦!针对设备安全、功耗、通信速率等关键功能,做了重大创新和优化升级。为了助力开发者更快速便捷地接入涂鸦IoT PaaS,并低门槛开发出有创意的智能单…

RabbitMQ初步到精通-第三章-RabbitMQ面板及环境搭建

第三章-RabbitMQ面板及环境搭建 1、RabbitMQ面板介绍 Rabbitmq安装完毕后,若是本地环境,打入:http://localhost:15672/#/ 进入到MQ的控制台页面中: 可以观察到此页面涉及的各个TAB,和我们前面介绍到的rabbitMQ架构中…

Docker入门学习笔记(狂神版)

下述笔记是自己花一天时间看B站狂神说Docker视频的笔记,下列的笔记是根据自己的实践的记录下来的,若想细学掌握Docker建议自行观看(《Docker入门到精通》),去观看狂胜的视频记得三连支持一下。他的Docker讲解个人觉得是…

每日一个设计模式之【代理模式】

文章目录每日一个设计模式之【代理模式】☁️前言🎉🎉🎉🌻模式概述🌱代理模式的实现🍀静态代理🍀动态代理🐳JDK代理🐳CGLib代理🍀拓展🐳虚拟代理&…

UE 5.1正式发布,有哪些值得一试的新功能?

UE 5.1正式发布,所以今天咱们就来看看最新版都具体更新和改进了哪些功能吧—— Nanite和Lumen Nanite和Lumen是UE 5.0版本更新的两个主要内容,UE 5.1则是对其进行进一步的改进。 Nanite添加了对双面材质和新的可编程光栅化程序的支持,可以通…

认识前端闭包

1、前言&#xff1a;&#xff08;先介绍一下函数的存储原理&#xff09; &#xff08;1&#xff09;基本函数存储原理&#xff1a; 首先我们定义一个函数&#xff0c;然后调用&#xff0c;如下&#xff1a; <script>function test(){let name yiyiconsole.log(name)}t…

未来的产品经理,需要什么样的原型设计工具?

我和原型工具的往事 作为一只工龄十年的产品汪&#xff0c;我一直在使用原型设计工具——摹客 &#xff0c;对于摹客可谓耳熟能详。 初次听说&#xff0c;是产品社群里的点赞安利&#xff1a;做移动端&#xff0c;用摹客。 当时正值2015年&#xff0c;移动端热到不行&#x…