偏差在neural network中的作用

我意识到梯度下降和反向传播定理。 我没有得到的是:什么时候使用一个重要的偏见,你如何使用它?

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

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

这可能有助于看一个简单的例子。 考虑这个没有偏见的1input1输出networking:

简单的网络

networking的输出通过将input(x)乘以权重(w 0 )并通过某种激活函数(例如S形函数)传递结果来计算。

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

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

改变重量w 0本质上改变了S形的“陡度”。 这很有用,但是如果你希望networking在x是2的时候输出0呢? 只要改变S形的陡度就行不通了 – 你希望能够把整个曲线向右移动

这正是偏见允许你做的。 如果我们为这个networking增加一个偏见,像这样:

简单的网络有偏见

…那么networking的输出变成sig(w 0 * x + w 1 * 1.0)。 以下是networking的输出对于w 1的各种值的示例:

网络输出,赋予不同的w1权重

当w 1的权重为-5时,曲线向右移动,这使得当x是2时,我们可以有一个输出0的networking。

只是为了增加我的两分钱。

一个更简单的方法来理解偏差是什么:它与线性函数的常数b类似

y = ax + b

它允许您上下移动线路,以更好地适应数据的预测。 如果没有b,那么总是通过原点(0,0),你可能会变得更穷。

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

这是不切实际的原因是因为你同时调整权重和价值,所以任何权重的变化可以抵消变化的价值是有用的以前的数据实例…添加偏差神经元没有改变的价值允许你要控制图层的行为。

此外,偏差允许您使用单个neural network来表示相似的情况。 考虑由以下neural network表示的AND布尔函数:

ANN http://www.aihorizo​​n.comhttp://img.dovov.comessays/perceptron.gif

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

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

例如,如果我们假设布尔值为1(真)和-1(假),那么使用双input感知器来实现ANDfunction的一种方式是设置权重w0 = -3,并且w1 = w2 = 0.5。 这个感知器可以通过将阈值改变为w0 = -3来表示OR函数。 实际上,AND和OR可以看作m个n个函数的特例:也就是说,感知器的n个input中至less有m个必须为真的函数。 OR函数对应于m = 1,AND函数对应于m = n。 通过将所有input权重设置为相同的值(例如,0.5),然后相应地设置阈值w0,使用感知器可以容易地表示任何m-n函数。

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

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

没有偏差的neural network中的层只不过是input向量与matrix的乘积。 (输出向量可能会通过S型函数进行标准化,然后用于多层ANN,但这并不重要。)

这意味着您使用的是线性函数,因此所有零的input将始终映射到全零的输出。 对某些系统来说,这可能是一个合理的解决scheme,但总的来说,这是太严格了。

使用一个偏见,你有效地增加了input空间的另一个维度,它总是取值1,所以你避免了一个inputvector的所有零。 你不会失去任何一般性,因为你训练的权重matrix不需要是完全的,所以它仍然可以映射到以前所有的值。

2d ANN:

对于将二维映射到一维的neural network,如再现AND或OR(或XOR)function,可以将神经元networking想象为:

在2D平面上标记input向量的所有位置。 所以,对于布尔值,你需要标记(-1,-1),(1,1),(-1,1),(1,-1)。 你的ANN现在做的是在2D平面上绘制一条直线,将正输出与负输出值分开。

没有偏见,这条直线必须经过零,而有了偏见,你可以自由地放在任何地方。 所以,你会发现,没有偏见,你正面临AND函数的问题,因为你不能把(1,-1) (-1,1)都放在负面。 (他们不被允许线。)ORfunction的问题是相同的。 然而,有一个偏见,很容易画线。

请注意,在这种情况下,异或函数即使有偏差也无法解决。

当你使用ANN时,你很less会知道你想要学习的系统的内部。 有些事情不能没有偏见就学会。 例如,看看下面的数据:(0,1),(1,1),(2,1),基本上是一个将任何x映射到1的函数。

如果您有一个分层networking(或线性映射),则无法find解决scheme。 但是,如果你有偏见,这是微不足道的!

在一个理想的情况下,偏差也可以将所有点映射到目标点的平均值,并让隐藏的神经元对这个点的差异进行build模。

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

如果你正在处理图像,你可能更喜欢不使用偏见。 从理论上讲,你的networking将会更加独立于数据的大小,比如图像是黑暗还是鲜艳。 networking将通过研究数据中的相对性来学习如何工作。 许多现代neural network利用这一点。

