反向传播

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


符号解释

  • \(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.\]

posted @ 2022-08-07 19:17  kris-phl  阅读(65)  评论(0)    收藏  举报