第二次作业
整理自网络,lenet比较简单,没自己跑
10月10日 第一次作业说明
- 提交截止时间:10月16日 23:59:59
- 作业提交腾讯文档个人文件夹中。(腾讯文档可做个人学习笔记)
- 作业的文件命名格式:学号-姓名-第一次作业
任务一、回答以下问题。
- 什么是人工智能?人工智能与计算机程序的区别?
- 我认为人工智能指由人制造出来的机器所表现出来的智能,也指研究这样的智能系统是否能够实现,以及如何实现。
- 人工智能与传统计算机程序相比具有一定的智能,可以进行推理
- 人工智能的基本技术有哪些?
•哲学• 数学• 经济学• 神经科学• 心理学• 计算机工程• 控制理论和控制论• 语言学
- 人工智能的三大学派?各自的特点?
(1)符号主义,特点:物理符号系统、逻辑主义、推理假设。
(2)连接主义,特点:模仿生物神经网络、深度学习。
(3)行为主义,特点:感知行为、自我优化适应
- 人工智能有哪些主要研究领域?
自然语言处理、计算机视觉、机器人、智能搜索、机器学习、模式识别、人工神经网络、遗传算法
- 为什么机器人会踢足球?机器人踢足球要具备哪些能力?
因为机器人具有以下能力:图像处理能力用以识别球、队友和对手,机械控制装置用以控制球和行动,基于机器学习的决策模块进行决策
以下 6~10题为选做题(加分题)。
- 特征工程分哪几步?原始数据通常存在哪些问题,如何解决?
特征选择、特征提取、特征构建
原始数据的问题和解决方法:
- 缺失值。缺失值删除或填充
- 不属于同一量纲。通过标准化、区间缩放法等方法进行无量纲化
- 信息冗余、信息量(熵)低。根据情况对数据进行哑编码、多项式化等处理
- 特征选择和特征提取的相同点及不同点?开发特征时如何进行数据探索,怎样选择有用的特征。
相同点:两者都能达到降维的效果
不同点:特征选择是选择有代表性的数据子集,而特征提取是用pca等方法对数据进行降维处理
- 对于图像数据如何做预处理?有哪些常用的图像特征提取方法?
特征缩放、归一化、高斯滤波、PCA/ZCA白化
SIFT(尺度不变特征变换)、HOG(方向梯度直方图)、SURF、ORB、LBP、HAAR
- 数据不平衡问题如何解决。
收集更多数据、使用正确的评估指标、重采样、人工合成样本
- 标准化和归一化有何异同?
相同点:都是对数据进行缩放
不同点:归一化是缩放到0和1之间,标准化是缩放成均值为0,方差为1
任务二、代码实战。
本次任务为选做题:LeNet-5的代码实现。
使用keras库实现的关键代码:
model = keras.Sequential()
model.add(layers.Conv2D(filters=6, kernel_size=(3, 3), activation=’relu’, input_shape=(32,32,1)))
model.add(layers.AveragePooling2D())
model.add(layers.Conv2D(filters=16, kernel_size=(3, 3), activation=’relu’))
model.add(layers.AveragePooling2D())
model.add(layers.Flatten())
model.add(layers.Dense(units=120, activation=’relu’))
model.add(layers.Dense(units=84, activation=’relu’))
model.add(layers.Dense(units=10, activation = ‘softmax’))
任务三、阅读经典论文,并做文献综述。
每周一篇经典论文。
- 本周建议阅读LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278-2324. LeNet-5是LeCun在1998年提出的卷积神经网络算法,LeNET-5是最早的卷积神经网络之一,曾广泛用于美国银行,手写数字识别正确率在99%以上。
传统的模式识别(traditional pattern recognition)通常分为两步:
即:1)从原始数据中提取特征;2)用提取的特征训练分类器。
在LeNet-5发表的那个年代,提取特征需要大量的先验知识,并且需要人为设计,这是一个非常耗时耗力的工作。除此之外,分类器的精度也很大程度上受到所提取的特征的影响。因此,那个时候的论文大都在讨论不同特征集之间的优劣。
随着时代的发展,因为数据量的增多和机器学习技术的进步等原因,使得多层神经网络可以用来解决模式识别问题,例如语音或手写文字的识别。这样就避免了人为选择特征这一繁琐的工作,特征的选择由网络自行完成,也就是说可以将原始数据(或稍做简单处理)直接作为网络的输入。
因此该论文提出了一种基于多层神经网络的手写数字识别模型。
LeNet-5
详细结构
LeNet-5不算输入层,一共有7层。卷积层用CxCx表示,下采样层用SxSx表示,全连接层用FxFx表示,其中xx为层数。
👉【INPUT】
输入大小为32×32×132×32×1的灰度图像,对输入做标准化(normalized)处理,将像素值标准化至[−1,1.175][−1,1.175],使得像素值的均值大约为0,方差大约为1,这样可以加速学习。
👉【C1C1】
使用的卷积核大小为5×5×15×5×1,数量为6,步长为1(LeNet-5被创作的那个年代,人们不使用padding)。得到的feature map的维度为28×2828×28,feature map的数量为6。本层共包含156个参数:5×5×1×6+6=1565×5×1×6+6=156。本层共有122304次连接(connection):5×5×28×28×6+28×28×6=1223045×5×28×28×6+28×28×6=122304。
👉【S2S2】
这里的下采样层类似于我们现在的pooling层,但是做法稍有不同。本层所用的核大小为2×22×2(步长为2),因此得到的feature map为14×14×614×14×6。常见的pooling层是直接取最大值或者平均,而这里的S2S2是先将四个格子(2×22×2)的输入求和(z),然后乘上一个系数(w),再加上一个偏置值(b),最后通过sigmoid函数(即sigmoid(wz+b)sigmoid(wz+b))。即相当于average pooling(只不过这里是加权平均)之后通过一个sigmoid激活函数。本层一共有12个参数:6个2×22×2的核,每个核有2个参数(w,b),所以有6×2=126×2=12。本层一共有5880次连接:14×14×5×6=588014×14×5×6=5880。解释下式子里的5,假设四个格子里的值分别为x1,x2,x3,x4x1,x2,x3,x4,一次下采样为w×(x1+x2+x3+x4)+bw×(x1+x2+x3+x4)+b,刚好是5次连接。
👉【C3C3】
使用的卷积核数量为16。如果想要得到10×10×1610×10×16的feature map,按照现在普遍的做法,每个卷积核的大小应该为5×5×65×5×6(步长为1),但是LeNet-5并不是这么做的。在LeNet-5中,每个卷积核的大小并不完全一样,如下图所示:
上图中,每一列可以看成每一个卷积核(一共16个),每一行为S2S2层的每一个feature map(一共6个)。以第0列为例:第0个卷积核只和S2S2层的前3个feature map进行了卷积运算,因此该卷积核大小应该为5×5×35×5×3。因此该层的参数数量为:5×5×3×6+5×5×4×9+5×5×6×1+16=15165×5×3×6+5×5×4×9+5×5×6×1+16=1516。
总的连接数(150000+6000=156000150000+6000=156000):
- 卷积部分:5×5×3×6×10×10+5×5×4×9×10×10+5×5×6×1×10×10=1500005×5×3×6×10×10+5×5×4×9×10×10+5×5×6×1×10×10=150000
- 偏置项部分:3×6×10×10+4×9×10×10+6×1×10×10=60003×6×10×10+4×9×10×10+6×1×10×10=6000(一个5×5×35×5×3的卷积核进行一次卷积运算,会进行3次偏置项的加法运算,但是这三次加法运算使用的偏置项是同一个)
该层最终得到10×10×1610×10×16的feature map。
👉【S4S4】
和S2S2层一样。使用2×2×162×2×16的核(步长为2),得到的feature map为5×5×165×5×16。可训练的参数数量为:2×16=322×16=32。总的连接数为:5×5×5×16=20005×5×5×16=2000。
👉【C5C5】
卷积核共120个,大小为5×5×165×5×16。得到的feature map为1×1×1201×1×120。参数数量:5×5×16×120+120=481205×5×16×120+120=48120。这一层相当于就是S4S4和C5C5之间的全连接。之所以没有把C5C5命名为全连接层F5F5,是因为如果其他条件都不变,只是增大输入的维度,那么C5C5得到的feature map的维度会大于1×11×1。
👉【F6F6】
含有84个神经元的全连接层。参数数量:84×120+84=1016484×120+84=10164。F6F6层及之前层的激活函数为tanh函数,详细形式见下:
f(a)=Atanh(Sa)f(a)=Atanh(Sa)
此处多了两个超参数:A和S。A控制tanh函数的振幅,即f(a)的取值范围在-A到+A之间。论文中设A=1.7159。S控制tanh函数在原点处的斜率(倾斜程度),论文中设S=2/3。
将F6F6层设置为84个神经元的原因:标准的字符比特图(bitmap)是7×127×12像素的,共有16×616×6个标准的字符比特图:
F6F6层中84个神经元的值只有-1(白色)或+1(黑色)两种选择,因此这84个神经元便可看作一个7×127×12像素的比特图,然后计算该比特图和上图中标准的字符比特图的接近程度,最接近哪个字符比特图,预测结果便可判定为该字符。
因此LeNet-5也可以通过修改输出层使其可以预测所有的上述字符,而不仅仅只是预测数字。
👉【OUTPUT】
输出层共有10个神经元,分别表示数字0~9。使用径向基函数 (Radial Basis Function 简称 RBF)。每个神经元的计算方式如下:
yi=∑j(xj−wij)2yi=∑j(xj−wij)2
公式含义图解见下:
预测流程
LeNet-5完整的预测流程(以数字“3”为例,输出层vector为1110111111):
2.3.loss function
使用均方误差或者交叉熵损失函数均可