在前面几篇中已经介绍了一些Layer的正反向计算过程及其推导,并且用它们构建了一个网络
虽然推导的过程是建立在单个训练样本的基础上的,但对于同时使用多个训练样本同样有效,下面来简单的证明一下:
首先回顾一下线性层的正向计算过程,输入
是一个向量:
所有神经元的权重是一个矩阵:
,输出
同样是一个向量:
现在将其改成每次训练多个样本,先看训练批量为1的情况;另外,
的符号要做下改动
然后,将输入输出都写成以下形式:
很容易可以得到下面的式子:
现在,设每次训练n个样本,这些新增的训练样本表示为
所以输入和输出就变为:
和
可以看到,即使每次训练多个样本,它们之间的计算都是相互独立的,并不会纠缠在一起
这个是线性层的证明,其他的Layer就不一一说明了,再看看backward计算过程,同样,我们先看训练样本数为1的情况
backward中传进来的参数是损失关于输出的梯度
为了方便表示,这里令
,同时已知:
。为了将损失继续传回上一层,所以需要计算
,根据链式法则可得:
上面是训练样本数为1时的情况,第(三)篇有详细的推导,这里只是简单的回顾一下
现在来看训练样本数为n的情况,将损失关于输出的梯度表示成矩阵形式有:
利用和上面相同的计算过程有:
所以,在反向传播过程中,多个训练样本之间的梯度计算也是独立的