当前位置:  开发笔记 > 人工智能 > 正文

偏差在神经网络中的作用

如何解决《偏差在神经网络中的作用》经验,为你挑选了15个好方法。

我知道梯度下降和反向传播定理.我没有得到的是:什么时候使用偏见很重要,你如何使用它?

例如,在映射AND函数时,当我使用2个输入和1个输出时,它不会给出正确的权重,但是,当我使用3个输入(其中1个是偏置)时,它会给出正确的权重.



1> Nate Kohl..:

我认为偏见几乎总是有用的.实际上,偏差值允许您将激活功能向左或向右移动,这对于成功学习可能是至关重要的.

看一个简单的例子可能会有所帮助.考虑这个没有偏差的1输入,1输出网络:

简单的网络

通过将输入(x)乘以权重(w 0)并将结果通过某种激活函数(例如,sigmoid函数)来计算网络的输出.

对于w 0的各种值,这是该网络计算的函数:

网络输出,给定不同的w0权重

改变重量w 0基本上改变了S形的"陡度".这很有用,但如果你希望网络在x为2时输出0怎么办?只是改变S形的陡峭度并不会真正起作用 - 你希望能够将整条曲线向右移动.

这正是偏见允许你做的事情.如果我们向该网络添加偏见,就像这样:

简单的网络与偏见

...然后网络的输出变为sig(w 0*x + w 1*1.0).以下是w 1的各种值的网络输出:

网络输出,给定不同的w1权重

对于w 1,权重为-5 将曲线向右移动,这允许我们在x为2时具有输出0的网络.


@ user1621769:偏差的主要功能是为每个节点提供可训练的常数值(除了节点接收的正常输入外).您可以通过连接到N个节点的单个偏置节点,或者每个具有单个连接的N个偏置节点来实现这一点; 结果应该是一样的.
偏差单位应该是每个网络1个还是每层1个?
@Gabriel:每个隐藏的神经元应该有一个偏差.
@ user1621769:最简单的方法是具有单个偏置节点的网络,该节点连接到网络中的所有非输入节点.
@ user1621769:你可能没有考虑到权重?每个连接具有可训练的加权,并且偏置节点具有固定值.
@ user132458,如果训练算法计算出您不需要偏移,则偏置权重可能接近0.因此消除了偏置信号.
@ user132458了解有关所需解决方案的内容有点不寻常,但我想如果您知道问题并不需要,可以跳过它.
@NateKohl:我真的很喜欢您的回答,但是您说的对我来说有点矛盾:“一个可训练的常量值” ...对我来说,_constant_值是不变的。但是,您编写了_trainable_,这意味着该值需要更改。那么,偏差是恒定的还是可训练的?
@Gabriel他们应该是网络中每一层的偏差
@Ajay,我们需要每个神经元1个偏差才能使每个S型(每个神经元)向左或向右移动。在学习过程中,整个层的一个偏差只会将所有的S型信号同时向左或向右移动。那不是我们想要的。我们希望给定层的每个神经元与其他神经元竞争,以代表其自身的“知识”。

2> 小智..:

只是为了加我的两分钱.

一种更简单的方法来理解偏差是什么:它在某种程度上类似于线性函数的常数b

y = ax + b

它允许您上下移动线以更好地适应预测.没有b,线总是穿过原点(0,0),你可能会变得更差.


@ blue-sky因为通过将偏差乘以权重,您可以将其移动任意数量.
b是$ x ^ 0 $的系数.a是$ x ^ 1 $的系数
b不是"系数"而是截距.
很好的神学,但如果我们将偏差设置为1,那么为什么现在每条线都会通过(0,1)而不是(0,0),因此它对拟合产生影响?因为所有线现在偏向y = 1而不是y = 0为什么这有用?
将*b*称为"系数"是否正确?"系数"不是用来乘以变量的数字吗?

3> Kiril..:

在ANN的训练期间,可以调整两种不同类型的参数,激活函数中的权重和值.这是不切实际的,如果只应调整其中一个参数会更容易.为了解决这个问题,人们发明了一种偏见神经元.偏置神经元位于一层,连接到下一层中的所有神经元,但前一层没有,它总是发射1.由于偏置神经元发射1,连接到偏置神经元的权重直接添加到其他权重的总和(公式2.1),就像激活函数中的t值一样.1

它不切实际的原因是因为你同时调整了权重和值,所以对权重的任何改变都可以抵消对前一个数据实例有用的值的变化......添加一个没有变化值的偏置神经元允许您可以控制图层的行为.

此外,偏差允许您使用单个神经网络来表示类似的情况.考虑以下神经网络表示的AND布尔函数:

ANN http://www.aihorizo​​n.com/images/essays/perceptron.gif

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是与偏差/阈值神经元相关的权重.


将其视为一般经验法则:添加偏见!神经网络在某种程度上是"不可预测的"*所以如果你添加一个偏置神经元,你更有可能更快地找到解决方案,如果你没有使用偏见.当然,这在数学上没有得到证实,但这是我在文献和一般用途中观察到的.
好的,那我该如何找出需要增加偏见的地方?我基本上是在尝试编写2层前馈非线性神经网络。我应该在哪里添加偏见?

4> 小智..:

这个帖子真的帮助我开发了自己的项目.下面是一些进一步的说明,显示了在双变量回归问题上有和没有偏置单元的简单2层前馈神经网络的结果.权重随机初始化并使用标准ReLU激活.正如我之前的答案所得出的结论,没有偏见,ReLU网络无法在(0,0)处偏离零.

在此输入图像描述

在此输入图像描述



5> 小智..:

偏见不是一个NN术语,它是一个需要考虑的通用代数术语.

