神经网络:原理、应用与编程实现
1. 隐藏层梯度计算
对于索引为 $l$ 的隐藏层,损失函数关于隐藏层输入 $z^{(l)}$ 的梯度 $\nabla_{z^{(l)}}Loss(\hat{y}, y)$ 可以通过以下公式计算:
[
\begin{align }
\nabla_{z^{(l)}}Loss(\hat{y}, y) &= \nabla_{z^{(l)}}Loss(f^{(L)}(W^{(L)} \cdots f^{(l + 2)}(W^{(l + 2)}f^{(l + 1)}(W^{(l + 1)}z^{(l)})) \cdots), y)\
&= \nabla_{a^{(L)}}Loss(a^{(L)}, y) \odot f^{(L)’}(z^{(L)})f^{(L - 1)’}(z^{(L - 1)})^{\intercal} \odot W^{(L)} \cdots f^{(l)’}(z^{(l)})^{\intercal} \odot W^{(l + 1)}\
&= \nabla_{z^{(l + 1)}}Loss(\hat{y}, y)f^{(l)’}(z^{(l)})^{\intercal} \odot W^{(l + 1)}
\end{align }
]
这个公式表明可以从输出层递归地计算并反向传播关于隐藏层值的梯度,直到到达输入层。$\nabla_{z^{(l)}}Loss(\hat{y}, y)$ 有时也用 $\delta^{(l)}$ 表示。
以图 8.5 为例,使用两个线性激活函数 $f^{(1)}$ 和 $f^{(2)}$ 代替 ReLU
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



