逻辑回归(二):Loss易导

2023-11-19

回顾

书接上回,讲到了逻辑回归的Loss函数的一般形式,大体如下:
L ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] h θ ( x ) = g ( θ T X ) g ( z ) = 1 1 + e − z L(\theta) = \frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)}) \\=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))] \\h_{\theta}(x) = g(\theta^TX)\\ g(z) = \frac{1}{1+e^{-z}} L(θ)=m1i=1mCost(hθ(x(i)),y(i))=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]hθ(x)=g(θTX)g(z)=1+ez1

梯度下降

已经有了Loss函数,那么我们要做的事情就是通过梯度下降的方法来确定最佳参数 θ \theta θ,使得对于训练集的所有数据,Loss函数值最小。那么我们就来对这看似复杂的函数进行一下求导吧。

对Loss函数求偏导

我们知道函数有以下形式:
L ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] L(\theta) = \frac{1}{m}\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))] L(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]
1 m \frac{1}{m} m1是常数,我们可以先放至一边。括号里面的 y ( i ) y^{(i)} y(i) ( 1 − y ( i ) ) (1-y^{(i)}) (1y(i))都是常数,对导数的形式并无影响。Loss函数对 θ \theta θ求偏导有以下形式:
∂ L ( θ ) ∂ θ j = 1 m ∑ i = 1 m [ − y ( i ) ∂ l o g ( h θ ( x ( i ) ) ) ∂ θ j − ( 1 − y ( i ) ) ∂ l o g ( 1 − h θ ( x ( i ) ) ) ∂ θ j ] \frac{\partial L(\theta)}{\partial \theta_j}=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}-(1-y^{(i)})\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}] θjL(θ)=m1i=1m[y(i)θjlog(hθ(x(i)))(1y(i))θjlog(1hθ(x(i)))]
显然,要计算 ∂ L ( θ ) ∂ θ j \frac{\partial L(\theta)}{\partial \theta_j} θjL(θ),我们就只需要计算 ∂ l o g ( h θ ( x ( i ) ) ) ∂ θ j \frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j} θjlog(hθ(x(i)))以及 ∂ l o g ( 1 − h θ ( x ( i ) ) ) ∂ θ j \frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j} θjlog(1hθ(x(i)))

