我知道梯度下降和反向传播定理.我没有得到的是:什么时候使用偏见很重要,你如何使用它?
例如,在映射AND
函数时,当我使用2个输入和1个输出时,它不会给出正确的权重,但是,当我使用3个输入(其中1个是偏置)时,它会给出正确的权重.
我认为偏见几乎总是有用的.实际上,偏差值允许您将激活功能向左或向右移动,这对于成功学习可能是至关重要的.
看一个简单的例子可能会有所帮助.考虑这个没有偏差的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的网络.
只是为了加我的两分钱.
一种更简单的方法来理解偏差是什么:它在某种程度上类似于线性函数的常数b
y = ax + b
它允许您上下移动线以更好地适应预测.没有b,线总是穿过原点(0,0),你可能会变得更差.
在ANN的训练期间,可以调整两种不同类型的参数,激活函数中的权重和值.这是不切实际的,如果只应调整其中一个参数会更容易.为了解决这个问题,人们发明了一种偏见神经元.偏置神经元位于一层,连接到下一层中的所有神经元,但前一层没有,它总是发射1.由于偏置神经元发射1,连接到偏置神经元的权重直接添加到其他权重的总和(公式2.1),就像激活函数中的t值一样.1
它不切实际的原因是因为你同时调整了权重和值,所以对权重的任何改变都可以抵消对前一个数据实例有用的值的变化......添加一个没有变化值的偏置神经元允许您可以控制图层的行为.
此外,偏差允许您使用单个神经网络来表示类似的情况.考虑以下神经网络表示的AND布尔函数:
ANN http://www.aihorizon.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层前馈神经网络的结果.权重随机初始化并使用标准ReLU激活.正如我之前的答案所得出的结论,没有偏见,ReLU网络无法在(0,0)处偏离零.
偏见不是一个NN
术语,它是一个需要考虑的通用代数术语.
Y = M*X + C
(直线方程)
现在,如果C(Bias) = 0
那时,线将始终通过原点,即(0,0)
,并且仅依赖于一个参数,即M
,这是斜率,因此我们可以使用更少的东西.
C
,这是偏见需要任何数字,并具有移动图表的活动,因此能够代表更复杂的情况.
在逻辑回归中,目标的期望值由链接函数转换,以将其值限制为单位间隔.通过这种方式,模型预测可以被视为主要结果概率,如图所示:维基百科上的Sigmoid函数
这是NN映射中打开和关闭神经元的最终激活层.偏向还可以发挥作用,它可以灵活地改变曲线,帮助我们绘制模型图.
没有偏差的神经网络中的层只不过是输入向量与矩阵的乘法.(输出向量可能会通过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功能也无法解决.
当您使用人工神经网络时,您很少了解您想要学习的系统的内部结构.如果没有偏见,有些事情是无法学到的.例如,看看下面的数据:(0,1),(1,1),(2,1),基本上是将任何x映射到1的函数.
如果您有一个单层网络(或线性映射),则无法找到解决方案.但是,如果你有偏见,这是微不足道的!
在理想的设置中,偏差还可以将所有点映射到目标点的平均值,并让隐藏的神经元模拟与该点的差异.
单独修改神经元WEIGHTS仅用于操纵传递函数的形状/曲率,而不是其平衡/零交叉点.
偏置神经元的引入允许您沿输入轴水平(左/右)移动传递函数曲线,同时保持形状/曲率不变.这将允许网络生成与默认值不同的任意输出,因此您可以自定义/移动输入到输出映射以满足您的特定需求.
请参阅此处获取图形说明:http: //www.heatonresearch.com/wiki/Bias
只是为了添加所有这些非常缺失的东西,其余的,很可能,不知道.
如果你正在使用图像,你可能实际上更愿意不使用偏见.理论上,通过这种方式,您的网络将更加独立于数据量级,如图像是否暗,或是否明亮和生动.通过研究数据中的相对性,网络将学习如何做到这一点.许多现代神经网络利用这一点.
对于其他具有偏差的数据可能很关键.这取决于您正在处理的数据类型.如果你的信息是幅度不变的 - 如果输入[1,0,0.1]会产生与输入[100,0,10]相同的结果,你可能会在没有偏见的情况下变得更好.
在我的硕士论文中的几个实验中(例如第59页),我发现偏差可能对第一层很重要,但特别是在最后完全连接的层,它似乎没有发挥重要作用.
这可能高度依赖于网络架构/数据集.
偏差决定您希望重量旋转多少角度.
在二维图表中,权重和偏差有助于我们找到输出的决策边界.假设我们需要构建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章"感知器学习规则"
特别是,Nate的回答,zfy的回答以及Pradi的回答都很棒.
简单来说,偏差允许学习/存储越来越多的权重变化 ......(侧注:有时给出一些阈值).无论如何,更多的变化意味着偏差会将更丰富的输入空间表示添加到模型的学习/存储权重中.(更好的权重可以增强神经网络的猜测能力)
例如,在学习模型中,假设/猜测在给定一些输入的情况下可能受到y = 0或y = 1的限制,可能是某些分类任务...即某些x =(1,1)和某些y = 0对于某些x =(0,1),y = 1.(关于假设/结果的条件是我上面谈到的阈值.请注意,我的示例设置输入X是每个x =一个双值或二值的向量,而不是Nate的一些集合X的单值x输入).
如果我们忽略偏差,许多输入可能最终由很多相同的权重表示(即学习的权重大多出现在原点附近(0,0).然后模型将被限制为较差的好权重,而不是许多更好的权重,它可以更好地学习偏见.(学习不良的权重导致较差的猜测或神经网络的猜测能力下降)
因此,模型最接近原点,并且在阈值/决策边界内尽可能多的地方学习是最佳的.通过偏差,我们可以实现接近原点的自由度,但不限于原点的直接区域.
扩展@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')
因此,最后您还可以看到您的偏差,只是表示输出部分的另一个输入,实际上与您的输入无关.
以简单的方式思考,如果你有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的值来做到这一点,这将是你的偏见
对于我研究过的所有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是整数