我知道梯度下降和反向传播算法。我不明白的是:什么时候使用偏见是重要的,你如何使用它?
例如,在映射AND函数时,当我使用两个输入和一个输出时,它不会给出正确的权重。然而,当我使用三个输入(其中一个是偏差)时,它给出了正确的权重。
我知道梯度下降和反向传播算法。我不明白的是:什么时候使用偏见是重要的,你如何使用它?
例如,在映射AND函数时,当我使用两个输入和一个输出时,它不会给出正确的权重。然而,当我使用三个输入(其中一个是偏差)时,它给出了正确的权重。
当前回答
一个更简单的理解偏差的方法是:它在某种程度上类似于线性函数的常数b
y = ax + b
它允许你上下移动这条线,以便更好地将预测与数据相匹配。
如果没有b,直线总是经过原点(0,0)你可能会得到一个较差的拟合。
其他回答
单独修改神经元WEIGHTS只用于操纵传递函数的形状/曲率,而不是它的平衡/零交叉点。
引入偏置神经元允许您沿着输入轴水平(左/右)移动传递函数曲线,同时保持形状/曲率不变。 这将允许网络产生不同于默认值的任意输出,因此您可以自定义/移动输入到输出映射以满足您的特定需求。
请看这里的图表解释: http://www.heatonresearch.com/wiki/Bias
偏差有助于得到更好的方程。
想象一下,输入和输出就像一个函数y = ax + b,你需要在输入(x)和输出(y)之间画一条正确的线,以最小化每个点和直线之间的全局误差,如果你保持这样的方程y = ax,你将只有一个参数用于适应,即使你找到了最小化全局误差的最佳参数,它也会离你想要的值很远。
你可以说,偏差使方程更灵活,以适应最佳值
扩展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转置')
所以最后你也可以看到你的偏差只是一个输入来代表输出的那部分实际上是独立于你的输入的。
在我研究的所有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是一个整数。
一个更简单的理解偏差的方法是:它在某种程度上类似于线性函数的常数b
y = ax + b
它允许你上下移动这条线,以便更好地将预测与数据相匹配。
如果没有b,直线总是经过原点(0,0)你可能会得到一个较差的拟合。