偏差在神经网络中起什么作用?


805

我知道梯度下降和反向传播算法。我没有得到的是:什么时候使用偏见很重要,以及如何使用它?

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


17
看看这个问题:stackoverflow.com/questions/1697243/help-with-perceptron给出了一个实际问题的示例,其中OP没有使用偏差项
Amro 2010年

6
这是Python中一个很好的示例,说明了偏见为何如此重要原因:) stackoverflow.com/questions/38248657/…–
minerals

3
这是一本很好的有关反向传播数学的文章,也涵盖了偏差更新:theclevermachine.wordpress.com/2014/09/06/…–
Andy

Answers:


1358

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

看一个简单的例子可能会有所帮助。考虑以下无偏差的1输入1输出网络:

简单网络

网络的输出是通过将输入(x)乘以权重(w 0)并将结果传递给某种激活函数(例如S型函数)来计算的。

对于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的网络。


6
@ user1621769:最简单的方法是将一个偏置节点连接到网络中所有非输入节点的网络。
Nate Kohl 2013年

65
@ user1621769:偏差的主要功能是为每个节点提供可训练的常数值(除了该节点接收的常规输入外)。您可以通过一个具有与N个节点的连接的单个偏置节点,或通过每个具有单个连接的N个偏置节点来实现这一点。结果应该是相同的。
Nate Kohl

4
@ user1621769:您可能没有考虑加权?每个连接具有可训练的权重,并且偏置节点具有固定值。
Dimpl

4
@ user132458,如果训练算法发现您不需要偏置偏移,则偏置权重可能接近0。这样就消除了偏置信号。
jorgenkg

8
@Gabriel:每个隐藏的神经元应该有一个偏见。

341

只是加上我的两分钱。

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

y =轴+ b

它使您可以上下移动线以更好地将预测与数据拟合。如果没有b,则直线始终穿过原点(0,0),因此拟合度可能会较差。


5
不错的语法,但是如果我们将偏差设置为1,那么为什么现在每行都经过(0,0)而不是(0,0)来适合拟合,因为所有行现在都经过y = 1而不是y = 0,这为什么有帮助?
蓝色的天空,

36
@ blue-sky因为通过将偏差乘以权重,您可以将其偏移任意量。
Carcigenicate

3
b称为“系数” 是否正确?“系数”不是用来与变量相乘的数字吗?
2016年

7
b不是“系数”,而是截距。
Espanta

22
b是$ x ^ 0 $的系数。a是$ x ^ 1 $的系数

64

该线程确实帮助我开发了自己的项目。这是一些进一步的说明,显示了一个简单的2层前馈神经网络在二变量回归问题上有无偏置单元的结果。权重随机初始化,并使用标准ReLU激活。正如我面前的答案所得出的那样,在没有偏差的情况下,ReLU网络无法在(0,0)处偏离零。

在此处输入图片说明

在此处输入图片说明


1
您可以添加使用轴标签绘制的功能吗?
Komal-SkyNET

46

可以在训练ANN的过程中调整两种不同类型的参数,权重和激活函数中的值。这是不切实际的,如果只应调整一个参数,则会更容易。为了解决这个问题,发明了一种偏向神经元。偏向神经元位于一层,与下一层中的所有神经元相连,但在上一层中没有,它始终发出1。由于偏向神经元发出1,因此将与偏向神经元相连的权重直接添加到就像激活函数中的t值一样,其他权重的总和(等式2.1)。1个

之所以不切实际是因为您同时调整了权重和值,所以权重的任何更改都可以抵消对先前数据实例有用的值的更改...添加不更改值的偏差神经元允许您可以控制图层的行为。

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

