[转载]神经网络偏置项(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 函数,它的图像如下:
我们很容易看到 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, 就还是上面的分类问题,假如我现在的样本点是如下这种:
原文来自: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, 就还是上面的分类问题,假如我现在的样本点是如下这种:

此时我们希望得到的线性方程分割线是下面这种,能够正确的将俩类进行分开:
到这个时候,我想我们已经明白了,如果没有偏置的话,我们所有的分割线都是经过原点的,但是现实问题并不会那么如我们所愿. 都是能够是经过原点线性可分的。
[转载]神经网络偏置项(bias)的设置及作用的更多相关文章
- 神经网络中的偏置项b到底是什么?
原文地址:https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/81074408 前言 很多人不明白为什么要在神经网络.逻 ...
- 浅谈神经网络中的bias
1.什么是bias? 偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b ...
- 【转载】 IIS服务器防盗链设置
在实际运行的服务器环境中,我们自己网站中的资源一般不希望被外部网站引用,被外部网站引用IIS网站中的资源文件,一是会加重了服务器的负担,二是占用了你自己服务器的外网带宽资源,因此我们希望防止盗链这种情 ...
- CSS3 GENERATOR可以同时为一个元素完成border-radius、box-shadow、gradient和opacity多项属性的设置
CSS3 GENERATOR可以同时为一个元素完成border-radius.box-shadow.gradient和opacity多项属性的设置 CSS3 GENERATOR 彩蛋爆料直击现场 CS ...
- 【转载】Asp.Net中Cookie对象的作用以及常见属性
Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...
- SSIS变量属性中EvaluateAsExpression设置的作用
我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示: 在定义SSIS变量的时候可以使用固定值(如上图中 ...
- rabbitmq qos prefetch count的设置与作用
因为原来使用了MQ作为rpc机制,随着客户交易量越来越大,很多服务器推送行情的压力很大,最近打算重写为批量模式,又重新看了下qos和prefetch设置的作用以确定优化的具体细节. 消费者在开启ack ...
- Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用
Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用 在串口编程模式下,open未设置O_NONBLOCK或O_NDELAY的情况下. c_cc[VTIME]和c_cc[VMIN] ...
- spring中的传播性 个人认为就是对方法的设置 其作用能传播到里面包含的方法上
spring中的传播性 个人认为就是对方法的设置 其作用能传播到里面包含的方法上
随机推荐
- ping不通服务器就邮件警告
ping不通服务器就发一封邮件 (单台) vim /root/scipt/1.sh #!/bin/bash ping -c 4 192.168.0.116 &> /dev/null #p ...
- 应对高并发场景的redis加锁技巧
// 获取锁getLock() { // 是否有正在执行的线程 boolean hasLock = false; try { hasLock = redisClient ...
- Spring boot之使用freemarker
大纲 (1)在pom.xml中引入freemarker; (2)如何关闭freemarker缓存 (3)编写模板文件.ftl (4)编写访问文件的controller 在pom.xml中引入freem ...
- linux输出与查看的几种方式
输出的几种方式:echo/ tee echo "postgres install Failed !!!!!!" | tee -a "$Install_log"# ...
- Override和Overload的含义与区别
overload是重载,重载是一种参数多态机制,即代码通过参数的类型或个数不同而实现的多态机制. 是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段). override是重写,重写是一种 ...
- LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能 ...
- Laravel 在构造方法中使用session
- Let a mthod in RestControl return a json string
The get method of EmpControl package com.hy.empcloud; import java.util.List; import org.springframew ...
- Android内存Activity泄露:Handler与Threads
Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向,则该对象会在被 ...
- 1.2.1 Maven到底是什么鬼
解释之前,提1个小问题. 1.1.假如你正在Eclipse下开发两个Java项目,姑且把它们称为A.B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢? 很简单,这不就是跟 ...