上一章介绍了使用逻辑回归处理分类问题。尽管逻辑回归是个非常好用的模型,但是在处理非线性问题时仍然显得力不从心,下图就是一个例子:

  线性模型已经无法很好地拟合上面的样本,所以选择了更复杂的模型,得到了复杂的分类曲线:

  然而这个模型存在两个问题:过拟合和模型复杂度。过拟合问题可参考《ML(附录3)——过拟合与欠拟合》,这里重点讲模型复杂度。

  还是非线性分类,现在将输入扩充为100个,为了拟合数据,我们构造了更多的特征:

  约有 1002/2 = 5000个特征。由此看来,对于n个输入,二次项特征的个数大约以n2/2的数量级增长,在真实世界中面临的输入何止成千上万个,此时将得到噩梦般的模型。

  在计算机视觉中,几何数量级的特征无处不在:

  如上图所示,虽然人眼能够马上识别出图片是汽车,但是机器就没那么容易,它所看到的仅仅是像素的矩阵。假设仅抽取汽车轮毂和方向盘上的两个点判断图片是否是汽车:

  右图中得到了一个非线性曲线。实际上,即使仅有50 × 50的灰度图片,也会有2500个输入值;如果使用全二次项构造特征值,会产生 25002/2 ≈ 3000,000个特征值。由此看来,只是简单的增加二次项或者三次项之类的逻辑回归算法并不是一个解决复杂非线性问题的好办法,因为当n很大时将会产生非常多的特征项。

  神经网络就是在解决复杂非线性分类问题上的一种好得多的算法,即使输入的特征维数n很大。

神经网络

  1997年世界上发生过两件大事,一是克隆羊多利诞生,另一件是IBM 电脑“深蓝”击败国际象棋世界冠军。就在这一年,我从一本电子游戏杂志上看到了一篇关于计算机不可能战胜职业围棋选手的文章。

  二十年过去了,2016 年一月底,谷歌在自然杂志上正式公开发表论文,宣布其以深度学习技术为基础的电脑程序 AlphaGo,在 2015年 十月,连续五局击败欧洲冠军、职业二段樊辉。这是第一次机器击败职业围棋选手。

  在这篇文章中,我尝试介绍深度学习的前身——神经网络。

神经元模型

  神经元是神经网络中的一个重要概念。其实我觉得,神经网络和神经元都是看似高逼格的名词,这让我们联想到脑神经,从而心生畏惧。我们经常看到下面的图示:

  我想说,把脑神经都丢到垃圾桶里吧!

  然而我们还是需要知道什么是神经元,如下图所示:

  可以把这个神经元看作感知器模型:

  这是一个特殊的有向图,θ称为权重,x0称为偏置项,函数f是激活函数。在感知器模型中,激活函数是sign;在逻辑回归中,激活函数是sigmoid。

  上图的神经元模型似乎有点类似数字电路中的电路门,实际上神经元模型确实可以实现一些电路门运算:

神经网络模型

  单个神经元模型和感知器模型没什么区别,对非线性分类有些力不从心,比如“异或否(not (x1 xor x2))”的判别:

  这就需要使用多层神经网络:

  一个典型的神经网络如下图所示:

  上图是一个三层神经网络,分为输入层、隐藏层和输出层。在隐藏层中,不能通过训练样本观测到节点的值。上图神经网络中有3个输入节点(偏置节点不计在内,通常也不单独画出),3个隐藏节点(偏置节点不计在内)及一个输出节点。

  节点的上标表示神经网络的层数,a(2)表示第二层的节点,下标表示节点的序号,包括x0在内,所有偏置节点的序号都是0,值都是1。用大写的Θ表示每一层的权重,第一层的权重是Θ(1)。每个隐藏节点连同它的输入和输出,可看作一个神经元模型,由此:

  权重的下标分为两部分:第一部分表示指向该权重指向的隐藏节点的序号,第二部分表示权重的序号。Θ2,3(1)表示该权重处于第一层,它是指向a2(2)节点的第3个权重。可以将a2(2)单独列出:

  如果神经网络的第j层有Sj个节点,第j+1层有Sj+1个节点,那么第j层权重Θ(j)的权重总数是 Sj+1×(Sj+1 + 1), +1是因为计算了偏置节点。

  现在尝试用矩阵表示上面的神经网络模型:

  第一层节点x表示输入向量,Θ(1)表示第1层的权重。现在,用z(l)表示第 l 层的输入:

  神经网络可以有多个隐藏层,每一层都会计算出更复杂的特征,但只有一个输入层和一个输出层:

