一、深度学习中的一些常见问题及解决方案
(1)欠拟合
欠拟合即模型无法得到较低的训练误差,导致欠拟合的主要原因是模型复杂度不够,特征维度过少,导致拟合的函数无法满足训练集,误差较大。
(2)过拟合
过拟合即模型的训练误差远小于它在测试数据集上的误差,导致过拟合的主要原因是模型复杂度过高,特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。
(3)解决方案
1、应对欠拟合问题,即增加其特征维度,优化模型,提升复杂度即可。
2、应对过拟合问题,有两种常见的解决方案:权重衰减和丢弃法:
*权重衰减:等价于 L2范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,L2范数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数的乘积.
*丢弃法:对于多层感知机而言,对该隐藏层使用丢弃法,该层的隐藏单元将有一定概率被丢弃掉,即隐藏层神经元的丢弃是随机的,输出层的计算无法过度依赖中的任一个,从而在训练模型时起到正则化的作用,并可以用来应对过拟合。
二、梯度消失与梯度爆炸
(1)梯度消失、梯度爆炸
当神经网络的层数较多时,模型的数值稳定性容易变差,从而便容易导致梯度消失和梯度爆炸的发生。例如:假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入X分别与0.2 ^ 30(消失) 和 5 ^ 30(爆炸)的乘积,这便出现了梯度消失和梯度爆炸。
(2)环境因素
环境因素主要有 协变量偏移、标签偏移以及概念偏移
三、循环神经网络进阶
(1)GRU
• 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
• 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。
(2)LSTM
• 遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入
• 输出门:控制从记忆细胞到隐藏状态
• 记忆细胞:⼀种特殊的隐藏状态的信息的流动
(3)深度循环神经网络
(4)双向循环神经网络
四、机器翻译
将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。相关流程大致为:
1、数据预处理:将数据集清洗、转化为神经网络的输入minbatch。
2、分词:将字符串转化为单词组成的列表。
3、建立字典:将单词组成的列表转化为单词id组成的列表。
4、载入数据集
5、建立encoder-decoder模型:
6、定义损失函数
7、训练
8、测试
五、注意力机制
(1)产生
在机器翻译及其他一些深度学习模块中,普通的“编码器-译码器”模式往往存在一些问题,如:源输入序列的信息太长、后面的信息覆盖前面的信息等等,从而导致学习的效果不佳,于是深度学习中的注意力机制便应运而生。
(2)基本原理
如图所示:大部分注意力机制都可以用上图的三个阶段来解释:
阶段一:通过比较query与key的相似程度并且自定义函数来得到两者的相关性或相似性;
阶段二:通过类似softmax的函数对得到的相关性数据进行归一化处理得到权重系数;
阶段三:根据权重系数对value进行加权求和即可得到“注意力分数”,即最有可能的输出结果;
(3)常用的注意力层
1、Dot-product Attention(点积注意力):假设query和keys有相同的维度, 即 ∀i,q,ki∈Rd . 通过计算query和key转置的乘积来计算attention score,通常还会除去 √d 来减少计算出来的score对维度的依赖性。
2、Multilayer Perceptron Attention(多层感知机注意力):首先将 query and keys 投影到 Rh .为了更具体,我们将可以学习的参数做如下映射 Wk∈Rh×dk , Wq∈Rh×dq , and v∈Rh . 将score函数定义为
α(k,q)=vTtanh(Wkk+Wqq),然后将key 和 value 在特征的维度上合并(concatenate),然后送至 a single hidden layer perceptron 这层中 hidden layer 为 ℎ and 输出的size为 1 .隐层激活函数为tanh,无偏置。
六、SeqToSeq模型
(1)原始结构:
(2)引入注意力机制后的结构:
将注意机制添加到sequence to sequence 模型中,在时间步为t的时候。此刻attention layer保存着encodering看到的所有信息——即encoding的每一步输出。在decoding阶段,解码器的 t 时刻的隐藏状态被当作query,encoder的每个时间步的hidden states作为key和value进行attention聚合. Attetion model的输出当作成上下文信息context vector,并与解码器输入 Dt 拼接起来一起送到解码器:
七、Transformer
为了整合CNN和RNN的优势,[Vaswani et al., 2017] 创新性地使用注意力机制设计了Transformer模型。该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,上述优势使得Transformer模型在性能优异的同时大大减少了训练时间。模型的架构如下:
该模型主要的不同点在于:
(1)多头注意力层:
多头注意力层包含h个并行的自注意力层,自注意力模型是一个正规的注意力模型,序列的每一个元素对应的key,value,query是完全一致的。每一个这种层被成为一个head,对每个头来说,在进行注意力计算之前,我们会将query、key和value用三个现行层进行映射,这h个注意力头的输出将会被拼接之后输入最后一个线性层进行整合:
(2)基于位置的前馈网络
它接受一个形状为(batch_size,seq_length, feature_size)的三维张量。Position-wise FFN由两个全连接层组成,他们作用在最后一维上。因为序列的每个位置的状态都会被单独地更新,所以我们称他为position-wise,这等效于一个1x1的卷积。
(3)Add and Norm
这是层归一化可以防止层内的数值变化过大,从而有利于加快训练速度并且提高泛化性能。一个重要的相加归一化层,它可以平滑地整合输入和其他层的输出,因此我们在每个多头注意力层和FFN层后面都添加一个含残差连接的Layer Norm层。
(4)位置编码
为了更好的捕捉序列信息,Transformer模型引入了位置编码去保持输入序列元素的位置。
假设输入序列的嵌入表示 X∈Rl×d , 序列长度为 l 嵌入向量维度为 d ,则其位置编码为 P∈Rl×d ,输出的向量就是二者相加 X+P 。
位置编码是一个二维的矩阵,i对应着序列中的顺序,j对应其embedding vector内部的维度索引,并通过一下算式来计算位置编码:
八、卷积神经网络(CNN)
(1)二维卷积层
二维卷积层是最常见的卷积神经网络的模型,其中有涉及到二维相互关运算(cross-correlation),二维互相关运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。
二维卷积层将输入和卷积核做互相关运算,并加上一个标量偏置来得到输出。
(2)特征图与感受野
1、特征图(feature map):二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征。
2、感受野(receptive field):影响元素的前向计算的所有可能输入区域(可能大于输入的实际尺寸)。
(3)填充与步幅
1、填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。
2、步幅(stride)即在互相关运算中,卷积核在输入数组上滑动,每次滑动的行数与列数。
(4)多通道与11卷积层
1、多输入通道:卷积层的输入可以包含多个通道,假设输入数据的通道数为 ci ,卷积核形状为 kh×kw ,我们为每个输入通道各分配一个形状为 kh×kw 的核数组,将 ci 个互相关运算的二维输出按通道相加,得到一个二维数组作为输出。我们把 ci 个核数组在通道维上连结,即得到一个形状为 ci×kh×kw 的卷积核。
2、多输出通道:卷积层的输出也可以包含多个通道,设卷积核输入通道数和输出通道数分别为 ci 和 co ,高和宽分别为 kh 和 kw 。如果希望得到含多个通道的输出,我们可以为每个输出通道分别创建形状为 ci×kh×kw 的核数组,将它们在输出通道维上连结,卷积核的形状即 co×ci×kh×kw 。
3、11卷积层:1×1 卷积核可在不改变高宽的情况下,调整通道数。 1×1 卷积核不识别高和宽维度上相邻元素构成的模式,其主要计算发生在通道维上。
(5)池化层
池化层主要用于缓解卷积层对位置的过度敏感性。同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出,池化层直接计算池化窗口内元素的最大值或者平均值,该运算也分别叫做最大池化或平均池化。池化层填充和步幅与卷积层填充和步幅的工作机制一样。
在处理多通道输入数据时,池化层对每个输入通道分别池化,但不会像卷积层那样将各通道的结果按通道相加。这意味着池化层的输出通道数与输入通道数相等。
(6)LetNet
LeNet分为卷积层块和全连接层块两个部分。
卷积层块里的基本单位是卷积层后接平均池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的平均池化层则用来降低卷积层对位置的敏感性。卷积层块由两个这样的基本单位重复堆叠构成。在卷积层块中,每个卷积层都使用的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。
全连接层块含3个全连接层。它们的输出个数分别是120、84和10,其中10为输出的类别个数。
(7)深度卷积神经网络(AlexNet)
AlexNet首次证明了学习到的特征可以超越⼿⼯设计的特征,从而⼀举打破计算机视觉研究的前状。它主要具备了以下特征:
1、8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。
2、将sigmoid激活函数改成了更加简单的ReLU激活函数。
3、用Dropout来控制全连接层的模型复杂度。
4、引入数据增强,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合。
(8)使用重复元素的网络(VGG)
VGG通过重复使⽤简单的基础块来构建深度模型。
Block:数个相同的填充为1、窗口形状为 3×3 的卷积层,接上一个步幅为2、窗口形状为 2×2 的最大池化层。
卷积层保持输入的高和宽不变,而池化层则对其减半。
(9)网络中的网络(NiN)
NiN:串联多个由卷积层和“全连接”层构成的小⽹络来构建⼀个深层⽹络。
⽤了输出通道数等于标签类别数的NiN块,然后使⽤全局平均池化层对每个通道中所有元素求平均并直接⽤于分类。
NiN重复使⽤由卷积层和代替全连接层的1×1卷积层构成的NiN块来构建深层⽹络。
NiN去除了容易造成过拟合的全连接输出层,而是将其替换成输出通道数等于标签类别数 的NiN块和全局平均池化层。
NiN的以上设计思想影响了后⾯⼀系列卷积神经⽹络的设计。
(10)GoogLeNet
特征:
1、由Inception基础块组成。
2、Inception块相当于⼀个有4条线路的⼦⽹络。它通过不同窗口形状的卷积层和最⼤池化层来并⾏抽取信息,并使⽤1×1卷积层减少通道数从而降低模型复杂度。
3、可以⾃定义的超参数是每个层的输出通道数,我们以此来控制模型复杂度。
基本单位: