暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

神经网络基础

Python爬虫和数据挖掘 2021-07-07
1506

文章目录


  • 文章目录

    • 1. 引言

    • 2. 多层神经网络

    • 3. 关于激活函数

    • 4. 通用近似定理 ()

    • 5. 三层神经网络模拟任意决策面


1. 引言


「人工神经网络」(英语:Artificial Neural Network,ANN),简称「神经网络」(Neural Network,NN)或「类神经网络」,在机器学习和认知科学领域,是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。

年,心理学家 和年轻的数学家 在合作的论文中提出并给出了人工神经网络的概念及人工神经元的数学模型,被称为 模型(以两人的名字命名),开创了人工神经网络研究的时代。

模型很简单,如下图所示

M_P模型

神经元接收 个信号输入,并通过加权计算,得到神经元的总输入值,加上偏置之后,通过激活函数得到最终的结果。理想的激活函数是阶跃函数,它能将输入值映射为 ,对应神经网络中神经元的“兴奋”与“抑制”状态。该模型对应的数学表达式为

年, 从纯数学角度重新研究 模型,指出对一些输入输出对 可以通过学习的方式,求得 ,即为"感知机"模型,该模型在机器学习算法篇第一篇已经进行了详细讲述,这里不再展开介绍,感兴趣的话,可以查看《感知机模型详解》[1]

年, 等人出版了 一书,用数学详细证明了感知机的不足,甚至不能处理简单的异或问题。

要解决非线性可分问题,需要增加多层神经元,使用下图简单的两层感知机就可以解决异或问题

上述模型就是一个很简单的多层神经网络模型,我们进行一般化研究,得到下面的层级结构,先从简单的开始,一步步认识并了解神经网络。

2. 多层神经网络


两层神经网络
  • 这是一个十分简单的多层神经网络模型,每层神经元都与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”,其包含输入特征 ,叫做神经网络的「输入层」(图中最左边绿色圆圈),该层的神经元叫做输入神经元。最右侧一层,只有一个节点,被称作「输出层」(图中最右边红色圆圈) 。输入层和输出层之间的中间层,被称为「隐藏层」(图中间灰色圆圈)。接下来我们将该图为例,讲解神经网络的基础知识。

  • 关于神经网络层数的定义

    「从左到右,由第0层开始定义」,原因是最左侧是输入层,其只负责从外界接收输入,不进行任何函数处理,因此我们不将输入层计入神经网络的层数或者将输入层记为第0层。由此可知,上图表示的是一个两层神经网络

  • 神经网络的计算

    结合 模型,我们知道单个神经元的输出为 ,为了方便描述,我们记做 ,输出 .

    按照这样的规则,我们尝试计算上面的两层神经网络的第一层,由上至下有

    其中 表示该神经网络第 层第 个神经元的非激活值。

    表示该神经网络第 层第 个神经元的最终输出值,也是下一层神经元的输入,叫做激活值

    表示该神经网络第 层第一个 个神经元与输入(层)的第 个特征 的连接权重

    表示第 层神经元的「激活函数,是一个非线性函数」

    则此时有

  • 神经网络计算的向量化

    将神经网络的每一层的神经元参数进行向量化处理,能够大大提高计算速度,也利于编程实现,如上图中第一层的权重参数可表示成一个 的矩阵

    记做 。第一层神经元的偏置可以用一个 的矩阵表示  ,记做 。同理,非激活值 ,激活值为 ,该层的输入可表示为 ,为了符号描述统一,我们将输入层记做 ,即

    根据神经网络的计算规则可知,此时有以下公式成立

    如此,传入神经网络的信息,通过层层处理,得到最终的输出,传递过程可表示为

3. 关于激活函数

  • 为什么需要非线性激活函数

    前面我们提到激活函数 要求是非线性函数,  我们试着去掉神经网络中的激活函数 ,或者令 ,此时有 神经网络的输出

    ,可以发现,使用一个隐藏层,其输出仍是对输入的线性组合,可以证明,不管中间使用多少个隐藏层,只要不使用激活函数或者使用线性激活函数,其输出都只是对输入做线性组合,最终均可以写成 的形式,即此时增加神经网络的深度没有任何意义,反而增加计算量,且其效果等同于单层神经网络,只能处理线性问题,可用性将非常受限,因此我们需要非线性的激活函数。

    虽然我们要求隐藏层必须使用非线性激活函数,但是有些情况下,输出层神经元可以使用线性激活函数的,比如在处理回归问题的时候,输出是一些连续的数值时,可以在输出层使用线性激活函数。

下面介绍几种常见的激活函数,其中蓝色线为原函数图像,黄色线条为其导函数的图像

