刚才突然有一点懵。。神经网络的非线性到底体现在哪里?结合感知机为什么是线性模型思考了一下。

即使自我感觉已经把神经网络的结构搞的很透彻了,但是时不时得多问问自己还是可以发现新的问题。


线性模型和非线性模型区别

  1. 线性模型可以是用曲线拟合样本,但是分类的决策边界一定是直线的,例如logistics模型
  2. 区分是否为线性模型,主要是看一个乘法式子中自变量x前的系数w,如果w只影响一个x,那么此模型为线性模型。或者判断决策边界是否是线性的
  3. 其实最简单判别一个模型是否为线性的,只需要判别决策边界是否是直线,也就是是否能用一条直线来划分

感知机

什么是感知机模型呢,简而言之就是可以将有两个特征的数据集中的正例和反例完全分开的关于一条直线的函数,或者可以是关于三维空间中的一个平面的函数,更可以是关于高维的一个超平面的函数。

图即为感知机的模型,仔细一看就会发现,其实就是一个单层的神经网络,激活函数是跃阶函数。

从上面的线性模型与非线性模型的判别标准来看,

从这个式子很容易就看出来,每个w只影响一个x,所以感知机是一个经典的线性模型,只能够处理线性可分的问题。

具体的感知机算法不是本文的重点。

神经网络

神经网络是非线性

简单明了,就可以看出神经网络是非线性的了。

但其实一开始困扰了我的是另一个问题。

在Yjango大神的超智能体中,有写到

激活函数确实可以产生非线性的变换,但对于神经网络模型而言,整个处理非线性可分的能力关键不在于激活函数,而是神经网络之间的多层叠加,使得只能处理线性可分问题的感知机(神经元)可以处理非线性可分问题。

但激活函数同样是必不可少的。如果神经网络中的神经元都不带激活函数,那么神经元无论怎么样堆叠,都只能够处理线性问题。为什么必不可少可以看这篇文章:激活函数的作用

虽然没有激活函数时,每个变量也被多个权值所影响,但不同的是,此时每个变量都以独立于其它变量区分开来。

而当引入非线性的激活函数时,每个变量是无法与其它变量所独立开来的!


在二维空间中,无论用多么复杂的激活函数,决策平面依旧是线性的。那激活函数在干嘛?好,来回顾一张图

为什么同样是sigmoid,LR是线性,神经网络是非线性,之前有解释过。但可能从理论上理解了,但是直观来想,可能还不清楚。LR的sigmoid函数切了一刀,这一刀就是判决平面(下图中的白色线条),空间被映射成一个坡状(这里体现了一部分的“弯曲”)。但对于LR而言,它拿走了判决平面就不管了,而神经网络将这些坡组合起来,也就是利用了sigmoid函数的输出。从而形成了最右图的白色圆圈。

这是tensorflow playground中的运行实例,注意看每个神经元的颜色分割。

这部分不是我们研究的重点,这只是给定神经网络的输入特征,一般信息越多越容易分开。

重点看这两部分,每个神经元都会有一条切割线。这也暗含了之前讲的感知机是线性模型的道理。因为每个神经元其本质上就是一个感知机。而激活函数在这边做了一件什么事情。就是越复杂的激活函数其在单个神经元上的线性可分能力就越强!有一个想都不要想的道理,每个神经元的分类能力越强,那整体的神经网络的性能肯定越优秀。

到这里可以总结一下,激活函数的功能就在于使得单个神经元具有更强大的分割能力,每个神经元就是切一刀,合适的激活函数,可以让这一刀切的很准。

再将新的特征经由神经网络堆叠,所有的特征基本上就都混在一起了。继续观察上图,第二层第一个神经元是怎么来的,就是之前的四个神经元堆叠产生的。你可以这么想,蓝色的是高的地方,黄色的是低的地方。四个神经元叠在一起,本来是类似于阶梯状的,但是由于四个阶梯的中间都是高的,周围都不全是高,有高有低,所以最后就形成了中间高四周低的形状。然后神经元的作用依旧是切一刀,把山头给切了下来。就是

这个形状了。

但事实上,弯曲这件事不好说是不是真的弯曲,只是不断映射到高维空间,将样本稀疏化,然后不断去寻找一个线性可分的超平面将样本分离开来(注意是线性可分,每个神经元都只是切一刀)。“弯曲”的含义在我们直观上来理解是被扭曲了,其实也确实是这么回事,从样本分布上来理解,就是正的样本都被拉到一头,负的样本被拉到另一头,变成一座山的样子。

下面来个实例,有个网站很好的https://cs.stanford.edu/people/karpathy/convnetjs//demo/classify2d.html

还是类似于刚才那个形状,这里只有一个输入层,一个隐含层,一个softmax输出层。激活函数一共有两个,但实际上只是被扭曲了一次,只被堆叠了一次。就像刚才我描述的,中间的样本往山头去,四周的样本网山脚去。

右边的图只是把图像二维化了,把一座山变成了一条线。


总结一下

激活函数越复杂单个神经元切一刀的能力就越强,切的越准。

神经网络的非线性能力体现在激活函数上。堆的越深,样本在映射空间中的分布就越稀疏,分布一稀疏,判决超平面就好找,切一刀也好切。就像上面的例子,将样本稀疏分布到山头和山脚,在山腰上切一刀就完全分开了。