对于其他有偏见的数据可能是至关重要的。 这取决于你正在处理的数据types。 如果你的信息是大小不变的—如果input[1,0,0.1]应该导致与input[100,0,10]相同的结果,那么你可能会更好,没有偏见。

偏差不是一个NN项,它是一个通用的代数术语来考虑。

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

现在如果C(Bias) = 0那么这条直线将始终通过原点,即(0,0) ,并且只依赖于一个参数,即M ,这就是斜率,所以我们有更less的事情要玩。

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

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

这是NN图中的最后一个激活层,打开和closures神经元。 在这里,偏见也可以发挥作用,它可以灵活地改变曲线,帮助我们绘制模型。

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

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

看到这里的graphics解释: http : //www.heatonresearch.com/wiki/Bias

扩展@zfy解释…一个input,一个神经元,一个输出的公式应该看起来如下:

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

其中x是来自input节点的值,1是偏置节点的值; y可以直接输出或传入一个函数,通常是一个sigmoid函数。 还要注意,偏见可以是任何常数,但为了使一切变得简单,我们总是select1(可能这很常见,@ zfy没有显示和解释它)。

您的networking正在尝试学习系数a和b以适应您的数据。 所以你可以看到为什么添加元素b * 1允许它适合更多的数据:现在你可以改变斜率和截距。

如果你有多个input,你的方程将如下所示:

 y = a0 * x0 + a1 * x1 + ... + aN * 1 

请注意,该公式仍然描述一个神经元,一个输出networking; 如果您有更多的神经元,您只需在系数matrix中添加一个维度,将input复用到所有节点,然后对每个节点的贡献进行回归。

你可以写成vector化的格式

 A = [a0, a1, .., aN] , X = [x0, x1, ..., 1] Y = A . XT 

即把系数放在一个数组中,并且(input+偏差)在另一个数组中,你可以得到你想要的解作为两个向量的点积(你需要将X转换成正确的forms,我写了XT'X转置')

所以最终你也可以看到你的偏见只是一个input来表示实际上独立于input的那部分输出。

在我的硕士论文 (例如第59页)的几个实验中,我发现偏见对于第一层可能是重要的,但是特别是在完全连接的层上,它似乎并没有起到很大的作用。

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

除了提到的答案..我想补充一些其他的观点。

偏见是我们的主angular。 这是一种让我们拥有某种底线的方法,我们不会低于底线。 就graphics而言,可以认为像y = mx + b就像这个函数的y截距一样。

输出=input乘以重量值并添加偏差值 ,然后应用激活function。

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

在线上斜率截距是线性方程的一种具体forms。

Y = mx + b中

检查图像

图片

这里b是(0,2)

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

对于我研究的所有ML书籍,W总是被定义为两个神经元之间的连接性指数,这意味着两个神经元之间的连通性越高,信号从发射神经元传递到目标神经元的能力越强或者Y = w * X维持神经元的生物学特性,我们需要保持1> = W> = – 1,但在实际的回归中,W将以| W | > = 1,这与神经元如何工作相矛盾,因此我提出W = cos(theta),而1> = | cos(θ)| ,并且当a = b + W = b +cosθ时,Y = a * X = W * X + b,b是整数

特别是,Nate的回答 ,zfy的回答 ,Pradi的回答都很好。

用更简单的术语来说,偏差允许学习/存储更多和更多的权重variables …( 侧注 :有时给出一些阈值)。 无论如何, 更多的变化意味着偏差会将input空间的更丰富的表示添加到模型的学习权重中。 (更好的权重可以提高neural network的猜测能力)

例如,在学习模型中,给定一些input,假设/猜测最好是以y = 0或y = 1为界,在一些分类任务中,即某些x =(1,1)对于某些x =(0,1),y = 1。 (假设/结果的条件是我在上面提到的阈值,请注意,我的示例设置inputX为x =一个双值或二值向量,而不是某个集合X的Nate单值xinput)。

如果我们忽视偏差, 许多投入可能会以很多相同的权重代表 (即学习权重大多 发生在原点 (0,0) 附近 ),那么模型就会被限制在较差的权数上,而不是许多更好的权重,它可以更好地学习与偏见(如果学习权重较差导致猜测较差或neural network的猜测能力下降)

因此,模型最接近原点,而且在阈值/决策边界内尽可能多地学习。 有了偏见,我们可以使自由度接近原点,但不限于原点的直接区域。