这看起来还是非常吓人呢,不过没关系,笔者高中数学老师曾告诉过我们,一切反动派都是纸老虎。先让我们回到 h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))的表达式,令 z = θ T X z=\theta^TX z=θTX
h θ ( x ) = g ( z ) = 1 1 + e − z h_{\theta}(x) = g(z) =\frac{1}{1+e^{-z}} hθ(x)=g(z)=1+ez1
根据复合函数的求导,我们可以知道:
∂ l o g ( h θ ( x ( i ) ) ) ∂ θ j = ∂ l o g ( g ( z ) ) ∂ θ j = 1 g ( z ) ∂ g ( z ) ∂ θ j = 1 g ( z ) ∂ g ( z ) ∂ z ∂ z ∂ θ j \begin{aligned} \frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}&= \frac{\partial log(g(z))}{\partial \theta_j}\\ &= \frac{1}{g(z)} \frac{\partial g(z)}{\partial \theta_j}\\ &= \frac{1}{g(z)} \frac{\partial g(z)}{\partial z} \frac{\partial z}{\partial \theta_j} \end{aligned} θjlog(hθ(x(i)))=θjlog(g(z))=g(z)1θjg(z)=g(z)1zg(z)θjz
一项一项拆解:
1 g ( z ) = 1 + e − z \frac{1}{g(z)} = 1+e^{-z} g(z)1=1+ez
∂ g ( z ) ∂ z = − − e − z ( 1 + e − z ) 2 = e − z ( 1 + e − z ) 2 \frac{\partial g(z)}{\partial z} = -\frac{-e^{-z}}{(1+e^{-z})^2}=\frac{e^{-z}}{(1+e^{-z})^2} zg(z)=(1+ez)2ez=(1+ez)2ez
∂ z ∂ θ j = x j \frac{\partial z}{\partial \theta_j}=x_j θjz=xj
那么我们就可以得到 l o g ( h θ ( x ( i ) ) ) log(h_\theta(x^{(i)})) log(hθ(x(i))) θ j \theta_j θj的偏导:
∂ l o g ( h θ ( x ( i ) ) ) ∂ θ j = e − z 1 + e − z ⋅ x j = ( 1 − g ( z ) ) x j \frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}=\frac{e^{-z}}{1+e^{-z}}\cdot x_j = (1-g(z))x_j θjlog(hθ(x(i)))=1+ezezxj=(1g(z))xj
接着我们继续看 l o g ( 1 − h θ ( x ( i ) ) ) log(1-h_\theta(x^{(i)})) log(1hθ(x(i))) θ j \theta_j θj的偏导,事实上,依旧是根据复合函数的求导:
∂ l o g ( 1 − h θ ( x ( i ) ) ) ∂ θ j = − 1 1 − h θ ( x ( i ) ) ∂ h θ ( x ( i ) ) ∂ θ j = − 1 1 − g ( z ) ∂ g ( z ) ∂ θ j = − 1 + e − z e − z ⋅ e − z ( 1 + e − z ) 2 ⋅ x j = − g ( z ) ⋅ x j \begin{aligned} \frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j} &= \frac{-1}{1-h_\theta(x^{(i)})} \frac{\partial h_\theta(x^{(i)})}{\partial \theta_j}\\ &= -\frac{1}{1-g(z)}\frac{\partial g(z)}{\partial \theta_j}\\ &= -\frac{1+e^{-z}}{e^{-z}}\cdot \frac{e^{-z}}{(1+e^{-z})^2} \cdot x_j\\ &= -g(z)\cdot x_j \end{aligned} θjlog(1hθ(x(i)))=1hθ(x(i))1θjhθ(x(i))=1g(z)1θjg(z)=ez1+ez(1+ez)2ezxj=g(z)xj
OK,那么我们把得到的这两个式子代回Loss函数的偏导形式中,得到:
∂ L ( θ ) ∂ θ j = 1 m ∑ i = 1 m [ − y ( i ) ∂ l o g ( h θ ( x ( i ) ) ) ∂ θ j − ( 1 − y ( i ) ) ∂ l o g ( 1 − h θ ( x ( i ) ) ) ∂ θ j ] = 1 m ∑ i = 1 m [ − y ( i ) ( 1 − g ( z ) ) x j + ( 1 − y ( i ) ) g ( z ) x j ] = 1 m ∑ i = 1 m [ g ( z ) − y ( i ) ] x j = 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) \begin{aligned} \frac{\partial L(\theta)}{\partial \theta_j}&=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}\frac{\partial log(h_\theta(x^{(i)}))}{\partial \theta_j}-(1-y^{(i)})\frac{\partial log(1-h_\theta(x^{(i)}))}{\partial \theta_j}]\\ &= \frac{1}{m}\sum_{i=1}^m[-y^{(i)}(1-g(z))x_j+(1-y^{(i)})g(z)x_j]\\ &= \frac{1}{m}\sum_{i=1}^m[g(z)-y^{(i)}]x_j\\ &= \frac{1}{m}\sum_{i=1}^m[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}_j \end{aligned} θjL(θ)=m1i=1m[y(i)θjlog(hθ(x(i)))(1y(i))θjlog(1hθ(x(i)))]=m1i=1m[y(i)(1g(z))xj+(1y(i))g(z)xj]=m1i=1m[g(z)y(i)]xj=m1i=1m[hθ(x(i))y(i)]xj(i)

还是那句话,常数只是起到一个缩放的作用,重要的是求和号后面的形式。那么看到这个式子,你有想到什么吗?事实上,逻辑回归和线性回归的的Loss函数的偏导形式是相同的,多么美丽的巧合!值得一提的是,这也仅仅是巧合而已,线性回归和逻辑回归是两个不同的算法,因为我们使用的model,也就是假设函数 h θ ( x ) h_\theta(x) hθ(x)是不同的。

更新公式

与线性回归同理,我们依旧是按照如下式子进行参数的更新:
θ j : = θ j − η ∂ ∂ θ j L ( θ ) \theta_j := \theta_j - \eta \frac{\partial}{\partial \theta_j}L(\theta) θj:=θjηθjL(θ)
将前面求得的表达式代入得:
θ j : = θ j − η 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) \theta_j := \theta_j - \eta \frac{1}{m}\sum_{i=1}^m[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}_j θj:=θjηm1i=1m[hθ(x(i))y(i)]xj(i)

多分类问题