Y = M*X + C (直线方程)

现在,如果C(Bias) = 0那时,线将始终通过原点,即(0,0),并且仅依赖于一个参数,即M,这是斜率,因此我们可以使用更少的东西.

C,这是偏见需要任何数字,并具有移动图表的活动,因此能够代表更复杂的情况.

在逻辑回归中,目标的期望值由链接函数转换,以将其值限制为单位间隔.通过这种方式,模型预测可以被视为主要结果概率,如图所示:维基百科上的Sigmoid函数

这是NN映射中打开和关闭神经元的最终激活层.偏向还可以发挥作用,它可以灵活地改变曲线,帮助我们绘制模型图.



6> Debilski..:

没有偏差的神经网络中的层只不过是输入向量与矩阵的乘法.(输出向量可能会通过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功能也无法解决.


如果使用sigmoid传递函数,则会引入非线性.说这是一个线性函数是错误的并且也有些危险,因为sigmoid的非线性是解决几个问题的关键.另外,sigmoid(0)= 0.5,并且没有s,其中sigmoid(x)= 0.
是的,但是对于没有偏置的0的任何输入,它是0.5,无论之前的线性函数是什么样的.这就是重点.你通常不训练你的sigmoid功能,你只是忍受它.线性问题发生在sigmoid函数之前.

7> bayer..:

当您使用人工神经网络时,您很少了解您想要学习的系统的内部结构.如果没有偏见,有些事情是无法学到的.例如,看看下面的数据:(0,1),(1,1),(2,1),基本上是将任何x映射到1的函数.

如果您有一个单层网络(或线性映射),则无法找到解决方案.但是,如果你有偏见,这是微不足道的!

在理想的设置中,偏差还可以将所有点映射到目标点的平均值,并让隐藏的神经元模拟与该点的差异.



8> 小智..:

单独修改神经元WEIGHTS仅用于操纵传递函数的形状/曲率,而不是其平衡/零交叉点.

偏置神经元的引入允许您沿输入轴水平(左/右)移动传递函数曲线,同时保持形状/曲率不变.这将允许网络生成与默认值不同的任意输出,因此您可以自定义/移动输入到输出映射以满足您的特定需求.

请参阅此处获取图形说明:http: //www.heatonresearch.com/wiki/Bias



9> Íhor Mé..:

只是为了添加所有这些非常缺失的东西,其余的,很可能,不知道.

如果你正在使用图像,你可能实际上更愿意不使用偏见.理论上,通过这种方式,您的网络将更加独立于数据量级,如图像是否暗,或是否明亮和生动.通过研究数据中的相对性,网络将学习如何做到这一点.许多现代神经网络利用这一点.

对于其他具有偏差的数据可能很关键.这取决于您正在处理的数据类型.如果你的信息是幅度不变的 - 如果输入[1,0,0.1]会产生与输入[100,0,10]相同的结果,你可能会在没有偏见的情况下变得更好.



10> Martin Thoma..:

在我的硕士论文中的几个实验中(例如第59页),我发现偏差可能对第一层很重要,但特别是在最后完全连接的层,它似乎没有发挥重要作用.

这可能高度依赖于网络架构/数据集.



11> 小智..:

偏差决定您希望重量旋转多少角度.

在二维图表中,权重和偏差有助于我们找到输出的决策边界.假设我们需要构建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轴的pareller.

我们想要旋转边界,怎么样?

通过改变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章"感知器学习规则"



12> Jordan Benne..:

特别是,Nate的回答,zfy的回答以及Pradi的回答都很棒.

简单来说,偏差允许学习/存储越来越多的权重变化 ......(侧注:有时给出一些阈值).无论如何,更多的变化意味着偏差会将更丰富的输入空间表示添加到模型的学习/存储权重中.(更好的权重可以增强神经网络的猜测能力)

例如,在学习模型中,假设/猜测在给定一些输入的情况下可能受到y = 0或y = 1的限制,可能是某些分类任务...即某些x =(1,1)和某些y = 0对于某些x =(0,1),y = 1.(关于假设/结果的条件是我上面谈到的阈值.请注意,我的示例设置输入X是每个x =一个双值或二值的向量,而不是Nate的一些集合X的单值x输入).

如果我们忽略偏差,许多输入可能最终由很多相同的权重表示(即学习的权重大多出现在原点附近(0,0).然后模型将被限制为较差的好权重,而不是许多更好的权重,它可以更好地学习偏见.(学习不良的权重导致较差的猜测或神经网络的猜测能力下降)

因此,模型最接近原点,并且在阈值/决策边界内尽可能多的地方学习是最佳的.通过偏差,我们可以实现接近原点的自由度,但不限于原点的直接区域.



13> RobMcZag..:

扩展@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')

因此,最后您还可以看到您的偏差,只是表示输出部分的另一个输入,实际上与您的输入无关.



14> Yumlembam Ra..:

以简单的方式思考,如果你有y = w1*x,其中y是你的输出,w1是重量想象一个条件,其中x = 0然后y = w1*x等于0,如果你想更新你的体重你有通过delw = target-y计算多少变化,其中target是你的目标输出,在这种情况下,'dew'不会改变,因为y被计算为0.所以,假设你可以添加一些额外的值,它将有助于y = w1*x + w0*1,其中bias = 1,可以调整权重以获得正确的偏差.请参考下面的示例.

在线方面,斜率截距是一种特定形式的线性方程.

Y = mx + b中

检查图像

图片

这里b是(0,2)

如果你想把它增加到(0,3)你将如何通过改变b的值来做到这一点,这将是你的偏见



15> 小智..:

对于我研究过的所有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是整数

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有