如下图所示,该神经网络有\(l+1\)层,其中第一层(输入层)有\(s\)个神经元,最后一层(输出层)有\(n\)个神经元,中间的隐藏层只显示了第一个隐藏层,其有\(t\)个神经元,其余的隐藏层和偏置神经元及其权重(即\(a_{0}^{(k)},\theta_{0i},k,i\)为任意小于\(l+1\)的自然数)已被省略,在图中未画出。

符号解释
- \(a_{i}^{(j)}\):表示第\(j\)层中的第\(i\)个神经元的输出,如\(a_{1}^{(5)}\)即表示第\(5\)层中第一个神经元的输出
- \(\theta_{ij}^{(k)}\):表示第\(k\)层的第\(j\)个神经元与第\(k+1\)层的第\(i\)个神经元连接的权重系数,如\(\theta_{12}^{(1)}\)即表示第一层的第二个神经元(即输出\(a_{2}^{(1)}\)所在的神经元)和第二层的第一个神经元((即输出\(a_{1}^{(2)}\)所在的神经元))之间连接的权重,即图中上面那条黄色的线所代表的权重(图中未标出)
- \(z^{(k+1)}\):为第\(k\)层输入经过第\(k\)层和第\(k+1\)层之间的权重\(\theta\)处理后,得到的第\(k+1\)层的中间值,即\(z^{(k+1)}=\theta^{(k)}a^{(k)}\),且\(a^{(k+1)}=f(z^{(k+1)})\),其中\(f\)为\(sigmoid\)或\(relu\)函数,\(\theta^{(k)}\)为第\(k\)层和第\(k+1\)层间的权重组成的矩阵,设第\(k\)层有\(m\)个神经元,第\(k+1\)层有\(n\)个神经元,则第\(k\)层的权重矩阵
\[\theta^{(k)}=\begin{bmatrix}
\theta_{11}^{(k)}& \theta_{12}^{(k)}& ..& ..& \theta_{1m}^{(k)}\\
\theta_{21}^{(k)}& \theta_{22}^{(k)}& ..& ..& \theta_{2m}^{(k)}\\
:& :& .& &: \\
:& :& & .& :\\
\theta_{n1}^{(k)}& \theta_{n2}^{(k)}& ..& ..&\theta_{nm}^{(k)}
\end{bmatrix}\]
\(a^{(k)}\)为第\(k\)层的神经元输出组成的向量
\[a^{(k)}=\begin{bmatrix}
a_{1}^{(k)}\\
a_{2}^{(k)}\\
:\\
:\\
a_{m}^{(k)}
\end{bmatrix}\]
损失函数
先假设只有一个样本,神经网络结构如上图,则损失函数为:
\[J(\theta)=-\sum_{i=1}^{n}[y_{i}\ln h_{\theta}^{(l)}(x)_{i}+(1-y_{i})\ln(1-h_{\theta}^{(l)}(x)_{i})]
\]
其中\(h_{\theta}^{(l)}(x)=a^{(l+1)}=f(z^{(l+1)})=f(\theta^{(l)}a^{(l)})\),且\(f(z)=\frac{1}{1+e^{-z}}\),而\(h_{\theta}^{(l)}(x)_{i}\)即为输出层的第\(i\)个神经元的输出,即\(a_{i}^{(l+1)}\),\(y_{i}\)即为样本在第\(i\)个输出的真实值。
损失函数对各权重矩阵的偏导公式
欲对损失函数进行梯度下降来求其极值,则需要先算出损失函数对各权重的偏导。由于损失函数中的\(h_{\theta}^{(l)}(x)=f(\theta^{(l)}a^{(l)})\),因此可先对第\(l\)层和第\(l+1\)层之间的权重来求偏导,即先求\(\frac{\partial J(\theta )}{\partial \theta ^{(l)}}\)
假设只有一个样本,先将\(J(\theta)\)写成向量形式,即
\[J(\theta)=-[y\cdot\ln h_{\theta}^{(l)}(x)+(1-y)\cdot\ln(1-h_{\theta}^{(l)}(x))]
\]
即
\[J(\theta)=-[y\cdot\ln a^{(l+1)}+(1-y)\cdot\ln(1-a^{(l+1)})]
\]
需要注意的是,这里的\(1-h_{\theta}^{(l)}(x)\)中的\(1\)不是一个数字,而是一个与\(h_{\theta}^{(l)}(x)\)同维度的向量,下文中的\(1-a^{(l+1)}\)和\(y-1\)中的\(1\)也是如此,同时,这里的\(y\)和\(\ln a^{(l+1)}\)相乘指的是它们的对应分量相乘后再求和,其结果是关于\(\theta\)的一个式子,而非向量。同理后面的那个式子以及下文中的式子均是如此。
eg:\(y=[1,2,3]^T\),\(\ln a^{(l+1)}=[4,5,6]^T\),则\(y\cdot\ln a^{(l+1)}=1×4+2×5+3×6=32\)
因此
\[\frac{\partial J(\theta )}{\partial \theta ^{(l)}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}}\cdot\frac{\partial a^{(l+1)}}{\partial \theta ^{(l)}}
\]
而
\[\frac{\partial a^{(l+1)}}{\partial \theta ^{(l)}}=\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}\cdot\frac{\partial z^{(l+1)}}{\partial \theta ^{(l)}}
\]
因此
\[\frac{\partial J(\theta )}{\partial \theta ^{(l)}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}}\cdot\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}\cdot\frac{\partial z^{(l+1)}}{\partial \theta ^{(l)}}
\]
再来求\(J(\theta)\)对第\(l-1\)层和第\(l\)层之间的权重\(\theta^{(l-1)}\)的偏导,首先需要将\(J(\theta)\)和\(\theta^{(l-1)}\)之间的关系理清楚,
\[\frac{\partial J(\theta )}{\partial \theta ^{(l-1)}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}}\cdot\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}\cdot\frac{\partial z^{(l+1)}}{\partial a ^{(l)}}\cdot\frac{\partial a^{(l)}}{\partial z ^{(l)}}\cdot\frac{\partial z^{(l)}}{\partial \theta ^{(l-1)}}
\]
对比一下\(\frac{\partial J(\theta )}{\partial \theta ^{(l)}}\)的式子可以发现,\(\frac{\partial J(\theta )}{\partial \theta ^{(l)}}\)和\(\frac{\partial J(\theta )}{\partial \theta ^{(l-1)}}\)中,均含有
\[\frac{\partial J(\theta )}{\partial z ^{(l+1)}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}}\cdot\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}
\]
令
\[\delta^{(l+1)}=\frac{\partial J(\theta )}{\partial z ^{(l+1)}}
\]
由于
\[J(\theta)=-y\ln(f(z^{(l+1)}))-(1-y)\ln(1-f(z^{(l+1)}))
\]
故
\[\frac{\partial J(\theta )}{\partial z ^{(l+1)}}=-\frac{y}{f(z^{(l+1)})}\cdot f^{'}(z^{(l+1)})+\frac{1-y}{1-f(z^{(l+1)})}\cdot f^{'}(z^{(l+1)})
\]
又\(f^{'}(z)=f(z)(1-f(z))\),故
\[\frac{\partial J(\theta )}{\partial z ^{(l+1)}}=-y(1-f(z^{(l+1)}))+(1-y)f(z^{(l+1)})
\]
即
\[\frac{\partial J(\theta )}{\partial z ^{(l+1)}}=f(z^{(l+1)})-y
\]
即
\[\delta^{(l+1)}=f(z^{(l+1)})-y
\]
又
\[\frac{\partial J(\theta )}{\partial \theta ^{(l)}}=\delta^{(l+1)}\cdot a^{(l)}
\]
且
\[\delta^{(l)}=\delta^{(l+1)}\cdot\theta^{(l)}\cdot f^{'}(z^{(l)})
\]
则
\[\frac{\partial J(\theta )}{\partial \theta ^{(l-1)}}=\delta^{(l)}\cdot a^{(l-1)}
\]
以此类推,则有:
\[\frac{\partial J(\theta )}{\partial \theta ^{(k)}}=\delta^{(k+1)}\cdot a^{(k)}
\]
其中
\[\delta^{(k)}=\left\{\begin{matrix}
f(z^{(l)})-y& if \quad k=l\\
\delta^{(k+1)}\cdot\theta^{(k)}\cdot f^{'}(z^{(k)})& if \quad 2\le k<l
\end{matrix}\right.\]
式中\(l\)为神经网络的层数
若有\(m\)个样本,则将所有梯度取平均值,即
\[\frac{\partial J(\theta )}{\partial \theta ^{(k)}}=\frac{1}{m}\sum_{i=1}^{m}[\delta^{(k+1)}\cdot a^{(k)}]^{(i)}
\]
其中\([\delta^{(k+1)}\cdot a^{(k)}]^{(i)}\)表示第\(i\)个样本在第\(k\)个权重矩阵中的偏导值
\[\delta^{(k)}=\left\{\begin{matrix}
\frac{1}{m}\sum_{i=1}^{m}[f(z^{(l)})-y]^{(i)}& if \quad k=l\\
& \\
\frac{1}{m}\sum_{i=1}^{m}[\delta^{(k+1)}\cdot\theta^{(k)}\cdot f^{'}(z^{(k)})]^{(i)}& if \quad 2\le k<l
\end{matrix}\right.\]
式中\(l\)为神经网络的层数
设\([\Delta^{(l)}]^{(i)}\)为第\(i\)个样本对第\(l\)个权重矩阵单独贡献的梯度值,即\([\Delta^{(l)}]^{(i)}\)为第\(i\)个样本的\(\delta^{(l+1)}\cdot a^{(l)}\)值,则
\[\frac{\partial J(\theta )}{\partial \theta ^{(k)}}=\frac{1}{m}\sum_{\mu=1}^{m}[\Delta^{(k)}]^{(i)}
\]
损失函数对某个权重的偏导
若要求\(\theta^{(k)}\)中的某个值\(\theta^{(k)}_{ij}\),为简单起见,先设\(k=l\),且只有一个样本,在最后一层中,由于只有\(z^{(l+1)}_{i}\)与\(\theta^{(l)}_{ij}\)有关,而\(z^{(l+1)}_{i}\)只与\(a^{(l+1)}_{i}\)有关,故
\[\frac{\partial J(\theta )}{\partial \theta ^{(l)}_{ij}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}_{i}}\cdot\frac{\partial a^{(l+1)}_{i}}{\partial z^{(l+1)}_{i}}\cdot\frac{\partial z^{(l+1)}_{i}}{\partial \theta ^{(l)}_{ij}}
\]
令
\[\delta^{(l+1)}_{i}=\frac{\partial J(\theta )}{\partial z ^{(l+1)}_{i}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}_{i}}\cdot f^{'}(z^{(l+1)}_{i})
\]
则
\[\frac{\partial J(\theta )}{\partial \theta ^{(l)}_{ij}}=\delta^{(l+1)}_{i}\cdot \frac{\partial z^{(l+1)}_{i}}{\partial \theta ^{(l)}_{ij}}
\]
又
\[z^{(l+1)}_{i}=\sum_{t=1}^{n}a_{t}^{(l)}\theta^{(l)}_{it}
\]
其中\(n\)表示\(l\)层的神经元数量,故
\[\frac{\partial z^{(l+1)}_{i}}{\partial \theta ^{(l)}_{ij}}=a_{j}^{(l)}
\]
即当\(t=j\)时才与\(\theta ^{(l)}_{ij}\)有关,因此
\[\frac{\partial J(\theta )}{\partial \theta ^{(l)}_{ij}}=\delta^{(l+1)}_{i}\cdot a_{j}^{(l)}
\]
若\(k=l-1\),先来看看\(\theta ^{(l-1)}_{ij}\)与哪些变量有关。首先只有\(z^{(l)}_{i}\)与\(\theta ^{(l-1)}_{ij}\)有关,因为
\[z^{(l)}_{i}=\sum_{t=1}^{m}a_{t}^{(l-1)}\theta^{(l-1)}_{it}
\]
其中\(m\)表示\(l-1\)层的神经元数量,而\(z^{(l)}_{i}\)只与\(a_{i}^{(l)}\)有关,而对于\(a_{i}^{(l)}\),由于
\[z^{(l+1)}_{s}=\sum_{t=1}^{n}a_{t}^{(l)}\theta^{(l)}_{st}
\]
其中\(n\)表示\(l\)层的神经元数量,即对于向量\(z^{(l+1)}\)中的任意一个分量,其均与\(a_{i}^{(l)}\)有关(只要\(t=i\)即可),故
\[\frac{\partial J(\theta )}{\partial \theta ^{(l-1)}_{ij}}=\frac{\partial J(\theta )}{\partial a ^{(l+1)}}\cdot\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}\cdot\frac{\partial z^{(l+1)}}{\partial a ^{(l)}_{i}}\cdot\frac{\partial a^{(l)}_{i}}{\partial z ^{(l)}_{i}}\cdot\frac{\partial z^{(l)}_{i}}{\partial \theta ^{(l-1)}_{ij}}
\]
令
\[\delta^{(l)}_{i}=\frac{\partial J(\theta )}{\partial z ^{(l)}_{i}}
\]
则
\[\frac{\partial J(\theta )}{\partial \theta ^{(l-1)}_{ij}}=\delta^{(l)}_{i}\cdot\frac{\partial z^{(l)}_{i}}{\partial \theta ^{(l-1)}_{ij}}
\]
又
\[z^{(l)}_{i}=\sum_{t=1}^{m}a_{t}^{(l-1)}\theta^{(l-1)}_{it}
\]
故
\[\frac{\partial z^{(l)}_{i}}{\partial \theta ^{(l-1)}_{ij}}=a_{j}^{(l-1)}
\]
因此
\[\frac{\partial J(\theta )}{\partial \theta ^{(l-1)}_{ij}}=\delta^{(l)}_{i}\cdot a_{j}^{(l-1)}
\]
且
\[\delta^{(l)}_{i}=\frac{\partial J(\theta )}{\partial a ^{(l)}_{i}}\cdot f^{'}(z^{(l)}_{i})
\]
以此类推,便有
\[\frac{\partial J(\theta )}{\partial \theta ^{(k)}_{ij}}=\delta^{(k+1)}_{i}\cdot a_{j}^{(k)}
\]
且
\[\delta^{(k)}_{i}=\left\{\begin{matrix}
a^{(k)}_{i}-y_{i}& if \quad k=l\\
& \\
\delta^{(k+1)}\cdot\theta^{(k)}_{\cdot i}\cdot f^{'}(z^{(k)}_{i}) & if \quad 2\le k<l
\end{matrix}\right.\]
其中\(k\leq l\),\(l\)为神经网络的层数,\(\theta^{(k)}_{\cdot i}\)表示第\(k\)个权重矩阵中的第\(i\)列,\(i\)的取值范围为[\(0\),第\(k\)层神经元的个数](输出层的\(i>0\))
若有\(m\)个样本,设\([\Delta^{(k)}_{ij}]^{(\mu)}\)为第\(\mu\)个样本在第\(k\)个权重矩阵中的第\(i\)行第\(j\)列的梯度值,即\([\Delta^{(k)}_{ij}]^{(\mu)}=[\delta^{(k+1)}_{i}\cdot a_{j}^{(k)}]^{(\mu)}\),则
\[\frac{\partial J(\theta )}{\partial \theta ^{(k)}_{ij}}=\frac{1}{m}\sum_{\mu=1}^{m}[\Delta^{(k)}_{ij}]^{(\mu)}
\]
若再加上正则项,则
\[\frac{\partial J(\theta )}{\partial \theta ^{(k)}_{ij}}=\left\{\begin{matrix}
\frac{1}{m}\sum_{\mu=1}^{m}[\Delta^{(k)}_{ij}]^{(\mu)}& if \quad j=0\\
& \\
\frac{1}{m}\sum_{\mu=1}^{m}[\Delta^{(k)}_{ij}]^{(\mu)}+\frac{\lambda}{m}\theta_{ij}^{(k)}& if \quad j\ne0
\end{matrix}\right.\]