Softmax及其损失函数求导推导过程
Softmax激活函数的损失函数求导过程推导
- Softmax函数介绍
- Softmax的损失函数:交叉熵
- Softmax求导过程
- 损失函数求导
Softmax函数介绍
在深度学习领域,多分类问题的激活函数常常使用softmax函数,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!
以前学机器学习时了解过softmax,但没仔细推导过,这段时间在学CS224n课程,要自己推导,看了一些网上的推导,始终有些地方不明白的,后来终于把softmax求梯度过程弄明白了,下面把自己的心得和推导过程记录一下
先看一下Softmax函数:
S o f t m a x ( θ i ) = e θ i ∑ k e θ Softmax(\theta i) = \frac{e^{\theta i}}{\sum_k e^{\theta}} Softmax(θi)=∑keθeθi
Softmax的损失函数:交叉熵
L o s s = ∑ k y i l n a i Loss=\sum_k y_i {\ }{\rm ln } {\ }a_i Loss=k∑yi ln ai
Softmax求导过程
Softmax函数输入 θ \theta θ是有k个元素的向量,每个 θ \theta θ都会对应着一个softmax,因此,每个softmax都要分别对每个 θ \theta θ求导,对 θ \theta θ求导结果就是一个k*k的雅可比矩阵
[ ∂ S 0 ∂ θ 0 ∂ S 1 ∂ θ 0 . . . ∂ S k ∂ θ 0 ∂ S 0 ∂ θ 1 ∂ S 1 ∂ θ 1 . . . ∂ S k ∂ θ 0 . . . . . . . . . . . . ∂ S 0 ∂ θ k ∂ S 1 ∂ θ k . . . ∂ S k ∂ θ k ] \begin{bmatrix} \frac {\partial S_0 }{\partial \theta_0} & \frac {\partial S_1 }{\partial \theta_0} & {...} & \frac {\partial S_k }{\partial \theta_0} \\ \frac {\partial S_0 }{\partial \theta_1} & \frac {\partial S_1 }{\partial \theta_1} & {...} & \frac {\partial S_k }{\partial \theta_0} \\ {...} &{...}&{...}&{...} \\ \frac {\partial S_0 }{\partial \theta_k} & \frac {\partial S_1 }{\partial \theta_k} & {...} & \frac {\partial S_k }{\partial \theta_k} \end{bmatrix} ⎣⎢⎢⎡∂θ0∂S0∂θ1∂S0...∂θk∂S0∂θ0∂S1∂θ1∂S1...∂θk∂S1............∂θ0∂Sk∂θ0∂Sk...∂θk∂Sk⎦⎥⎥⎤
代入softmax公式,求偏导公式为:
∂ S i ∂ θ j = ∂ e θ i ∑ e θ ∂ θ j \frac{\partial S_i}{\partial \theta_j}=\frac{\partial \frac{e^{\theta_i}}{\sum e^\theta}}{\partial \theta_j} ∂θj∂Si=∂θj∂∑eθeθi
令 u = e θ i u=e^{\theta_i} u=eθi, v = ∑ e θ v=\sum e^\theta v=∑eθ,则根据复合函数求导法则, u v \frac{u}{v} vu导数为 u ′ v − u v ′ v 2 \frac{u'v-uv'}{v^2} v2u′v−uv′:
∂ S i ∂ θ j = ∂ e θ i ∑ e θ ∂ θ j = ∂ e θ i ∂ θ j ∑ e θ − e θ i ∂ ∑ e θ ∂ θ j ( ∑ e θ ) 2 \begin{aligned} \frac{\partial S_i}{\partial \theta_j}&=\frac{\partial \frac{e^{\theta_i}}{\sum e^\theta}}{\partial \theta_j}\\ &=\frac{\frac{{\partial e^{\theta_i}}}{\partial \theta_j}{\sum e^\theta}- e^{\theta_i}{\frac{\partial \sum e^\theta}{\partial \theta_j}}} {(\sum e^\theta)^2} \end{aligned} ∂θj∂Si=∂θj∂∑eθeθi=(∑eθ)2∂θj∂eθi∑eθ−eθi∂θj∂∑eθ
此时,需要考虑 i = j 和 i ≠ j i=j和i\ne j i=j和i̸=j的情况
当 i = j i=j i=j时:
∂ e θ i ∂ θ j = e θ i ∂ ∑ e θ ∂ θ j = e θ i 则 ∂ S i ∂ θ j = e θ i ∑ e θ − e θ i e θ i ( ∑ e θ ) 2 = e θ i ∑ e θ ⋅ ∑ e θ − e θ i ∑ e θ = S i ⋅ ( 1 − S i ) \begin{aligned} \frac{\partial e^{\theta_i}}{\partial \theta_j}&=e^{\theta_i}\\ \frac{\partial \sum e^\theta}{\partial \theta_j} &= e^{\theta_i}\\ 则\frac{\partial S_i}{\partial \theta_j} &=\frac{e^{\theta_i}{\sum e^\theta}- e^{\theta_i}e^{\theta_i}}{(\sum e^\theta)^2}\\ &=\frac{e^{\theta_i}}{\sum e^\theta}\cdot \frac{\sum e^\theta-e^{\theta_i}}{\sum e^\theta}\\ &=S_i\cdot(1-S_i) \end{aligned} ∂θj∂eθi∂θj∂∑eθ则∂θj∂Si=eθi=eθi=(∑eθ)2eθi∑eθ−eθieθi=∑eθeθi⋅∑eθ∑eθ−eθi=Si⋅(1−Si)
当 i ≠ j i\ne j i̸=j时:
∂ e θ i ∂ θ j = 0 ∂ ∑ e θ ∂ θ j = e θ j 则 ∂ S i ∂ θ j = 0 ⋅ ∑ e θ − e θ i e θ j ( ∑ e θ ) 2 = − e θ i ∑ e θ ⋅ e θ j ∑ e θ = − S i ⋅ S j \begin{aligned} \frac{\partial e^{\theta_i}}{\partial \theta_j}&=0\\ \frac{\partial \sum e^\theta}{\partial \theta_j} &= e^{\theta_j}\\ 则\frac{\partial S_i}{\partial \theta_j} &=\frac{0\cdot{\sum e^\theta}- e^{\theta_i}e^{\theta_j}}{(\sum e^\theta)^2}\\ &=-\frac{e^{\theta_i}}{\sum e^\theta}\cdot \frac{e^{\theta_j}}{\sum e^\theta}\\ &=-S_i\cdot S_j \end{aligned} ∂θj∂eθi∂θj∂∑eθ则∂θj∂Si=0=eθj=(∑eθ)20⋅∑eθ−eθieθj=−∑eθeθi⋅∑eθeθj=−Si⋅Sj
损失函数求导
根据链式求导法则,损失函数对 θ \theta θ求导可进行分解:
d L d θ = d L d S ⋅ d S d θ = − d ∑ y i l n S i d S i ⋅ d S i d θ i = − ∑ y i S i ⋅ d S i d θ j \begin{aligned} \frac{dL}{d\theta}&=\frac{dL}{d S}\cdot \frac{dS}{d\theta}\\ &=-\frac{d\sum y_i {\rm ln}S_i}{dS_i} \cdot \frac{dS_i}{d\theta_i}\\ &=-\sum \frac{y_i}{S_i} \cdot \frac{dS_i}{d\theta_j} \end{aligned} dθdL=dSdL⋅dθdS=−dSid∑yilnSi⋅dθidSi=−∑Siyi⋅dθjdSi
代入上面的softmax求导结果,将 i = j i=j i=j和 i ≠ j i\ne j i̸=j结果相加:
d L d θ = − y i S i ⋅ S i ( 1 − S i ) − ∑ i ≠ j y i S j ⋅ ( − S i ⋅ S j ) = − y i ⋅ ( 1 − S i ) + ∑ i ≠ j y i ⋅ S i = S i ∑ y i − y i \begin{aligned} \frac{dL}{d\theta}&=-\frac{y_i}{S_i} \cdot S_i(1-S_i) - \sum_{i\ne j} \frac{y_i}{S_j} \cdot (-S_i\cdot S_j)\\ &=-y_i\cdot(1-S_i) +\sum_{i\ne j}y_i\cdot S_i\\ &=S_i\sum y_i - y_i \end{aligned} dθdL=−Siyi⋅Si(1−Si)−i̸=j∑Sjyi⋅(−Si⋅Sj)=−yi⋅(1−Si)+i̸=j∑yi⋅Si=Si∑yi−yi
因为yi相加的结果等于1,因此最后的结果就是
d L d θ = S i − y i \frac{dL}{d\theta}=S_i-y_i dθdL=Si−yi
Softmax及其损失函数求导推导过程相关推荐
- 逻辑回归损失函数求导推导过程
逻辑回归--分类算法 代价函数的寻找 sigmoid函数的非线性会导致损失函数变得非线性,无法找到全局最优值,所以需要进行损失函数替换. 代价函数的合理性分析 预测正确,损失较小:预测错误,损失较大 ...
- 最详细的Sigmoid函数的求导推导过程
Sigmoid函数为logistic回归.神经网络等模型的激活函数. 函数图像如下: 定义域是从 (−∞,+∞),值域是(0,1). 函数: 导数: 推导过程为: ...
- 二次型x^TAx梯度(求导)推导过程
y=xTAxy=x^TAxy=xTAx,其中x是n维向量,A是n阶方阵,求dy/dxdy/dxdy/dx 记A=[aij]A=\left[a_{i j}\right]A=[aij].x∈Rn,x=( ...
- 卷积神经网络系列之softmax loss对输入的求导推导
我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...
- softmax loss对输入的求导推导
转载自: https://blog.csdn.net/u014380165/article/details/79632950 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CN ...
- 简单易懂的softmax交叉熵损失函数求导
简单易懂的softmax交叉熵损失函数求导 本博客转自:http://m.blog.csdn.net/qian99/article/details/78046329 来写一个softmax求导的推导过 ...
- 【数据挖掘】神经网络 后向传播算法 ( 梯度下降过程 | 梯度方向说明 | 梯度下降原理 | 损失函数 | 损失函数求导 | 批量梯度下降法 | 随机梯度下降法 | 小批量梯度下降法 )
文章目录 I . 梯度下降 Gradient Descent 简介 ( 梯度下降过程 | 梯度下降方向 ) II . 梯度下降 示例说明 ( 单个参数 ) III . 梯度下降 示例说明 ( 多个参数 ...
- sigmoid函数、tanh函数、softmax函数及求导
sigmoid函数和tanh函数都是激活函数,接收一个输入,产生一个输出.这里的求导是对激活函数求导.而softmax函数是一个多输入多输出的激活函数,这里提到的求导是对经过softmax函数后进行交 ...
- Sigmoid函数与损失函数求导
文章目录 1. sigmoid函数 1.1 从指数函数到sigmoid 1.2 对数函数与sigmoid 2. sigmoid函数求导 3 .神经网络损失函数求导 1. sigmoid函数 sigmo ...
最新文章
- oracle10 exp imp 中文乱码
- ArcEngine对Blob字段赋值的方法
- 不包含本位置值的累乘数组
- java文件file字符集_获取文件字符集(或文件编码) 的工具类
- python 清屏_Python学前准备如果你知道要去哪,那么全世界都给你让路
- RabbitMQ 集群搭建_02_rpm版本(linux环境)
- spring cloud alibaba微服务原理与实战_SpringBoot+Cloud全家桶微服务实战项目之文档型数据库MongoDB四...
- SpringCloud工作笔记077---SpringBoot中使用JPA操作数据库
- 点评10款Github上最火爆的国产开源项目
- java的Date.getTime()转换成C#的Datetime.ticks
- python3清屏命令_python3.4中清屏的处理方法
- 2013年上半年 系统分析师 论文 真题
- easypr4android,EasyPR的基本使用
- ActivityManager 管理Activity
- 光机电气一体化控制实训系统
- Ubuntu如何安装TeamViewer Ubuntu安装TeamViewer教程
- CentOS系统下文件夹目录结构及其作用
- 德银天下招股书再度“失效”,陕汽控股集团提前“套现”约5亿元
- LeetCode - 441 - 排列硬币(arranging-coins)
- 如何使用 Enterprise Architect 画 UML
热门文章
- linux drm 内存管理,linux DRM GEM 笔记
- jQuery 加入购物车 弹窗
- Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 85 bytes)
- addEventListener() 的参数之passive 的用法
- Opencv2.4.9源码分析——Stitching(四)
- 【线上活动】中秋诗词接龙!
- newt.h:没有那个文件或目录
- Vue3基础难点总结
- docker 安装RabbitMQ(镜像安装)
- jbpm3\jbpm4_在jBPM中支持高级用户交互模式