鄙人生医转码,道行浅薄请见谅~仅作笔记学习交流
好像在哪里都能看到前反向传播的名词,但是一直不知道所以然,刚好也是书上的chap
一、前向传播
前向传播指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果,假设输入样本是 x∈Rd, 并且我们的隐藏层不包括偏置项。 这里的中间变量是:
其中W(1)∈Rh×d 是隐藏层的权重参数。 将中间变量z∈Rh通过激活函数ϕ后, 我们得到长度为h的隐藏激活向量:
隐藏变量h也是一个中间变量。 假设输出层的参数只有权重W(2)∈Rq×h, 我们可以得到输出层变量,它是一个长度为q的向量:
假设损失函数为l,样本标签为y,我们可以计算单个数据样本的损失项,
根据L2正则化的定义,给定超参数λ,正则化项为
其中矩阵的Frobenius范数是将矩阵展平为向量后应用的L2范数。 最后,模型在给定数据样本上的正则化损失为:
在下面的讨论中,我们将J称为目标函数
二、前向传播计算图
上述简单网络相对应的计算图, 其中正方形表示变量,圆圈表示操作符。 左下角表示输入,右上角表示输出。 注意显示数据流的箭头方向主要是向右和向上的。
三、反向传播
反向传播(backward propagation或backpropagation)指的是计算神经网络参数梯度的方法:
好像没啥好讲的,有些佬写的更好一点
四、训练神经网络
在训练神经网络时,前向传播和反向传播相互依赖。 对于前向传播,我们沿着依赖的方向遍历计算图并计算其路径上的所有变量。 然后将这些用于反向传播,其中计算顺序与计算图的相反
以上述简单网络为例:一方面,在前向传播期间计算正则项 取决于模型参数和 的当前值。 它们是由优化算法根据最近迭代的反向传播给出的。 另一方面,反向传播期间参数 的梯度计算, 取决于由前向传播给出的隐藏变量的当前值
因此,在训练神经网络时,在初始化模型参数后, 我们交替使用前向传播和反向传播,利用反向传播给出的梯度来更新模型参数。 注意,反向传播重复利用前向传播中存储的中间值,以避免重复计算。 带来的影响之一是我们需要保留中间值,直到反向传播完成。 这也是训练比单纯的预测需要更多的内存(显存)的原因之一。 此外,这些中间值的大小与网络层的数量和批量的大小大致成正比。 因此,使用更大的批量来训练更深层次的网络更容易导致内存不足(Out of memory)错误