じゅうきゅう: ANN

  • 神经元、**函数、前馈神经网络
  • 感知器
  • 卷积神经网络及其实现

19.1神经网络概述

  • ANN是模拟人脑神经网络而生的一种机器学习算法。
  • 人脑通过几十亿神经元和千万亿个突触对视觉、听觉等各类刺激做出反应,而学习的过程,就是神经元改变相互连接方式的过程,从而使得人类能对刺激做出合理的反应。

  • ANN模拟脑神经学习的过程,神经网络由大量输入/输出单元(神经元)互连而成,每个连接都会有一定的权重。
  • 每个神经元接受输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的**函数,从而进行非线性变换后得到输出。
  • 学习阶段,通过调整权重的大小,神经网络使得对输入的样本的预测结果越来越接近真实的标签,即让总预测误差最小。

19.2神经网络关键概

19.2.1神经元

  • 神经元是神经网络的基本组成,称“节点”,作用是从其他的节点或原始数据处获得输入,然后计算并产生输出。

  • 两个互相连接的节点之间都有一个对应的“权重”,代表该节点与相连节点的相对重要程度(图19-2-1上的,W2和b)。

  • 节点工作方式:
    • 接收上一层节点或原始数据的输入(X1,X2和1),加权求和(即求w1×x1+w2×x2+bw_1×x_1+w_2×x_2+b),
    • 经过函数f变换,产生一个输出Y
  • 偏置项b调节**函数的输出

じゅうきゅう: ANN

19.2.2**函数

  • f称“**函数”,将加权求和后的数值转化为最终的输出。
  • f可以是一个线性函数,但真实数据不会只有线性关系,
    • 需更复杂的**函数来引入非线性关系。

  • 在生物神经网络中,如果某个神经元的电位超过了某个值,
    • 那么该神经元就会被**,
    • 向其他相连接的神经元发送化学和电信号。

じゅうきゅう: ANN

  • **函数即模拟这一过程,将某个节点收到的输入值汇总,
    • 经过**函数处理后产生神经元的输出。
    • 将很多个这样的神经元按某种层次结构组合在一起,就得到了一个神经网络结构。

  • 19-2-3为例,
  • 通常数据不会只有那么简单的关系,因此需要更多层的网络结构、
    • 更复杂的**函数来学习数据间的关系。

じゅうきゅう: ANN

19.2.3常用**函数

(1) Sigmoid函数

  • 输入x,转到(0,1)。
  • x非常大时,f(x)趋1,非常小的负数时,趋0。
  • 压缩至0~1有何用处呢?
  • 便可把**函数看作一种“分类的概率”,
    • 输出0.9,表示该样本有90%的概率属于此类别。

じゅうきゅう: ANN

  • Sigmoid是最广的一类**函数,形状接近指数函数,
  • 缺陷,
    • 两侧的导数趋近于0(软饱和),
    • 一且当函数的输人落入饱和区, Sigmoid导数就会接近0,
    • 导致传递的梯度也变得很小,
    • 神经网络的参数就很难得到有效训练,
  • 叫作梯度消失。

(2)Tanh函数

  • 与 Sigmoid类似,转化到[-1,1],有零中心,
  • 用它神经网络训练的收敛速度比 Sigmoid更快。

じゅうきゅう: ANN

(3)ReLU

  • 负值都转为0,正值不变。
  • 以0为國值的分段函数。
  • 最大的优点是缓解了梯度消失

じゅうきゅう: ANN

じゅうきゅう: ANN

19.2.4前馈神经网络

  • feedforward neural network最简单的一种神经网络。

じゅうきゅう: ANN

  • 1)输入节点:没有进行任何计算,它的作用只是接
    收原始数据。
  • 2)隐藏节点:接受上一层节点的输入,
    • 将计算结果输出到下一层节点。
    • 隐藏节点的集合形成一个隐藏层。
    • 图19-2-5只有一层隐藏层,但也可有多个或无隐藏层
  • 3)输出节点:所有输出节点的集合形成输出层,
    • 计算并将最终的结果输出。

  • 前馈神经网络里,信息的移动只有一个方向:从输入节点,到隐藏节
    点,最后到输出节点。
  • RMN等信息的传输会有回路和闭环

19.3单层感知器和多层感知器

  • 单层感知器:最简单的前馈神经网络,
    • 只有输人层和输出层
    • 输人层接受外界的输人信号后传递给输出层。

  • 多层感知器:至少一个隐藏层的前馈神经网络,在实际应用中比
    单层感知器的效果强大得多。

  • 图19-3-1是多层感知器,
  • 每一条线都表示一个权重(图中只显示3个权重)。