目前为止我们也只是提出了一种解决二分类问题的方法,但是日常生活中,我们常常需要进行更多种的分类,比如除了猫和狗,我们还希望计算机能识别出老鼠等更多动物;除了分辨诈骗和非诈骗邮件,我们还希望计算机能自动分出哪些邮件是家人发的,哪些是朋友发的等等。那么,我们讨论过的逻辑回归算法,能不能应用在多分类上呢?答案是肯定的。以三分类为例子,我们用圆形、正方形和三角形来表示。如下图:
在这里插入图片描述
我们可以把这个问题转换成三个二分类问题。先把所有圆形的看作第一类,其余的都看作第二类,如下图:
在这里插入图片描述
利用这些数据,我们可以训练得到一个函数 h θ ( 1 ) ( x ) h_\theta^{(1)}(x) hθ(1)(x),这个函数的输出的意义是 x x x为圆形的概率。

然后把三角形看作一类,其他的看作另一类:
在这里插入图片描述

可以训练得到一个函数 h θ ( 2 ) ( x ) h_\theta^{(2)}(x) hθ(2)(x),这个函数的输出的意义是 x x x为三角形的概率。

同理,把正方形当作一类,其他当作另一类:
在这里插入图片描述
可以训练得到一个函数 h θ ( 3 ) ( x ) h_\theta^{(3)}(x) hθ(3)(x),这个函数的输出的意义是 x x x为三角形的概率。

那么,对于一个输入 X X X,我们可以把 X X X输入到三个函数中,则得到这个 X X X为三种类型的概率,概率最大的那个函数对应的类别即为结果。

总结

逻辑回归讲到这里就差不多了,当然还有正则项之类的知识,我自己也没太想好应该怎么理解,等到以后有机会再写。有意思的是,清楚了逻辑回归的基础知识,我们就快要揭开神经网络的神秘面纱了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑回归(二):Loss易导 的相关文章

  • springboot好在哪

    springboot好在哪 欢迎观看 第一篇 欢迎观看 你好 这是本人第一次使用 新手发文 多多包涵 第一篇 以往的ssm框架整合通常有两种形式 一种是xml形式 一种是注解形式 不管是xml还是注解 基本都会有一大堆xml标签配置 其中有
  • C++学习之list的实现

    在了解学习list实现之前我们首先了解一下关于迭代器的分类 按功能分类 正向迭代器 反向迭代器 const正向迭代器 const反向迭代器 按性质分类 单向迭代器 只能 例如单链表 双向迭代器 可 也可 例如双链表 map和set 随机迭代
  • Unity3D 监控面板显示数据(Inspector)

    using System Collections using System Collections Generic using UnityEngine using UnityEngine Serialization AddComponent
  • 机器学习十大算法之四:SVM(支持向量机)

    SVM 支持向量机 支持向量机 Support Vector Machine 是一种十分常见的分类器 曾经火爆十余年 分类能力强于NN 整体实力比肩LR与RF 核心思路是通过构造分割面将数据进行分离 寻找到一个超平面使样本分成两类 并且间隔
  • IC卡和ID卡

    定义 最常用的感应卡分为ID卡和IC卡两种 IC卡全称集成电路卡 Integrated Circuit Card 又称智能卡 Smart Card 可读写 容量大 有加密功能 数据记录可靠 使用更方便 如一卡通系统 消费系统等 ID卡全称身

