yaboPP电子
技术文章

将偏置节点纳入你的神经网络

2020年2月5日通过罗伯特Keim

本文向您展示了如何将偏差值添加到以高级编程语言(如Python)实现的多层的Perceptron。

欢迎来到神经网络上的所有关于NyaboPP电子eural Network的全部电路系列,由Engineering Robert Keim董事创建。在您继续在偏置节点上继续本课程之前,请考虑追赶下面的其余部分:

  1. 如何使用神经网络进行分类:什么是感知器?
  2. 如何使用简单的Perceptron神经网络示例来对数据进行分类
  3. 如何训练基本的Perceptron神经网络
  4. 了解简单的神经网络培训
  5. 神经网络训练理论简介
  6. 了解神经网络的学习率
  7. 使用多层感知器的高级机器学习
  8. Sigmoid激活函数:多层感知器神经网络中的激活
  9. 如何训练多层感知器神经网络
  10. 理解多层感知器的训练公式和反向传播
  11. 神经网络体系结构的Python实现
  12. 如何用Python创建多层感知器神经网络
  13. 使用神经网络的信号处理:神经网络设计中的验证
  14. 用于神经网络的培训数据集:如何训练和验证Python神经网络
  15. 神经网络需要多少隐藏层和隐藏节点?
  16. 如何提高隐层神经网络的准确率
  17. 将偏见节点纳入你的神经网络


偏见节点,可以添加到感知器的输入层或隐藏层,产生一个常数值,由设计者选择。

我们讨论了偏差值回来第11部分,如果你不清楚什么是偏置节点,或者它们如何修改和增强神经网络的功能,我鼓励你阅读(或重读)那篇文章的相关部分。

在这篇文章中,我将首先解释两种将偏差值纳入你的网络架构的方法,然后我们将进行一个实验,看看偏差值是否可以提高我们在上一篇文章中获得的精度性能(部分16)。

通过电子表格结合偏差

下图描绘了在输入层中具有偏置节点但不在隐藏层中的网络的网络。

如果这是您要查找的配置,则可以使用包含您的培训或验证数据的电子表格添加偏差值。

这种方法的优点就是不需要进行实质性的代码修改。第一步是在电子表格中插入一栏,并在其中填写你的偏差值:

现在,您需要做的就是通过一个提高输入层的维度:

将偏差集成到代码中

如果您希望隐藏层中的偏置节点,或者如果您不喜欢使用电子表格,则需要一个不同的解决方案。

让我们假设我们要将偏置节点添加到输入层和隐藏层。首先,我们需要增加I_DIMH_dim,因为我们的目标是集成偏置节点,使得它们与普通节点一样函数,但是使用设计人员选择的预加权值并且永远不会改变。

我将完成这一点如下:


创建输入层偏置节点

您可能还记得,我们使用以下代码组装训练数据集,分离目标输出值,并提取训练样本的数量。

在这些语句之后,是二维数组中的列数training_data将等于电子表格中的输入列数。我们需要通过一个增加列的数量来解释输入层中的偏置节点,而我们可以使用所需的偏置值填充此附加列。

以下代码显示了如何完成这一点。


np.ones ()函数创建一个行数等于的单列数组training_count,它为此数组中的每个元素分配+1的值。然后我们使用np.hstack()函数将单列数组添加到原始数组的右侧training_data大批。

注意,我对培训数据和验证数据都执行了这个过程。重要的是要记住,目标实际上不是修改培训或验证数据;相反,我们修改数据是为了实现所需的网络配置。

当我们看感知器的框图时,偏见节点是网络本身的元素;因此,任何经过该网络处理的样本都必须经过这种修改。

创建隐藏层偏置节点

通过修改用于计算隐藏层Postivativation值的循环,可以将偏差添加到前馈处理中,然后手动插入最后一个隐藏节点的偏置值(其实际上是偏置节点)。

第一次修改如下:


如果网络配置为没有隐藏层偏见节点,hidden_​​bias.等于0,for循环的执行没有改变。

另一方面,如果我们已经决定包括隐藏层偏置节点,则for循环将不会计算层中最终节点的POSTActivation值(即,偏置节点)。

下一个步骤是增加节点变量,以便它将访问postActivation_H数组,然后分配偏置值。

注意,这些修改也必须应用到代码的验证部分。

+1以外的偏差值

在我的经验中,+1是标准偏置值,我不知道是否有任何用于使用其他数字的稳定性理由。偏差由权重修改,因此选择+1不会对偏置如何与网络的整体功能交互来限制。

但是,如果你想用其他偏差值做实验,你可以很容易做到。对于隐藏偏差,你只需改变分配给postActivation_H(节点)。对于输入偏差,您可以乘以new_column数组(最初每个元素都有+1)的期望偏差值。

检验偏差效应

如果你读过第16部分,你就会知道我的感知机在实验3中对样本进行分类时遇到了一些困难,这是一个“高度复杂”的问题。

让我们看看一个或多个偏置节点的添加是否提供了一致而显着的改进。

我的假设是分类准确性的差异将是相当微妙的,所以对于这个实验,我平均10次运行而不是五个。使用输入和输出之间的相同高复杂性关系生成训练和验证数据集,隐藏层维度为7。

以下是结果:

结论

如您所见,偏差节点并没有导致分类性能的任何重大变化。

这实际上并不让我感到惊讶 - 我认为偏置节点有时有点透明,并且给出了我在这个实验中使用的输入数据的性质,我没有理由偏见节点将有所帮助。

尽管如此,偏置是某些应用中的重要技术;写出支持偏见节点功能的代码是一个好主意,以便在需要时在那里。