神经网络还有不少东西可以研究。就上图那个网站的可视化分布就是一个很好的学习的例子。话说斯坦福是真的厉害,能作出这种demo来,那个理解深度想必是真正的吃透了。

参考文章:

线性模型与非线性模型:https://blog.csdn.net/wbcnb/article/details/78306970

感知机原理:https://www.cnblogs.com/pinard/p/6042320.html

【神经网络】线性模型非线性模型,感知机与神经网络相关推荐

  1. 多层感知机 深度神经网络_使用深度神经网络和合同感知损失的能源产量预测...

    多层感知机 深度神经网络 in collaboration with Hsu Chung Chuan, Lin Min Htoo, and Quah Jia Yong. 与许忠传,林敏涛和华佳勇合作. ...

  2. 花书+吴恩达深度学习(一)前馈神经网络(多层感知机 MLP)

    目录 0. 前言 1. 每一个神经元的组成 2. 梯度下降改善线性参数 3. 非线性激活函数 4. 输出单元 4.1. 线性单元 4.2. sigmoid 单元 4.3. softmax 单元 5.  ...

  3. 机器学习理论之(13):感知机 Perceptron;多层感知机(神经网络)

    文章目录 表示学习 (representation Learning) 生物神经元 V.S. 人造神经元 感知机 (Perceptron) 训练感知机(Training Perceptron) 激活函 ...

  4. 前馈神经网络(多层感知机)基础

    前馈神经网络(多层感知机)基础 1. 神经网络介绍 1.1 神经网络的生物学背景 1.2 人工神经元与感知机 1.3 常用激活函数 1.3.1 线性函数(Linear Function) 1.3.2 ...

  5. 机器学习入门(02)— 由感知机到神经网络的过渡进化,激活函数在神经网络中的作用

    1. 神经网络示例 用图来表示神经网络的话,如图3-1 所示.我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层.中间层有时也称为隐藏层."隐藏"一词的意思 ...

  6. 从神经元到神经网络、从神经网络到深度学习:神经网络、深度学习、神经元、神经元模型、感知机、感知机困境、深度网络

    从神经元到神经网络.从神经网络到深度学习:神经网络.深度学习.神经元.神经元模型.感知机.感知机困境.深度网络 目录 从神经元到神经网络.从神经网络到深度学习 神经网络:

  7. 多层感知机和神经网络的区别_学习笔记-从神经元到神经网络

    人的大脑神经网络的复杂程度有人说,只有银河系可以比拟.总所周知,神经网络就是模仿大脑神经网络用数学知识构造的模型.单个神经元还是比较简单的. 神经元 一个神经元有树突,轴突,和细胞体等部分.树突接受输 ...

  8. 深入浅出神经网络与深度学习--神经元感知机单层神经网络介绍(-)

    1     概述 写神经网络与深度学习方面的一些知识,是一直想做的事情.但本人比较懒惰,有点时间想玩点游戏呀什么的,一直拖到现在. 也由于现在已经快当爸了,心也沉了下来,才能去梳理一些东西.本文会深入 ...

  9. 【神经网络】多层感知机

    多层感知机 多层感知机 隐藏层 激活函数 ReLU函数 sigmoid函数 tanh函数 多层感知机 小结 具体实现 多层感知机 我们已经介绍了包括线性回归和softmax回归在内的单层神经网络.然而 ...

  10. 人工神经网络 —— 神经元和感知机

    人工智能的发展 神经网络:人脑智慧的物质基础. 神经元/神经细胞:生物神经系统的基本单元. 下图为典型的生物神经元: 生物神经元由细胞体和细胞突起组成,细胞突起是由细胞体延伸出来的细长部分,每个突起又 ...

最新文章

  1. Spring Security 和 Apache Shiro
  2. OpenGL立方体的纹理
  3. iPhone的UDID与push中使用的device token的关系
  4. 休眠事实:了解刷新操作顺序很重要
  5. SUSE Labs Con 2018有感
  6. layUI数据表格可编辑扩展日期框
  7. Anroid camera + mediacodec
  8. Python学习笔记五
  9. JDBC:深入理解PreparedStatement和Statement
  10. 浅谈Spring如何利用三个缓存Map解决循环依赖
  11. matlab画空间直线,空间直线x y=z怎么画
  12. win10更改计算机时间格式,Win10电脑锁屏的时钟格式怎么更改
  13. windows商店下载linux,Ubuntu 18.04现在可以从Windows 10商店下载
  14. 自动驾驶笔记-轨迹跟踪-综述
  15. cad中计算机的快捷键,CAD中一些常用的快捷键用法
  16. 2018年大数据趋势 :人工智能... 数据分析将包含可视化模型...
  17. ubuntu开机后nvidia驱动突然消失,nvidia显卡驱动卸载与安装
  18. C语言:memcmp()---字符串比较
  19. 【电脑自动关机】开机后Mysql再也启动不起来了。问题解决
  20. python学习笔记(面向对象,类)

热门文章

  1. qrcode方法生成的二维码安卓手机长按不识别
  2. 网页怎么在图片上添加文字_教你同时将图片水印和文字水印添加到视频画面
  3. 给数组添加自定义方法
  4. java动态拼接String类sql
  5. nginx日志中添加请求的response日志
  6. ElasticSearch学习29_基于Elasticsearch实现搜索推荐
  7. 年薪50万的Python架构师 不是梦
  8. 一行Python代码
  9. linux下w和who使用说明
  10. VC 为静态控件添加事件