CNN学习

文章目录

  • 前言
  • 文献阅读
  • CNN变体模型
  • 工程项目
  • 总结


前言

This week, I mainly read an article that describes the author’s design of an deep learning framework to predict air quality. In addition, I learne CNN’s variant models, mainly LeNet model, and other models which learne about the general content. I will continue to learn about this next week.

本周主要阅读文章,文章主要描述作者设计一种深度学习框架对空气质量进行预测。此外,学习了CNN的变体模型,主要了解LeNet 模型,其他的模型了解了大概内容,下周将对此继续学习。


文献阅读

摘要
空气质量预测一直被视为大气污染预警和控制管控的关键问题,目前大部分研究是利用统计方法和浅层机器学习模型来预测空气质量。然而深度学习被广泛应用于序列数据处理和时间序列问题上,空气质量是典型的时间序列数据。这篇文章提出了一种新的预测空气质量的深度学习模型,即一个基于一维CNN和Bi-LSTM的混合深度学习框架DAQFF,其目的是利用多元时间序列数据进行特征提取,解决局部趋势特征和长时间依赖性问题。

问题与动机
1.如何处理和捕获空气质量数据项的时空特性。

2.由于空气污染到空气良好之间的过渡造成空气质量数据存在尖锐的非线性,加之天气和污染物排放条件的快速变化,空气质量受多种因素的影响。由于这些因素具有内在的相互依赖性,如何处理这种依赖性并从多元空气质量相关时间序列数据中加以利用,是空气质量的两一个关键问题。
CNN在图像处理和目标识别方面非常受欢迎,由于单一时间序列的一维结构和多元时间序列的二维结构,CNN被成功用于时间序列预测任务上。LSTM是特殊的RNN,能够学习长期依赖关系,使用双向LSTM,用两个独立的隐藏层处理两个方向的时间序列信息,可以访问时间序列中每个点的过去和未来的上下文。

框架概述
深度学习应用的关键任务是设置超参数进行优化,使用默认参数进行初始化。为了避免深度学习模型的过拟合问题,使用了概率为0.3的dropout策略,应用于各层之间。使用tanh作为RNN模型的激活函数,ReLU作为CNN的激活函数,使用Adam优化器,每个隐藏层的神经元数量为128。使用均方误差作为模型的损失函数,此外,应用,min-max函数将空气质量时间序列数据归一化为【0,1】,实验数据中损失的特征用所在列的平均值填充。
结论
实验表明,本文提出的模型比经典的浅学习模型和深度学习模型具有更好的性能。
主要贡献
1.首次提出一种新的混合深度学习框架,该框架可以在空气质量预测端到端过程中处理分层特征表示和多尺度时空依赖融合学习。
2.首次尝试将多个一维CNN和双向LSTM结合,学习空气质量相关的多元时间序列数据,提取空气质量多步预测建模的时空相关性和相关特征。
3.通过对两个真实的数据集的测试,验证模型的有效性,结果表明,模型具有良好的预测能力。

CNN变体模型

LeNet 1998
LeNet-5:LeNet-5 即现在我们熟知的那个 LeNet,它的层数达到了 7 层,获取 32×32 的输入,有 60850 个参数。

其各层参数如下:

C1:卷积层,num_kernels=6, kernel_size=5×5, padding=0,
stride=1;6个5x5的卷积核,步长为1,无填充 S2:均值池化层,kernel_size=2×2, padding=0,
stride=2,输入6张28X28的特征图,采样方式为4个输入相加然后乘以一个可训练的参数,再加可训练的偏置,将结果输入tanh激活函数中。
C3:卷积层,num_kernels=16, kernel_size=5×5, padding=0, stride=1
S4:均值池化层,kernel_size=2×2, padding=0, stride=2 F5:全连接层,out_features=140
F6:全连接层,out_features=84 F7:全连接层,out_features=10

S2 层有个需要注意的地方:它的每一个输出通道,是由对应的输入通道的池化结果,乘以 weight 再加上 bias。它们都是可训练的,于是 S2 层有了 12 个可训练参数(共 6 个通道,每个通道训练自己的 weight 和 bias)。S4 层与之类似,有 32 个可训练参数。

AlexNet 2012
网络总共的层数为8层,5层卷积,3层全连接层。论文中提到这两部分网络是分别对应两个GPU,只有到了特定的网络层后才需要两块GPU进行交互,这种设置完全是利用两块GPU来提高运算的效率。
特点:

1.AlexNet在激活函数上选取了非线性非饱和的relu函数,在训练阶段梯度衰减快慢方面,relu函数比传统神经网络所选取的非线性饱和函数(如sigmoid函数,tanh函数)要快许多。
2.局部响应归一化层Local Response Normalization 为什么要引入LRN层? 首先要引入一个神经生物学的概念:侧抑制(lateral inhibitio),即指被激活的神经元抑制相邻的神经元。归一化(normaliazation)的目的就是“抑制”,LRN就是借鉴这种侧抑制来实现局部抑制,尤其是我们使用ReLU的时候,这种“侧抑制“很有效 ,由于ReLU的相应结果是无界的,所以需要归一化。
归一化有什么好处?
1.归一化有助于快速收敛;
2.对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
3.Overlapping Pooling(覆盖的池化操作) 一般的池化层因为没有重叠,所以pool_size 和 stride一般是相等的,这种设置叫做不覆盖的池化操作,如果 stride < pool_size,
那么就会产生覆盖的池化操作,这种有点类似于convolutional化的操作,这样可以得到更准确的结果。论文中提到在训练模型过程中,覆盖的池化层更不容易过拟合。

