我知道梯度下降和反向传播算法。我不明白的是:什么时候使用偏见是重要的,你如何使用它?
例如,在映射AND函数时,当我使用两个输入和一个输出时,它不会给出正确的权重。然而,当我使用三个输入(其中一个是偏差)时,它给出了正确的权重。
我知道梯度下降和反向传播算法。我不明白的是:什么时候使用偏见是重要的,你如何使用它?
例如,在映射AND函数时,当我使用两个输入和一个输出时,它不会给出正确的权重。然而,当我使用三个输入(其中一个是偏差)时,它给出了正确的权重。
当前回答
如果您正在处理图像,实际上可能更喜欢完全不使用偏置。从理论上讲,这样你的网络将更独立于数据量,比如图片是暗的,还是亮的和生动的。网络将通过研究你的数据中的相对性来学习它的工作。很多现代神经网络都利用了这一点。
对于其他有偏差的数据可能是至关重要的。这取决于你要处理什么类型的数据。如果您的信息是大小不变的——如果输入[1,0,0.1]应该会导致与输入[100,0,10]相同的结果,那么没有偏差可能会更好。
其他回答
简单来说,如果你有y=w1*x,其中y是你的输出,w1是权重,想象一个条件,x=0,那么y=w1*x等于0。
如果你想要更新你的权重,你必须计算delw=target-y的变化量,其中target是你的目标输出。在这种情况下,'delw'将不会改变,因为y被计算为0。所以,假设你可以添加一些额外的值,这将有助于y = w1x + w01,其中偏差=1,权重可以调整以获得正确的偏差。考虑下面的例子。
就直线斜率而言,截距是线性方程的一种特殊形式。
Y = mx + b
检查图像
图像
这里b是(0,2)
如果你想把它增加到(0,3)你怎么通过改变b的值来实现呢?
偏差决定了你的体重旋转的角度。
在二维图表中,权重和偏差可以帮助我们找到输出的决策边界。
假设我们需要构建一个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章“感知器学习规则”。
如果您正在处理图像,实际上可能更喜欢完全不使用偏置。从理论上讲,这样你的网络将更独立于数据量,比如图片是暗的,还是亮的和生动的。网络将通过研究你的数据中的相对性来学习它的工作。很多现代神经网络都利用了这一点。
对于其他有偏差的数据可能是至关重要的。这取决于你要处理什么类型的数据。如果您的信息是大小不变的——如果输入[1,0,0.1]应该会导致与输入[100,0,10]相同的结果,那么没有偏差可能会更好。
在神经网络中:
每个神经元都有一个偏向 您可以将偏差视为阈值(通常是阈值的相反值) 输入层的加权和+偏置决定神经元的激活 偏差增加了模型的灵活性。
在没有偏差的情况下,仅考虑来自输入层的加权和可能不会激活神经元。如果神经元没有被激活,来自该神经元的信息就不会通过神经网络的其余部分传递。
偏见的价值是可以学习的。
实际上,bias = - threshold。你可以把偏差想象成让神经元输出1有多容易,如果偏差很大,神经元输出1很容易,但如果偏差很大,就很难了。
总而言之:偏置有助于控制激活函数的触发值。
观看这段视频了解更多细节。
一些更有用的链接:
Geeksforgeeks
走向数据科学
扩展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转置')
所以最后你也可以看到你的偏差只是一个输入来代表输出的那部分实际上是独立于你的输入的。