交叉熵求导
. 输入为z向量, z = [ z 1 , z 2 , . . . , z n ] z=[z_{1},z_{2},...,z_{n}] z=[z1,z2,...,zn],维度为(1,n)输出 s = [ e 1 ∑ k = 1 n e k , e 2 ∑ k = 1 n e k , . . . , e n ∑ k = 1 n e k ] s=[\frac{e^{1}}{\sum_{k=1}^{n}e^{k}},\frac{e^{2}}{\sum_{k=1}^{n}e^{k}},...,\frac{e^{n}}{\sum_{k=1}^{n}e^{k}}] s=[∑k=1neke1,∑k=1neke2,...,∑k=1neken],
维度为(1,n)
2. 经过softmax函数, s i = e i ∑ k = 1 n e k s_{i}=\frac{e^{i}}{\sum_{k=1}^{n}e^{k}} si=∑k=1nekei
3. Softmax Loss损失函数定义为L, L = − ∑ k = 1 n y i ln ( s i ) L=-\sum_{k=1}^{n}y_{i}\ln \left ( s_{i}\right ) L=−∑k=1nyiln(si),L是一个标量,维度为(1,1)
其中y向量为模型的Label,维度也是(1,n),为已知量,一般为onehot形式。
我们假设第 j 个类别是正确的,则y=[0,0,…1,…,0],只有 y j = 1 y_{j}=1 yj=1,其余 y j = 0 y_{j}=0 yj=0
L = − y j ln ( s j ) = = − ln ( s j ) L=-y_{j}\ln \left ( s_{j}\right )==-\ln \left ( s_{j}\right ) L=−yjln(sj)==−ln(sj)
我们的目标是求 标量L对向量 Z 的导数 ∂ L ∂ Z \frac{\partial L}{\partial Z} ∂Z∂L
由链式法则, ∂ L ∂ z = ∂ L ∂ s ⋅ ∂ s ∂ z \frac{\partial L}{\partial z}=\frac{\partial L}{\partial s}\cdot\frac{\partial s}{\partial z} ∂z∂L=∂s∂L⋅∂z∂s
其中s和z均为维度为(1,n)的向量。
∂ L ∂ s = [ 0 , 0 , . . . , − 1 s j , 0 , . . . , 0 ] , d i m = [ 1 ∗ n ] \frac{\partial L}{\partial s}=[0,0,...,-\frac{1}{s_{j}},0,...,0] ,dim=[1*n] ∂s∂L=[0,0,...,−sj1,0,...,0],dim=[1∗n]
∂ s ∂ z = \frac{\partial s}{\partial z}= ∂z∂s=如下,dim=[n*n]
∂ s ∂ z = [ s 1 ∗ [ 1 − s 1 ] − s 1 ∗ s 2 − s 1 ∗ s 3 . . . − s 1 ∗ s j . . . − s 1 ∗ s n − s 2 ∗ s 1 s 2 ∗ [ 1 − s 2 ] − s 2 ∗ s 2 . . . . − s 2 ∗ s j . . . − s 2 ∗ s n − s 3 ∗ s 1 − s 3 ∗ s 2 s 3 ∗ [ 1 − s 3 ] . . . − s 3 ∗ s j . . . − s 3 ∗ s n . . . . . . . . . . . . . . . . . . − s j ∗ s 1 − s j ∗ s 2 − s j ∗ s 3 . . . s j ∗ [ 1 − s j ] . . . − s j ∗ s n . . . . . . . . . . . . . . . . . . − s n ∗ s 1 − s n ∗ s 2 − s n ∗ s 3 . . . . − s n ∗ s j . . . s n ∗ [ 1 − s n ] ] \frac{\partial s}{\partial z}=\begin{bmatrix} s_{1}*[1- s_{1}]& -s_{1}* s_{2}& -s_{1}* s_{3}& ... & -s_{1}* s_{j}&...&-s_{1}* s_{n}& \\ -s_{2}* s_{1}& s_{2}*[1- s_{2}] & -s_{2}* s_{2}& ....&-s_{2}* s_{j}&...&-s_{2}* s_{n} \\ -s_{3}* s_{1}& -s_{3}* s_{2}& s_{3}* [1-s_{3}] & ...&-s_{3}* s_{j}&...&-s_{3}* s_{n} \\ ...& ... & ...& ...& ...& ...& \\ -s_{j}* s_{1}& -s_{j}* s_{2}& -s_{j}* s_{3}& ...&s_{j}* [1-s_{j}]&...&-s_{j}* s_{n} \\ ...& ... & ...& ...& ...& ...& \\ -s_{n}*s_{1}& -s_{n}*s_{2}& - s_{n}*s_{3}& ....& - s_{n}*s_{j}&...&s_{n}*[1-s_{n} ]& \end{bmatrix} ∂z∂s=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡s1∗[1−s1]−s2∗s1−s3∗s1...−sj∗s1...−sn∗s1−s1∗s2s2∗[1−s2]−s3∗s2...−sj∗s2...−sn∗s2−s1∗s3−s2∗s2s3∗[1−s3]...−sj∗s3...−sn∗s3.......................−s1∗sj−s2∗sj−s3∗sj...sj∗[1−sj]...−sn∗sj.....................−s1∗sn−s2∗sn−s3∗sn−sj∗snsn∗[1−sn]⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
[1*n] ∂ L ∂ s \frac{\partial L}{\partial s} ∂s∂L的矩阵左乘n*n的矩阵 ∂ s ∂ z \frac{\partial s}{\partial z} ∂z∂s
∂ L ∂ z = ∂ L ∂ s ⋅ ∂ s ∂ z = [ s 1 , s 2 , . . . , s j − 1 , . . . , s n ] = s − y \frac{\partial L}{\partial z}=\frac{\partial L}{\partial s}\cdot\frac{\partial s}{\partial z}=[s_{1},s_{2},...,s_{j}-1,...,s_{n}]=s-y ∂z∂L=∂s∂L⋅∂z∂s=[s1,s2,...,sj−1,...,sn]=s−y
相关文章
- MySQL 交叉连接技术指南(mysql交叉连接)
- MySQL中实现交叉连接的使用技巧(mysql交叉连接)
- MySQL中的交叉连接技术探索(mysql交叉连接)
- Oracle 交叉表:数据透视与分析利器(oracle交叉表)
- MySQL三表交叉查询实现数据筛选(mysql三表交叉查询)
- 探索Oracle数据库可能的交叉链接之路(oracle 交叉链接)
- 深入理解Oracle的交叉索引技术(oracle 交叉索引)
- Oracle数据库穿越时空的交叉回访(oracle交叉回访)
- 用Oracle构建精妙的交叉列表(oracle 交叉列表)
- cocos2d-2.0-x-2.0.3交叉编译到android报错解决
- 解析:内联,左外联,右外联,全连接,交叉连接的区别