一)
在监督学习任务中,整体优化目标是所有训练样例的总损失,定义为 E = \sum_n loss(y_n, t_n),其中 n 是所有训练样例的索引,y_n 指网络训练样例 n 的输出,t_n 是训练样例 n 的标签,loss 指的是损失函数。注意y_n和t_n一般是向量化的量——向量长度由网络中输出神经元的数量决定。
损失函数的一个可能选择是平方误差,定义为 loss(y, t) = \sum_k (y_k - t_k) ^ 2,其中 k 是指网络中输出神经元的数量。在反向传播中,必须计算整体优化目标相对于网络参数的偏导数——这些参数是突触权重和神经元偏差。这是根据链式法则通过以下公式实现的:
(\partial E / \partial w_{ij}) = (\partial E / \partial out_j) * (\partial out_j / \partial in_j) * (\partial in_j / 部分 w_{ij}),
其中 w_{ij} 表示神经元 i 和神经元 j 之间的权重,out_j 表示神经元 j 的输出,in_j 表示神经元 j 的输入。
如何计算神经元输出 out_j 及其相对于神经元输入 in_j 的导数取决于使用的激活函数。如果您使用线性激活函数来计算神经元的输出 out_j,则项 (\partial out_j / \partial in_j) 变为 1。例如,如果您使用逻辑函数作为激活函数,则项 (\partial out_j / \部分 in_j) 变为 sig(in_j) * (1 - sig(in_j)),其中 sig 是逻辑函数。
B)
在弹性反向传播中,偏差的更新方式与权重完全相同——基于偏导数的符号和各个可调整的步长。
C)
我不太确定我是否理解正确。总体优化目标是所有网络参数的标量函数,无论有多少输出神经元。所以这里应该不会混淆如何计算偏导数。
一般来说,为了计算整体优化目标 E 关于某个权重 w_{ij} 的偏导数 (\partial E / \partial w_{ij}),必须计算偏导数 (\partial E / \partial w_{ij})每个输出神经元 k 相对于 w_{ij} as的部分 out_k / \partial w_{ij})
(\partial E / \partial w_{ij}) = \sum_k (\partial E / \partial out_k) * (\partial out_k / \partial w_{ij})。
但是请注意,如果 w_{ij} 不影响输出神经元的输出 out_k,则输出神经元 k 相对于 w_{ij} 的偏导数 (\partial out_k / \partial w_{ij}) 将为零k.
还有一件事。如果使用平方误差作为损失函数,则整体优化目标 E 相对于某个输出神经元 k 的输出 out_k 的偏导数 (\partial E / \partial out_k) 为
(\partial E / \partial out_k) = \sum_k 2 * (out_k - t_k),
其中数量 (out_k - t_k) 被称为附加到输出单元 k 的误差,并且为了符号方便,我假设只有一个带有标签 t 的训练示例。注意,如果 w_{ij} 对输出神经元 k 的输出 out_k 没有任何影响,那么 w_{ij} 的更新将不依赖于误差 (out_k - t_k),因为 (\partial out_k / \partial w_{ ij}) = 0 如上所述。
最后一句话,以避免任何混淆。 y_k 和 out_k 均指网络中输出神经元 k 的输出。