zoukankan      html  css  js  c++  java
  • sigmoid与softmax

    sigmoid与softmax

    sigmoid与softmax可以神经网络的输出单元。

    原理

    sigmoid

    预测二值型变量$y$的值,定义如下:

    $$hat{y}= sigma( omega^{T}h+b)=frac{1}{1+exp{-( omega^ {T}h+b)}}$$

    通常使用最大似然来学习,因为最大似然的代价函数是$-log(y|x)$,代价函数中的log抵消了sigmoid中的exp,这样的结果是只有当$sigma$函数的自变量非常大的时候才会有饱和,也就是梯度变得非常小。

    softmax

    softmax最常见的多分类器的输出单元。

    $$z=W^{T}h+b$$

    $$y_{i}=softmax(z_{i})=frac{exp(z_{i})}{sum_{j}exp(z_{j})}$$

    同样,对数似然中的log可以抵消exp,而其他形式的目标函数(比如平方误差)都不能起到学习的作用。

    交叉熵与softmax loss

    交叉熵是衡量样本真实分布与样本预测分布的距离,分布距离越小,交叉熵的值就越小,公式如下:

    $$H(p,q)=sum_{i}^{n}-p_{i}log(q_{i})$$

    其中$p$是样本真实分布,$q$是预测分布,$n$为样本数量。根据交叉熵的形式,可以写出softmax损失函数公式,$hat{y_{i}}$是训练数据的真实标签:

    $$L=sum_{i}^{n}-hat{y_{i}}log(y_{i})$$

    softmax的反向传播

    链式求导法则可知:

    $$frac{ partial L}{ partial z_{i}}=frac{ partial L}{ partial y_{j}} frac{ partial y_{j}} {partial z_{i}}$$

    其中$L$对$y_{j}$的导数为:

    $$frac{partial L}{partial y_{j}}=frac{partial left[- sum_{j} hat{y_{j}}log(y_{j}) ight]}{partial y_{j}}=- sum_{j} frac{hat{y_{j}}}{y_{j}}$$

    $y_{j}$对$z_{i}$的导数要分为两部分看

    • $j=i$时:

    $$frac{ partial y_{j}} {partial z_{i}}=frac{ partial left[ frac{e^{z_{i}}}{sum_{k}e^{z_{k}}} ight]} {partial z_{i}}$$

    $$=frac { e^{z_{i}} sum_{k} e^{z_{k}} - (e^{z_{i}})^{2} } { ( sum_{k} e^{z_{k}} )^{2} }$$

    $$=frac{e^{z_{i}}} {sum_{k} e^{z_{k}}} (1-frac{e^{z_{i}}} {sum_{k} e^{z_{k}}})$$

    $$=y_{i}(1-y_{i})$$

    • $j ot= i$时:

    $$frac{ partial y_{j}} {partial z_{i}}=frac{ partial left[ frac{e^{z_{i}}}{sum_{k}e^{z_{k}}} ight]} {partial z_{i}}$$

    $$=frac{0-e^{z_{j}z_{i}}}{( sum_{k} e^{z_{k}} )^{2}}$$

    $$=-y_{j}y_{i}$$

  • 相关阅读:
    ES6、ES7、ES8特性
    【react】XXX项目环境搭建
    map
    vector
    list
    米勒素数模板
    POJ-2421-Constructing Roads(最小生成树 普利姆)
    HDU1301 Jungle Roads(Kruskal)
    Truck History(prime)
    phpstorm快捷键和激活
  • 原文地址:https://www.cnblogs.com/4PrivetDrive/p/12168564.html
Copyright © 2011-2022 走看看