对于softmax的理解请参考Ufldl教程,本文仅对代价函数求导部分进行推导


softmax regression 代价函数:

J(θ)=−1m⎡⎣∑i=1m∑j=1k1{y(i)=j}logeθTjx(i)∑kl=1eθTjx(i)⎤⎦

J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^m\sum_{j=1}^k1\{y^\mathit{(i)}=j\}log\frac{e^\mathit{\theta_j^Tx^\mathit{(i)}}}{\sum_{l=1}^ke^\mathit{\theta_j^Tx^\mathit{(i)}}}\right]
导数计算:
首先利用 logab=log(a)−log(b)log \frac{a}{b} = log(a) - log(b)将log函数内部展开:

1{yi=j}logeθTjxi∑kl=1eθTlxi=1{yi=j}[log(eθTjxi)−log(∑l=1keθTlxi)]

1\{y_i=j\} log\frac{e^{\theta^T_j x_i}}{\sum_{l=1}^{k} e^{\theta^T_l x_i}} = 1\{y_i=j\} \left[ log(e^{\theta^T_j x_i}) - log(\sum_{l=1}^{k} e^{\theta^T_l x_i}) \right]
接着对 θj\theta_j求导得:

1{yi=j}[xi−eθTjxi∑kl=1eθTlxixi]=xi(1{yi=j}−eθTjxi∑kl=1eθTlxi)=xi(1{yi=j}−p(yi=j|xi,θ)

\begin{aligned} & 1\{y_i=j\} \left[x_i - \frac{e^{\theta^T_j x_i}}{\sum_{l=1}^{k} e^{\theta^T_l x_i}} x_i\right] \\ & = x_i \left(1\{y_i=j\} - \frac{e^{\theta^T_j x_i}}{\sum_{l=1}^{k} e^{\theta^T_l x_i}}\right) \\ & = x_i (1\{y_i=j\} - p(y_i=j | x_i, \theta) \end{aligned}
上式中,将 loglog看成 lnln,另外,每一次的求导其实只是针对 θ\theta中的某一项 jj,所以其他的θ\theta的非 jj项都为常数,所以求导以后都为00。
这样就得到了梯度函数:

∂J∂θj=−1n∑i=1n[xi(1{yi=j}−p(yi=j|xi,θ)]

\frac{\partial J}{\partial \theta_j} = -\frac{1}{n} \sum_{i=1}^{n} [x_i (1\{y_i=j\} - p(y_i=j | x_i, \theta)]

原文出处:http://zjjconan.github.io/articles/2015/04/Softmax-Regression-Matlab/

softmax代价函数的导数计算相关推荐

  1. 矩阵迹的性质_矩阵(含逆)的迹、行列式关于矩阵自身的导数计算与Maple验证...

    常见神经网络在计算相邻层权重关系式时,矩阵对矩阵求导所涉及的维度拼接操作对理论萌新往往不太友好:对于数据型为矩阵的最小二乘问题,尽管迹对矩阵求导操作十分实用但很多人仍习惯于逐项计算偏导.本文避开&qu ...

  2. R开发(part5)--导数计算

    学习笔记,仅供参考,有错必纠 参考自:<R的极客理想>-- 张丹 文章目录 R开发 导数计算 一阶导 二阶导 偏导数 R开发 导数计算 一阶导 通过R语言可以使用deriv函数直接进行导数 ...

  3. R语言的导数计算(转)

    转自:http://blog.fens.me/r-math-derivative/ 前言 高等数学是每个大学生都要学习的一门数学基础课,同时也可能是考完试后最容易忘记的一门知识. 我在学习高数的时候绞 ...

  4. python计算ex函数_python – numpy:计算softmax函数的导数

    我试图用MNIST理解一个简单的3层神经网络中的反向传播. 输入层有权重和偏差.标签是MNIST,因此它是10类向量. 第二层是线性转变.第三层是softmax激活,以获得输出作为概率. 反向传播计算 ...

  5. 吴恩达深度学习 —— 2.8 计算图的导数计算

    上一节中,看了一个例子,使用流程图来计算函数J,现在我们清理一下流程图的描述,看看如何利用它计算出函数J的导数. 下图是一个流程图,假设要计算J对v的导数,怎么计算呢?把v值拿过来,改变一下,那么J的 ...

  6. MATLAB与高等数学--导数计算与极值的求解

    diff命令 通过调用diff命令来计算符号导数: octave:2> syms x t; Symbolic pkg v2.8.0: Python communication link acti ...

  7. KLD Loss( tf.nn.softmax, torch.nn.functional.softmax, log_softmax, kl_div) 计算技巧(一)

    最近在比较不同模型的性能,发现虽然文献中使用的相同的指标,比如KLD.但是数据的处理方式却存在着差异,这会导致最后的数据并不具有直接可比性. 这里记录下,其中的一些值得记住的细节.主要涉及的API包括 ...

  8. (原创)matlab符号微分含有未知函数时的导数计算

    我们先来看一个例子: \(y=sin(x)\),\(y\)是x的函数,同时\(x\)是关于t的函数,即为\(x(t)\),很多时候\(x(t)\)的具体表达式是未知的,这时该如何用matlab符号求\ ...

  9. 2.8 计算图的导数计算

    这里需要注意的是在写代码的时候我们会用dv代表dJdv\frac{dJ}{dv}dvdJ​,默认的我们都不写输出函数dJdJdJ.

最新文章

  1. 元组、列表、字典及集合练习
  2. NetFlow是一种数据交换方式,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息...
  3. 2 0 2 0 年 第 十 一 届 蓝 桥 杯 - 国赛 - CC++大学B组 - B.扩散
  4. 利用Excel VBA实现批量数据分组转置
  5. MySQL优化(四):count()
  6. 伪装Apache版本防止入侵Web服务器
  7. 开发错误记录5-Failed to sync Gradle project ‘HideTitleDemo’
  8. 多按键多界面二维数组表驱动设计
  9. 四气调神大论篇 :四季养生法
  10. 圆周率一千万亿位_圆周率一千位
  11. win10卸载vivado
  12. Android 科大讯飞 语音听写
  13. 导航网站合集|高效工作学习
  14. 网页和网站,网页建设流程
  15. UE4:打包项目前设置
  16. js出生日期转化年龄
  17. 七年级信息技术计算机的启动,七年级信息技术复习资料
  18. PS基础 —— 界面介绍
  19. 点亮LED灯--制作流水灯
  20. Python-就业方向

热门文章

  1. 万向节死锁 gimbal lock
  2. Selenium-三种等待方式
  3. 2017年上半年最受关注度的几大免费OA品牌
  4. angularjs与server交互
  5. ASP.NET Core中显示自定义错误页面-增强版
  6. shell脚本应用(二)
  7. 解决mysql 1040错误Too many connections的方法
  8. 项目案例分享二:密码策略与上次交互式登录
  9. (诊断)处理错误fatal error: Python.h: No such file or directory
  10. ffmpeg avi 1080P解析 编译选项