人工神经网络
(来源:aihorizo​​n.com

  • w0对应于b
  • w1对应于x1
  • w2对应于x2

单个感知器可用于表示许多布尔函数。

例如,如果我们假设布尔值分别为1(true)和-1(false),则使用双输入感知器实现AND功能的一种方法是设置权重w0 = -3,而w1 = w2 = .5。通过将阈值更改为w0 = -.3,可以使此感知器表示OR功能。实际上,AND和OR可以看作是n个函数中的m个的特例:也就是说,在感知器n个输入中至少m个必须为真的函数。OR函数对应于m = 1,而AND函数对应于m = n。通过将所有输入权重设置为相同的值(例如0.5),然后相应地设置阈值w0,可以使用感知器轻松表示n的m个功能。

感知器可以表示所有原始布尔函数AND,OR,NAND(1 AND)和NOR(1 OR)。机器学习-汤姆·米切尔(Tom Mitchell)

阈值是偏差,w0是与偏差/阈值神经元相关的权重。


8
将其视为一般经验法则:增加偏见!神经网络在某种程度上是“不可预测的”,因此,如果您添加了偏向神经元,则您更可能更快地找到解决方案,而如果您不使用偏见。当然,这还没有得到数学上的证明,但这是我在文献和一般用途中所观察到的。
基里尔2010年

25

偏差不是NN术语,而是要考虑的通用代数术语。

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

现在,如果C(Bias) = 0这样,线将始终通过原点,即(0,0),并且仅取决于一个参数,即M,即坡度,因此我们需要处理的事情更少。

C,即偏差可以是任意数字,并且可以移动图表,因此可以表示更复杂的情况。

在逻辑回归中,目标的期望值通过链接函数进行转换,以将其值限制为单位间隔。这样,可以将模型预测视为主要的结果概率,如下所示:Wikipedia上的Sigmoid函数

这是NN贴图中打开和关闭神经元的最终激活层。偏差在这里也可以发挥作用,它可以灵活地移动曲线以帮助我们绘制模型。


1
那么,当不使用偏置线总是通过原点时,神经网络训练/学习中会出现什么问题呢?
Daniyal Javaid

@DaniyalJavaid这可能是可能的,而不是问题
Pradi KL

23

神经网络中没有偏差的一层无非就是输入向量与矩阵的乘积。(输出矢量可能会通过S型函数传递以进行规范化,然后再用于多层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
如果使用S型传递函数,则会引入非线性。指出这是一个线性函数是错误的,并且在某种程度上也是危险的,因为乙状结肠的非线性是解决多个问题的关键。另外,乙状结肠(0)= 0.5,并且不存在X为哪些乙状结肠(x)= 0。
拜耳

2
是的,但是对于0的任何输入而没有偏差,它都是0.5,无论之前的线性函数是什么样子。这就是重点。通常,您不训练乙状结肠功能,而只是接受它。线性问题发生在S型函数之前。
Debilski 2010年

我明白你的意思:该层无法从0开始学习与开始时不同的输出。这是正确且重要的。但是,“线性函数参数”在我看来并不适用。即使存在偏差,该函数仍然是线性的。线性特性在这里是令人误解的。(是的,我可能正在挑剔。)
拜耳

我想说,有偏见是仿射的。(en.wikipedia.org/wiki/Affine_transformation#Representation
Debilski

是的,你是对的。感谢您向我指出这种差异。(为什么我们称其为线性回归,顺便说一句,尽管它是仿射的?)
拜耳,2010年

20

使用ANN时,您几乎不了解要学习的系统内部。没有偏见就无法学到一些东西。例如,看一下以下数据:(0,1),(1,1),(2,1),基本上是一个将x映射为1的函数。

如果您具有单层网络(或线性映射),则找不到解决方案。但是,如果您有偏见,那是微不足道的!

在理想的情况下,偏差还可以将所有点映射到目标点的平均值,并让隐藏的神经元为该点的差异建模。


18

仅修改神经元权重仅能操纵传递函数的形状/曲率,而不是其平衡/零交叉点。

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

有关图形说明,请参见此处:http : //www.heatonresearch.com/wiki/Bias


16

只是为了添加所有这些,这是非常缺少的,而其余的(很可能是)不知道的。

如果要处理图像,则实际上可能根本不希望使用偏差。从理论上讲,您的网络将更不受数据量的影响,例如图片是暗的还是亮的和生动的。网络将通过研究数据内部的相对性来学习完成其工作。许多现代神经网络都在利用这一点。

对于其他数据,偏差可能很关键。这取决于您要处理的数据类型。如果您的信息是大小不变的---如果输入[1,0,0.1]的结果应与输入[100,0,10]的结果相同,则最好不要偏见。


使用规范化可能会更好。用“缺乏偏差”产生幅度不变性的现代网络的例子是什么?
AwokeKnowing

@AwokeKnowing,我相信,通常的ResNet会利用它,因为它是“初始化”的一部分,但我不确定自己是否严格出于此目的或出于模型大小/效率的考虑而这样做,我不确定这个概念会在任何地方发布。但是我认为这在理论上是完全可以理解的。如果没有不按比例缩放的偏差,则按比例缩放值时,所有输出都将相应地按比例缩放。无论是否意识到这一概念,现代建筑的大部分至少在其大部分结构中都没有偏差。
伊尔默

16

我的硕士学位论文中的几次实验中(例如,第59页),我发现偏差对于第一层可能很重要,但尤其是在最后的完全连接层上,它似乎没有太大作用。

这可能高度依赖于网络体系结构/数据集。


这听起来完全类似于通过线性回归“手动”建模系统的过程。最简单的模型是Y_bar = mean(Y)。然后,您可以通过包含各种X项来增加复杂性,并在没有明显的信息获得时停止。
IRTFM

15

偏差决定您希望体重旋转多少角度。

在二维图中,权重和偏差可帮助我们找到输出的决策边界。假设我们需要构建AND函数,则input(p)-output(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
有用的解释/说明
-javadba

10

特别是Nate的答案,zfy的答案和Pradi的答案都很棒。

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

例如,在学习模型中,假设/猜测在给定某些输入的情况下理想地由y = 0或y = 1限制,也许在某些分类任务中...即对于某些x =(1,1)和某些x =(1,1),某些y = 0对于某些x =(0,1),y = 1。(关于假设/结果的条件是我在上面讨论的阈值。请注意,我的示例将输入X设置为每个x =两倍或2值向量,而不是Nate的某个集合X的单值x输入)。

如果我们忽略这种偏见,许多输入最终可能会由许多相同的权重表示(即,学习到的权重大多发生在原点(0,0)附近。然后,该模型将限于数量较少的优质权重,而不是许多更好的权重,它可以更好地通过偏见来学习(在学习不好的权重下导致较差的猜测或神经网络的猜测力下降)

因此,最理想的是,模型既要学习接近原点,又要学习在阈值/决策边界内尽可能多的位置。有了偏差,我们就可以使自由度接近原点,但不仅限于原点的直接区域。


9

扩展@zfy解释...一个输入,一个神经元,一个输出的方程式应为:

y = a * x + b * 1    and out = f(y)

其中x是来自输入节点的值,而1是偏置节点的值;y可以直接作为您的输出,也可以传递给函数(通常是S型函数)。还要注意,偏差可以是任何常数,但是为了使所有事情变得更简单,我们始终选择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写为“ X转置”)

因此,最后您还可以看到自己的偏见,因为它只是一个以上的输入,代表了输出中实际上与输入无关的部分。


我似乎记得在吴安德(Andrew Ng)的课堂上,在培训过程的一部分中消除了偏见。您能否更新您的答案以解释您的结论是“只是另一种输入”?
AwokeKnowing

@AwokeKnowing我不记得吴安德(Andrew Ng)班上的那件事,但这是几年前的事。也可以根据您要学习的内容来打开或关闭“偏置”。我读到在图像处理中他们不使用它来缩放。对我来说,如果您使用它,那么您也会在训练中使用它。当所有或部分输入为空或几乎为空时,效果是稳定系数。为什么在训练期间不使用偏见,而在使用NN预测新输入的输出时为什么不使用偏见呢?那有什么用?
RobMcZag

不,它更像是在前向传递中使用它,但是在计算反向传播的梯度或类似情况时不要使用它。
AwokeKnowing

@AwokeKnowing我想这是一种节省内存和时间的方法。您可以决定不关心学习偏差单位的系数。如果您至少有一个隐藏层,那会很好,因为偏置将为该层提供一些输入,并且可以通过第一层到第二层的系数来学习输出。我不确定收敛速度是否会改变。在我的一层示例中,您还必须学习应用于输出的偏置系数。
RobMcZag

在许多简单的问题中,目标数据已被淡化和缩放,因此不需要偏差。并且减少了大范围变量对异常值的过度影响。
IRTFM

9

除了提到的答案以外,我想补充一点。

偏差是我们的锚点。这是我们拥有某种基准的一种方法,我们不能低于该基准。就图而言,想像y = mx + b就像是该函数的y截距。

输出=输入乘以重量值并加上一个偏差值,然后应用激活函数。


8

用简单的方法思考,如果您有y = w1 * x,其中y是输出,而w1是权重,则设想一个条件,其中x = 0y = w1 * x等于0,如果要更新权重,则有通过delw = target-y计算多少变化,其中target是目标输出,在这种情况下,由于y被计算为0,因此'delw'不会改变。因此,假设您可以添加一些额外的值,则将有助于y = w1 * x + w0 * 1,其中bias = 1和权重可以调整以获得正确的bias。请参考以下示例。

就线而言,斜率截距是线性方程的一种特定形式。

y = mx + b

检查图像

图片

这里b是(0,2)

如果您想将其增加到(0,3),将如何通过更改b的值(偏斜)来实现


7

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


7

在神经网络中:

  1. 每个神经元都有偏见
  2. 您可以将偏差视为阈值(通常与阈值相反)
  3. 输入层的加权总和+偏差决定神经元的激活
  4. 偏差增加了模型的灵活性。

在没有偏差的情况下,仅考虑输入层的加权总和可能不会激活神经元。如果神经元未激活,则来自该神经元的信息不会通过其余的神经网络传递。

偏见的价值是可学习的。

在此处输入图片说明

有效地,偏差=-阈值。您可以将偏差视为使神经元输出1很容易-偏差很大时,神经元输出1很容易,但是如果偏差非常负,则很困难。

总结:偏差有助于控制激活功能将触发的值。

观看此视频以了解更多详细信息

几个有用的链接:

极客

走向数据科学


1
很好的解释。但是我不清楚这种偏见如何可以学习(或训练?)。在简单的情况下,损失= ReLU(omega * x + a),可以通过链规则来训练欧米伽的重量,但是a当to的梯度a始终为常数时,如何训练偏差呢?
Libin Wen

4

与y截距一样,术语“偏差”用于调整最终输出矩阵。例如,在经典等式y = mx + c中,如果c = 0,则直线将始终通过0。添加偏差项可为我们的神经网络模型提供更大的灵活性和更好的概括性。


0

通常,在机器学习中,我们有一个基本公式Bias-Variance Tradeoff, 因为在NN中,我们有过拟合问题(模型泛化问题,其中数据的微小变化导致模型结果的较大变化),并且由于该问题,我们具有较大的方差,因此引入小偏差可能会有所帮助。考虑以上偏差偏差权衡的公式,其中偏差是平方的,因此引入小的偏差可能会导致大量减少方差。因此,当您有较大的差异和过度拟合的危险时,请引入偏差。


3
偏差单位偏差方差折衷是分开的概念。问题是关于前者。
SigmaX

0

偏差有助于获得更好的方程式

想象一下输入和输出,就像一个函数一样 y = ax + b,您需要在input(x)和output(y)之间放置一条正确的线,以最小化每个点和该线之间的全局误差,如果保持这样的方程y = ax,您将拥有一个仅用于自适应的参数,即使您找到a使全局误差最小的最佳方法,也离期望值有点远

您可以说偏差使方程式更加灵活,以适应最佳值

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.