揭秘卷积神经网络(Convolutional Neural Networks)

注:本文翻译自 Demystifying Convolutional Neural Networks

一个对卷积神经网络( Convolutional Neural Networks)直观的解释:

揭秘卷积神经网络(Convolutional Neural Networks)

 

定义:

简单点儿,一个卷积神经网络就是一个深度学习模型,或者一个类似人工神经网络的多层感知器,最常用于分析视觉图像。卷积神经网络的创始人就是著名的计算机科学家,在Facebook工作的Yann LeCun,他是首个使用它结合著名的MNIST数据解决手写数字问题的人。

揭秘卷积神经网络(Convolutional Neural Networks)

Yan LeCunn

卷积神经网络受到生物过程的启发,因为神经元之间的连接模式类似于动物视觉皮层的组织。

 

                                                       

 

揭秘卷积神经网络(Convolutional Neural Networks)

 

人类大脑的视觉结构

 

个体皮层神经元仅在被称为感受野的视野的受限区域中对刺激作出反应。 不同神经元的感受野部分重叠,使得它们覆盖整个视野。

揭秘卷积神经网络(Convolutional Neural Networks)

人类视觉对比计算机视觉

正如您所看到的,我们不可能谈论任何类型的神经网络而不提及一点神经科学以及人体(特别是大脑)及其功能如何成为创建各种深度学习模型的主要灵感。

ConvNets的架构:

 

揭秘卷积神经网络(Convolutional Neural Networks)

ConvNet 架构

如上图所示,ConvNet架构与常规ANN架构非常相似,特别是在网络的最后一层,即完全连接的图层区域,您还会注意到ConvNet接受卷作为输入而不是 向量。

让我们现在探索构成ConvNet的层以及后者经历的数学运算,以根据在训练过程中学到的特征和属性对图像进行可视化和分类。

输入层:

输入层主要是n×m×3 RGB(红色,绿色和蓝色的简称)的图像(s),与人工神经网络不同,人工神经网络输入n×1矢量,这里没有什么难以理解的。

 

揭秘卷积神经网络(Convolutional Neural Networks)

RGB 图像

卷积层 :

在卷积层中,我们计算输入图像的区域和称为滤波器的权重矩阵之间的点积的输出,滤波器将滑过整个图像,重复相同的点积运算。 应该提到两件事:

  • 过滤器必须具有与输入图像相同数量的通道。
  • 众所周知,你进入网络越深,你使用的过滤器就越多,我们拥有的过滤器越多,你获得的边缘和特征检测就越多。
 

揭秘卷积神经网络(Convolutional Neural Networks)

前向卷积运算

我们计算卷积层输出的维度:

输出宽度:

揭秘卷积神经网络(Convolutional Neural Networks)

出高度:

揭秘卷积神经网络(Convolutional Neural Networks)

其中:

  • : 输入图像的宽度
  • : 输入图像的高度
  • Fw : 过滤器或内核的宽度
  • Fh : 过滤器的高度
  • : 填充(padding)
  • : 步长(stride)

卷积层输出的通道数等于卷积运算期间使用的滤波器数。

为何选择卷积?

你可能会问自己,为什么我们首先使用卷积? 为什么不从一开始就压平输入图像? 好吧,如果我们这样做,我们最终会得到大量需要训练的参数,而且我们大多数人都没有能够以最快的方式解决我们计算成本高昂的任务的计算能力。 此外,由于ConvNets具有的参数越少,我们就可以避免过度拟合。

池化层(Pooling Layer):

有两种广泛使用的池,平均池化和最大池化,其中后者是两者中使用最多的池化。 池化层用于在卷积神经网络上减小空间维度,但不减小深度。 当使用最大池化层时,我们采用输入区域的最大数量(图像中响应最快的区域)(n×m矩阵),而当我们使用平均池化层时,我们采用输入区域的平均值。

 

揭秘卷积神经网络(Convolutional Neural Networks)

 

最大池化

 

为什么选择池化(Pooling)?

池化层的核心目标之一(在这种情况下是最大池)是提供空间方差,这意味着您或机器将能够将对象识别为对象,即使它的外观以某种方式变化。 为了更深入地解释汇集层,请查看Yann LeCunn撰写的这篇严谨的论文。

非线性层(Non-linearity Layer):

在非线性层中,我们使用ReLU激活函数(如果不是所有时间)而不是Sigmoid或Tan-H激活函数。 对于输入图像中的每个负值,ReLU激活函数返回0,而对于输入图像中的每个正值,它返回相同的值(有关激活函数的更深入说明,请查看我的这篇文章)。

揭秘卷积神经网络(Convolutional Neural Networks)

 