じゅうきゅう: ANN

  • 输人层:3节点,1个偏置项,值为1,
    • 其他2节点表示原始数据的输入。
  • 隐层:3节点,1个偏置项,
    • 另外2个节点与输入层的3个节点全连接,也就是说有6个权重
    • 这一层3个节点的计算结果输出到下一层
  • 输出层:2个节点,接收上一层的计算结果,如图所示再执行这一层的计算。
    • Y1和Y2是这一层2个节点计算后的输出。

19.4算法过程

  • 输人的数据X和目标Y,
  • 多层感知器就能学习它们之间的关系。
  • 例子来了解神经网络学习的过程

じゅうきゅう: ANN

  • 两个输人项代表小时数和分数,
  • 目标变量是期末的结果。
  • 1表示通过,0表示未通过。

  • 希望算法能学习这两者之间的关系,从而形成一个模型,对新样本
    预测。

训练多层感知器:反向传播算法

  • BP是最成功的神经网络学习算法之一,
    • 大部分神经网络都用该方法训练。
  • 反向传播
    • 每当模型的预测犯了错,它就去纠正错误
  • 当输出层的节点未能得到期望输出时,
    • 这个误差会用来估计输出层的直接上一层的误差,
    • 再利用这个误差估计更前一层的误差,
    • 如此一层一层反向传播下去,
    • 就获得所有其他各层的误差估计,
    • 作为修改各连接权重的依据。
  • 学习的过程
    • 不断调整权重,使得最终的输出结果与真实结果越来越接近。

  • 分类任务,一般Softmax作输出层的**函数
  • 将任意实数输入转化为(0,1)(表示概率)
    • 各个类别的概率相加等于1。

  • 每个学生的输人项进入感知器后,
  • 输出两个结果的概率值,即“及格”和“不及格”的概率,和1

じゅうきゅう: ANN

  • 传入了一个训练样本[35,67]
  • 真实结果=1,0
  • 第一次输出的结果是[0.4,0.6],差异巨大(1-0.4=0.6和0-0.6=-0.6)。
  • 通过反向传播,重新调整各个权重值,试图让这个误差下降。
  • 如图19-4-2

じゅうきゅう: ANN

  • 经过一轮调整,误差已经小了很多(0.2和
    0.2),神经网络成功学习。

  • 不断重复这个过程直到所有的样本都经过学习。
  • 如果测试后模型的准确率足够理想,就可以用来对新样本预测了。

19.5算法的优缺点

19.5.1优点

  • (1)实现任何复杂非线性映射,特别适合求解内部机制复杂的问题。
  • (2)自学习功能
    • 图像识别时,只要先把不同图片样本和对应的标签输入ANN,
    • 网络就会通过自学习功能,学会识别类似图像
  • (3)对异常值不敏感,有较强的鲁棒性。