激活函数

  激活函数的作用是给神经网络加入一些非线性因素,使得神经网络更好地解决较为复杂的问题。

  常见的激活函数是sigmoid函数,在《ML(4)——逻辑回归》中介绍过,还有很多其它的激活函数。

  如果使用sigmoid作为激活函数,其区间是[0,1],当神经元的输出为1时,表示该神经元被激活,否则称为未被激活。类似地,如果激活函数是双曲正切tanh,其区间是[-1, 1],当神经元输出为1是表示激活,-1表示未被激活。

  本节其余部分转自 https://www.cnblogs.com/dudumiaomiao/p/6014205.html

  传统神经网络中最常用的两个激活函数,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在.从数学上来看,非线性的Sigmoid函数对中央区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果,通过对加权的输入进行非线性组合产生非线性决策边界.从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区.

  Relu函数为现在深度学习使用比较广泛的激活函数,相比前面两个,其优点在于计算简单,导数简单,收敛快,单侧抑制 ,相对宽阔的兴奋边界 ,稀疏激活性;缺点在于在训练的时候,网络很脆弱,很容易出现很多神经元值为0,从而再也训练不动.一般将学习率设置为较小值来避免这种情况的发生.

  比较:

  激活函数的一些可取的属性包括:

  非线性:当激活函数是非线性的,然后一个两层神经网络可以证明是一个通用函数近似值.而identity激活函数不满足这个属性.当多层网络使用identity激活函数,整个网络就相当于一个单层模型.

  连续可微的:这个属性对基于梯度优化方法是必要的.二进制激活函数在0点没有可微性,它在其他值上全部可导为0,基于梯度优化方法对于它毫无进展.

  范围:当激活函数的范围是有限的,基于梯度的训练方法往往更稳定,因为模式显著影响几个有限权重.当范围是无限的,训练通常更有效率,因为模式显著影响大部分权重.在后一种情况下,较小的学习利率通常是必要的.

  单调:当激活函数是单调时,与单层模型相关的错误表面是凸的.

  平滑性:有单调导数的平滑函数已经被证明在某些情况下推广地更好.这些属性表明这些激活函数和Occam's razor更一致.

  原点附近近似identity:当激活函数有这个属性,对于小的随机值初始化权重,神经网络将有效地学习.当激活函数没有这个属性,在初始化权值必须使用特殊例子.在下面的表中,激活函数,表明有该属性

多分类

  神经网络也可以处理多分类。现在我们有一个能够区分行人、小汽车、摩托车和货车的四分类神经网络,如下图所示:

  输出层在这里有四个节点,其基本思路和上一章《逻辑回归》的多分类一致,但是对输出需要稍加变动:

  如果输出结果是<0, 1, 0, 0>,则判断图片是小汽车。

参考:

Ng视频《Neural Networks》

《数学之美》第二版

《集体智慧编程》


  作者:我是8位的

  出处:http://www.cnblogs.com/bigmonkey

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!

  扫描二维码关注公众号“我是8位的”

  

