softmax 损失函数与梯度推导「建议收藏」

softmax 损失函数与梯度推导「建议收藏」softmax与svm很类似,经常用来做对比,svm的lossfunction对wx的输出s使用了hingefunction,即max(0,-),而softmax则是通过softmaxfunction对输出s进行了概率解释,再通过crossentropy计算lossfunction。将score映射到概率的softmaxfunction:,其中,,j指代i-thclass。…

大家好,又见面了,我是你们的朋友全栈君。

softmax与svm很类似,经常用来做对比,svm的loss function对wx的输出s使用了hinge function,即max(0,-),而softmax则是通过softmax function对输出s进行了概率解释,再通过cross entropy计算loss function。

将score映射到概率的softmax function:p_i=\frac{e^{f_{i}}}{\sum_{k}e^{f_k}} \quad (1),其中,f_i=W_ix,j指代 i-th class。

对于某一个样本如 X_i 的lost function为L_i = -\sum_{j}y_jlog(p_j) \quad (2).

(注:

1、以下所有的公式为了便于表达,设定只有一个样品,即L_i全部写做 L

2、公式中没有进行偏移,实际算法为了避免指数计算容易越界,需要另做偏移处理)

需要求loss function对W的导数(梯度),实际上是进行链式求导。

从最内层的开始,\frac{\partial p_i}{\partial f_j}=\frac{\partial \frac{e^{f_{i}}}{\sum_{k}e^{f_k}}}{\partial f_j} \quad (3),其中,令g_i=e^{f_i},\quad h_i=\sum_{k}e^{f_k}      已知\frac{\mathrm{d} \frac{g(x)}{h(x)} }{\mathrm{d} x}=\frac{​{g}'(x)h(x)-{h}'(x)g(x)}{h^2(x)} \quad (4)

且有\frac{\partial g_i}{\partial f_j}= \begin{cases} & \text{ if } i=j \quad e^{f_i} \\ & \text{ if } i\neq j \quad 0 \end{cases} \quad (5)\frac{\partial h_i}{\partial f_j}=e^{f_j},for \quad all \quad j \quad (6)

那么(3)式则可以根据(4)(5)(6)写成(注意,下面用\sum作为h的简写

\begin{cases} & \text{ if } i=j, \quad \frac{e^{f_i}\sum-e^{f_j}e^{f_i}}{\sum ^2}=\frac{e^{f_i}}{\sum} \frac{\sum-e^{f_j}}{\sum}= p_i(1-p_j)\\ & \text{ if } i\neq j, \quad \frac{0-e^{f_j}e^{f_i}}{\sum^2} = - \frac{e^{f_j}}{\sum} \frac{e^{f_i}}{\sum}=-p_jp_i \end{cases}

根据链式法则:(\sum_ky_k=1,y是一个只有一个元素为1,其余为0的向量,真正的分类时y_i=1)

\frac{\partial L}{\partial f_i}=\frac{\partial L}{\partial p_k}\frac{\partial p_k}{\partial f_i}=-\sum_k y_k \frac{1}{p_k}\frac{\partial p_k}{\partial f_i}\\ = -y_i(1-p_i) -\sum_{k\neq i}y_k \frac{1}{p_k}(-p_kp_i)\\ = -y_i(1-p_i)+\sum_{k\neq i}y_kp_i\\ =-y_i+y_ip_i+\sum_{k\neq i}y_kp_i\\ =p_i(\sum_ky_k)-y_i=p_i-y_i

最后一步,因为f_i=W_ix,这儿i代表第i个类别。

所以:\frac{\partial L}{\partial W_i}=\frac{\partial L}{\partial f_i} \frac{\partial f_i}{\partial W_i}=(p_i-y_i)x(上面设定了x只有一个,但实际x有n个,是矩阵而非向量)。

上面的公式用代码表示如下:

 for ii in range(num_train):
    current_scores = scores[ii, :]

    # Fix for numerical stability by subtracting max from score vector.
    # important! make them range between infinity to zero
    shift_scores = current_scores - np.max(current_scores)

    # Calculate loss for this example.
    loss_ii = -shift_scores[y[ii]] + np.log(np.sum(np.exp(shift_scores)))
    loss += loss_ii

    for jj in range(num_classes):
      softmax_score = np.exp(shift_scores[jj]) / np.sum(np.exp(shift_scores))

      # Gradient calculation.不懂这儿为什么要乘以x[ii]
      if jj == y[ii]:
        dW[:, jj] += (-1 + softmax_score) * X[ii]
      else:
        dW[:, jj] += softmax_score * X[ii]
        
     # Average over the batch and add our regularization term.
  loss /= num_train
  loss += reg * np.sum(W*W)

  # Average over the batch and add derivative of regularization term.
  dW /= num_train
  dW += 2*reg*W

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153123.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从零开始学习UCOSII操作系统4–任务管理

    从零开始学习UCOSII操作系统4–任务管理从零开始学习UCOSII操作系统4–任务管理1、重讲任务(1)任务可以是一个无限的循环,也可以在一次执行完毕后被删除。这里需要注意的是,任务的代码并不是真正的删除了,而是UCOSII不再理会该任务代码,所以该任务代码不会再执行。(2)建立任务,OSTaskCreate()如果想让UCOSII管理用户的任务,必须先建立任务,可以通过将任务的地址(函数名)和其他参数传递到

    2022年5月24日
    44
  • bypasswaf 之报错注入

    0x00前言前面讲到了bypass联合查询和盲注,那么这章节就来个报错注入。0x01报错注入与函数此方法是在页面没有显示位,但是echomysql_error();函数输出了错误信息的时

    2021年12月11日
    42
  • jdbc中用ThreadLocal 进行内存优化

    jdbc中用ThreadLocal 进行内存优化

    2021年10月3日
    38
  • 深入学习Linux摄像头(二)v4l2驱动框架

    深入学习Linux摄像头系列深入学习Linux摄像头(一)v4l2应用编程深入学习Linux摄像头(二)v4l2驱动框架深入学习Linux摄像头(三)虚拟摄像头驱动分析深入学习Linux摄像头(五)三星平台fimc驱动详解一深入学习Linux摄像头(六)三星平台fimc驱动详解二深入学习Linux摄像头(二)v4l2驱动框架文章目录深入学习Linux摄像头(二)v4l2驱动框架一、V…

    2022年4月8日
    199
  • 2021年7月整理–简单方法 暴力激活成功教程WIFI密码

    2021年7月整理–简单方法 暴力激活成功教程WIFI密码2021年7月整理–简单方法暴力激活成功教程WIFI密码很多人都面临过短期租房、短期出差、住院而没有WIFI可用等境遇,有的是宽带太多办不起、有的是临时一阵子不值得折腾、有的是运营商不给扯线等等原因。然后就用手机下载了WIFI智能钥匙等APP,然后发现卵用么有,根本没有人共享自家WIFI密码给你用。以下是按步骤整理的软件和详细教程笔记本电脑+软件暴力激活成功教程出的密码我亲身用这个软件解开N多个密码此软件是家用路由器安全审计工具,切勿用作非法用途!!!….

    2022年10月13日
    4
  • 常用webservice方法_太极拳初学入门的基本要领

    常用webservice方法_太极拳初学入门的基本要领1.什么是webservice先来考虑一个问题,如果我们要在自己的程序里面展示天气预报,那怎么弄?正确的做法是我们发送一个请求到一个系统,他会给我们返回来天气情况。这个就是一个webservice。天气预报系统就相当于webservice的服务端,我们的系统就相当于客户端。2.如何调用别人发布的webservice

    2022年9月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号