可训练权重是什么 可训练权重是什么意思_数据


神经网络中的每一层对输入数据进行如下变换:

output=relu(dot(W,input)+b)

在上述表达式中,W和b都是张量,被称为该层的权重(weight)或可训练参数(trainable parameter),分别对应kernel和bias属性。这些权重包含网络从训练数据中学到的信息。

刚开始,这些权重矩阵取较小的随机值,即称为随机初始化(random initialization)。当然,W和b都是随机的,relu(dot(W,input)+b)肯定不会得到任何有用的表示。虽然得到的表示是没有意义的,但这是一个起点,下一步则是根据反馈信号逐渐调节这些权重,这个逐渐调节的过程叫作训练,也就是机器学习中的“学习”。这个过程通过一个训练循环(training loop)来实现,其具体步骤如下:

(1)抽取训练样本x和对应目标y组成的数据批量;

(2)在x上运行网络(即前向传播(forward propagation)),得到预测值y_pred;

(3)计算网络在这批数据上的损失,用于衡量y_pred和y之间的距离;

(4)更新网络的所有权重,使网络在这批数据上的损失有所下降。

最终得到的网络在训练数据上的损失非常小,即预测值y_pred和预期目标y之间的距离非常小,也就是说,网络“学会”将输入映射到正确的目标。具体来讲,步骤(1)看起来非常简单,只是输入和输出的代码;步骤(2)和(3)仅仅是一些张量运算的应用;难点在于步骤(4):更新网络的权重。

对于网络中的某个权重系数,我们怎么知道这个系数应该增大还是减小?以及变化多少?一种简单的解决方案是,保持网络中的其他权重不变,只考虑某个标量系数,让其尝试不同的取值。假设这个系数的初始值为0.3,对一批数据做完前向传播后,网络在这批数据上的损失是0.5;如果我们将这个系数的值修改为0.35并重新运行前向传播,损失会增大到0.6;但如果你将这个系数减小到0.25,损失会减小到0.4。在这个例子中,将这个系数减小0.05似乎有助于使损失最小化。对于网络中的所有系数都要重复这一过程。

然而,这种做法效率非常低,因为对于每个系数(有时甚至多达上百万个)都需要计算两次前向传播,这种计算代价很大。一种更好的方法是利用网络中所有运算都是可微(differentiable)的这一事实,计算损失相对于网络系数的梯度(gradient),然后向梯度的反方向改变系数,从而使损失降低,这样可以大大提高计算效率。