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