ML(5)——神经网络1(神经元模型与激活函数)相关推荐

  1. 前馈神经网络之神经元及激活函数简介

    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. 前馈神经网络:一种最 ...

  2. 一篇文章理解深度神经网络5个常用激活函数

    一篇文章理解深度神经网络5个常用激活函数 1.Sigmoid 2.Tanh 3.ReLU 4.Leaky ReLU 5.Maxout 小结 1.Sigmoid Sigmoid非线性激活函数的数学表达式 ...

  3. 【卷积神经网络】12、激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / Mish

    文章目录 一.Tanh 二.Sigmoid 三.ReLU 四.Leaky ReLU 五.ELU 六.SiLU 七.Mish 本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被 ...

  4. 神经网络中常见的激活函数

    深度学习中已经成为了人工智能领域的必备工具,源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构.寻找隐藏层的权重参数和偏置的过程,就是常说的"学习"过程,其遵循的 ...

  5. 神经网络中的常用激活函数总结

    ©PaperWeekly 原创 · 作者|张文翔 单位|京东集团算法工程师 研究方向|推荐算法 激活函数之性质 1. 非线性:即导数不是常数.保证多层网络不退化成单层线性网络.这也是激活函数的意义所在 ...

  6. 卷积神经网络(卷积层,激活函数Relu,池化层,计算公式及API解释)

    1. 卷积神经网络 (卷积层,激活函数,池化层,全连接层) (1)  把神经网络的隐藏层分为卷积层和池化层(又叫下采样层) · 卷积层 :  通过在原始图像上平移来提取特征 ·  池化层 : 通过特征 ...

  7. 神经网络中常用的激活函数

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html 版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激 ...

  8. 【Deep Learning 三】神经网络中的非线性激活函数之间的优缺点:sigmoid、tanh、ReLu、Leaky ReLu...

    1 什么是激活函数? 激活函数,并不是去激活什么,而是指如何把"激活的神经元的特征"通过函数把特征保留并映射出来(保留特征,去除一些数据中是的冗余),这是神经网络能解决非线性问题关 ...

  9. 机器学习-神经网络为什么需要非线性(激活函数)

    引言 在学习机器学习的时候,我就一直有着一个疑惑.为什么神经网络需要激活函数(Activation Function)?可能有的人会说,引入激活函数是为了给网络引进非线性.但是有没有仔细思考过,引入非 ...

  10. 神经网络为什么要使用激活函数,为什么relu要比sigmoid要好

    第一个问题:为什么引入非线性激励函数? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性 ...

最新文章

  1. JPA基础(一):全面阐释和精彩总结JPA
  2. 简明python教程 --C++程序员的视角(二):函数及作用域
  3. Java UDP Demo
  4. 关于游戏行业目前的形势
  5. html 变量类型强制转换,html、js前台数据传到后台,spring复杂类型转换
  6. TP框架中的A方法和R方法
  7. DOS批处理中%cd%和%~dp0的区别
  8. 开发iOS百度地图大头针可以重复点击
  9. Sentinel卫星数据
  10. hive sql列转行
  11. matlab 平滑曲线连接_Matlab的5个控制类工具箱介绍
  12. 台式计算机无线网卡怎么找,怎么找出台式电脑中的无线网卡驱动
  13. 【翻译】torch.device的使用举例
  14. win7 电脑MAC地址修改
  15. Spring Ioc源码分析系列--容器实例化Bean的四种方法
  16. Selenium-针对alert弹窗无法获取,弹出no such alert的解决方法
  17. 自制DynamicProxy开发成功,性能测试提升了1.4倍。(看来微软的realproxy并不弱!导致我无法提升一个数量级)...
  18. java实现画笔的画圆与矩形功能_Java实现画线、矩形、椭圆、字符串功能
  19. WdatePicker使用方法
  20. QQ游戏图标熄灭大全

热门文章

  1. php后台您没有权限访问该页面,登陆微信公共平台提示没有权限访问该页面请点击返回首页现象的解决办法...
  2. SaaS启动阶段增长指南(上)
  3. 笔记本电脑+USB接口GPS+WM6模拟器+PPC版城际通
  4. 机器学习(六)—— 分类
  5. python(you-get):2分钟快速下载网站视频
  6. 《云周刊》第121期:图管够!灌篮高手、女儿国…阿里日_这帮程序员太会玩了!
  7. 中国最卷的公务员考试,挤满清北毕业生
  8. 褚时健:年轻人不老想着背靠大树好乘凉
  9. Istio学习笔记-熔断实验
  10. SpringBoot 项目(若依脚手架)2