1、前馈神经网络:全连接神经网络(DNN)、卷积神经网络(CNN)、全卷积神经网络(FCN)、残差网络(ResNet)、生成对抗网络(GAN)、变分自动编码器(VAE)、BP(back propagation)神经网络
从属关系
传统:DNN
卷积CNN:CNN、ResNet、FCN
对抗(GAN):生成不存在的数据,生成器负责生成假图像,判别器负责判别图像真假。
BP神经网络:即反向传播,是一种按照误差逆向传播算法训练的多层前馈神经网络
编码器(VAE):编码器(encoder)和解码器(decoder)
2、反馈神经网络:包括循环神经网络(RNN)、长短期记忆网络(LSTM)、Hopfield网络、玻尔兹曼机(BN)、Transformer
从属关系
RNN:RNN、长短期记忆网络(LSTM)、GRU、Transformer、GPT
Hopfield:是一种单层互相全连接的反馈型神经网络
随机神经网络(BN):玻尔兹曼机是一大类的神经网络模型,但是在实际应用中使用最多的则是受限玻尔兹曼机(RBM)。受限玻尔兹曼机(RBM)是一个随机神经网络(即当网络的神经元节点被激活时会有随机行为,随机取值)。它包含一层可视层和一层隐藏层。在同一层的神经元之间是相互独立的,而在不同的网络层之间的神经元是相互连接的(双向连接)。在网络进行训练以及使用时信息会在两个方向上流动,而且两个方向上的权值是相同的。
疑问:
卷积神经网络CNN(带有卷积的一类网络总称)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络。卷积结构可以减少深层网络占用的内存量,其中三个关键操作——局部感受野、权值共享、池化层,有效的减少了网络的参数个数,缓解了模型的过拟合问题。链接: CNN
图像分割、分类、检测和检索,CNN主要应用于图像识别(计算机视觉,CV),应用有:图像分类和检索、目标定位检测、目标分割、人脸识别、骨骼识别和追踪,具体可见MNIST手写数据识别、猫狗大战、ImageNet LSVRC等,还可应用于自然语言处理和语音识别。
基于空间利用(Spatial Exploitation based)的CNN有:LeNet、Alenet、ZefNet、VGG、GoogleNet等
基于深度(Depth based)的CNN有:Highway Networks、ResNet、Inception V3/V4、Inception-ResNet、ResNext等。
基于多路径(Multi-Path based)的CNN有:Highway、ResNet、DenseNet等。
基于宽度的多连接(Width based Multi-Connection)CNN有:WideResNet、Pyramidal Net、Xception、Inception Family等
基于(通道)特征图(Feature Map Exploitation based)开发的CNN有:Squeeze and Excitation、Competitive Squeeze and Excitation等。
基于注意力(Attention based)的CNN有:Residual Attention Neural Network、Convolutional Block Attention、Concurrent Squeeze and Excitation等。
PyTorch实现的cnn:该系列的卷积神经网络实现包含了9大主题,有:典型网络、轻量级网络、目标检测网络、语义分割网络、实例分割网络、人脸检测和识别网络、人体姿态识别网络、注意力机制网络、人像分割网络。
CNN几个经典模型(AlexNet、VGG、NIN、GoogLeNet、ResNet)
参考连接:
链接: link1
链接: link2
循环神经网络是一种对序列数据有较强的处理能力的网络, 这些序列型的数据具有时序上的关联性的,既某一时刻网络的输出除了与当前时刻的输入相关之外,还与之前某一时刻或某几个时刻的输出相关。传统神经网络(包括CNN),输入和输出都是互相独立的,前馈神经网络并不能处理好这种关联性,因为它没有记忆能力,所以前面时刻的输出不能传递到后面的时刻。
循环神经网络,是指在全连接神经网络的基础上增加了前后时序上的关系,RNN包括三个部分:输入层、隐藏层和输出层。相对于前馈神经网络,RNN可以接收上一个时间点的隐藏状态。(在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。)
在网络模型中不同部分进行权值共享使得模型可以扩展到不同样式的样本。
图中 x、h、y 分别代表 RNN 神经元的输入、隐藏状态、输出。
U、W、V 是对向量 x、h、y 进行线性变换的矩阵。
计算 ht 时激活函数通常采用 tanh,计算输出 yt 时激活函数通常是 softmax (分类)。
RNN分为一对一、一对多、多对一、多对多,其中多对多分为两种。
1.单个神经网络,即一对一。2.单一输入转为序列输出,即一对多。这类RNN可以处理图片,然后输出图片的描述信息。3.序列输入转为单个输出,即多对一。多用在电影评价分析。4.编码解码(Seq2Seq)结构。seq2seq的应用的范围非常广泛,语言翻译,文本摘要,阅读理解,对话生成等。5.输入输出等长序列。这类限制比较大,常见的应用有作诗机器人。
层次可分为:单层RNN、多层RNN、双向RNN
RNN被广泛应用在NLP领域中,例如文本分类、语音识别、自动文摘等。
循环神经网络在自然语言处理(Natural Language Processing, NLP),例如语音识别、语言建模、机器翻译等领域有应用,也被用于各类时间序列预报。引入了卷积神经网络(Convoutional Neural Network,CNN)构筑的循环神经网络可以处理包含序列输入的计算机视觉问题。
RNN–>LATM—>BPTT—>GUR–>RNN LM—>word2vec–>seq2seq–>BERT–>transformer–>GPT
一、循环神经网络 (RNN)
RNN一个最大的缺陷就是梯度消失与梯度爆炸问题, 由于这一缺陷,使得RNN在长文本中难以训练, 这才诞生了LSTM及各种变体。
梯度消失与梯度爆炸
梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习。
梯度爆炸会使得学习不稳定, 参数变化太大导致无法获取最优参数。
在深度多层感知机网络中,梯度爆炸会导致网络不稳定,最好的结果是无法从训练数据中学习,最坏的结果是由于权重值为NaN而无法更新权重。
在循环神经网络(RNN)中,梯度爆炸会导致网络不稳定,使得网络无法从训练数据中得到很好的学习,最好的结果是网络不能在长输入数据序列上学习。
由于预测的误差是沿着神经网络的每一层反向传播的,因此当雅克比矩阵的最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸;反之,若雅克比矩阵的最大特征值小于1,梯度的大小会呈指数缩小,产生梯度消失。对于普通的前馈网络来说,梯度消失意味着无法通过加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习的作用。
梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比收缩。而梯度消失问题相对比较棘手,需要对模型本身进行改进。深度残差网络是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象,从而使得我们能够学习到更深层的网络表示;而对于循环神经网络来说,长短时记忆模型及其变种门控循环单元等模型通过加入门控机制,很大程度上弥补了梯度消失所带来的损失。
参考链接:https://www.jianshu.com/p/0cf7436c33ae
二、长短期记忆网络 (LSTM)
LSTM 缓解梯度消失、梯度爆炸,RNN 中出现梯度消失的原因主要是梯度函数中包含一个连乘项
LSTM 内部包含了遗忘门、输入门和输出门。
而 LSTM 的神经元在此基础上还输入了一个 cell 状态 ct-1, cell 状态 c 和 RNN 中的隐藏状态 h 相似,都保存了历史的信息,从 ct-2 ~ ct-1 ~ ct。在 LSTM 中 c 与 RNN 中的 h 扮演的角色很像,都是保存历史状态信息,而在 LSTM 中的 h 更多地是保存上一时刻的输出信息。
参考链接:https://www.jianshu.com/p/247a72812aff
三、门控循环单元 (GRU)
LSTM因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力和时间成本,因而很多时候我们也就会选择更加”实用“的GRU。
四、反向传播
反向传播(BP)和基于时间的反向传播算法BPTT
BP(BackPropogation)是神经网络参数求解的基础。BPTT对所有参数求损失函数的偏导,并不断调整这些参数使得损失函数变得尽可能小。
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。
RNN发展历史
RNN的常见算法分类
1)、完全递归网络(Fully recurrent network)
2)、Hopfield网络(Hopfield network)
3)、Elman networks and Jordannetworks
4)、回声状态网络(Echo state network)
5)、长短记忆网络(Long short term memery network)
6)、双向网络(Bi-directional RNN)
7)、持续型网络(Continuous-time RNN)
8)、分层RNN(Hierarchical RNN)
9)、复发性多层感知器(Recurrent multilayer perceptron)
10)、二阶递归神经网络(Second Order Recurrent Neural Network)
11)、波拉克的连续的级联网络(Pollack’s sequential cascaded networks)
参考连接:https://zhuanlan.zhihu.com/p/148172079
GAN的主要结构包括一个生成器G(Generator)和一个判别器D(Discriminator)。生成不存在的数据,生成器负责生成假图像,判别器负责判别图像真假。“对抗”的含义就是生成器通过不断的训练尽可能的生成以假乱真的图像,判别器通过不断的识别尽可能的区分图像的真假。
生成网络:卷积神经网络+反卷积神经网络(前者负责提取图像特征,后者负责根据输入的特征重新生成图像(即假数据))。
判别网络:卷积神经网络+全连接层处理(传统神经网络)(前者负责提取图像特征,后者负责判别真假。)
GAN最常使用的地方就是图像生成,如超分辨率任务,语义分割、图像生成、图像转换和超分辨率等等。
GAN最直接的应用在于数据的生成,也就是通过GAN的建模能力生成图像、语音、文字、视频等等。目前,GAN最成功的应用领域主要是计算机视觉,包括图像、视频的生成,如图像翻译、图像上色、图像修复、视频生成等。此外GAN在自然语言处理,人机交互领域也略有拓展和应用。
GAN产生了许多流行的架构,如DCGAN,StyleGAN,BigGAN,StackGAN,Pix2pix,Age-cGAN,CycleGAN等。
参考连接:https://www.cnblogs.com/wxkang/p/17133320.html
全卷积神经网络(FCN)
全卷积网络和CNN网络的主要区别在于FCN将CNN中的全连接层换成了卷积操作。换成全卷积操作后,由于没有了全连接层的输入层神经元个数的限制,所以卷积层的输入可以接受不同尺寸的图像,也就不用要求训练图像和测试图像size一致。
FCN与CNN的区别在于把于FCN将CNN最后的全连接层换成卷积层,然后再进行上采样,得到与与输入大小相同的图像,然后使用softmax获得每个像素点的分类信息,从而解决了分割问题。
FCN对图像进行像素级的分类,与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN提出可以把后面几个全连接都换成卷积(这样就可以接受任意尺寸的输入图像),这样就可以获得一张2维的feature map,然后采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上使用softmax进行逐像素分类。
参考连接:https://blog.csdn.net/m0_56192771/article/details/124113078
整体的网络结构分为两个部分:全卷积部分和反卷积部分。其中全卷积部分借用了一些经典的CNN网络(如AlexNet,VGG,GoogLeNet等),并把最后的全连接层换成卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
1、输入和输出
网络的输入可以为任意尺寸的彩色图像;输出与输入尺寸相同
2、全卷积
网络在CNN卷积部分不用全连接而是替换成1\times 1卷积
3、上采样 Upsampling
由于在卷积过程中,我们的map变得很小,为了得到原图像大小的稠密像素预测,我们需要进行上采样。
4、跳级结构 Skips
如果利用之前提到的上采样技巧对最后一层的特征图进行上采样的到原图大小的分割,由于最后一层的特征图太小,我们会损失很多细节。
残差网络(ResNet)
在CNN网络中,输入的是图片的矩阵,也是最基本的特征,整个CNN网络就是一个信息提取的过程,从底层的特征逐渐抽取到高度抽象的特征,网络的层数越多也就意味这能够提取到的不同级别的抽象特征更加丰富,并且越深的网络提取的特征越抽象,就越具有语义信息。
对于传统的CNN网络,简单的增加网络的深度,容易导致梯度消失和爆炸。针对梯度消失和爆炸的解决方法一般是正则初始化(normalized initialization)和中间的正则化层(intermediate normalization layers),但是这会导致另一个问题,退化问题,随着网络层数的增加,在训练集上的准确率却饱和甚至下降了。这个和过拟合不一样,因为过拟合在训练集上的表现会更加出色。
“退化问题”:
按照常理更深层的网络结构的解空间是包括浅层的网络结构的解空间的,也就是说深层的网络结构能够得到更优的解,性能会比浅层网络更佳。但是实际上并非如此,深层网络无论从训练误差或是测试误差来看,都有可能比浅层误差更差,这也证明了并非是由于过拟合的原因。导致这个原因可能是因为随机梯度下降的策略,往往解到的并不是全局最优解,而是局部最优解,由于深层网络的结构更加复杂,所以梯度下降算法得到局部最优解的可能性就会更大。
模型退化
神经网络层数越多,网络就能进行更加复杂的特征提取,理论上可以取得更好的结果。但实验却发现网络深度增加时,准确度出现饱和,甚至是下降。(这不是过拟合的问题,因为训练误差也很大。而且batch normalization等技术解决了梯度消失和梯度爆炸的问题)
梯度消失和梯度爆炸的解决方法:对输入数据和中间层的数据进行归一化操作,这种方法可以保证网络在反向传播中采用随机梯度下降(SGD),从而让网络达到收敛。但是,这个方法仅对几十层的网络有用,当网络再往深处走的时候,这种方法就无用武之地了。
zero-padding全0填充增加维度:
此时一般要先做一个downsamp,可以采用stride=2的pooling,这样不会增加参数
采用新的映射(projection shortcut):
一般采用1x1的卷积,这样会增加参数,也会增加计算量。
如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。但是,如果把网络设计为H(x) = F(x) + x,如下图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。
参考连接:https://zhuanlan.zhihu.com/p/72679537
反向传播(BP)和基于时间的反向传播算法BPTT
BP(BackPropogation)是神经网络参数求解的基础。BPTT对所有参数求损失函数的偏导,并不断调整这些参数使得损失函数变得尽可能小。
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。
主要分类
参考连接:https://www.jianshu.com/p/3e4d2a6d7d3d