100天深度学习--PartA:Week1-day1 Lenet

AI基础 经典网络  收藏
0 / 845

LeNet

01_副本.png

简介

LeNet-5(http://yann.lecun.com/exdb/lenet/a35.tml), 一个手写体数字识别模型,是一个广为人知的商用的卷积神经网络。当年美国大多数银行用它来识别支票上面的手写数字。

lenet

基本信息

论文:基于梯度的学习在文档识别中的应用

paper :LeCun, Yann; Léon Bottou; Yoshua Bengio; Patrick Haffner (1998). "Gradient-based learning applied to document recognition"

http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

作者:Yann LeCun,LéonBottou,Yoshua Bengio和Patrick Haffner

发表于:IEEE会议论文集(1998)

补充:全文非常长,小伙伴给出了部分翻译,供大家学习。其中LeNet5详细描述在第二章B节。

创新点

它是深度学习最简单的体系结构之一。 它具有2个卷积层和3个完全连接层。因此LeNet被称为LeNet-5。平均池化层现在称为降采样层,并且当时它具有可训练的权重(现在很少使用这种设计,往往使用Max-pooling)。 该体系结构具有约60,000个参数。

它的网络结构成为后来深度学习网络的标准的“模板”:堆叠若干激活功能的卷积层和pooling层,最后加上一个或多个完全连接的FC层。

网络结构

Lenet5 原始结构如,包括卷积层,降采样,卷积层,降采样,卷积层(实现全连接),全连接层,高斯连接层(进行分类)

lenet-org.jpg

LeNet-5网络参数配置

网络层 输入尺寸 核尺寸 输出尺寸 可训练参数量
卷积层$C_1$ $32\times32\times1$ $5\times5\times1/1,6$ $28\times28\times6$ $(5\times5\times1+1)\times6$
下采样层$S$ $28\times28\times6$ $2\times2/2$ $14\times14\times6$ $(1+1)\times6$
卷积层$C_2$ $14\times14\times6$ $5\times5\times6/1,16$ $10\times10\times16$ $(5\times5\times6+1)\times16$
下采样层$S$ $10\times10\times16$ $2\times2/2$ $5\times5\times16$ $(1+1)\times16$
全连接层$F_3$ $5\times5\times16$ $5\times5\times16/1,120$ $1\times1\times120$ $(5\times5\times16+1)\times120$
全连接层$F_4$ $1\times1\times120$ $120\times84$ $1\times1\times84$ $(120+1)\times84$
全连接层$F_5$/输出层 $1\times1\times84$ $84\times10$ $1\times1\times10$ $(84+1)\times10$

可显示如图

01---副本_副本.png

$L(p, t, x) = L_{cls}(p, p^) + {\lambda}L_{reg}(t, t^) + {\mu}L_c(x)$

其中降采样层在后期发展中被maxpooling所取代,分类也被softmax所替代,第一个全连接层,可以用卷积层来替代。因此很多实现中会改成3个卷积层,2全连接层来进行实现,如下:

一层卷积层: 5×5的卷积核,6个

一层maxpooling

一层卷积层:5×5的卷积核,16个

一层maxpooling

一层卷积层:5×5的卷积核,120个

一层全连接层:84个隐含节点,激活函数为ReLU(paper中激活函数为sigmoid)

最后通过softmax分类输出(paper之前为一个高斯连接层,由Euclidean Radial Basis Function单元组成)

数据变化为

lenet_data2.png

源码

比较热门的源码 有这些,现在一般pooling直接用maxpooling:

tensorflow 源码 https://github.com/tensorflow/models/tree/master/research/slim/nets/lenet.py

tensorflow的输入 改成了28×28,因此少了一层卷积层,最后使用softmax输出

pytorch 源码 https://github.com/pytorch/examples/blob/master/mnist/main.py

caffe https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt

练习:在32*32 的 cifar10 上进行十分类,用pytorch构建网络结构

手写示例:

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, kernel_size=5)
        self.conv2 = nn.Conv2d(6, 16, kernel_size=5)
        self.fc1 = nn.Linear(16*5*5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = func.relu(self.conv1(x))
        x = func.max_pool2d(x, 2)
        x = func.relu(self.conv2(x))
        x = func.max_pool2d(x, 2)
        x = x.view(x.size(0), -1)
        x = func.relu(self.fc1(x))
        x = func.relu(self.fc2(x))
        x = self.fc3(x)
        return x

结果:

BEST ACC. PERFORMANCE: 66.050%

知识点

反向传播算法 / 卷积 / 激活函数 / 神经元结构

需要知道基本概念:

  • A Pits 提出的神经元数学模型 ,也被称为感知机(PLA: Perceptron Learning Algorithm)

图来自 :

感知机——神经网络最基本的模型 - DeepTalk的文章 - 知乎
https://zhuanlan.zhihu.com/p/49191769

  • B 多层神经元组合,就叫多层感知机,MLP,我们也叫多层神经网络,DNN等
  • 反向传播算法:Backpropagation BP算法



可以参看:
如何直观地解释 backpropagation 算法? - Anonymous的回答 - 知乎
https://www.zhihu.com/question/27239198/answer/89853077

其中有一段很好玩:
举个不太恰当的例子,如果把上图中的箭头表示欠钱的关系,即c→e表示e欠c的钱。以a, b为例,直接计算e对它们俩的偏导相当于a, b各自去讨薪。a向c讨薪,c说e欠我钱,你向他要。于是a又跨过c去找e。b先向c讨薪,同样又转向e,b又向d讨薪,再次转向e。可以看到,追款之路,充满艰辛,而且还有重复,即a, b 都从c转向e。

而BP算法就是主动还款。e把所欠之钱还给c,d。c,d收到钱,乐呵地把钱转发给了a,b,皆大欢喜。

  • 卷积
    卷积操作在图像中非常常用,一般大家都使用那套动图来展示计算。


    出处忘了,给一个知乎上的总结吧。

绝妙可视化:什么是深度学习的卷积? - 论智的文章 - 知乎
https://zhuanlan.zhihu.com/p/42090228

激活函数:

深度学习中【激活函数】存在的意义是什么? - ShuYini的文章 - 知乎
https://zhuanlan.zhihu.com/p/80730031

今天刷题:

题目1:

**关于激活函数,选出下列说法中不对的答案

A 激活函数可以引入非线性因素,完成复杂的函数映射。
B 激活函数都是线性的,深度网络也可以完成学习和模拟其他复杂类型的数据,例如图像、音频等。
C 激活函数可以把当前特征空间映射到另一个空间,让数据能够更好的被分类。
D 激活函数不能都是线性的

后期会开放小程序刷题打卡,欢迎来玩