zoukankan      html  css  js  c++  java
  • [转载]神经网络偏置项(bias)的设置及作用

    [转载]神经网络偏置项(bias)的设置及作用


    原文来自:https://www.cnblogs.com/shuaishuaidefeizhu/p/6832541.html

    1、什么是bias?

    偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b 的意义是一致的。在 y=wx+b中,b表示函数在y轴上的截距,控制着函数偏离原点的距离,其实在神经网络中的偏置单元也是类似的作用。
    因此,神经网络的参数也可以表示为:(W, b),其中W表示参数矩阵,b表示偏置项或截距项。

    2、bias的计算方式?

     神经网络结构中对偏置单元的计算处理方式有两种,
     (1)设置偏置单元=1,并在参数矩阵 Θ 中设置第 0 列对应偏置单元的参数,对应的神经网络如下:
     神经网络架构
     其中,x0 是第一层的偏置单元(设置为1),Θ(1)10 是对应该偏置单元 x0 的参数;a(2)0 是第二层的偏置单元,Θ(2)10 是对应的参数。
     在计算激活值时按照(以a(2)1为例):
     激活值计算公式

    相当于bias本身值为1,但它连接各个神经元的权重不为1,即---整个神经网络只有1个bias,对应有多个不同的权重(权重个数等于hide层和out层神经元的个数)

     (2)设置偏置单元,不在参数矩阵中设置对应偏置单元的参数,对应的神经网络如下:
     神经网络架构
     其中,b(1) 是 W(1) 对应的偏置单元向量,b(2) 是 W(2) 对应的偏置单元向量,b(1)1 是对应 a(2)1 的偏置单元。注意,此时神经网络的参数表示更改为:(W, b)
     在计算激活值时按照:
     激活值计算公式

    相当于bias连接各个神经元的所有权重都为1,但bias本身不为1,即---有多个bias,但所有的bias对应的权重都为1(bias的个数等于hide层和out层神经元的个数)

     综上,
     两者的原理是一致的,只是具体的实现方式不同。
     其实在大部分资料和论文中看到的神经网络的参数都是表示为:(W, b),其中W代表weight,b代表bias。包括在UFLDL Tutorial中也是采用 (W, b) 表示,只是在Coursera上Andrew Ng老师的在线教程中看到将神经网络参数表示为 Θ,个人还是更喜欢 (W, b) 这种表示,很清晰。


    原文来源:https://blog.csdn.net/xwd18280820053/article/details/70681750

    加入我们激活函数用的是 sigmoid 函数,它的图像如下:

    img

    我们很容易看到 sigmoid 函数的作用是将输入映射到一个 (0,1) 的输出范围

    现在我们还是有一个简单的任务,需要将下面三角形和圆形进行分类:

    img

    利用上面神经元训练可以得到一个直线,去线性分开这些数据点. 方程如下:

    w1x1+w2x2+b=0,我们就可以得到下面这条类似的直线去线性分割好俩种不同类型的数据点.

    img

    那么这条边界找到了. 而这个边界是 w1x1+w2x2+b=0 的方程,而 w1x1+w2x2+b 是作为激活函数 sigmoid 的输入处理.

    激活函数将这个输入映射到 (0,1) 的范围内. 那么可以增加一个维度来表示激活函数的输出.

    我们认为 g(x)>0.5 就为正类(这里指圆形),g(x)<0.5 就为负类,这里指三角形类. 得到的三维图如下:第三维 z 可以看成是一种类别!(比如圆形就是 + 1、三角形就是 - 1)

    img

    图来自:Hugo Larochelle 课程 ppt

    那么就可以真正的可视化说明一下 w.b 等参数的作用在图中是怎么体现的~

    我们从上图很容易得到,当我们将这个三维图进行投影的时候,就是我们上个用直线分割好俩类的平面图,三维图中的那个分割平面投影下来就是方程 w1x1+w2x2+b=0.

    右边输出为 1 的部分就是说 w1x1+w2x2+b>0, 导致激活函数输出 > 0.5,从而分为正类( 圆形类), 左边输出为 - 1 的部分就是说 w1x1+w2x2+b<0, 导致激活函数输出 < 0.5,从而分为负类( 三角形类)

    1 w 参数的作用

    其中 w 参数的作用,我们可以得到,是决定那个分割平面的方向所在. 分割平面的投影就是直线 w1x1+w2x2+b=0

    我们解释如下,在二个输入中,可以得到 w=[w1,w2], 令方程 w1x1+w2x2+b=0,那么该直线的斜率就是 - w1/w2。随着 w1,w2 的变动,直线的方向也在改变,那么分割平面的方向也在改变~

    2 b 参数的作用

    其中 b 参数的作用,是决定竖直平面沿着垂直于直线方向移动的距离,当 b>0 的时候,直线往左边移动,当 b<0 的时候,直线往右边移动.

    我们通过例子解释如下:首先我们可以肯定是直线方向不变,因为我们没有动斜率的任何参数,只是改变 b,要说明的就是为什么当 b>0 的时候,直线往左边移动,当 b<0 的时候,直线往右边移动.

    假设我们有直线方程 x1+x2-3=0, 画出这个图像如下:

    img

    此时我们将 b 减小到 0,图像变为如下:

    img

    我们从上面图像中很容易得到结论:

    当 b>0 的时候,直线往左边移动,当 b<0 的时候,直线往右边移动.

    有了 b 参数可视化作用之后,我们很容易解决我一开始的问题. 每个神经元为什么要加上偏置 b, 不加又有什么后果呢?下面通过二维可视化图来直观说明一下它们的作用:

    3 每个神经元为什么要加上偏置

    我先不说为什么一定要加入偏置 b, 就还是上面的分类问题,假如我现在的样本点是如下这种:

    img

    原文来自:https://www.cnblogs.com/shuaishuaidefeizhu/p/6832541.html

    1、什么是bias?

    偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b 的意义是一致的。在 y=wx+b中,b表示函数在y轴上的截距,控制着函数偏离原点的距离,其实在神经网络中的偏置单元也是类似的作用。
    因此,神经网络的参数也可以表示为:(W, b),其中W表示参数矩阵,b表示偏置项或截距项。

    2、bias的计算方式?

     神经网络结构中对偏置单元的计算处理方式有两种,
     (1)设置偏置单元=1,并在参数矩阵 Θ 中设置第 0 列对应偏置单元的参数,对应的神经网络如下:
     
     其中,x0 是第一层的偏置单元(设置为1),Θ(1)10 是对应该偏置单元 x0 的参数;a(2)0 是第二层的偏置单元,Θ(2)10 是对应的参数。
     在计算激活值时按照(以a(2)1为例):
     

    相当于bias本身值为1,但它连接各个神经元的权重不为1,即---整个神经网络只有1个bias,对应有多个不同的权重(权重个数等于hide层和out层神经元的个数)

     (2)设置偏置单元,不在参数矩阵中设置对应偏置单元的参数,对应的神经网络如下:
     
     其中,b(1) 是 W(1) 对应的偏置单元向量,b(2) 是 W(2) 对应的偏置单元向量,b(1)1 是对应 a(2)1 的偏置单元。注意,此时神经网络的参数表示更改为:(W, b)
     在计算激活值时按照:
     

    相当于bias连接各个神经元的所有权重都为1,但bias本身不为1,即---有多个bias,但所有的bias对应的权重都为1(bias的个数等于hide层和out层神经元的个数)

     综上,
     两者的原理是一致的,只是具体的实现方式不同。
     其实在大部分资料和论文中看到的神经网络的参数都是表示为:(W, b),其中W代表weight,b代表bias。包括在UFLDL Tutorial中也是采用 (W, b) 表示,只是在Coursera上Andrew Ng老师的在线教程中看到将神经网络参数表示为 Θ,个人还是更喜欢 (W, b) 这种表示,很清晰。

    原文来源:https://blog.csdn.net/xwd18280820053/article/details/70681750

    加入我们激活函数用的是 sigmoid 函数,它的图像如下:

    我们很容易看到 sigmoid 函数的作用是将输入映射到一个 (0,1) 的输出范围

    现在我们还是有一个简单的任务,需要将下面三角形和圆形进行分类:

    利用上面神经元训练可以得到一个直线,去线性分开这些数据点. 方程如下:

    w1x1+w2x2+b=0,我们就可以得到下面这条类似的直线去线性分割好俩种不同类型的数据点.

    那么这条边界找到了. 而这个边界是 w1x1+w2x2+b=0 的方程,而 w1x1+w2x2+b 是作为激活函数 sigmoid 的输入处理.

    激活函数将这个输入映射到 (0,1) 的范围内. 那么可以增加一个维度来表示激活函数的输出.

    我们认为 g(x)>0.5 就为正类(这里指圆形),g(x)<0.5 就为负类,这里指三角形类. 得到的三维图如下:第三维 z 可以看成是一种类别!(比如圆形就是 + 1、三角形就是 - 1)

    图来自:Hugo Larochelle 课程 ppt

    那么就可以真正的可视化说明一下 w.b 等参数的作用在图中是怎么体现的~

    我们从上图很容易得到,当我们将这个三维图进行投影的时候,就是我们上个用直线分割好俩类的平面图,三维图中的那个分割平面投影下来就是方程 w1x1+w2x2+b=0.

    右边输出为 1 的部分就是说 w1x1+w2x2+b>0, 导致激活函数输出 > 0.5,从而分为正类( 圆形类), 左边输出为 - 1 的部分就是说 w1x1+w2x2+b<0, 导致激活函数输出 < 0.5,从而分为负类( 三角形类)

    1 w 参数的作用
    其中 w 参数的作用,我们可以得到,是决定那个分割平面的方向所在. 分割平面的投影就是直线 w1x1+w2x2+b=0

    我们解释如下,在二个输入中,可以得到 w=[w1,w2], 令方程 w1x1+w2x2+b=0,那么该直线的斜率就是 - w1/w2。随着 w1,w2 的变动,直线的方向也在改变,那么分割平面的方向也在改变~

    2 b 参数的作用
    其中 b 参数的作用,是决定竖直平面沿着垂直于直线方向移动的距离,当 b>0 的时候,直线往左边移动,当 b<0 的时候,直线往右边移动.

    我们通过例子解释如下:首先我们可以肯定是直线方向不变,因为我们没有动斜率的任何参数,只是改变 b,要说明的就是为什么当 b>0 的时候,直线往左边移动,当 b<0 的时候,直线往右边移动.

    假设我们有直线方程 x1+x2-3=0, 画出这个图像如下:

    此时我们将 b 减小到 0,图像变为如下:

    我们从上面图像中很容易得到结论:

    当 b>0 的时候,直线往左边移动,当 b<0 的时候,直线往右边移动.

    有了 b 参数可视化作用之后,我们很容易解决我一开始的问题. 每个神经元为什么要加上偏置 b, 不加又有什么后果呢?下面通过二维可视化图来直观说明一下它们的作用:

    3 每个神经元为什么要加上偏置
    我先不说为什么一定要加入偏置 b, 就还是上面的分类问题,假如我现在的样本点是如下这种:

    此时我们希望得到的线性方程分割线是下面这种,能够正确的将俩类进行分开:

    img

    到这个时候,我想我们已经明白了,如果没有偏置的话,我们所有的分割线都是经过原点的,但是现实问题并不会那么如我们所愿. 都是能够是经过原点线性可分的。

  • 相关阅读:
    Android事件机制之一:事件传递和消费
    数据类型和JSON格式
    json 数据交换格式与java
    写给iOS程序员的命令行使用秘籍
    pthread_create线程创建的过程剖析
    同步变量及知识要素
    mysql 批量更新与批量更新多条记录的不同值实现方法
    gettype
    寻求全站搜索功能开发思路
    DEDE中 field:rel 是什么意思,起一个什么样的作用效果
  • 原文地址:https://www.cnblogs.com/jiading/p/11620999.html
Copyright © 2011-2022 走看看