我知道梯度下降和反向传播算法。我不明白的是:什么时候使用偏见很重要,你如何使用它?
例如,在映射AND
函数时,当我使用两个输入和一个输出时,它没有给出正确的权重。但是,当我使用三个输入(其中一个是偏差)时,它会给出正确的权重。
我知道梯度下降和反向传播算法。我不明白的是:什么时候使用偏见很重要,你如何使用它?
例如,在映射AND
函数时,当我使用两个输入和一个输出时,它没有给出正确的权重。但是,当我使用三个输入(其中一个是偏差)时,它会给出正确的权重。
我认为偏见几乎总是有帮助的。实际上,偏差值允许您将激活函数向左或向右移动,这可能对成功学习至关重要。
看一个简单的例子可能会有所帮助。考虑这个没有偏差的 1 输入 1 输出网络:
网络的输出是通过将输入 (x) 乘以权重 (w 0 ) 并将结果传递给某种激活函数(例如 sigmoid 函数)来计算的。
这是该网络针对 w 0的各种值计算的函数:
改变权重 w 0从本质上改变了 sigmoid 的“陡峭度”。这很有用,但是如果您希望网络在 x 为 2 时输出 0 怎么办?仅仅改变 sigmoid 的陡度并不能真正起作用——你希望能够将整个曲线向右移动。
这正是偏见允许你做的事情。如果我们向该网络添加偏差,如下所示:
...然后网络的输出变为 sig(w 0 *x + w 1 *1.0)。以下是 w 1的各种值的网络输出:
w 1的权重为 -5会使曲线向右移动,这允许我们拥有一个在 x 为 2 时输出 0 的网络。
理解偏差是什么的更简单方法:它在某种程度上类似于线性函数的常数b
y = ax + b
它允许您上下移动线条以更好地使预测与数据相匹配。
如果没有b,这条线总是穿过原点 (0, 0),你可能会得到一个更差的拟合。
在 ANN 的训练过程中可以调整两种不同的参数,即激活函数中的权重和值。这是不切实际的,如果只调整其中一个参数会更容易。为了解决这个问题,发明了一个偏置神经元。偏置神经元位于一层,连接到下一层的所有神经元,但前一层没有,它总是发出 1。由于偏置神经元发出 1,连接到偏置神经元的权重直接添加到其他权重的总和(等式 2.1),就像激活函数中的 t 值一样。1
它不切实际的原因是因为您同时调整权重和值,因此对权重的任何更改都可以抵消对先前数据实例有用的值的更改......添加一个不改变值的偏置神经元允许您可以控制图层的行为。
此外,偏差允许您使用单个神经网络来表示类似情况。考虑由以下神经网络表示的 AND 布尔函数:
(来源:aihorizon.com)
单个感知器可用于表示许多布尔函数。
例如,如果我们假设布尔值为 1(真)和 -1(假),那么使用双输入感知器实现 AND 函数的一种方法是设置权重 w0 = -3,并且 w1 = w2 = .5. 这个感知器可以通过将阈值更改为 w0 = -.3 来表示 OR 函数。事实上,AND 和 OR 可以看作是 m-of-n 函数的特殊情况:也就是说,感知器的 n 个输入中至少有 m 个必须为真的函数。OR 函数对应于 m = 1,AND 函数对应于 m = n。通过将所有输入权重设置为相同的值(例如,0.5),然后相应地设置阈值 w0,任何 m-of-n 函数都可以使用感知器轻松表示。
感知器可以表示所有原始布尔函数 AND、OR、NAND (1 AND) 和 NOR (1 OR)。机器学习——汤姆·米切尔)
阈值是偏差,w0是与偏差/阈值神经元相关的权重。
偏差不是NN项。这是一个需要考虑的通用代数术语。
Y = M*X + C
(直线方程)
现在,如果C(Bias) = 0
那样的话,这条线将始终通过原点,即(0,0)
,并且仅取决于一个参数,即M
,即斜率,因此我们可以使用的东西更少。
C
,即偏差取任意数字,并具有移动图的活动,因此能够表示更复杂的情况。
在逻辑回归中,目标的期望值通过链接函数进行转换,以将其值限制在单位区间内。通过这种方式,模型预测可以被视为主要结果概率,如下所示:
这是 NN 图中打开和关闭神经元的最后一个激活层。在这里,偏差也可以发挥作用,它可以灵活地移动曲线以帮助我们映射模型。
神经网络中没有偏差的层只不过是输入向量与矩阵的乘积。(输出向量可能会通过一个 sigmoid 函数进行归一化,然后用于多层ANN,但这并不重要。)
这意味着您使用的是线性函数,因此全零的输入将始终映射到全零的输出。对于某些系统来说,这可能是一个合理的解决方案,但通常限制性太强。
使用偏差,您可以有效地向输入空间添加另一个维度,该维度始终采用值 1,因此您避免了全为零的输入向量。您不会因此而失去任何普遍性,因为您训练的权重矩阵不需要是满射的,因此它仍然可以映射到以前可能的所有值。
二维人工神经网络:
对于将二维映射到一维的 ANN,如在再现 AND 或 OR(或 XOR)函数时,您可以将神经元网络视为执行以下操作:
在二维平面上标记输入向量的所有位置。因此,对于布尔值,您需要标记 (-1,-1)、(1,1)、(-1,1)、(1,-1)。您的 ANN 现在所做的是在 2d 平面上绘制一条直线,将正输出与负输出值分开。
没有偏差,这条直线必须经过零,而有偏差,你可以自由地将它放在任何地方。因此,您会看到,如果没有偏见,您将面临 AND 函数的问题,因为您不能将 (1,-1)和(-1,1) 都放在负面的一边。(他们不允许在线。)对于 OR 函数,问题是相等的。然而,有了偏见,很容易划清界限。
请注意,即使有偏差,这种情况下的 XOR 函数也无法解决。
当你使用人工神经网络时,你很少知道你想学习的系统的内部结构。有些东西没有偏见是学不来的。例如,看看以下数据:(0, 1), (1, 1), (2, 1),基本上是一个将任意 x 映射到 1 的函数。
如果您有一个单层网络(或线性映射),您将找不到解决方案。但是,如果您有偏见,那是微不足道的!
在理想情况下,偏差还可以将所有点映射到目标点的平均值,并让隐藏的神经元对与该点的差异进行建模。
单独修改神经元 WEIGHTS 仅用于操纵传递函数的形状/曲率,而不是其平衡/零交叉点。
偏置神经元的引入允许您沿输入轴水平(左/右)移动传递函数曲线,同时保持形状/曲率不变。这将允许网络产生与默认值不同的任意输出,因此您可以自定义/转换输入到输出的映射以满足您的特定需求。
有关图形说明,请参见此处: http ://www.heatonresearch.com/wiki/Bias
如果您正在使用图像,您实际上可能更愿意根本不使用偏见。从理论上讲,这样您的网络将更加独立于数据量,例如图片是暗的,还是明亮而生动的。网络将通过研究数据中的相对论来学习完成它的工作。许多现代神经网络都利用了这一点。
对于其他有偏差的数据可能很关键。这取决于您正在处理的数据类型。如果您的信息是幅度不变的 --- 如果输入 [1,0,0.1] 应该导致与输入 [100,0,10] 相同的结果,那么您可能会在没有偏差的情况下做得更好。
在我的硕士论文(例如第 59 页)的几个实验中,我发现偏差可能对第一层很重要,但特别是在最后的全连接层中,它似乎并没有起到很大的作用。
这可能高度依赖于网络架构/数据集。
偏差决定了您的体重将旋转多少角度。
在二维图表中,权重和偏差可以帮助我们找到输出的决策边界。
假设我们需要构建一个 AND 函数,输入(p)-输出(t)对应该是
{p=[0,0], t=0},{p=[1,0], t=0},{p=[0,1], t=0},{p=[1,1] , t=1}
现在我们需要找到一个决策边界,理想的边界应该是:
看?W 垂直于我们的边界。因此,我们说 W 决定了边界的方向。
但是,第一次很难找到正确的 W。大多数情况下,我们随机选择原始 W 值。因此,第一个边界可能是这样的:
现在边界平行于 y 轴。
我们要旋转边界。如何?
通过改变 W.
所以,我们使用学习规则函数:W'=W+P:
W'=W+P 等价于 W' = W + bP,而 b=1。
因此,通过改变 b(bias) 的值,可以决定 W' 和 W 之间的角度。这就是“ANN 的学习规则”。
您还可以阅读Martin T. Hagan / Howard B. Demuth / Mark H. Beale 的《神经网络设计》,第 4 章“感知器学习规则”
简而言之,偏差允许学习/存储越来越多的权重变化......(旁注:有时给定一些阈值)。无论如何,更多的变化意味着偏差为模型的学习/存储权重添加了更丰富的输入空间表示。(更好的权重可以增强神经网络的猜测能力)
例如,在学习模型中,假设/猜测最好以 y=0 或 y=1 为界,给定一些输入,可能在一些分类任务中......即对于一些 x=(1,1) 和一些 y=0对于某些 x=(0,1),y=1。(假设/结果的条件是我在上面谈到的阈值。请注意,我的示例将输入 X 设置为每个 x=a double 或 2 valued-vector,而不是 Nate 的某些集合 X 的单值 x 输入)。
如果我们忽略偏差,许多输入最终可能由许多相同的权重表示(即学习的权重大多出现在靠近原点(0,0) 的位置。然后该模型将被限制为较少数量的好权重,与许多更好的权重相比,它可以通过偏差更好地学习。(学习不佳的权重会导致较差的猜测或神经网络的猜测能力下降)
因此,模型在靠近原点的地方学习,而且在阈值/决策边界内尽可能多的地方学习是最佳的。有了偏差,我们可以使自由度接近原点,但不限于原点的直接区域。
扩展zfy 的解释:
一个输入、一个神经元、一个输出的等式应该如下所示:
y = a * x + b * 1 and out = f(y)
其中 x 是来自输入节点的值,1 是偏置节点的值;y 可以直接作为您的输出,也可以传递给函数,通常是 sigmoid 函数。另请注意,偏差可以是任何常数,但为了使一切更简单,我们总是选择 1(可能这很常见,以至于 zfy 没有显示和解释它)。
您的网络正在尝试学习系数 a 和 b 以适应您的数据。因此,您可以看到为什么添加元素b * 1
可以使其更好地适应更多数据:现在您可以同时更改斜率和截距。
如果您有多个输入,您的等式将如下所示:
y = a0 * x0 + a1 * x1 + ... + aN * 1
请注意,该等式仍然描述了一个神经元,一个输出网络;如果你有更多的神经元,你只需向系数矩阵添加一维,将输入多路复用到所有节点并总结每个节点的贡献。
你可以用矢量化格式写成
A = [a0, a1, .., aN] , X = [x0, x1, ..., 1]
Y = A . XT
即将系数放在一个数组中,将(输入+偏置)放在另一个数组中,您将获得所需的解决方案作为两个向量的点积(您需要转置 X 以使形状正确,我写了 XT a 'X transposed')
所以最后你也可以看到你的偏见只是一个输入,代表实际上独立于你的输入的输出部分。
在神经网络中:
在没有偏差的情况下,仅考虑来自输入层的加权和可能不会激活神经元。如果神经元未激活,则来自该神经元的信息不会通过神经网络的其余部分传递。
偏见的价值是可学习的。
实际上,偏差 = — 阈值。您可以将偏差视为让神经元输出 1 的难易程度——如果偏差非常大,神经元很容易输出 1,但如果偏差非常负,那就很难了。
总之:偏差有助于控制激活函数触发的值。
关注此视频了解更多详情。
一些更有用的链接:
以简单的方式思考,如果您有y=w1*x,其中y是您的输出,而w1是权重,请想象一个x=0的条件,然后y=w1*x等于 0。
如果你想更新你的体重,你必须通过delw=target-y计算多少变化,其中 target 是你的目标输出。在这种情况下,'delw'不会改变,因为y被计算为 0。因此,假设如果您可以添加一些额外的值,它将有助于y = w1 x + w0 1,其中偏差 = 1 并且可以调整权重以获得正确的偏见。考虑下面的例子。
就直线斜率而言,截距是线性方程的一种特定形式。
y = mx + b
检查图像
这里 b 是 (0,2)
如果你想将它增加到 (0,3),你将如何通过改变 b 的值来做到这一点。
对于我研究的所有ML书籍,W 总是定义为两个神经元之间的连接指数,这意味着两个神经元之间的连接性更高。
越强的信号将从发射神经元传输到目标神经元或 Y = w * X 以保持神经元的生物学特性,我们需要保持 1 >=W >= -1,但在实际回归,W 会以 |W| 结束 >=1 这与神经元的工作方式相矛盾。
因此,我提出 W = cos(theta),而 1 >= |cos(theta)|,并且 Y= a * X = W * X + b 而 a = b + W = b + cos(theta), b 是一个整数。
偏见是我们的锚。这是我们拥有某种基线的一种方式,我们不会低于该基线。就图形而言,将 y=mx+b 想象成这个函数的 y 截距。
输出 = 输入乘以权重值并添加偏差值,然后应用激活函数。
术语偏差用于调整最终输出矩阵,就像 y 截距一样。例如,在经典方程中,y = mx + c,如果 c = 0,则线将始终通过 0。添加偏置项为我们的神经网络模型提供了更大的灵活性和更好的泛化性。
偏差有助于获得更好的方程。
想象一下输入和输出就像一个函数y = ax + b并且你需要在输入(x)和输出(y)之间放置正确的线,以最小化每个点和线之间的全局误差,如果你保持等式这个y = ax,您将只有一个用于适应的参数,即使您找到了a
最小化全局误差的最佳参数,它也与想要的值相去甚远。
您可以说偏差使方程更灵活地适应最佳值