机器学习(周志华)——第五章 神经网络

神经网络

    • 1. 常见的激活函数,将线性函数用作神经元激活函数的缺陷。
    • 2. Sigmoid 激活函数的神经元与对数几率回归的联系.
    • 3. 对于图 5.7 (102 页) 中的 ,试推导出BP算法中的更新公式 5.13 (103 页).
    • 4. 标准BP算法和累计BP算法.
    • 5. 如何缓解BP神经网络的过拟合现象
    • 6. RBF网络,RNN循环神经网络的概念和特点
    • 7. 卷积神经网络的卷积、下采样(池化)过程,卷积神经网络的架构,如图 5.15 (114 页).
    • 8. kaggle比赛入门-手写数字识别,下载数据和代码,仔细阅读代码并详细标注代码注释。

前提: 在机器学习中谈的神经网络是值的 “神经网络学习”,或者说,是机器学习与神经网络这两个学科领域的交叉部分.

神经元的职责: 接受来自于其他神经元传输过来的信号,将接收到的总输入值与该神经元的阈值进行对比,通过激活函数处理以产生神经元的输出. 示意图如下所示.
机器学习(周志华)——第五章 神经网络_第1张图片

1. 常见的激活函数,将线性函数用作神经元激活函数的缺陷。

(1). 阶跃函数
阶跃函数是理想的激活函数,其将输入值映射为输出值 “0” 和 “1” ,显然 “1” 对应兴奋,而 “0” 对应抑制.

但是,阶跃函数不连续,不光滑,所以实际中常用 “ S i g m o i d Sigmoid Sigmoid” 函数作为激活函数.

(2). S i g m o i d Sigmoid Sigmoid 函数
S i g m o i d Sigmoid Sigmoid 函数把可能在较大范围内变化的输入值挤压到 (0, 1) 输出值范围内,且函数连续、光滑. 表达式如下:
σ ( x ) = 1 1 + e − x \sigma (x) = \frac {1}{1+e^{-x}} σ(x)=1+ex1

但是呢…

  • 当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。在神经网络反向传播的过程中,我们都是通过微分的链式法则来计算各个权重w的微分的。当反向传播经过了sigmod函数,这个链条上的微分就很小很小了,况且还可能经过很多个sigmod函数,最后会导致权重w对损失函数几乎没影响,这样不利于权重的优化,这个问题叫做梯度饱和,也可以叫梯度弥散。
  • 函数输出不是以0为中心的,这样会使权重更新效率降低。
  • sigmod函数要进行指数运算,这个对于计算机来说是比较慢的。

机器学习(周志华)——第五章 神经网络_第2张图片
(3). t a h n tahn tahn 函数
tanh是双曲正切函数,tanh函数和sigmod函数的曲线是比较相近的. 表达式如下:
σ ( x ) = e x − e − x e x + e − x \sigma (x) = \frac {e^{x}-e^{-x}}{e^{x}+e^{-x}} σ(x)=ex+exexex

相同点: 这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新.不同点: 不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmod的好。

