神经网络:CNN、DNN、RNN

  • 神经网络的发展
  • 深度神经网络常用的三种算法
    • CNN:卷积神经网络
      • 局部连接
      • 权值共享
      • 卷积层
      • 池化层
    • DNN:深度神经网络
    • RNN:循环/递归神经网络


神经网络的发展

第一代神经网络又称为感知器,在1950年代被提出,其算法仅有两层:输入层和输出层。感知器中主要为线性结构,无法解决线性不可分的问题,连异或操作这种简单函数都无能为力。

在1980年左右Rumelhart、Williams等人提出了第二代神经网络,多层感知器MLP(multilayer perceptron)。和第一代神经网络相比,第二代在输入层之间有多个隐含层的感知机,可以引入一些非线性结构,解决了之前无法模拟异或逻辑的缺陷。

但第二代神经网络的层数决定了它对现实的表达能力,随着层数的增加,优化函数越来越陷入局部最优解,并且会越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层的网络。同时,“梯度消失”现象也会越严重。

2006年Hinton采用无监督预训练(Pre-Training)的方法解决了梯度消失的问题,使得深层神经网络变得可训练,将隐含层发展到7层,由此深度学习成为了第三代神经网络。

神经网络:CNN、DNN、RNN_第1张图片


深度神经网络常用的三种算法

CNN:卷积神经网络

卷积神经网络主要是模拟人的视觉神经系统提出来的。卷积神经网络的结构依旧包括输入层、隐藏层和输出层,其中卷积神经网络的隐含层包含卷积层、池化层和全联接层3类常见构筑,其主要特点是权值共享局部连接


局部连接

神经网络:CNN、DNN、RNN_第2张图片
神经网络:CNN、DNN、RNN_第3张图片


权值共享

CNN的权值共享说的是一个卷积核的权值在做卷积运算时是不变的,所以减少了参数个数。


卷积层

  • 卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。

  • 一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算,这就是多层卷积。

  • 卷积核表示卷积层训练出多少个局部特征。

  • 在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择信息过滤


池化层

池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。
神经网络:CNN、DNN、RNN_第4张图片
从卷积完的特征图里面选择最大(Max pooling)或者平均(Average pooling)的值作为局部特征被保留下来。

通过这种池化的操作,能够一定程度上克服图像的一些旋转和局部的细微变化,从而使得特征的表达更加稳定。


DNN:深度神经网络

从结构上来说,DNN和传统意义上的神经网络并无太大区别,最大的不同就是层数增多了,并解决了模型可训练的问题。

但DNN存在着一些问题:
1、梯度消失,网络结构很深的时候,每层反向传播都会乘上激活函数的梯度,而sigmoid函数的梯度最大值是1/4<1,多次乘一个小于1的数会趋向0,所以梯度消失。解决方法有几种:

  • 使用Relu作为激活函数
  • 人工增加数据量 (叠加噪声)
  • 随机初始化参数 (随机正交矩阵,高斯截断正态分布)
  • 使用预训练

2、梯度爆炸 在RNN中常会出现,因为反向传播过程中,state会共用W,所以会导致W会随着时间而连乘,如果W的值都大于1,则会梯度爆炸,如果小于1,则会梯度消失,解决梯度爆炸的方法是梯度裁剪,即,当梯度大于某一个阈值的时候,就强行将其限制在这个范围之内。RNN解决梯度消失的问题是采用LSTM作为基本单元。

3、过拟合

  • 及时停止训练
  • 增加数据
  • 添加正则化项(L1和L2)
  • dropout

4、欠拟合

  • 增强数据

5、优化函数,使用更高效的优化算法

6、超参数的调整,学习率是认为设定的,使用自适应的学习率算法

此处参考https://lipengwei.github.io/2018/08/02/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B9%8BDNN%E3%80%81CNN%E5%92%8CRNN/


RNN:循环/递归神经网络

全连接的DNN存在着一个无法解决的问题:无法对时间序列上的变化进行建模。RNN是对于这种需求而生的。在普通的全连接网络中,DNN的隐层只能够接受到当前时刻上一层的输入,而在RNN中,神经元的输出可以在下一时间段直接作用到本身。换句话说,就是递归神经网络它的隐层不但可以接收到上一层的输入,也可以得到上一时刻当前隐层的输入
神经网络:CNN、DNN、RNN_第5张图片


总之,DNN是一个大类,CNN是一个典型的空间上深度的神经网络,RNN是在时间上深度的神经网络。
神经网络:CNN、DNN、RNN_第6张图片
CNN(左)和RNN(右)的结构区别, 注意右图中输出和隐变量网络间的双向箭头不一定存在,往往只有隐变量到输出的箭头。


直接拿博主https://blog.csdn.net/lff1208/article/details/77717149的总结如下:
神经网络:CNN、DNN、RNN_第7张图片

你可能感兴趣的:(神经网络,python,深度学习,人工智能,机器学习)