NiN (network in network)2014
创新之处有:

  1. 使用MLPconv,后来在其它模型中就演变成了1x1卷积。
  2. 提出全局平均池化代替全连接层。 这样做的好处有以下几点:
  3. 相比于使用全连接层,参数量极大地减少,相对来说没那么容易过拟合。
  4. 使得feature map直接映射到类别信息,这样更符合卷积网络的结构。
  5. 全局平均池化综合了空间所有的信息,使得对输入的空间转换更鲁棒。 也有一个缺点:必须固定输入大小。

VGG(2014)
创新之处有

  1. 使用了多个小尺寸的卷积核堆叠来代替一个大的卷积核,这样参数更少,而感受野却是一样的。全部使用了3X3的尺寸,池化都是2x2,步长都为2。
    2.去掉了LRN。作者发现它效果不明显。

GoogLeNet(2014)
GoogLeNet也称为Inception_V1, 其后续还有三个改进版,合称Inception系列,对这个系列的解读在模型解读部分有详细解读,这里只介绍新颖之处。
创新之处是提出Inception Module。大家发现网络越深越宽的效果越好,然而这样会带来以下几个问题:
1) 参数量,计算量越来越大,在有限内存和算力的设备上,其应用也就越难以落地。
2) 对于一些数据集较少的场景,太大的模型反而容易过拟合,但模型太小则泛化能力不够。
3) 容易出现梯度消失的问题。

ResNet(2015)
一般而言,网络越深越宽会有更好的特征提取能力,但当网络达到一定层数后,随着层数的增加反而导致准确率下降,网络收敛速度更慢。
简单堆叠网络容易造成梯度消失或梯度爆炸,解决的方法主要有数据标准化,权重初始化和BN(Batch Normalization)层
resnet主要创新点:
1 能够拥有超深的网络结构
2.提出残差(residual)模块
3.使用BN(Batch Normalization)层加速训练
LeNet 模型的构建如下:

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(1, 6, 5), # in_channels, out_channels, kernel_size
            nn.Sigmoid(),
            nn.MaxPool2d(2, 2), # kernel_size, stride
            nn.Conv2d(6, 16, 5),
            nn.Sigmoid(),
            nn.MaxPool2d(2, 2)
        )
        self.fc = nn.Sequential(
            nn.Linear(16*4*4, 120),
            nn.Sigmoid(),
            nn.Linear(120, 84),
            nn.Sigmoid(),
            nn.Linear(84, 10)
        )

    def forward(self, img):
        feature = self.conv(img)
        output = self.fc(feature.view(img.shape[0], -1))
        return output

泛化指的是分类器在看不见的例子上表现出良好的性能,即模型对未知数据的预测能力。

泛化能力的评估
错误率与精度是分类任务中最常用的两种性能度量。既适用于二分类,也适用于多分类。
错误率:分类错误的样本数占总样本数的比例。
精度 : 分类正确的样本数占总样本数的比例。
精度 + 错误率 = 1
假设,总的样本数为m个,我们对这m个样本进行预测,其中预测对了的样本有p个,预测错的样本有n个(p+n = m),则:
错误率 = n/m
精度 = p/m

当任务有所偏好时,错误率与精度便不能满足任务的需求。比如我们关心的是“检索出来的信息中有多少是用户感兴趣的”或者“用户感兴趣的信息有多少被检索出来了”。此时就需要查全率、查准率、F1值来进行模型的性能度量。

假设,总的测试样本有m个,其中正样本有z个,负样本有f个。

查全率:对这m个样本进行预测,其中z个正样本中有zm个被预测对。查全率 = zm / z
查准率: 对这m个样本进行预测,预测的结果中有ym个是正样本,ym个样本中有y个是z的,则:查准率 = y / ym
查准率和查全率是一对矛盾的度量。
查准率越高时,查全率往往偏低。而查全率越高时,查准率往往偏低。
ROC曲线与AUC常被用来评价一个二分类器的优劣。“ROC曲线”是根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的量值(真正例率TRP和假正例率FPR),分别以他们作为横、纵坐标作图,就得到了“ROC曲线”。
CNN学习_第1张图片
深度学习的标准步骤
一、数据处理
从本地或URL读取数据,并完成预处理操作
二、模型设计
网络结构设计,相当于模型假设空间,即模型能够表达的关系集合。
三、训练配置
设定模型采用的寻解方法,即优化器,并指定计算资源。神经网络学习的目的是寻找合适的参数,使得损失函数的值尽可能小。解决这个问题的过程为称为最优化。解决这个问题使用的算法叫做优化器。我们知道超参数学习率是一个很重要的参数,不同的参数对学习结果的影响很大,如果设置的值较小,会导致学习花费较多的时间,学习率大了就会导致学习发散而不能正常的进行。
四、训练过程
循环调用训练过程,每轮都包括前向计算、损失函数(优化目标)和后向传播三个步骤。
前向计算是指把输入数据传入模型,然后得到输出;后向传播是指根据前向计算得到的输出通过梯度下降,从后向前优化网络中的参数。
五、模型保存
将训练好的模型保存,模型预测是调用。

工程项目

大数据项目进度:
安装和配置sqoop,sqoop连接数据库报错,目前还在解决。

什么是ASP.NET?
ASP.NET是一种动态网页技术,基于.NET Framework的Web开发平台,在服务器端运行后台代码,动态生成HTML。
ASP.NET的特色和优势是代码后置,将业务和逻辑代码与显示逻辑分开,.aspx页面进行前台页面显示,.cs进行后台业务逻辑的编写。
IIS(Internet Information Service):在Windows操作系统下对网站进行管理的软件,类似于JSP中使用的Tomcat。


总结

本周主要学习了CNN的变体模型有哪些,下周将对几个主要的变体模型代码进行学习,在文献方面,了解了文章的整体内容作者要做什么。

你可能感兴趣的:(cnn,学习,深度学习)