ReLU 激活函数(activation function)

 

 

 

全链接层(Fully Connected Layer):

在FC层中,我们将最后一个Convolution层的输出展平,并将当前层的每个节点与下一层的另一个节点连接起来。全连接层只是常规人工神经网络的另一个词,如图所示 下面。 全连接层中的操作与任何人工神经网络中的操作完全相同:

揭秘卷积神经网络(Convolutional Neural Networks)

展平卷积层(Flattening of the Convolution layer)

 

 

揭秘卷积神经网络(Convolutional Neural Networks)

 

 全连接层(Fully connected layer)

 

上面讨论的层和操作是每个卷积神经网络的核心组件。

现在我们已经讨论了ConvNet在前向传递中经历的操作,让我们跳转到ConvNet在后向传递中经历的操作。

反向传播(Backpropagation):

全连接层(Fully Connected Layer):

在完全连接层中,反向传播与任何常规人工神经网络完全相同,在反向传播中(使用梯度下降作为优化算法)我们使用偏导数即损失函数关于权重的导数,以便计算 后者我们在微积分中使用一个众所周知的操作,称为链规则,其中我们将(在反向传播上下文中)损失函数的导数与激活输出相乘,激活输出的导数与非激活输出相乘,导数为 未激活的输出与权重相对应。

我打算在每个偏导数的前面写下它的数学符号,但不幸的是,Medium本身并不支持编写数学表达式,说实话是非常令人生气的,无论如何,这里是我们如何总结我们刚才在上面用明文所说的内容。 数学表达式如下:

揭秘卷积神经网络(Convolutional Neural Networks)

 

揭秘卷积神经网络(Convolutional Neural Networks)

反向传播图解(Backpropagation illustration)

在计算梯度之后,我们从初始权重中减去它以获得新优化的梯度:

揭秘卷积神经网络(Convolutional Neural Networks)

其中:

  • θi+1 : 优化权重(optimized weights)
  • θi : 初始权重(initial weights)
  • α : 学习率(learning rate)
  • ∇J(θi) : 损失函数的梯度(gradient of the loss function)

揭秘卷积神经网络(Convolutional Neural Networks)

 

梯度下降(Gradient descent)

 

 

 

在下面的动画中,梯度下降应用于线性回归,您可以清楚地看到成本函数越小,线性模型越适合数据。

揭秘卷积神经网络(Convolutional Neural Networks)

梯度下降应用于线性回归(Gradient descent applied to linear regression)

请注意,您应该谨慎选择学习率的值,非常高的学习率可能会导致梯度超过目标最小值。

揭秘卷积神经网络(Convolutional Neural Networks)

 

小学习率对比大学习率(Small learning rate vs Big learning rate)

 

 

 

在所有优化任务中,无论是在物理学,经济学还是计算机科学中,偏导数都被大量使用,偏导数主要用于计算因变量f(x,y,z)相对于其独立变量之一的变化率。 变量,而其余变量保持不变。 例如,假设你拥有一个公司的股份,后者的股票会根据多种因素(证券,政治,销售收入等)上涨或下跌,在你的情况下实施偏导数,你会计算股票的多少 如果安全性(例如)受到影响而其他因素保持不变并且每个其他因素重复相同的过程,则公司的价格会发生变化。

池化层(Pooling Layer):

在最大池化层中,梯度仅通过最大值反向传播,因为稍微更改它们不会影响输出。 在此过程中,我们将最大池化之前的最大值替换为1,并将所有非最大值设置为零,然后使用Chain rule将渐变乘以它们。

揭秘卷积神经网络(Convolutional Neural Networks)

反向传播经过池化层(Backpropagation through the Pooling layer)

与最大池化层不同,在平均池化层中,梯度通过所有输入(在平均合并之前)最大和非最大输入。

卷积层(Convolution layer):

你可能现在问自己,如果卷积层的前向传递是卷积,那么它的后向传递是什么? 幸运的是,它的向后传递也是一个卷积(你可以在下面清楚地看到),所以你不必担心学习新的难以掌握的数学运算。

揭秘卷积神经网络(Convolutional Neural Networks)

反向传播经过卷积层(Backpropagation through the Convolution layer)

其中:

  • ∂hij: 损失函数的导数w.r.t卷积层的输出
 

揭秘卷积神经网络(Convolutional Neural Networks)

而言之,这就是反向传播如何在卷积层中起作用。

现在您已经对卷积神经网络有了深刻的理论理解,让我们用TensorFlow构建我们的第一个ConvNet。

TensorFlow的卷积层

Tensorflow 是什么?

 

揭秘卷积神经网络(Convolutional Neural Networks)