随机推荐

  • java.sql.SQLException: Statement.executeQuery() cannot issue statements that do not produce result

    java sql SQLException Statement executeQuery cannot issue statements that do not produce result sets 解决 看看自己的java代码里的 sq
  • Linux内核内存检测工具KASAN

    KASAN k z n KASAN 是 Kernel Address Sanitizer 的缩写 它是一个动态检测内存错误的工具 主要功能是检查内存越界访问和使用已释放的内存等问题 KASAN 集成在 Linux 内核中 随 Linux 内
  • 项目管理 附下载地址

    本书对现代项目管理的基本管理过程 知识模块 工具和方法等进行了全面的介绍 全书共有十二章 每部分都力求深入浅出 站在项目经理的角度 考虑其责任大于权力的现实 并结合时代特征 学习项目管理的软技能和硬技能 通过实际案例 高效的工具和模板 使读
  • 作为字典数据获取枚举值

    RequestMapping value getAmmeterType method RequestMethod GET ResponseBody ApiOperation notes 获取电表类型 value 获取电表类型 public
  • Python程序异常处理

    一 什么是异常 异常就是程序运行时发生错误的信号 在程序由于某些原因出现错误的时候 若程序没有处理它 则会抛出异常 程序也的运行也会随之终止 程序异常带来的问题 1 程序终止 无法运行下去 2 如果程序是面向客户 那么会使客户的体验感很差
  • 【从小项目学图片处理】#1 答题卡识别

    说明 项目皆参考于网上 代码也有大部分参考原文 仅用于学习和练习图像处理操作 项目原文 Bubble sheet multiple choice scanner and test grader using OMR Python and Op
  • 微信小程序中text中如何换行_在手机中使用微信小程序

    微信小程序 简称小程序 英文名Mini Program 是一种不需要安装就可以使用的程序 内嵌在微信当中 小程序依赖于微信环境 但又不止于微信 微信提供一个入口 然后通过独立窗口 进程来运行小程序 工具 原料 微信 方法 步骤1 小程序入口
  • 再见 BeanUtils 欢迎 mapstruct

    前言 为了更好的进行开发和维护 我们都会对程序进行分层设计 例如常见的三层 四层 每层各司其职 相互配合 也随着分层 出现了VO BO PO DTO 每层都会处理自己的数据对象 然后向上传递 这就避免不了经常要将一个对象的属性拷贝给另一个对
  • 使用SQL进行递归查询

    使用SQL进行递归查询 在工作当中会经常用到递归 比如菜单的展示 一种方法就是从 数据库中取出所有的数据 然后在程序中循环获取符合条件的数据 另外一种方法就是使用SQL直接读取符合条件的数据 对于递归查询 T SQL和PL SQL进行了不同
  • Ubuntu 18.04 + DSO-slam配置、运行数据集、摄像头实时运行

    一 写在前面 前段时间老师布置了课程任务 让全班同学分组配置和运行slam 我们组选择的是DSO slam 由于选择的时候并没有对slam并没有什么了解 只有老师上课时一些科普性质的讲解 所以相当于是从0开始 这一周一直用空闲时间配置环境
  • 【GPLT】【2022天梯赛真题题解】

    L1 1 今天我要赢 5分 题目描述 2018 年我们曾经出过一题 是输出 2018 我们要赢 今年是 2022 年 你要输出的句子变成了 我要赢 就在今天 然后以比赛当天的日期落款 输入格式 本题没有输入 输出格式 输出分 2 行 在第一
  • RocketMQ消费者可以手动消费但无法主动消费问题,或生成者发送超时

    1 大多数是配置问题 修改rocketmq文件夹broker conf 2 配置与集群IP或本地IPV4一样 重启 在RocketMQ独享实例中支持IPv4和IPv6双栈 主要是通过在网络层面上同时支持IPv4和IPv6协议栈来实现的 Ro
  • java之二进制与数据类型(二)

    一 各数据类型的最大值和最小值 整数 以byte为例 我们知道 byte共有8个bit位 最大值是0111111 最小值是10000000 用十进制来表示就是 128 127 即 2 7 2 7 依照上面的推理方式可知 总结下表 数据类型
  • Redis学习总结

    Redis Redis 是完全开源免费的 遵守BSD协议 是一个高性能的key value数据库 Redis支持数据的持久化 可以将内存中的数据保存在磁盘中 重启的时候可以再次加载进行使用 Redis的优势 性能极高 Redis读的速度可达
  • 格雷码介绍与应用

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 学过晶体管知识的朋友们都知道 数据位跳变就相当于硬件电路中的晶体管翻转 许多位同时跳变就相当于多个晶体管同时翻转 会
  • SHELL 文件内容的行数打印、统计,空行处理,每行字段的逆序输出

    file txt 用来实验的文本文件 how they are implemented and applied in computer that is your bag is this your bag to the degree or e
  • 服务器系统怎么重新启动,服务器win7系统不能重新启动

    1 电脑关不机 有很多因素 有可能是中毒了 有可能是系统问题 有可能是硬件问题 也有可能是设置问题 所以我们要一个个的排除 2 第一 中毒可能性 如果电脑可能中毒导致关不了机 就需要下载杀毒软件 然后进行木马杳然 点击全盘杀毒 一个也不能放
  • iOS开发助手、ipa便捷上传工具!

    ipa上传助手Appuploader是一个iOS APP上架辅助助手 帮助开发者可以快速的申请iOS证书打包ipa文件上传到App Store审核 非常方便的iOS上架助手 提升上架效率 ipa上传助手Appuploader官网http w
  • 【C++】类:构造函数、默认构造函数模板

    目录 模板一 两个类名构造函数 一个传参 一个不传参 模板二 成员初始化列表 推荐 性能高 构造函数 默认构造函数的作用 构造函数 传一些参数进来 用于给类的成员变量赋值 默认构造函数 程序员给类的成员变量设定一个默认值 也是用于给类的成员
  • 逻辑回归(二):Loss易导

    目录 回顾 梯度下降 对Loss函数求偏导 更新公式 多分类问题 总结 回顾 书接上回 讲到了逻辑回归的Loss函数的一般形式 大体如下 L 1