我知道梯度下降和反向传播算法。我没有得到的是:什么时候使用偏见很重要,以及如何使用它?
例如,在映射AND
函数时,当我使用2个输入和1个输出时,它不能给出正确的权重,但是,当我使用3个输入(其中1个是偏差)时,它给出正确的权重。
我知道梯度下降和反向传播算法。我没有得到的是:什么时候使用偏见很重要,以及如何使用它?
例如,在映射AND
函数时,当我使用2个输入和1个输出时,它不能给出正确的权重,但是,当我使用3个输入(其中1个是偏差)时,它给出正确的权重。
Answers:
我认为偏见几乎总是有帮助的。实际上,偏差值使您可以将激活功能向左或向右移动,这对于成功学习至关重要。
看一个简单的例子可能会有所帮助。考虑以下无偏差的1输入1输出网络:
网络的输出是通过将输入(x)乘以权重(w 0)并将结果传递给某种激活函数(例如S型函数)来计算的。
对于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 =轴+ b
它使您可以上下移动线以更好地将预测与数据拟合。如果没有b,则直线始终穿过原点(0,0),因此拟合度可能会较差。
该线程确实帮助我开发了自己的项目。这是一些进一步的说明,显示了一个简单的2层前馈神经网络在二变量回归问题上有无偏置单元的结果。权重随机初始化,并使用标准ReLU激活。正如我面前的答案所得出的那样,在没有偏差的情况下,ReLU网络无法在(0,0)处偏离零。
可以在训练ANN的过程中调整两种不同类型的参数,权重和激活函数中的值。这是不切实际的,如果只应调整一个参数,则会更容易。为了解决这个问题,发明了一种偏向神经元。偏向神经元位于一层,与下一层中的所有神经元相连,但在上一层中没有,它始终发出1。由于偏向神经元发出1,因此将与偏向神经元相连的权重直接添加到就像激活函数中的t值一样,其他权重的总和(等式2.1)。1个
之所以不切实际是因为您同时调整了权重和值,所以权重的任何更改都可以抵消对先前数据实例有用的值的更改...添加不更改值的偏差神经元允许您可以控制图层的行为。
此外,偏差允许您使用单个神经网络来表示类似情况。考虑以下神经网络表示的AND布尔函数:
(来源:aihorizon.com)
单个感知器可用于表示许多布尔函数。
例如,如果我们假设布尔值分别为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是与偏差/阈值神经元相关的权重。
偏差不是NN
术语,而是要考虑的通用代数术语。
Y = M*X + C
(直线方程)
现在,如果C(Bias) = 0
这样,线将始终通过原点,即(0,0)
,并且仅取决于一个参数,即M
,即坡度,因此我们需要处理的事情更少。
C
,即偏差可以是任意数字,并且可以移动图表,因此可以表示更复杂的情况。
在逻辑回归中,目标的期望值通过链接函数进行转换,以将其值限制为单位间隔。这样,可以将模型预测视为主要的结果概率,如下所示:Wikipedia上的Sigmoid函数
这是NN贴图中打开和关闭神经元的最终激活层。偏差在这里也可以发挥作用,它可以灵活地移动曲线以帮助我们绘制模型。
神经网络中没有偏差的一层无非就是输入向量与矩阵的乘积。(输出矢量可能会通过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函数即使有偏差也无法解决。
仅修改神经元权重仅能操纵传递函数的形状/曲率,而不是其平衡/零交叉点。
偏置神经元的引入使您可以沿输入轴水平(左/右)移动传递函数曲线,同时保持形状/曲率不变。这将允许网络产生不同于默认值的任意输出,因此您可以自定义/更改输入到输出的映射以适合您的特定需求。
有关图形说明,请参见此处:http : //www.heatonresearch.com/wiki/Bias
只是为了添加所有这些,这是非常缺少的,而其余的(很可能是)不知道的。
如果要处理图像,则实际上可能根本不希望使用偏差。从理论上讲,您的网络将更不受数据量的影响,例如图片是暗的还是亮的和生动的。网络将通过研究数据内部的相对性来学习完成其工作。许多现代神经网络都在利用这一点。
对于其他数据,偏差可能很关键。这取决于您要处理的数据类型。如果您的信息是大小不变的---如果输入[1,0,0.1]的结果应与输入[100,0,10]的结果相同,则最好不要偏见。
偏差决定您希望体重旋转多少角度。
在二维图中,权重和偏差可帮助我们找到输出的决策边界。假设我们需要构建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 + bP,而b = 1。
因此,通过更改b(bias)的值,可以确定W'与W之间的角度。这就是“ ANN的学习规则”。
您还可以阅读Martin T. Hagan的神经网络设计 / Howard B. Demuth / Mark H. Beale的第4章“感知器学习规则”
特别是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)附近。然后,该模型将限于数量较少的优质权重,而不是许多更好的权重,它可以更好地通过偏见来学习(在学习不好的权重下导致较差的猜测或神经网络的猜测力下降)
因此,最理想的是,模型既要学习接近原点,又要学习在阈值/决策边界内尽可能多的位置。有了偏差,我们就可以使自由度接近原点,但不仅限于原点的直接区域。
扩展@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转置”)
因此,最后您还可以看到自己的偏见,因为它只是一个以上的输入,代表了输出中实际上与输入无关的部分。
除了提到的答案以外,我想补充一点。
偏差是我们的锚点。这是我们拥有某种基准的一种方法,我们不能低于该基准。就图而言,想像y = mx + b就像是该函数的y截距。
输出=输入乘以重量值并加上一个偏差值,然后应用激活函数。
用简单的方法思考,如果您有y = w1 * x,其中y是输出,而w1是权重,则设想一个条件,其中x = 0则y = 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的值(偏斜)来实现
在神经网络中:
在没有偏差的情况下,仅考虑输入层的加权总和可能不会激活神经元。如果神经元未激活,则来自该神经元的信息不会通过其余的神经网络传递。
偏见的价值是可学习的。
有效地,偏差=-阈值。您可以将偏差视为使神经元输出1很容易-偏差很大时,神经元输出1很容易,但是如果偏差非常负,则很困难。
总结:偏差有助于控制激活功能将触发的值。
观看此视频以了解更多详细信息
几个有用的链接:
a
当to的梯度a
始终为常数时,如何训练偏差呢?
通常,在机器学习中,我们有一个基本公式Bias-Variance Tradeoff, 因为在NN中,我们有过拟合问题(模型泛化问题,其中数据的微小变化导致模型结果的较大变化),并且由于该问题,我们具有较大的方差,因此引入小偏差可能会有所帮助。考虑以上偏差偏差权衡的公式,其中偏差是平方的,因此引入小的偏差可能会导致大量减少方差。因此,当您有较大的差异和过度拟合的危险时,请引入偏差。
偏差有助于获得更好的方程式
想象一下输入和输出,就像一个函数一样 y = ax + b
,您需要在input(x)和output(y)之间放置一条正确的线,以最小化每个点和该线之间的全局误差,如果保持这样的方程y = ax
,您将拥有一个仅用于自适应的参数,即使您找到a
使全局误差最小的最佳方法,也离期望值有点远
您可以说偏差使方程式更加灵活,以适应最佳值