【深度学习】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}) \right]}{\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}}}\right]} {\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 \not= i$时:

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

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

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

猜你喜欢

转载自www.cnblogs.com/4PrivetDrive/p/12168564.html