首页 > 其他分享 >逻辑回归中交叉熵损失函数的梯度

逻辑回归中交叉熵损失函数的梯度

时间:2024-03-29 14:24:04浏览次数:19  
标签:right frac 函数 交叉 梯度 theta hat partial

要给出逻辑回归中交叉熵损失函数最小化的梯度推导过程,我们首先定义损失函数和模型预测的形式。对于二分类逻辑回归,模型预测使用sigmoid函数,即:

\[\hat{y}_i = \sigma(z_i) = \frac{1}{1 + e^{-z_i}} \]

其中,\(z_i = X_i \cdot \theta\)是模型对第\(i\)个样本的线性预测,\(X_i\)是样本的特征向量,\(\theta\)是模型参数。

对于单个样本的交叉熵损失,我们有:

\[L(y_i, \hat{y}_i) = -\left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] \]

整个数据集上的平均损失为:

\[J(\theta) = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] \]

为了找到最小化损失函数\(J(\theta)\)的参数\(\theta\),我们需要计算\(J(\theta)\)关于\(\theta\)的梯度。首先计算\(\hat{y}_i\)关于\(z_i\)的导数:

\[\frac{d\hat{y}_i}{dz_i} = \frac{d}{dz_i} \left( \frac{1}{1 + e^{-z_i}} \right) = \hat{y}_i (1 - \hat{y}_i) \]

然后,我们将损失函数对\(z_i\)求导:

\[\frac{\partial L(y_i, \hat{y}_i)}{\partial z_i} = \frac{\partial L(y_i, \hat{y}_i)}{\partial \hat{y}_i} \cdot \frac{d\hat{y}_i}{dz_i} = -\left( \frac{y_i}{\hat{y}_i} - \frac{1 - y_i}{1 - \hat{y}_i} \right) \cdot \hat{y}_i(1 - \hat{y}_i) = -y_i (1 - \hat{y}_i) + (1 - y_i) \hat{y}_i = \hat{y}_i - y_i \]

接下来,我们利用链式法则计算\(J(\theta)\)关于\(\theta_j\)的导数:

\[\frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{N} \sum_{i=1}^{N} \left( \hat{y}_i - y_i \right) x_{ij} \]

因此,整个参数\(\theta\)的梯度向量为:

\[\nabla_{\theta} J(\theta) = \frac{1}{N} X^T \cdot (\hat{y} - y) \]

其中,\(X\)是包含所有样本特征的矩阵,\(\hat{y}\)是模型预测值的向量,\(y\)是真实标签的向量。

这就是梯度下降更新参数\(\theta\)时使用的梯度表达式,用于指导如何调整\(\theta\)以减少损失函数\(J(\theta)\)的值。

标签:right,frac,函数,交叉,梯度,theta,hat,partial
From: https://www.cnblogs.com/chenmoshaoalen/p/18103756

相关文章

  • QMIX:用于深度多智能体强化学习的单调值函数分解
    目录QMIX:MonotonicValueFunctionFactorisationfor DeepMulti-AgentReinforcementLearningQMIX:用于深度多智能体强化学习的单调值函数分解Abstract 摘要1Introduction引言2RelatedWork 2相关工作3Background 3背景 3.1Deep Q-Learning 3.1深......
  • MYSQL聚合函数的使用方法
    前言数据库名称可以为【schoolDB】,字符集【utf8】,排序规则【utf8_general_ci】。1.建表语句——DDL​CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULLCOMMENT'创建时间',`userName`varchar(......
  • 如何将几个长度相同的列表并列组合在一起(附:zip函数使用出错原因:巨坑~)
        Python中列表对象使用很方便,用Python编程时,经常会遇到将多个长度相同的列表是针对某一组特定对象的,如何能方便的把这些列表组合起来一起使用呢?ZIP()函数可以方便的解决这个问题。一、将几个长度相同的列表并列组合例如,设置四个列表ID=[1,2,3,4]Name=['小......
  • 函数调用约定中寄存器的保存问题
    函数调用约定中寄存器的保存问题callingconventionCreated:2024-03-25T17:03+08:00Published:2024-03-29T09:50+08:00Categories:Compiler目录例子caller-save和callee-save一个方便的在线查看汇编网站:CompilerExplorer函数调用时,caller和callee的寄存器保存问题......
  • 【SQL】1661. 每台机器的进程平均运行时间 (四种写法;自连接;case when;窗口函数lead();)
    前述Sql窗口分析函数【lead、lag详解】Hive分析函数lead、lag实例应用lag:用于统计窗口内往上第n行值lead:用于统计窗口内往下第n行值lead(列名,1,0)over(partitionby分组列orderby排序列rowsbetween开始位置precedingand结束位置following)lag和lead......
  • ⽂件操作函数
    1.流和标准流1.2流我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对⽂件、画⾯、键盘等的数据输⼊输出操......
  • PHP debug_backtrace() 函数
    定义和用法debug_backtrace()函数生成backtrace。该函数显示由debug_backtrace()函数代码生成的数据。返回一个关联数组。下面是可能返回的元素:名称类型描述functionstring当前的函数名。lineinteger当前的行号。filestring当前的文件名。classstring当......
  • Scala第十三章节(作为值的函数及匿名函数、柯里化、闭包及控制抽象以及计算器案例)
    章节目标掌握作为值的函数及匿名函数的用法了解柯里化的用法掌握闭包及控制抽象的用法掌握计算器案例1.高阶函数介绍Scala混合了面向对象和函数式的特性,在函数式编程语言中,函数是“头等公民”,它和Int、String、Class等其他类型处于同等的地位,可以像其他类型的变量一样......
  • Tensorflow 中conv2d_transpose函数output_shape参数的由来和范围
    目录1.卷积和转置卷积(1)卷积(2)转置卷积2.tf.nn.conv2d函数和tf.nn.conv2d_transpose函数(1)tf.nn.conv2d函数(2)tf.nn.conv2d_transpose函数3.转置卷积output_shape参数的探讨(1)卷积过程中,存在尺度丢失现象。(2)转置卷积是恢复卷积之前原始信息的过程1.卷积和转置卷积(1)卷积......
  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询
    在PostgreSQL中,我们可以使用SELECTDISTINCT和SUBSTRING函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对resource_version字段的去重查询。1.SELECTDISTINCT语句SELECTDISTINCT语句用于从表中选择不重复的记录。如果没有指定列名,则会选择所有列。在......