几种激活函数及其导函数图像
  • 阶跃()函数

    阶跃函数是比较理想的激活函数,它能将输入值映射为 ,对应神经网络中神经元的“兴奋”与“抑制”状态 ,但是该函数不连续,不光滑,且在可导的地方导数为 导致无法使用梯度下降法进行求解,因此一般我们不使用该激活函数。

  • 结合函数图像进行分析可知

    1. 该函数可以把一个实数域的输入"挤压"到 之间,因此也叫做挤压函数
    2. 附近函数可近似看着线性函数,输入越小越接近 ,输入越大越接近 ,可用来表示概率(事实上,可以从概率公式推导出该函数,这里暂不介绍),十分适合用来做二分类问题,其他场景已很少使用
    3. 该函数连续可导
    4. 利用 计算导数会十分方便
    5. 输入特别大或者特别小时,导数会变得特别小,最终趋于 ,会导致梯度下降缓慢,不利于学习
    6. 函数输出不是 均值的,可能会造成模型收敛缓慢,关于这点会在讲解 算法时具体说明
    7. 指数运算相对复杂耗时
    1. 图像跟 很相似,事实上 函数是 的向下平移和伸缩后的结果
    2. 该函数连续可导,且求导比较方便
    3. 函数值域为 ,其输出是是 均值的,避免了 输出不是 均值可能造成的模型收敛缓慢问题
    4. 输入特别大或者特别小时,导数会变得特别小,最终趋于 ,会导致梯度下降缓慢,不利于学习
    5. 指数运算相对复杂耗时
  • ,修正线性单元,也叫 函数,是目前深度神经网络中经常使用的激活函数。具有以下性质

    1. 采用 的神经元只需要进行加、乘和比较的操作,计算上更加高效
    2. 该函数将所有的负值变为 ,所有正值保持不变,使得 函数具有生物上的解释性,比如单侧抑制、宽兴奋边界(即兴奋程度 也可以非常高)。在生物神经网络中,同时处于兴奋状态的神经元非常稀疏。人 脑中在同一时刻大概只有 的神经元处于活跃状态。 却具有很好的稀疏性,大约 的神 经元会处于激活状态
    3. 输入大于 时,导数为 ,不会造成梯度消失问题。输入为负值时,导数为 ,则不会对该神经元进行学习,从而产生稀疏性。
    4. 函数的输出也不是 均值的,可能会造成模型收敛缓慢
    5. 神经元在训练时,可能出现”死亡神经元“,即有些神经元将永远不会被激活
  •  叫做带泄露的 ,不同于 的是,输入为负值时,输出为 ,其中 是一个很小的正值,这会让函数在负值时,也有一个很小的导数 ,从而避免 问题

4. 通用近似定理 ()


是一个非常数、有界、单调递增的连续函数, 是一个 维的单位超立方体 是定义在 上的连续函数集合。对于任何一个函数 ,存在一个整数 ,和一组实数 以及实数向量 ,以至于我们可以定义函数

作为函数 的近似实现,即
 其中 是一个很小的正数 

该定理表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种‘‘挤压’’ 性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何「从一个有限维空间到另一个有限维空间」的Borel 可测函数。

科特·霍尼克()在 年证明 ,激活函数的选择不是关键,前馈神经网络的多层神经层及多神经元架构才是使神经网络有成为通用逼近器的关键,但也有研究将此定理扩展至其他类型的神经网络,如卷积神经网络、放射状基底函数网络、或其他特殊神经网络

总之,该定理告诉我们神经网络具有十分强大的表达能力,我们可以认为,具有单个隐藏层的神经网络可以以任意精度近似任意的连续函数,但是该定理并没有指出我们该如何选择神经网络的参数,以及为了近似目标函数,这个神经网络会有多大。

5. 三层神经网络模拟任意决策面


我们使用三层神经网络,在二维平面模拟多种决策面,来帮助我们理解通用近似定理,为了简化说明,这里激活函数均选择阶跃函数,也就是说神经元的输出只有

  • 如下图左侧的决策面,阴影部分表示 类,之外的部分表示 类,我们该如何设计神经网络完成分类呢?

    三角形决策面及其神经网络结构

    观察可知,该决策面由三条直线组成,因此第一层需要三个神经元,并规定三条直线的 侧的激活值为 ,否则为 ,  基于这种规定,我们知道一个实例点属于 类时,必须满足第一层三个神经元的输出均为 ,因此我们可以设计如上图右侧的两层神经网络即可完成该分类任务,根据该神经网络的输出层(第二层)权重 和偏置 的设定可知,只有当输出层的输入(即第一层的输出) 时,才能满足 ,从而经过阶跃函数激活之后有 即输出 ,正确完成分类。

  • 同理,如下图左侧的多边形决策面,我们可以设计下图右侧的两层神经网络完成数据分类

    多边形决策面及其神经网络结构
  • 对于下图左侧的圆形决策面以及右侧的不规则图形的决策面,我们可以利用微分法,沿着决策面的边缘,分割成无数条小线段,从而设计出对应的神经网络,该神经网络仍然可以是两层的,只不过第一层的神经元个数是无限个

    圆形和不规则图形决策面
  • 如下图左侧图形所示,我们还会遇到此类的决策面,由两个相离的面组成,此时我们可以设计下图右侧的神经网络,该神经网络有三层,与前面不同的是,输出层的两个输入是或的关系,即实例点落在任意一个三角形决策面内,都认为是 类的,这跟图像也是吻合的。

    多个决策面以及其神经网络结构

通过对这几类决策面的神经网络构造,我们应该对通用近似定理有了一定的了解,也感叹神经网络的强大,但是截止到目前,我们都是从偏理论的方向介绍神经网络,接下来,我们将介绍如何求解多层神经网络的各个参数,也就是在神经网络体系中大名鼎鼎的 算法。

Reference

[1]

《感知机模型详解》: https://blog.csdn.net/SpiritedAway1106/article/details/108869573


文章转载自Python爬虫和数据挖掘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论