ensorFlow是一个使用数据流图进行数值计算的开源软件库。 它最初由谷歌机器智能研究机构谷歌大脑团队开发,用于机器学习和深度神经网络研究。

张量是什么?

张量是有组织的多维数值数组。 张量的顺序(也是度数或等级)是表示它所需的数组的维数。

揭秘卷积神经网络(Convolutional Neural Networks)

 

各种张量(Types of tensors)

 

 

 

计算图是什么?

计算图是一种强大的形式主义,在为机器学习中的神经网络和其他模型推导算法和软件包方面非常富有成效。 计算图中的基本思想是表达一些模型 – 例如前馈神经网络 – 作为表示计算步骤序列的有向图。 序列中的每个步骤对应于计算图中的顶点; 每个步骤对应一个简单的操作,它接受一些输入并根据其输入产生一些输出。

在下面的图示中,我们有两个输入w1 = x和w2 = y,输入将流经图形,其中图形中的每个节点都是数学运算,为我们提供以下输出:

  • w3 = cos(x) 其中操作是余弦三角函数
  • w4 = sin(x) 其中操作是正弦三角函数
  • w5 = w3∙w4 其中操作是乘法
  • w6 = w1/w2  其中操作是除法
  • w7 = w5+w6 其中操作是加法
 

揭秘卷积神经网络(Convolutional Neural Networks)

在我们了解了计算图是什么,让我们在张量流中构建自己的,我们将在上面构建相同的图。

代码:

# Import the deep learning library
import tensorflow as tf
# Define our compuational graph 
W1 = tf.constant(5.0, name = "x")
W2 = tf.constant(3.0, name = "y")
W3 = tf.cos(W1, name = "cos")
W4 = tf.sin(W2, name = "sin")
W5 = tf.multiply(W3, W4, name = "mult")
W6 = tf.divide(W1, W2, name = "div")
W7 = tf.add(W5, W6, name = "add")

 

# Open the session
with tf.Session() as sess:     cos = sess.run(W3)     sin = sess.run(W4)     mult = sess.run(W5)     div = sess.run(W6)     add = sess.run(W7)          # Before running TensorBoard, make sure you have generated summary data in a log directory by creating a summary writer     writer = tf.summary.FileWriter("./Desktop/ComputationGraph", sess.graph)          # Once you have event files, run TensorBoard and provide the log directory     # Command: tensorboard --logdir="path/to/logs"

用 Tensorboard 可视化:

Tensorboard 是什么?

TensorBoard是一套用于检查和理解TensorFlow运行和图形的Web应用程序,它是Google的TensorFlow与Facebook的Pytorch相比最大的优势之一。

揭秘卷积神经网络(Convolutional Neural Networks)

面代码在Tensorboard的可视化

现在你对ConvNets,TensorFlow和TensorBoard有了深刻的理解,让我们构建我们的第一个使用MNIST数据集识别手写数字的ConvNet。

揭秘卷积神经网络(Convolutional Neural Networks)

NIST dataset

我们的Convnet架构将是一组类似于LeNet-5架构的卷积,最大池和非线性操作层。

揭秘卷积神经网络(Convolutional Neural Networks)

积神经网络三维仿真

我们刚刚完成了第一个卷积神经网络的构建,正如您在上面的结果中所看到的,从第一步到最后一步的准确性已经大大提高,但我们的ConvNet还有更大的改进空间。

现在让我们在Tensorboard中可视化我们的ConvNet:

 

揭秘卷积神经网络(Convolutional Neural Networks)

ConvNet 可视化

 

 

揭秘卷积神经网络(Convolutional Neural Networks)

确性和损失评估

 

结论:

卷积神经网络是强大的深度学习模型,应用于广泛的领域,如放射学,ConvNets的使用只会随着数据变大和问题变得更加复杂和具有挑战性而增加。

注意:

你可以在下面链接找到本文的 Jupyter Notebook :

  • https://github.com/AegeusZerium/DeepLearning/blob/master/Deep%20Learning/Demystifying%20Convolutional%20Neural%20Networks.ipynb

References:

  • https://en.wikipedia.org/wiki/Convolutional_neural_network
  • https://en.wikipedia.org/wiki/Yann_LeCun
  • http://yann.lecun.com/exdb/mnist/
  • https://opensource.com/article/17/11/intro-tensorflow
  • https://en.wikipedia.org/wiki/Tensor
  • http://www.cs.columbia.edu/~mcollins/ff2.pdf
  • https://github.com/tensorflow/tensorboard
  • http://yann.lecun.com/exdb/lenet/

 

未经允许不得转载:996ICU » 揭秘卷积神经网络(Convolutional Neural Networks)

赞 (0) 打赏