LeNet-5 && 人工智能基础

L

第二次作业

整理自网络,lenet比较简单,没自己跑

10月10日 第一次作业说明

  • 提交截止时间:10月16日 23:59:59
  • 作业提交腾讯文档个人文件夹中。(腾讯文档可做个人学习笔记)
  • 作业的文件命名格式:学号-姓名-第一次作业

任务一、回答以下问题。

  1. 什么是人工智能?人工智能与计算机程序的区别?
  2. 我认为人工智能指由人制造出来的机器所表现出来的智能,也指研究这样的智能系统是否能够实现,以及如何实现。
  3. 人工智能与传统计算机程序相比具有一定的智能,可以进行推理
  4. 人工智能的基本技术有哪些?

•哲学• 数学• 经济学• 神经科学• 心理学• 计算机工程• 控制理论和控制论• 语言学

  • 人工智能的三大学派?各自的特点?

(1)符号主义,特点:物理符号系统、逻辑主义、推理假设。

(2)连接主义,特点:模仿生物神经网络、深度学习。

(3)行为主义,特点:感知行为、自我优化适应

  • 人工智能有哪些主要研究领域?

自然语言处理、计算机视觉、机器人、智能搜索、机器学习、模式识别、人工神经网络、遗传算法

  • 为什么机器人会踢足球?机器人踢足球要具备哪些能力?

因为机器人具有以下能力:图像处理能力用以识别球、队友和对手,机械控制装置用以控制球和行动,基于机器学习的决策模块进行决策

以下 6~10题为选做题(加分题)。

  • 特征工程分哪几步?原始数据通常存在哪些问题,如何解决?

特征选择、特征提取、特征构建

原始数据的问题和解决方法:

  • 缺失值。缺失值删除或填充
  • 不属于同一量纲。通过标准化、区间缩放法等方法进行无量纲化
  • 信息冗余、信息量(熵)低。根据情况对数据进行哑编码、多项式化等处理
  • 特征选择和特征提取的相同点及不同点?开发特征时如何进行数据探索,怎样选择有用的特征。

相同点:两者都能达到降维的效果

不同点:特征选择是选择有代表性的数据子集,而特征提取是用pca等方法对数据进行降维处理

  • 对于图像数据如何做预处理?有哪些常用的图像特征提取方法?

特征缩放、归一化、高斯滤波、PCA/ZCA白化

SIFT(尺度不变特征变换)、HOG(方向梯度直方图)、SURF、ORB、LBP、HAAR

  • 数据不平衡问题如何解决。

收集更多数据、使用正确的评估指标、重采样、人工合成样本

  1. 标准化和归一化有何异同?

相同点:都是对数据进行缩放

不同点:归一化是缩放到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’))

任务三、阅读经典论文,并做文献综述。

每周一篇经典论文。

传统的模式识别(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

使用均方误差或者交叉熵损失函数均可

About the author

Add Comment

By zhao

zhao

Get in touch

Quickly communicate covalent niche markets for maintainable sources. Collaboratively harness resource sucking experiences whereas cost effective meta-services.