(4). R e L U ReLU ReLU 函数
R e L U ReLU ReLU (Rectified Linear Unit) 函数是目前比较火的一个激活函数,表达式如下:
y = { 0 , x < = 0 x , x > 0 y = \left\{ \begin{array}{rcl} 0, & & {x <= 0}\\ x, & & {x > 0}\\ \end{array} \right. y={0,x,x<=0x>0

机器学习(周志华)——第五章 神经网络_第3张图片
相比于sigmod函数和tanh函数,它有以下几个优点:

  • 在输入为正数的时候,不存在梯度饱和问题。
  • 计算速度要快很多。 R e L U ReLU ReLU 函数只有线性关系,不管是前向传播还是反向传播,都比 S i g m o d Sigmod Sigmod t a n h tanh tanh 要快很多。( S i g m o d Sigmod Sigmod t a n h tanh tanh 要计算指数,计算速度会比较慢)

当然,缺点也是有的:

  • 当输入是负数的时候, R e L U ReLU ReLU 是完全不被激活的,这就表明一旦输入到了负数, R e L U ReLU ReLU 就会死掉。这样在前向传播过程中,还不算什么问题,有的区域是敏感的,有的是不敏感的。但是到了反向传播过程中,输入负数,梯度就会完全到0,这个和 S i g m o d Sigmod Sigmod 函数、 t a n h tanh tanh 函数有一样的问题。
  • 我们发现 R e L U ReLU ReLU 函数的输出要么是0,要么是正数,这也就是说,ReLU函数也不是以0为中心的函数。

(5). E L U ELU ELU 函数
E L U ELU ELU 函数是针对 R e L U ReLU ReLU 函数的一个改进型,相比于 R e L U ReLU ReLU 函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除 R e L U ReLU ReLU 死掉的问题,不过还是有梯度饱和和指数运算的问题。
y = { σ ( e x − 1 ) , x < = 0 x , x > 0 y = \left\{ \begin{array}{rcl} \sigma(e^{x}-1), & & {x <= 0}\\ x, & & {x > 0}\\ \end{array} \right. y={σ(ex1),x,x<=0x>0
机器学习(周志华)——第五章 神经网络_第4张图片

2. Sigmoid 激活函数的神经元与对数几率回归的联系.

对数几率回归 (分类): S i g m o i d Sigmoid Sigmoid 函数的作用是将线性回归模型产生的预测值(实值)转化为 0/1 值. S i g m o i d Sigmoid Sigmoid 函数是用于代替单位阶跃函数,因为 S i g m o i d Sigmoid Sigmoid 函数单调且可微.

神经元模型: S i g m o i d Sigmoid Sigmoid 函数作为“激活函数”用以处理产生神经元的输出,其输出值为 (0, 1) 开区间内.

3. 对于图 5.7 (102 页) 中的 ,试推导出BP算法中的更新公式 5.13 (103 页).

还未完成

4. 标准BP算法和累计BP算法.

标准BP算法:每次更新只针对单个样本,参数更新地非常频繁,而且对不同地样例进行更新的效果可能出现抵消的现象,因此,达到同样的累积误差极小值点,标准BP算法往往需要更多的迭代次数

累计BP算法:直接对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数的更新频率低很多,在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时候,标准BP往往会获得较好的解,尤其在训练集D非常大的时候更加明显

5. 如何缓解BP神经网络的过拟合现象

(1). 增加 L1 正则和 L2 正则

(2). 增加训练样本数目
数据集在模型训练的时候显得非常重要,没有好的数据没有更多的数据好的模型无从谈起。在深度学习中,更多的训练数据,意味着可以用更深的网络,训练出更好的模型.

(3). 减少模型的参数个数

(4). Dropout
L1、L2正则化是通过修改代价函数来实现的,而Dropout则是通过修改神经网络本身来实现的,它直接使一些神经节点失活,它在训练神经网络模型时常常采用的提高模型泛化性的方法
机器学习(周志华)——第五章 神经网络_第5张图片
(5). 将训练方法改为 trainbr
trainbr 训练方法是改变了性能函数,其他方法的性能函数基本上是以训练样本误差方差,而trainbr 训练方法则在其中加入了权值方值的和,此项是为了减少有效权值的个数。

6. RBF网络,RNN循环神经网络的概念和特点

(1). RBF神经网络
一种三层神经网络,其包括输入层、隐层、输出层. 从输入空间到隐层空间的变换是非线性的,而从隐层空间到输出层空间变换是线性的.
机器学习(周志华)——第五章 神经网络_第6张图片

RBF网络

RBF网络的基本思想是:用RBF作为隐单元的 “基” 构成隐含层空间,这样就可以将输入矢量直接映射到隐空间,而不需要通过权连接. 当RBF的中心点确定以后,这种映射关系也就确定了. 而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数. 其中, 隐含层的作用是把向量从低维度的 p 映射到高维度的 h,这样低维度线性不可分的情况到高维度就可以变得线性可分了,主要就是核函数的思想. 这样,网络由输入到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的. 网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题.

  • 径向基神经网络的激活函数可表示为:
    R ( x m − ϕ p ) = e x p ( − 1 2 σ 2 ∣ ∣ m − ϕ p ∣ ∣ 2 ) R(x_m-\phi_p) = exp{(-\frac{1}{2\sigma^{2}}||m-\phi_p||^2)} R(xmϕp)=exp(2σ21mϕp2)
  • 其中 x m x_m xm径向基神经网络的结构可得到网络的输出为:
    y i j = ∑ i = 1 p w i j R ( x m − ϕ p ) y_{ij} = \sum_{i = 1}^{p}w_{ij}R(x_m-\phi_p) yij=i=1pwijR(xmϕp)

(2). RNN循环神经网络
是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系

RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关. 具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出.

  • RNN的典型结构
    机器学习(周志华)——第五章 神经网络_第7张图片
  • 展开后
    机器学习(周志华)——第五章 神经网络_第8张图片
  • 整体连接图
    机器学习(周志华)——第五章 神经网络_第9张图片

7. 卷积神经网络的卷积、下采样(池化)过程,卷积神经网络的架构,如图 5.15 (114 页).

CNN 网络一共有 5 个层级结构:
输入层、卷积层、激活层、池化层、全连接 FC 层

  • 输入层
    与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的输入层中预处理方式有:去均值、归一化、PCA/SVD 降维等.
  • 卷积层
    卷积运算本质上就是在滤波器和输入数据的局部区域间做点积,最直观明了的方法就是用滑窗的方式.
    机器学习(周志华)——第五章 神经网络_第10张图片
  • 激励层
    所谓激励,实际上是对卷积层的输出结果做一次非线性映射。
    如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了.
  • 池化层
    也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:
    Max Pooling:最大池化
    Average Pooling:平均池化
  • 输出层(全连接层)
    经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入 dropout 操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性。
    当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP 神经网络),通过softmax函数得到最终的输出。整个模型训练完毕

8. kaggle比赛入门-手写数字识别,下载数据和代码,仔细阅读代码并详细标注代码注释。

参考数据:
https://www.kaggle.com/c/digit-recognizer/overview
参考代码:
https://www.kaggle.com/elcaiseri/mnist-simple-cnn-keras-accuracy-0-99-top-1

参考书籍与博客:

  1. 《机器学习》 —— 周志华
  2. https://blog.csdn.net/kangyi411/article/details/78969642 —— 常见的激活函数
  3. https://blog.csdn.net/pku_langzi/article/details/89704075 —— 标准BP算法和累计BP算法的区别与python实现
  4. https://www.cnblogs.com/pinking/p/9349695.html —— RBF神经网络

你可能感兴趣的:(机器学习)