19.5.2缺点

  • (1)长训练时间。
  • (2)网络结构选择没有标准,无一套统一而完整的理论指导,
    • 只能根据算法人员经验决定
  • (3 可解释性差。隐藏层对输入的变量进行各种复杂的非线性组合,输出结果难以解释
  • (4)有过拟合倾向

19.7扩展阅读

  • 深度学习2016蹿红

  • 其实之前,深度学习悄悄发展十几年。

  • Geoffrey Hinton等06年和07年在《 Sciences》等上发表的文章被提出,

  • 起源于神经网络算法,在神经网络模型结构深度上发展,

  • 并伴随计算能力的提高而产生一系列新的算法,

  • 图像处理与CV,NLP及语音识别。

  • 最深欢迎和宠爱的是被用在大规模图像识别任务中的CNN

  • 前馈神经网络的一种,只增加“卷积”和“池化”。
  • 用在图像识别任务中,
    • 受59年生物学家实验启发,
    • 为识别二维形状而设计的一个特殊的多层感知器,
    • 这种网络结构对图片的平移、比例缩放、倾斜或者其他形式的变形有强鲁棒,
    • 可大大降低计算复杂度。

19.7.1卷积

  • 图像视为基本输入数据,像素点就对应一个输入项,
    • 结果有大量的节点和需计算的权重。
  • 100×100图片例,输入层10000个节点
  • 第二层是相同节点数的隐藏层,
    • 有10000×10000个要计算的权重,

(1)卷积的作用

  • 通过卷积,本来两层神经网络之间的节点需要全连接
  • 现只需要部分连接(“局部连接”)
  • 本来每个权重都需独立计算
  • 现在部分权重可共享取值(“权值共享”)。
  • 卷积的作用
    • 提取图片中重要的特征,
    • 减少需要计算的权重数目,
    • 从而降低计算量。

(2)卷积核(特征检测器)与卷积计算

  • 卷积操作
    • 卷积操作的矩阵,
    • 将这个矩阵与原始图片点乘

  • 矩阵叫滤波器
    • 卷积核
    • 特征检测器,
    • 在图像上滑动滤波器并计算点乘,
    • 得到的矩阵叫卷积特征
      • 或特征图

  • 每个滤波器都相当于一个“检测特定特征”的工具。
  • “特征”: 如直边、曲线等简单形状,以及简单的颜色。
  • 图像无论多么复杂,都由最简单的特征构成。

じゅうきゅう: ANN

  • 7x7的特征检测器,作用检测“曲线”这个特
    征,如图19-7-1
  • 特征检测器对原始图片“卷积”,
    • 拿它一格一格地在原图上“滑动”一遍,
    • 从左上角的第一格直到右下角的最后一格
  • 在每个停留的位置上,计算对应元素的乘积,
    • 并把乘积的和作为最后的结果,
    • 得到结果矩阵中的每一个元素的值

  • 卷积将原始图片上的每个像素点,经过与它相邻像素点的加
    权求和,转変成了一个新的像素点,如图19-7-2。

じゅうきゅう: ANN

  • 原始图片小老鼠,曲线特征检测器滑到方框位置时,会是什么结果呢?

  • 如果滑到的区域所具有的形状,恰恰与我们的特征检测器的形状相似,那么两者的乘积(特征检测器矩阵与卷积区域矩阵的乘积)会产生较大值(在图像的这块区域检测到了该特征)(图19-7-4)。

  • 继续滑动特征检测器,滑到老鼠的头上,这个区域没有类似的曲线形状,因此卷积计算的结果值很小(图19-7-5)。

じゅうきゅう: ANN
じゅうきゅう: ANN

  • 曲线特征检测器,成功地在小老鼠身上检测到了一处符合该特征的区域(屁股)。
  • 如果所有的小老鼠图片都有这个特征,那光凭借这个特征检测器,我们就可以轻易识别老鼠的图片了。

  • 有很多种不同的特征检测器,
    • 对应不同作用。
    • 不同的特征检测器能检测到图像不同的特征,如边缘、曲线

19.7.2池化

  • 卷积后获得原始图像有用的特征(特征图),且由于“权值共享”和“局部连接”,使需要计算的权重数量有所降低,但计算量依然很大,且易出现过拟合。

  • “池化”就是为了解决这两个问题。
  • 计算特征图上某一个区域的聚合统计量(如最大值/平均值),我们得到了一个新的整合后的特征,并将这个新的特征作为下一层网络的输人。

  • “最大池化”和“平均池化”。

(1)池化的作用

  • 使特征维度更小,减小需要计算的权重数量,并防止过拟合。
  • 使网络对于输入图像中细小的变化、冗余和变换具有鲁棒性(输入
    的微小冗余将不会改变池化的输出
    因为我们在局部邻域中使用了最大化/平均值)。
  • 帮助获取图像最大程度上的尺度不变性。
    • 换句话说,对于某个特征,即使经过了位置平移,都能检测出来。

(2)最大池化与平均池化

  • 先定义池化窗口的大小,再定义两个相邻池化窗口的水平位移/竖
    直位移步长,然后将这个池化窗口在原图上滑动。
  • 滑动的过程和之前卷积核滑动的过程相似,但池化不会作用在重合的区域上。

  • 池化层紧跟在卷积层,且多层“卷积+池化。
  • 多层卷积的目的,
    • 一层卷积学到的特征往往是局部的,层数越多,
    • 学到的特征就越全局化,
    • 越能提取更多输入数据的特征,达到更高准确率,
    • 代价是训练参数的倍数增加
  • 以ImageNet图像识别大赛
  • 微亚在2015年的比赛中提出152层的(Resnet),
  • 就把准确率提升到超过人类水平

じゅうきゅう: ANN

19.8 CNN识别手写数字图片

  • 用 Keras搭建一个简单的CNN,

  • 识别 Mnist数字图片数据集。

  • 导人相关的库。

じゅうきゅう: ANN