* 没有详细展开,只是做一个整理
* 持续整理中
年份表:
year | Bases | CNN- | RNN- | 其他 |
1974 | BP | |||
1986 | JordanNet | |||
1989 | UAT | |||
1990 | ElmanNet | |||
1993 | SN | |||
1997 | BRNN LSTM |
|||
1998 | LeNet5 | |||
2010 | ReLU | |||
2012 | Dropout DA |
AlexNet | ||
2014 | R-CNN SPPNet NIN |
GRU | GAN Attention |
|
2015 | BN |
VGG Fast R-CNN ResNet FCN |
||
2016 | Faster R-CNN | |||
2017 | FPN | Self-Attention | ||
2018 | Mask R-CNN |
基本思想:BP、UAT、ReLU、Dropout、DA、BN
一些比较经典的思路。
(error) Back Propagation (误差)反向传播算法
1974
先正向传播算出误差,再将误差反向由输出层向输入层传播,利用梯度下降法(or else)调整权重。
Universal Approximation Theorem 万能逼近定理/通用近似定理
1989
如果一个前馈神经网络具有线性输出层和至少一层隐藏层,只要给予网络足够数量的神经元,便可以足够高精度来逼近任意一个在 的紧子集 (Compact subset) 上的连续函数。
Rectified Linear Units 线性整流函数
2010 ReLU
常用作激活函数,特点:
Dropout —— 避免模型过拟合,增加泛化能力的trick
2012
在网络训练的过程中,按照一定的概率,暂时丢弃部分神经元。一般用于全连接层。可消除/减弱神经元间的联合适应性。后来出现很多变种,可丢弃神经元、断开连接、去掉部分特征等。
Data Augmentation
数据增强 —— 用于防止过拟合
2012 被用于深度学习(AlexNet)?(不确定)
当训练集较小的时候,可以通过对原始数据集进行修改,生成新的数据。
常见方法有(针对图像):
Batch Normalization 批标准化
2015
添加在激活函数之前,避免大批数据提前进入饱和阶段,过早发生梯度消失。
LeNet5、AlexNet、R-CNN、SPPNet、NIN、VGG、Fast R-CNN、ResNet、FCN、Faster R-CNN、FPN、Mask R-CNN
网络 | 基本结构 | 简化版 | 用途 | |
CNN基本框架系列 | LeNet5 | c5 - p - c5 - p - c5 - {FC}*2 | 3*conv + 2*FC | 识别 |
AlexNet | c11 - p - c5 - p - {c3}*3 - p - {FC}*3 | 5*conv + 3*FC | 识别 | |
NIN | {mlpconv - p}*N - GAP | mlpconv + p + GAP | 识别 | |
VGG16 | {{c3}*2 - p }*2 - {{c3}*3 - p}*3 - {FC}*3 | 16*conv + 3*FC | 识别 | |
ResNet | {[c3(+ReLU) - c3] + input} - ReLU | conv block + shortcut | 识别 | |
FCN | all conv(+p) + deconv + softmax | conv block + deconv | 语义分割 | |
R-CNN系列 | R-CNN | SS + AlexNet + SVM + BB | 检测 | |
SPPNet | AlexNet + SS + SPP + SVM + BB | 检测 | ||
Fast R-CNN | VGG16 + SS + RoI + SVM&BB | 检测 | ||
Faster R-CNN | VGG16 + RPN + RoI + SVM&BB | 检测 | ||
Mask R-CNN | VGG16 + RPN + RoIAlign + SVM&BB&(deconv + softmax) | Faster R-CNN + FCN | 实例分割 |
* 备注:
p: pooling
c5:卷积层,卷积核大小5*5(默认省略激活层,除特殊情况,如ResNet)
FC:全连接层
{}*N:表示同样的结构块,出现N次
Convolutional Neural Network 卷积神经网络
图像识别-特征提取
2012年ImageNet,使用CNN的AlexNet取得冠军,之后CNN被广泛应用于图像识别-特征提取。
(第一次完整出现卷积层、激活层、池化层,是1998年的 LeNet5,用于识别手写数字0-9)
基本结构:卷积层 + 激活层 + 池化层
不同的卷积核会提取出不同的特征,并直接影响效果,可修改的参数:
卷积操作的结果:强调边缘特征,弱化非边缘特征。
AlexNet:
LeNet5和AlexNet的基本框架都是由卷积层、激活层、池化层组成的。
与LeNet5相比,AlexNet有这些特点:
* 可以看到,有很多避免过拟合的操作。普遍来说,增大网络,会容易引入降低模型泛化能力的风险。
Regions with CNN features R-CNN
目标检测
2014,用CNN做目标检测 —— Localization + Recognition
基本结构:SS + AlexNet + SVM + BB
详细地:Selective Search选择候选区域 + AlexNet提取特征 + SVM分类器 + Bounding Box回归产生检测框
步骤:
* 将分类和检测分为了两个步骤(实际上两者之间是有联系的,例如:提高检测框的精度,分类的置信度也会提高)。
特点:
Spatial Pyramid Pooling 空间金字塔池化 SPPNet
目标检测
2014,基于R-CNN的改进,改进结果:降低耗时、解决不同尺寸候选框resize时的信息丢失和变形的问题。与R-CNN相比,准确度近似(在不同类别上各有优劣),训练速度快了3倍,测试速度快了10-100倍。
基本结构:AlexNet + SS + SPP + SVM + BB
步骤:
* SPPNet的具体优化操作(2.2,2.3),主要体现在CNN的最后一个卷积块之后,全连接层之前。
作用:可以接受不同尺寸的feature map作为输入,转换成固定尺寸的feature map输出
步骤:
下图是一个例子(按照4*4,2*2,1*1的方式切割,最后得到一个尺寸为1*21(16+4+1)的输出):
与R-CNN相比,SPPNet的改进为:
Network in Network
2014 NIN
目标识别
对AlexNet的改进,效果:增强了模型的非线性;减少参数,降低过拟合的风险,也提高了速度
AlexNet的问题:
改进内容:
结构:
具体地:
用mlp代替卷积核,在图像上滑动。
为什么用mlp:mlp可以通过BP来更新参数,使得整个网络参数更新的过程时连续的。
mlp的结构:输入 - 隐藏层(全连接)- 输出 (隐藏层可以是多层的)
每个全连接层后都加了一个ReLU,所以mlpconv与conv+ReLU相比,具有更强的非线性。
用GAP代替全连接层。
GAP输入数据的通道数等于类别数。假设有N个目标类别,输入数据的尺寸就应该为x*x*N,即有N个大小为x*x的feature map。对每个feature map做average pooling,输出一个1*N的向量。
出自牛津大学计算视觉组Visual Geometry Group和谷歌DeepMind团队 VGG
目标识别
论文发表于2015,是2014ILSVRC的亚军(冠军是GoogLeNet,VGG可移植性更好,使用更广泛)
VGG有6种模型(为探究网络深度对分类精度的影响,作者使用6组模型进行试验),现在常说的VGG指的是VGG16——13个conv+3个FC,即下图中的D(E即VGG19——16个conv+3个Fc)
各种VGG的结构:
* conv3-512,代表该层有512个尺寸为3*3的卷积核
VGG使用卷积核都很小。用2个连续的3*3的卷积层代替一个5*5的卷积层,用3个连续的3*3的卷积层代替一个7*7的卷积层。相同感受野,参数更少:
下图解释了为什么“可以用2个连续的3*3的卷积层代替一个5*5的卷积层”:
特点:
VGG相对于AlexNet的改进:
目标检测
2015,用于解决R-CNN计算耗时长、内存开销大的问题 Fast R-CNN
基于R-CNN框架,参考SPPNet的优化思路:
R-CNN存在的问题(后面两个问题,SPPNet也存在):
基本结构:VGG16 + SS + RoI + SVM&BB
步骤:
训练模型时的Loss:分类error+检测框的error,一起回传。
作用:可以接受不同尺寸的feature map作为输入,转换成固定尺寸的feature map输出(与SPP效果类似,可以看作是SPP的简化版)。
步骤(假设输出尺寸指定为n*n):
eg:
左下角5*7的矩形框为候选区域,如果指定输出尺寸为2*2,可以作如下分割:纵向(5)分为2和3;横向(7)分为3和4
与SPPNet和R-CNN相比,Fast R-CNN具有更易于学习的特点。
SPPNet提取特征时,只能更新SPP层之后的参数,无法难以更新SPP层之前的卷积层参数。R-CNN也是如此,只能难以更新卷积层之后的参数(是更新参数的开销比较大,效率低,而不是无法更新!!)。原因:
总结Fast R-CNN的改进内容(与SPPNet相比):
(Deep) Residual Network (深度)残差网络
2015 ResNet
目标检测
作用:解决CNN在实际应用中出现的“网络越深效果越差”的问题,让模型自己学习到合适的网络深度。
为什么会“网络越深效果越差”:
理论上,加深神经网络,效果至少不会越差,应该优于或等于浅层网络的效果。
举个例子:
假设一个模型的最优层数为20,实际层数为x。
当x<20,x越大越能提取到深度信息,效果越好;当x>20,将多出来的那些层全都变成等输入输出的层,即输入和输出相等,就能得到与x=20相同的效果(这应该是网络能够学习到的)。
但实际上,当x<20时,x越大效果越好;当x>20时,x越大效果越差。
直观解释是网络很难学习到等输入输出的参数。因为这些参数更接近1,但初始化时,参数往往都是0。
根本原因是梯度消失。反向传播更新参数时,浅层的梯度由深层的梯度累乘得到,而梯度往往都小于1,当网络层数很多时,浅层的梯度很小(甚至很接近0),更新很慢(几乎不更新)。容易出现:深层的参数已经过拟合,而浅层还未习得合适的参数。
如何解决这个问题:
将浅层的输出直接加在深层的输入上。
* 泛指当输入为,weight layer的输出
图示结构为一个标准的残差块。
如果不考虑shortcut(右边的弧线连接),这个结构可以表示为:
假设为第二个全连接层的输出,也就是第二个激活层的输入,那么输出可以表示为
考虑shortcuts,即将加在上,再一起传入第二个激活层,输出变为
为什么有用:
总结:
一个深度CNN中,可以有多个残差块。如作者用一个34层的残差网络(34层conv+16个shortcuts),达到了比VGG19更高的准确率。一定程度上解决了网络退化(越深越差)的问题。
* 误差与残差:
假设已知一个映射,,想要找到一个,使得,当前找到的值是
误差:
残差:
Fully Convolutional Networks 全卷积网络
图像语义分割
2015,end-to-end,像素级的分类,同时保留类别信息和位置信息 FCN
基于CNN(VGG16)框架,将末端的全连接层也换成卷积层、反卷积层。
为什么要换:CNN是对一张图/一个区域的预测。全连接层会损失位置信息,如果想要处理分割任务,需要在CNN之后再叠加一个后处理,用于逐像素点的预测(可以认为是还原位置信息的过程)。但其实CNN的中间过程是一直有保留位置信息的,可直接利用。
* 反卷积层:将卷积层输出的feature map映射回原图的尺寸(upsampling)
与CNN的区别:
步骤:
目标检测
2016 Faster R-CNN
对Fast R-CNN的加速,优化生成候选框的过程。因为生成了更加精确的候选框,候选框的数量也从2000降到了300。
Fast R-CNN存在的问题:
基本结构:VGG16 + RPN + RoI + SVM&BB
步骤:
作用:与SS相同,生成候选区域框。
步骤:
针对每一个anchor生成9个anchor box:
与SS相比,RPN可以省去生成feature map的步骤,更好的融合到整个检测网络中去。
改进内容(与Fast R-CNN相比):
Feature Pyramid Network 特征金字塔网络
目标检测
2017 FPN
用于提升小物体的检测性能。
可在基本不增加计算量的情况下,大幅提升小物体检测性能。
小物体检测性能的问题(以Faster R-CNN为例):
Faster R-CNN中,对最后一个卷积块输出的feature map(高层特征)上的每一个点进行分类。feature map往往比原图尺寸小,如小N倍,即feature map上的一个点对应原图上一个N*N的区域。如果物体的尺寸远小于N*N,可能会被忽略掉。
CNN网络中,低层特征包含的位置信息多(包含明确的轮廓信息),语义信息少(因为只有局部信息);高层特征包含的位置信息少,语义信息多。(越靠近input,层数越低)
解决方式:
将自底向上(bottom-up)卷积操作生成的feature map和自顶向下(top-down)下采样生成的feature map融合,操作融合后的feature map。
步骤:
FPN可以认为是给优化检测效果提供了一种思路,它可被用于多种检测框架。如应用于Faster R-CNN,即将每一个融合后的feature map送入RPN,即可得到多个尺度的候选区域。
实例分割
2018 Mask R-CNN
可用于实例分割、目标检测、关键点检测
计算速度与Faster R-CNN相当,也保留了FCN分割的准确率
基本结构:Faster R-CNN + FCN
详细地:VGG16 + RPN + RoIAlign + SVM&BB&[deconv + softmax]
步骤:
对RoI Pooling的优化。
RoI Pooling存在的问题:
步骤(以输入5*7,输出2*2为例):
JordanNet、ElmanNet、BRNN、LSTM、GRU
Recurrent Neural Network 循环神经网络
处理序列数据
对全连接网络的改良,增加同层节点之间的连接,用于处理序列信息。即当前的值不仅取决于当前状态,也与过去的状态有关。
最原始的RNN有两种,Jordan Network和Elman Network,现在用的比较多的是Elman Network
处理短序列数据
1990 ElmanNet
又称为SRN(Simple Recurrent Network)
基本结构:输入、隐藏层(Hidden Layer)、输出
如图,输入序列x展开后为:,对应的输出序列为(输入、输出序列长度可以不相等)。
特点:
1986 JordanNet
区别:
为什么ElmanNet应用更广泛:
更易于拓展。同一层比较好控制输入和输出维度一致(ElmanNet)。如果输出层数据维度和隐藏层数据维度不一致(经常发生),还需要增加额外的操作(JordanNet)。
Bidirectional RNN 双向循环神经网络
处理序列数据
1997 BRNN
将常规RNN(单向RNN)拓展至双向。能够连接上下文信息。
单向RNN的问题:
只能按照序列顺序依次处理信息。计算t=T时刻的输出时,只能获取到t
例如:
在判断Teddy是玩偶还是人名时,单向RNN只能获取到单词Teddy之前的信息,可能会出错。BRNN可以根据Teddy之后的信息,即bears/President作出判断。
解决方式:
在正向传播的基础上,再增加一次反向传播(这里的反向传播不是指BP,而是指逆时序传播)
基本结构:
可以分为三步:正时序传播、逆时序传播、BP更新参数
特点:
Long-Shot Term Memory 长短时记忆网络
处理序列数据
1997 LSTM
对ElmanNet的改良,解决ElmanNet难以处理长期依赖的问题。
ElmanNet的问题:
梯度消失导致无法获取长序列的信息。BP更新参数时,计算较远的层对当前层的影响时,会乘上中间各层的W,W往往小于1,累乘的结果会很小。导致远距离数据的参数难以更新,而参数往往会被初始化为0。即信息的传递会由于距离的原因而逐渐衰减。
例如:
两个句子,根据前文预测句子的最后一个词:
(1) I live in China, I speak Chinese.
(2) I live in China. I'm 26 years old. I speak Chinese.
需要预测的词都是Chinese,用于预测Chinese的关键词都是China。
第一个句子中的China距离更近,对预测结果的影响更大,更容易得到正确的结果。
解决方式:
具体做法:增加三个门控单元
详细地:
图解:
LSTM展开:
图解:
LSTM也可以用下图表示:
图解:
为什么可以解决梯度消失的问题:
总结:
Gate Recurrent Unit Network 门控循环网络
处理序列数据
2014 GRU
结构与LSTM十分相似,只有2个门控单元。参数比LSTM少,计算更快,但可以达到与LSTM相同的效果。
LSTM的问题:参数过多,导致学习困难,计算慢
基本结构:
两个门:重置门(reset gate)、更新门(update gate)
图解:
与LSTM相比:
效果:
该论文除了提出GRU,还提出了RNN Encoder-Decoder框架:
结构:
* 两个RNN可以不同。
为什么要这么做:
传统的机器翻译方法(统计机器翻译SMT),主要是基于短语翻译,准确率不高。作者想要模拟人脑的翻译过程:先将整个句子读入(Encoder),在脑海里翻译成自己可以理解的语言,再翻译成目标语言(Decoder)。
(详细的计算过程就不写了。)
有很多基于Encoder-Decoder框架的模型,两端的RNN可以是任意模型,中间的转换过程也可以替换成其他模型。
SN、GAN、Attention、Self-Attention
Siamese Network 孪生网络
度量学习
1993 SN
用于判断2个签名是否源于同一个人。
基本框架:
由2个完全相同的网络组成(相当于只有1个网络)。计算2个网络输出之间的距离,判断是否为同一类。—— 不是优化具体的特征,而是优化特征之间的距离。
步骤:
特点:
Siamese Network & Pseudo-Siamese Network 孪生网络&伪孪生网络
结构:
适用场景:
Generative Adversarial Network 对抗网络
2014 GAN
用于生成样本 —— 目的是得到一个好的生成器。
生成器:
根据(某种格式的)输入,分析/理解输入数据,生成与输入数据类似的(可以是另一种格式的)输出(听起来像句废话 - -)。如:
GAN网络由一个生成器和一个鉴别器组成:
步骤:
步骤里面没有鉴别器,因为鉴别器是用来训练生成器的。(实际使用时只需要生成器,训练时需要生成器+鉴别器)
训练过程中会出现两种训练模式:
在整个训练过程中,两种训练模式交替进行。
图解:
GAN网络也是一个很灵活的结构,可以使用各种模型作为生成器和鉴别器。
注意力机制
2014 Attention + RNN
用于计算信息的相关程度,可从众多信息中选出对目标任务更关键的信息。信息的相关程度更依赖于信息本身,而不是序列顺序(RNN中信息的相关程度更依赖于顺序)。
步骤:
如上图,输入信息为Query,知识库中有Keys,输出信息为Attention Value。
Attention多与Encoder-Decoder联合使用,Encoder/Decoder可以是各种网络。如下图(2016Google机器翻译系统模型):
整体框架为:
2017 self-attention
与Attention结构类似,但适用对象不同。
机器翻译领域中,
Self-Attention往往能比Attention取得更好的效果,因为他先考虑了输入数据内部的联系,再做映射(对长难句很有用)。