1. 简介

SoftmaxSoftmax 函数

SoftmaxSoftmax 函数在神经网络分类是十分常用的函数,如下所示,在神经元output layer中,可以输出一个R4R^{4} 维度的向量,来进行分类,例如输出层为向量 O=[0.2,0.1,0.4,0.3]O=[ 0.2,0.1,0.4,0.3 ], 可根据向量中元素大小(元素之和为1)来判断该输入(可以是图片,也可以是文字)属于哪一类,而在这种分类的情况中,SoftmaxSoftmax 函数就起到了十分重要的作用。

Softmax函数交叉熵及其求导

SoftmaxSoftmax 函数的公式为:ai=ezij=1nezja_{i}=\frac{e^{z_{i}}}{\sum^{n}_{j=1}e^{z_{j}}}

其中,aia_{i} 为第 ii 个神经元经过SoftmaxSoftmax 函数得到的值,ziz_{i} 为第 ii 个神经元的输出值,其计算公式为 $ z_{i}=W_{i}*x+ b $ $(W_{i}为权重矩阵W_{ij} 的第i行)。 $

代价函数交叉熵

为了计算损失函数,我们使用交叉熵代价函数,有 Loss=inyilogaiLoss = -\sum^{n}_{i}y_{i}loga_{i}

其中 yiy_{i} 代表第aia_{i} 个输出的真实值。

  1. Softmax函数交叉熵的求导

1)
对于Softmax函数的求导,用得最多的应该是链式法则,对于链式法则,举个例子如下:

设我们有函数 g(f(x))g(f(x)), 则g(f(x))x=g(f(x))f(x)\frac{\partial{ g(f(x))}}{\partial{x}} = \frac{\partial{ g(f(x))}}{\partial{f(x)}}f(x)x\frac{\partial{ f(x)}}{\partial{x}}, 这就是链式法则。

2)
对于交叉熵函数求导,首先,我们要求导的是交叉熵对神经元输出的梯度: Lzi\frac{\partial{L}}{\partial{z_{i}}}

根据链式法则,我们有:Lzi=Laj\frac{\partial{L}}{\partial{z_{i}}} = \frac{\partial{L}}{\partial{a_{j}}}ajzi\frac{\partial{a_{j}}}{\partial{z_{i}}}

其中, 使用 aja_{j} 是因为对SoftmaxSoftmax函数包含了所有神经网络输出的和,即 ai=ezij=1nezja_{i} = \frac{e^{z_{i}}}{\sum^{n}_{j=1}e^{z_{j}}},所以,就算我们不是求交叉熵对aja_{j}的梯度,但是aja_{j}依旧包含了aia_{i} 的元素。

总的来说就是,由于SoftmaxSoftmax 函数的特殊性,对于aja_{j}jj个神经元的输出,其中也包含了aia_{i} 中的元素。

3)
对于求 Lzi=Laj\frac{\partial{L}}{\partial{z_{i}}} = \frac{\partial{L}}{\partial{a_{j}}}ajzi\frac{\partial{a_{j}}}{\partial{z_{i}}} ,可先求其前半部分 Laj\frac{\partial{L}}{\partial{a_{j}}}

Laj=(jnyjlogaj)aj=jnyjaj\frac{\partial{L}}{\partial{a_{j}}} = \frac{\partial{ (-\sum^{n}_{j}y_{j}loga_{j}) }}{\partial{a_{j}}} = -\sum^{n}_{j}\frac{y_{j}}{a_{j}}

j=ij=i 时,Lai=yiai\frac{\partial{L}}{\partial{a_{i}}} = -\frac{y_{i}}{a_{i}}
jij \neq i时,Laj=jinyjaj\frac{\partial{L}}{\partial{a_{j}}} = -\sum_{j\neq i}^{n}\frac{y_{j}}{a_{j}}

(4)

公式 Lzi=Laj\frac{\partial{L}}{\partial{z_{i}}} = \frac{\partial{L}}{\partial{a_{j}}}ajzi\frac{\partial{a_{j}}}{\partial{z_{i}}} 的第二部分: ajzi\frac{\partial{a_{j}}}{\partial{z_{i}}} , 需要分俩种情况讨论,即 j=ij=ijij \neq i 俩种情况。

对于 j=ij=i,

aizi=ezij=1nezjzi=ezij=1nezj(ezi)2(j=1nezj)2=ezij=1nezj(ezij=1nezj)2=aiai2=ai(1ai)\frac{\partial{a_{i}}}{\partial{z_{i}}} = \frac{\partial{ \frac{e^{z_{i}}}{\sum^{n}_{j=1}e^{z_{j}}} }}{\partial{z_{i}}} = \frac{e^{z_{i}}\sum^{n}_{j=1}e^{z_{j}} - (e^{z_{i}})^{2}}{(\sum^{n}_{j=1}e^{z_{j}})^{2}}=\frac{e^{z_{i}}}{\sum^{n}_{j=1}e^{z_{j}}}-(\frac{e^{z_{i}}}{\sum^{n}_{j=1}e^{z_{j}}})^{2}=a_{i}-a_{i}^{2}=a_{i}(1-a_{i})

对于 ji,j \neq i,

ajzi=ezjj=1nezjzi=ezjezi(j=1nezj)2=ezjj=1nezjezij=1nezj=ajai\frac{\partial{a_{j}}}{\partial{z_{i}}} = \frac{\partial{ \frac{e^{z_{j}}}{\sum^{n}_{j=1}e^{z_{j}}} }}{\partial{z_{i}}} = \frac{-e^{z_{j}}e^{z_{i}}}{(\sum^{n}_{j=1}e^{z_{j}})^{2}}=-\frac{e^{z_{j}}}{\sum^{n}_{j=1}e^{z_{j}}}\frac{e^{z_{i}}}{\sum^{n}_{j=1}e^{z_{j}}}=-a_{j}a_{i}

因此,对于第二部分的求导,我们有 ajzi=ai(1ai)+jinajai\frac{\partial{a_{j}}}{\partial{z_{i}}}=a_{i}(1-a_{i})+\sum_{j\neq i}^{n}-a_{j}a_{i}

5)
则对于Lzi=Laj\frac{\partial{L}}{\partial{z_{i}}} = \frac{\partial{L}}{\partial{a_{j}}}ajzi\frac{\partial{a_{j}}}{\partial{z_{i}}},我们有:

$\frac{\partial{L}}{\partial{z_{i}}} $

=Lajajzi= \frac{\partial{L}}{\partial{a_{j}}}\frac{\partial{a_{j}}}{\partial{z_{i}}}

$= -\frac{y_{i}}{a_{i}}(a_{i}(1-a_{i})) + \sum^{n}{j \neq i}\frac{y{j}}{a_{j}}a_{j}a_{i} $

=yi(1ai)+jinyjai= -y_{i}(1-a_{i}) + \sum^{n}_{j \neq i}y_{j}a_{i}

$ = -y_{i}+a_{i}y_{i}+\sum^{n}{j \neq i}y{j}a_{i}$

=yi+aij=1nyj=-y_{i}+a_{i}\sum_{j=1}^{n} y_{j}

由于对真实值,我们知道 yjy_{j} 为第ii个神经元期望输出的值,一般而言,j=1nyj=1\sum_{j=1}^{n} y_{j}=1, 故对于这种通过 SoftmaxSoftmax函数的输出来确定其分类的,只有一个类别会是1,因此有代价函数对第ii个神经元的输出 ziz_{i} 的梯度为:
Lzi=yi+ai\frac{\partial{L}}{\partial{z_{i}}} = -y_{i} + a_{i}

相关文章: