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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Xshell连接虚拟机失败的解决方法

    Xshell连接虚拟机失败的解决方法  最近这一周由于自己的xshell突然连接不到虚拟机,在网上找了很多种方法也没能解决,以至于自己在学习很多知识的时候都没能很好的去验证,去尝试。最后在求助大佬的时候终于将xshell重新连接到了虚拟机!!    以下是我对xshell连接不到虚拟机的几种方法的总结,希望对大家能有帮助:方法一:   1.首先查看利用 ifconfig命令去查看IP地址,如下图:…

  • 进程理论基础

    操作系统背景知识顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其

  • Vue生成二维码_vue通过二维码分享

    Vue生成二维码_vue通过二维码分享转存vue生成二维码并下载1、下载插件npminstall–saveqrcodejs22、引入constQRCode=require(“qrcodejs2″)3、组件使用<template><divclass=”qr_code”><divstyle=”display:flex;align-items:center”>地址:<Inputid=”text”type=”te

  • bonecp使用数据源

    bonecp使用数据源

  • 时序数据库详解和使用说明_时序数据库 应用场景

    时序数据库详解和使用说明_时序数据库 应用场景时序数据往往是由百万级甚至千万级终端设备产生的,写入并发量比较高,属于海量数据场景。

  • tfw格式图解[通俗易懂]

    tfw格式图解[通俗易懂]TFW格式,是关于TIFF影像坐标信息的文本文件。其它影像格式的坐标信息描述文件与其格式是一样的,后缀名可能不同。(bmp-bpw/png-pgw/jpg-jpw)话不多说,直接看图。上图中的UV坐标,实际上只的是图像的横向坐标和纵向坐标 。即图像的行和列坐标。 对于图上任意一个像素点(col,row)这个坐标,换算其地理坐标就十分简单。GeoX=1000.000+…

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

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