一、优化算法及其特点:
1. BGD批量梯度下降:优点:梯度预测是稳定的
缺点:需要一次更新所有样本,计算速度非常慢
不适用于大数据集,不能在线更新模型
2. SGD随机梯度下降:优点:一次只选一部分样本,运算快,效果好
缺点:易受噪声点影响,参数更新的方差大,迭代并不是每次都向着最优解方向进行,可能无法达到全局最优解,且学习曲线震荡。容易被困在鞍点
适用于需要在线更新的模型,适用于大规模训练样本情况
3. SGD+Momentum
在随机梯度中引入了动量 Momentum,SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。SGDM就是不仅仅考虑负梯度方向,还考虑此时动量的方向(上一步的前进方向的惯性方向),然后将两个方向进行合并,即下一步更新参数的方向。特点:用滑动平均来更新,而不是当前梯度,可有效减少震荡,更平缓加快收敛速度。
适用于有可靠的初始化参数
4. Nestorov动量:NAG 会先在前一步的累积梯度上有一个大的跳跃,然后衡量一下梯度做一下修正,这种预期的更新可以避免我们走的太快。 (选沿当前方向走一步,再计算终点梯度方向,进而得到最终方向。)
5. AdaGrad:特点:采用自适应调节,减少了学习率的手动调节。对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。缺点是学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。需要快速收敛,训练复杂网络时;适合处理稀疏梯度
6. RMSProp:给历史数据和新数据都设一个权重,缓解退化问题。使用的是指数加权平均,旨在消除梯度下降中的摆动,与动量的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率η
需要快速收敛,训练复杂网络时;适合处理非平稳目标 - 对于RNN效果很好
7. Adam:是RMSProp和Momentum的结合,对梯度和学习率都用了滑动平均,还有一个纠偏,优点主要在于经过偏差校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。需要快速收敛,训练复杂网络时;善于处理稀疏梯度和处理非平稳目标的优点,也适用于大多非凸优化 - 适用于大数据集和高维空间
二、CNN经典结构
1. AlexNet:采用ReLU作为非线性的激活函数、利用多个(2个)GPU同时训练、使用数据增强来提高模型的准确率防止过拟合、利用Dropout算法防止过拟合、LRN归一化层的使用
结构:CONV1 ->MAX POOL1 ->NORM1 ->CONV2 ->MAX POOL2 ->NORM2 ->CONV3 ->CONV4 ->CONV5->Max POOL3 ->FC6->FC7 ->FC8
2. VGG:16~19层 卷积核更小,层数更深
每组卷积都使用3x3的卷积核原因:一方面可以减少参数,另一方面相当于进行了更多的非线性映射,可以增加网络的拟合/表达能力
params计算params=(本层卷积核长*宽*上层卷积核厚)*本层卷积核厚 池化层没有params
3. GoogLeNet:22层 去除了全连接层(占据了网络的大部分参数),使用了全局均值池化,大大减小了参数量
1*1卷积层的作用:用于减少维度,还用于修正线性激活(relu)
(1)采用了模块化的结构(inception结构),方便增添和修改
(2)网络最后采用了average pooling来替代全连接,可将准确率提升百分之0.6
(3)虽然移除了全连接,但依然使用了Dropout
(4)为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)
4. ResNet:152层 plain网络随着网络加深,错误率升高
深层网络到了一定深度,准确率趋近饱和,而且继续加深的话会降低准确率,这称为退化问题,为了解决退化问题,提出了残差学习,如下图所示为残差块,假设本来是要学习H(x),加了一条恒等映射之后我们要学习的就是F(x) = H(x) - x
5. DenseNet:核心思想是建立不同层之间的连接,充分利用功能,进一步减少梯度消失的问题,加深网络不是问题,训练效果非常好。DenseNet包含两部分,dense block和transition layers
dense block中的每一层之间直接连接,不同层之间的直接连接增加了每层输入的多样性和提高了效率
每两个相邻的dense block之间的卷积+池化层被称为transition layers,其作用是通过下采样来改变特征图的大小。
当参数量相同的情况下,DenseNet比ResNet拥有更小的错误率;当验证错误率相同的时候,DenseNet比ResNet拥有更少的参数。
对于 DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 利用特征复用(feature reuse)综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。
6. CNN应用:
语义分割:1.滑动窗口:将每一个小窗口通过cnn分类,缺点是计算量非常大2.全卷积网络:利用全是卷积层的网络来训练,通过填充保持图片的大小不变,最后分类得到语义分割后的图像,C为类别数量,在深通道(如64,128,256)逐层做卷积操作,非常消耗内存和计算量3.先下采样再上采样:对一小部分卷积层做原清晰度处理,经过一系列下采样,卷积,不使用全连接 上采样(去池化):最邻近去池化:将值赋给附近领域。钉床(Bed of Nails)去池化:将值赋给左上角元素,其余填充零
最大去池化(Max Unpooling):与Maxpooling相对应,将原值赋给对应位置元素,其余填充零,在网络的后半部分用去池化将相应元素放在池化前的相应位置,保存空间的上的结构,(池化后在低清晰度保留的元素与填充后的小块组成高清晰度的图像,这样可以保证最大池化的元素依然是在相应的位置)优点:分割的意义就在于找到不同类别的边界,最大池化后在低清晰度会丢失空间信息,去池化后会还原空间信息,帮助预测
7. 目标检测RCNN:
R-CNN是用来识别一个图片中的若干张物体的方法,采用提取框,对每个框提取特征、图像分类、 非极大值抑制四个步骤进行目标检测
RCNN 算法原理:Selective Search 生成候选框,候选框区域缩放到统一大小,使用 CNN 对每个候选框提取特征,提取出特征后使用 SVM 进行分类,通过非极大值抑制输出结果
R-CNN 训练步骤:在数据集上训练CNN。R-CNN 论文中使用的 CNN 网络是AlexNet,数据集为ImageNet 。在目标检测的数据集上,对训练好的 CNN 做微调 。用 Selective Search 搜索候选区域,统一使用微调后的 CNN 对这些区域提取特征,并将提取到的特征存储起来。使用存储起来的特征,训练SVM 分类器。
三、生成对抗网络(GAN)及具体实例
生成器网络:尝试通过生成逼真的图像来欺骗判别器
判别器网络:尝试区分真假图像
GAN的原理:以生成图片为例进行说明,假设我们有两个网络,G和D。G是一个生成图片的网络,它接收一个随机的噪声,通过这个噪声生成图片。D是一个判别网络,判别一张图片是不是”真实的“。它的输入参数是x,x代表一张图片,输出D(x),表示真实图片的概率,如果是1,则就代表100%是真实的图片。输出是0,则不是真实的图片。
问题:最困难的部分是要同时训练生成器和判别器,如果判别器训练不足,则它会给生成器提供有误信息;如果判别器过度训练,生成器无法实现改进。正确的判别器在训练中不断改变。GAN不适合处理离散形式的数据,如文本。GAN存在训练不稳定、梯度消失、模式崩溃等问题。
GAN的应用有:图像生成(超分辨率),语义分割,文字生成,数据增强,信息检索/排序,聊天机器人等。