【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我知道梯度下降和反向传播定理。 我没有得到的是:什么时候使用偏见很重要,你如何使用它?
例如,当映射AND
功能时,当我使用2个输入和1个输出时,它不会给出正确的权重,但是,当我使用3个输入(其中1个是偏置)时,它会给出正确的权重。
#1楼
单独修改神经元WEIGHTS仅用于操纵传递函数的形状/曲率 ,而不是其平衡/零交叉点。
偏置神经元的引入允许您沿输入轴水平(左/右)移动传递函数曲线,同时保持形状/曲率不变。 这将允许网络生成与默认值不同的任意输出,因此您可以自定义/移动输入到输出映射以满足您的特定需求。
请参阅此处获取图形说明: http : //www.heatonresearch.com/wiki/Bias
#2楼
在ANN的训练期间,可以调整两种不同类型的参数,激活函数中的权重和值。 这是不切实际的,如果只应调整其中一个参数会更容易。 为了解决这个问题,人们发明了一种偏见神经元。 偏置神经元位于一层,连接到下一层中的所有神经元,但在前一层中没有,并且它总是发射1.由于偏置神经元发射1,连接到偏置神经元的权重被直接添加到其他权重的总和(公式2.1),就像激活函数中的t值一样。 1
它不切实际的原因是因为你同时调整了权重和值,所以对权重的任何改变都可以抵消对先前数据实例有用的值的改变...添加一个没有改变值的偏置神经元允许您可以控制图层的行为。
此外,偏差允许您使用单个神经网络来表示类似的情况。 考虑以下神经网络表示的AND布尔函数:
(来源: aihorizon.com )
- w0对应于b 。
- w1对应于x1 。
- w2对应于x2 。
单个感知器可用于表示许多布尔函数。
例如,如果我们假设布尔值为1(真)和-1(假),那么使用双输入感知器来实现AND函数的一种方法是设置权重w0 = -3,并且w1 = w2 = 0.5。 可以使该感知器代表OR函数,而不是通过将阈值改变为w0 = -.3。 实际上,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是与偏差/阈值神经元相关的权重。
#3楼
没有偏差的神经网络中的层只不过是输入向量与矩阵的乘法。 (输出向量可能会通过sigmoid函数进行规范化,然后用于多层ANN,但这并不重要。)
这意味着您正在使用线性函数,因此所有零的输入将始终映射到全零的输出。 对于某些系统来说,这可能是一个合理的解决方案,但一般来说它限制性太强。
使用偏差,您可以有效地为输入空间添加另一个维度,该维度始终取值为1,因此您将避免使用全零的输入向量。 你不会失去任何一般性,因为训练有素的权重矩阵不需要是满足的,所以它仍然可以映射到以前可能的所有值。
2d ANN:
对于将两个维度映射到一个维度的ANN,如在再现AND或OR(或XOR)函数时,您可以将神经网络视为执行以下操作:
在2d平面上标记输入向量的所有位置。 因此,对于布尔值,您需要标记(-1,-1),(1,1),( - 1,1),(1,-1)。 你的ANN现在做的是在2d平面上绘制一条直线,将正输出与负输出值分开。
没有偏见,这条直线必须经过零,而有偏见,你可以自由地把它放在任何地方。 所以,你会发现没有偏见你就会遇到AND函数的问题,因为你不能把(1,-1) 和 (-1,1)放在负面。 (他们不允许就行。)问题是相等的或功能。 但是,如果有偏差,则很容易划清界限。
请注意,即使有偏差,在这种情况下的XOR功能也无法解决。
#4楼
当您使用人工神经网络时,您很少了解您想要学习的系统的内部结构。 如果没有偏见,有些事情是无法学到的。 例如,看看下面的数据:(0,1),(1,1),(2,1),基本上是将任何x映射到1的函数。
如果您有一个单层网络(或线性映射),则无法找到解决方案。 但是,如果你有偏见,这是微不足道的!
在理想的设置中,偏差还可以将所有点映射到目标点的平均值,并让隐藏的神经元模拟与该点的差异。
#5楼
我认为偏见几乎总是有用的。 实际上, 偏差值允许您将激活功能向左或向右移动 ,这对于成功学习可能是至关重要的。
看一个简单的例子可能会有所帮助。 考虑这个没有偏差的1输入,1输出网络:
通过将输入(x)乘以权重(w 0 )并将结果通过某种激活函数(例如,sigmoid函数)来计算网络的输出。
对于w 0的各种值,这是该网络计算的函数:
改变重量w 0基本上改变了S形的“陡度”。 这很有用,但如果你希望网络在x为2时输出0怎么办? 只是改变S形的陡峭度并不会真正起作用 - 你希望能够将整条曲线向右移动 。
这正是偏见允许你做的事情。 如果我们向该网络添加偏见,就像这样:
...然后网络的输出变为sig(w 0 * x + w 1 * 1.0)。 以下是w 1的各种值的网络输出:
对于w 1,权重为-5将曲线向右移动,这允许我们在x为2时具有输出0的网络。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3145863