【导读】近日,Rohan Thomas发布一篇博文,通俗地讲解了卷积神经网络的结构、原理等各种知识。首先介绍了卷积神经网络(CNN)和人工神经网络(ANN)的不同,然后详细解释了卷积神经网络的各种概念:卷积核、pooling层、激活函数、全连接层、过拟合等问题,最后用python实现一个MNIST分类的CNN结构。整体而言,博文的写作风格通俗易懂,旨在为读者提供易于理解的CNN教程,对CNN不太了解的读者千万不可错过。专知内容组编辑整理。
Convolutional Networks for everyone
构建卷积神经网络(CNN)并不是一项巨大挑战,并不是只有数据科学家和机器学习工程师才可以做到。对于了解它的架构的人,很容易通过实现它来解决相应的人工智能(AI)或机器学习(ML)问题。
这篇博文使深度学习架构易于理解,而不涉及太多的数学解释。
▌卷积网络的人工神经网路
来源: https://goo.gl/aX44Z1
在ANN中有一个输入层,其中输入将是输入向量的长度(例如,28×28 = 784个神经元)。 让我们来看卷积网络与人工神经网络的不同之处。
▌CNN的网络结构与ANN有什么不同
1. ConvNet体系结构明确地规定输入是图像。
2. 它们的体系结构不同于前馈神经网络,通过减少要学习的参数数量来提高它们的效率。
3. 在ANN中,如果你有一个150x150x3的图像,第一个隐藏层中的每个神经元将有67500个权重。
4. ConvNets具有神经元的三维输入,一个层中的神经元只连接到之前层的一个小区域。
▌ConvNets
ConvNet层中的神经元有三个维度:高度,宽度,深度。
这里的深度并不是整个网络的深度。它是指层的第三维,因此是激活体积(activationvolumes)的第三维。
本质上,ConvNet由层组成,且具有简单API——用一些可微函数(可能具有参数,可能没有参数),将三维输入体积转换为三维输出体积。
来源: StanfordUniversity (https://goo.gl/rHmTSP)
▌CNN中的层
输入层 - 包含高度x宽度x深度(R,G,B)
卷积层 - 连接到输入图像的一小部分
激活函数 - 在CNN层中使用的RELU激活函数
池化层 - 用于在宽度,高度上进行下采样
全连接层
▌CNN结构
source : MathWorks (https://goo.gl/zondfq)
▌核或过滤器
来源: Stanford University (https://goo.gl/g8FV4M)
一个过滤器由一个权重向量来表示,我们将其与输入图像进行卷积。 您可以增加输入上的过滤器数量,以增加您获得的激活映射的数量。 每个过滤器都会产生一个激活映射。
你得到的每个激活映射都试图学习图像的不同方面,如边缘、颜色斑点等。
如果在32x32x3的图像卷积上实现了12个大小为5x5x3的过滤器,则第一个卷积层在某些条件下将具有28x28x12的大小。
几个过滤器被用来提取NNet的卷积层中的几个特征。 3X3矩阵的一个步骤就叫做“步幅”。
▌激活函数
激活函数通常是一个单元格中动作潜在的速率的抽象表示。
主要有线性激活和非线性激活。没有非线性激活的神经网络将非常强大。 引入非线性的激活函数是必需的。
▌调整的线性单元层(ReLU)
和前馈神经网络一样,Convnet中激活层的目的是引入非线性。
R(z)= max(0,z)是用于RELU激活的等式。 考虑两个正数和一个负数
Positive(正数)
R(1) =max(0,1) = 1 Postive 输出
Negative(负数)
R(-1) = max(0,-1) = 0 Negative 输出
它减少了网络中的参数数量,从而使其能够学得更快。
Softmax 激活
Softmax是逻辑激活函数,用于多类别分类
Softmax函数应用于网络的最后一层,用于预测类别的最大概率。
▌Pooling Layer
来源: Wiki (https://goo.gl/snMC4o)
来源: Towards Data Science (https://goo.gl/xohkdV)
pooling用于在深度不变的前提下,对图像的宽度,高度进行下采样。 主要有三种类型的pooling。 最小值pooling,最大值pooling,平均值pooling。
pooling层独立地在每个深度层面上独立工作,使用指定的数学运算(例如MAX或者Avg)来调整层的大小。
▌全连接层
最后,经过多个卷积和最大pooling层后,神经网络中的高层推理通过全连接层完成。正如常规神经网络中所见,全连接层中的神经元与前一层中的所有激活都有连接。因此可以用一个矩阵乘法和一个偏置(bias)偏移来计算它们的激活。
在全连接层中使用softmax激活来获取最大概率并进行预测。
▌过拟合问题
训练数据的分类精度可能超过“训练精度”,如果训练精度超出了我们的测试精度,则意味着我们的模型训练数据时过于强调细节和有噪声的学习,能很好地在训练数据上工作。资源(Rutger Ruizendaal,Towards Data Science, https://goo.gl/87as34)
减少过拟合:
1、增加更多数据
2、使用数据增强
3、使用泛化的体系结构
4、加入正则化(或者mostly dropout, L1/L2 regularization)
5、降低架构的复杂性。
▌实现cnn
让我们尝试在MNSIT数据集中实现CNN。
可以再下址下载
(http://yann.lecun.com/exdb/mnist/)
更多链接:
www.github.com/rohanthomas
www.rohanthomas.me
http://www.deeplearningbook.org/ (Book by Ian Good Fellow,
Yoshua Bengio, Aaron Courville
https://medium.com/@rohanthomas.me/convolutional-networks-for-everyone-1d0699de1a9d
-END-
专 · 知
人工智能领域主题知识资料查看获取:【专知荟萃】人工智能领域26个主题知识资料全集(入门/进阶/论文/综述/视频/专家等)
同时欢迎各位用户进行专知投稿,详情请点击:
领取专属 10元无门槛券
私享最新 技术干货