前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Softmax梯度推导

Softmax梯度推导

作者头像
公众号guangcity
发布2019-09-20 11:42:24
1.5K0
发布2019-09-20 11:42:24
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

Softmax梯度推导

0.说在前面

今天来学习Softmax梯度推导及实现!

1.损失函数

矩阵乘法

矩阵相乘,矩阵A的一行乘以矩阵B的每一列,不用循环B矩阵乘法公式:

对于下面这个,则不用循环W矩阵,否则通常做法还得循环W矩阵的每一列!

代码语言:javascript
复制
score = np.dot(X[i],W)

损失函数

具体的描述看代码,有一点需要注意,损失函数Loss也就是cross-entropy!

在实际计算的时候,需要给分子分母同时乘以常熟C,一般C取-maxfj,目的是防止数值爆炸,所产生的导致计算机内存不足,计算不稳定!

代码语言:javascript
复制
def softmax_loss_naive(W, X, y, reg):
  loss = 0.0
  dW = np.zeros_like(W)
  num_train = X.shape[0]
  num_class = W.shape[1]
  for i in range(num_train):
      # 得到S矩阵每一行
      score = np.dot(X[i],W)
      # 防止数值爆炸,保持稳定性
      score-=max(score)
      # 分子 去指数
      score = np.exp(score)
      # 分母,S矩阵每一行求和
      softmax_sum = np.sum(score)
      # broadcast:向量除以标量
      score /= softmax_sum
      # 得到交叉熵,也就是softmax的loss
      loss -= np.log(score[y[i]])
   # 平均         
   loss/=num_train
   # 加上正则项
   loss+=reg*np.sum(W*W) 
  return loss, dW

2.梯度推导

shape查看

X为(D,N),W为(N,C)

梯度求导推论

这里Xi与Wj转置均是行向量!

记作(2)式:

记作(3)式:

pm = [0,…1…,0]是一个是一个one hot vector

梯度求导:

利用链式求导法则:记作(4)式:

观察shape:

对Wj求导后shape是(1,D),后面三个分别是(1,C),(C,C),(C,D),最终是(1,D),记作(5)式:

记作(6)式:

上面求导分为两种情况,记作(7)式:

Si表示S矩阵中每一行数据,那Sj对Wj求导如下:

现在取X矩阵第一行[X11,X12,…..X1n]

取W矩阵第一列[W11,W21….Wn1]

X与W矩阵相乘得S矩阵,上面X第一行与W第一列相乘得到S矩阵第一个元素,记作S01,同理我们可以得到S矩阵每一行得所有元素,分别为Si1,Si2,…..,SiC。

Wj代表W矩阵得列向量,每一列为Wj,第一列W1,后面依此类推!

那么我们现在来分析一下Si对Wj求导,这里推导:

对于最上面wj代表行向量,如下面所示是W矩阵(D,C)表示:记作(8)式:

回顾一下(1)式,那么W转置得矩阵(C,D)则为:记作(9)式:

而X矩阵(N,D)则是:记作(10)式:

而S矩阵(N,C)表示为(记作):记作(11)式:

也就是,记作(12)式::

S1表示第一行,Si表示第i行

现在回到求导,那么当Si对Wj进行求导得时候,我们从列向量表示得S矩阵(12)与原始矩阵S(11)相比较,我们知道,Si对wj求导为xi,其余全为0,得到下面结果,记作(13)式(C,D):

带入链式求导法则,得到:

梯度实现

在上述交叉熵下面添加如下代码即可!

代码语言:javascript
复制
# 计算梯度
for j in range(num_class):
  if j!=y[i]:
    dw[:,j]+=score[j]*X[i]
  else:
    dw[:,j]+=(score[j]-1)*X[i]

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Softmax梯度推导
    • 0.说在前面
      • 1.损失函数
        • 2.梯度推导
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档