联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
人工智能卷积神经网络入门
人工智能卷积神经网络入门
什么是卷积,卷积的动机
卷积运算
卷积是一种特殊的线性运算,是对两个实值函数的一种数学运算,卷积运算通常用符号 ∗∗ 来表示,我们以Kalman滤波中的例子为例,来讨论一个一维离散方式的卷积:
假定我们的可回收飞船正在着陆,其传感器不时丈量本身的高度信息,我们用 h(i)h(i) 来表示 ii 时辰的高度丈量,这个丈量是以一定的频率发作的(即每隔一个时间距离丈量一次,所以丈量 h(i)是离散的h(i)是离散的),受限于传感器,我们晓得丈量是不精确的,所以我们采用一种加权均匀的办法来简单处置,详细来说,我们能够以为:越接近于时辰 ii 的丈量,越契合时辰 ii 时的真实高度,即我们给丈量 s(i)=wih(i)+wi−1h(i−1)+wi−2h(i−2)...s(i)=wih(i)+wi−1h(i−1)+wi−2h(i−2)... 其中的权重 wi>wi−1>wi−2...wi>wi−1>wi−2... 。这就是一个一维离散方式的卷积,由于这个例子中我们不可能得到“将来的丈量”,所以只包含了一维离散卷积的一半,下面是一维离散卷积的完好公式:
s(i)=(h∗w)(i)=∑j=−∞∞h(j)w(i−j)
s(i)=(h∗w)(i)=∑j=−∞∞h(j)w(i−j)
其中 ii 表示我们计算的状态(时辰,位置),jj 表示到状态 ii 的间隔(能够是时间差,空间间隔等等),这里的 hh 和 ww 就分别表示两个实值函数。在卷积神经网络的术语中,第一个函数 hh 被称为输入,第二个函数 ww 被称为 核函数(kernal function) , 输出 ss 被称为 特征映射(feature map),很显然,在实践的例子中,jj (即我们考量的区间)普通不会是负无量大到正无量大,它通常是个很小的范围。在深度学习的应用中,输入通常是高维度的数组(比方说图像),而核函数也是由算法(如随机梯度降落)产生的高维参数数组。假如输入二维图像 II ,那么相应的我们也需求运用二维的核 KK,则这个二维卷积能够写为:
S(m.n)=(I∗K)(m,n)=∑i∑jI(i,j)K(m−i,n−j)
S(m.n)=(I∗K)(m,n)=∑i∑jI(i,j)K(m−i,n−j)
其中,(m,n)(m,n) 是计算的像素位置, (i,j)(i,j) 是考量的范围。我们用愈加直观的方式来表示的话,二维卷积如下所示:
卷积的动机
那么在答复了什么是卷积以后,我们看看为什么运用卷积这种线性运算。首先我们看看卷积神经网络的定义:
卷积神经网络是指在网络中至少运用了一层卷积运算来替代普通的矩阵乘法运算的神经网络。
我们晓得,全衔接层中的输入边实践上是乘权重再累加,即实质上是一个矩阵乘法,那么卷积层实践上就是用卷积这种运算替代了原来全衔接层中的矩阵乘法,卷积的动身点是经过下述三种思想来改良机器学习系统:
稠密交互(sparse interactions)
参数共享(parameter sharing)
等变表示(equivariant representations)
稠密交互
关于普通的全衔接网络,层与层之间的节点是全衔接的:
但是对卷积网络而言,下一层的节点只与其卷积核作用到的节点相关:
运用稠密衔接的一个直观的益处就是网络的参数更少了,我们以一副 200×200200×200 的灰度图为例,当将它输入到全衔接的神经网络中时,如下:
假定这个网络的的第一个隐含层有4万个神经元(关于输入样本为40000维的状况来说,40000个隐含层节点是适宜的),那么这个网络光这一层就有接近20亿个参数。这样的模型锻炼的计算量是十分大的,且需求很大的存储空间。
关于卷积网络而言,状况如下:
这里写图片描绘
这里我们依然运用40000个隐含层神经元,我们的卷积核(也被称为滤波(Filter))的大小为 10×1010×10 ,这样的一层卷积的参数量只要约4000000个,参数数量远远小于全衔接的网络。
读者可能会有疑问?卷积的输出只与输入的部分产生关联,假如某种规律并不是树立在部分特征之上,而是和整个输入都有关联,那么经过卷积树立起来的表示是不是就不完好呢?并非如此。现代的卷积网络常常需求叠加多个卷积层,卷积网络固然在直接衔接上是稠密的,但是在更深的层中的单元能够间接的衔接到全部的或者大局部的输入图像,如下图所示:
这里写图片描绘
提示:在卷积网络的相关文献中,存在术语:神经元(neuron),核(kernal),滤波(filter),它们都指同一个事物——核函数,在本文中,我们统一称为卷积核。
参数共享
运用卷积核实践上就是卷积网络的参数,卷积核在输入图像上滑动窗口,这也就意味着输入的图像的像素点共享这一套参数,如下图所示:
这里写图片描绘
卷积网络中的参数共享使我们只需求学习一个参数汇合,而不需求对每一个像素都学习一个单独的参数汇合,它使得模型所需的存储空间大幅度降低。
等变表示
由于整个输入图片共享一组参数,那么模型关于图像中的某些特征平移具有 等变性 。那么,何谓等变呢?
假如函数 f(x)f(x) 和函数 g(x)g(x) 满足:
f(g(x))=g(f(x))
f(g(x))=g(f(x))
那么我们称函数 ff 对变换 gg 具有等变性。同理,平移就是函数 gg ,那么假如我们平移输入的对象,那么输出中树立的表示也会平移相同的量,这一性质在检测输入中的某些共有构造(比方说边缘)是十分有用的,特别在卷积神经网络的前几层(靠近输入的层)。
卷积神经网路
下图是一个典型的卷积神经网络层(我们简称卷积层),传统的卷积层包含如下三个构造:
卷积运算
激活函数(非线性变换)
池化(Pooling)
这里写图片描绘
这里的激活函数起着与全衔接网络一样的作用,ReLUReLU 是最常用的激活函数,下面我们来细致讨论一下池化。
池化
池化通常也被称为池化函数,池化函数的定义就是:一种运用相邻位置的总体统计特征来交换该位置的值,池化的理念有点向时序问题中的滑动窗口均匀。下图表示一种池化办法——最大池化(maxpooling):
这里写图片描绘
上图表示一个2×2的最大池化,其步幅(Stride)为2,我们能够了解为,运用一个 2×22×2 的窗口,以2为步长在输入图像上滑动窗口,计算窗口之内输入元素的最大值并输出。我们不难发现,经过这样一个池化函数以后,输入的尺寸被“紧缩”了,同时,池化并没有引入额外的参数,即池化可以降低输入的尺寸,也就意味着我们在后面的卷积层中需求的参数更少,因而,在运用池化以后,整个神经网络的参数数量会进一步降低。下面是池化的输入输出的尺寸计算公式:
假定输入的尺寸为:w×h×dw×h×d,步幅为 ss ,窗口的大小为 f×ff×f ,则输出的宽,高和深度分别为:
wout=(w−f)s+1
wout=(w−f)s+1
hout=(h−f)s+1
hout=(h−f)s+1
dout=d
dout=d
常用的池化函数主要有最大池化(Max Pooling)战争均池化(Average Pooling),分别是输出相邻的矩阵区域的最大值战争均值,不管是哪种池化,都关于输入的图像中的目的的少量平移具有不变性,即输入中的目的对象发作少量的平移,池化函数的输出不会发作改动。当我们关于卷积的输出停止池化时,由于卷积学习的是别离的特征(比方底层的卷积学习到的是各种边缘特征),特征可能存在一些变换(平移,旋转等等),添加池化函数,可以进一步学习到应该对哪些变换具有不变性。
卷积的一些细节
我们前面大致理解了什么是卷积,在卷积神经网络中,卷积计算还有一些细节问题要思索。
填充和输入输出尺寸
首先,就是输入输出的尺寸换算。和前面的池化一样,我们假定输入的尺寸为 w×h×dw×h×d,卷积的步幅为 ss ,卷积核的大小为 f×ff×f ,卷积网络中常常还有一个处置办法,叫做填充(padding),假如我们不想让我们的卷积核越过图像的边境去滑动的话,我们称之为 有效填充(valid padding) ,令 pp 为填充的像素数,则运用有效填充来处置边境时 p=0p=0 ,但是,在卷积网络的前几层中,我们要保管尽可能多的原始输入信息,以便我们能够提取这些低阶特征。我们想要应用同样的卷积层,但我们想将输出量坚持与输入相同的宽高,为了做到这一点,我们运用一定数量的0填充在边境的四周,使得卷积的输出和输入有着相同的宽高,我们称之为 相同填充(same padding)。输出的宽,高和深度的计算为:
wout=(w−f+2p)s+1
wout=(w−f+2p)s+1
hout=(w−f+2p)s+1
hout=(w−f+2p)s+1
dout=k
dout=k
其中, kk 表示卷积核的深度。
卷积核的深度
通常来说,我们回运用多个卷积核,如下图所示:
这里写图片描绘
不同的核学习不同的特征,有些核可能学习的是一些颜色特征,有些核可能学习的是一些边缘,外形特征,下图是同一层中曾经锻炼好的卷积神经网络的核可视化效果(Krizhevsky et al.)
这里写图片描绘
卷积核的数量我们成为卷积核的深度。
LeNet
下图是LeNet是LeCun等人在1998年提出的用于处理手写字辨认的卷积网络,其整体构造如下:
这里写图片描绘
我们从LeNet动身来理解卷积网络的设计形式。如图,卷积网络通常运用金字塔形构造,即随着层数的增加,输出的深度不时增加,同时,我们运用诸如池化,valid padding和大步幅来减少输出的宽高尺寸。同时,卷积核的尺寸选择已有一定的技巧,通常来说,我们常常在靠近输入的卷积层中运用较大的卷积核以减少输出的尺寸(如 7×77×7 ),而在后面的卷积层中运用小卷积核以充沛树立特征表示(如 3×33×3 )。
卷积网络的末端和前馈神经网络相似,我们将最后一个卷积层的输出展成向量,输入到一个多层感知机中,关于分类问题,依然是运用穿插熵作为损失函数,运用随机梯度降落等算法锻炼整个神经网络的参数。
卷积运算
卷积是一种特殊的线性运算,是对两个实值函数的一种数学运算,卷积运算通常用符号 ∗∗ 来表示,我们以Kalman滤波中的例子为例,来讨论一个一维离散方式的卷积:
假定我们的可回收飞船正在着陆,其传感器不时丈量本身的高度信息,我们用 h(i)h(i) 来表示 ii 时辰的高度丈量,这个丈量是以一定的频率发作的(即每隔一个时间距离丈量一次,所以丈量 h(i)是离散的h(i)是离散的),受限于传感器,我们晓得丈量是不精确的,所以我们采用一种加权均匀的办法来简单处置,详细来说,我们能够以为:越接近于时辰 ii 的丈量,越契合时辰 ii 时的真实高度,即我们给丈量 s(i)=wih(i)+wi−1h(i−1)+wi−2h(i−2)...s(i)=wih(i)+wi−1h(i−1)+wi−2h(i−2)... 其中的权重 wi>wi−1>wi−2...wi>wi−1>wi−2... 。这就是一个一维离散方式的卷积,由于这个例子中我们不可能得到“将来的丈量”,所以只包含了一维离散卷积的一半,下面是一维离散卷积的完好公式:
s(i)=(h∗w)(i)=∑j=−∞∞h(j)w(i−j)
s(i)=(h∗w)(i)=∑j=−∞∞h(j)w(i−j)
其中 ii 表示我们计算的状态(时辰,位置),jj 表示到状态 ii 的间隔(能够是时间差,空间间隔等等),这里的 hh 和 ww 就分别表示两个实值函数。在卷积神经网络的术语中,第一个函数 hh 被称为输入,第二个函数 ww 被称为 核函数(kernal function) , 输出 ss 被称为 特征映射(feature map),很显然,在实践的例子中,jj (即我们考量的区间)普通不会是负无量大到正无量大,它通常是个很小的范围。在深度学习的应用中,输入通常是高维度的数组(比方说图像),而核函数也是由算法(如随机梯度降落)产生的高维参数数组。假如输入二维图像 II ,那么相应的我们也需求运用二维的核 KK,则这个二维卷积能够写为:
S(m.n)=(I∗K)(m,n)=∑i∑jI(i,j)K(m−i,n−j)
S(m.n)=(I∗K)(m,n)=∑i∑jI(i,j)K(m−i,n−j)
其中,(m,n)(m,n) 是计算的像素位置, (i,j)(i,j) 是考量的范围。我们用愈加直观的方式来表示的话,二维卷积如下所示:
卷积的动机
那么在答复了什么是卷积以后,我们看看为什么运用卷积这种线性运算。首先我们看看卷积神经网络的定义:
卷积神经网络是指在网络中至少运用了一层卷积运算来替代普通的矩阵乘法运算的神经网络。
我们晓得,全衔接层中的输入边实践上是乘权重再累加,即实质上是一个矩阵乘法,那么卷积层实践上就是用卷积这种运算替代了原来全衔接层中的矩阵乘法,卷积的动身点是经过下述三种思想来改良机器学习系统:
稠密交互(sparse interactions)
参数共享(parameter sharing)
等变表示(equivariant representations)
稠密交互
关于普通的全衔接网络,层与层之间的节点是全衔接的:
但是对卷积网络而言,下一层的节点只与其卷积核作用到的节点相关:
运用稠密衔接的一个直观的益处就是网络的参数更少了,我们以一副 200×200200×200 的灰度图为例,当将它输入到全衔接的神经网络中时,如下:
假定这个网络的的第一个隐含层有4万个神经元(关于输入样本为40000维的状况来说,40000个隐含层节点是适宜的),那么这个网络光这一层就有接近20亿个参数。这样的模型锻炼的计算量是十分大的,且需求很大的存储空间。
关于卷积网络而言,状况如下:
这里写图片描绘
这里我们依然运用40000个隐含层神经元,我们的卷积核(也被称为滤波(Filter))的大小为 10×1010×10 ,这样的一层卷积的参数量只要约4000000个,参数数量远远小于全衔接的网络。
读者可能会有疑问?卷积的输出只与输入的部分产生关联,假如某种规律并不是树立在部分特征之上,而是和整个输入都有关联,那么经过卷积树立起来的表示是不是就不完好呢?并非如此。现代的卷积网络常常需求叠加多个卷积层,卷积网络固然在直接衔接上是稠密的,但是在更深的层中的单元能够间接的衔接到全部的或者大局部的输入图像,如下图所示:
这里写图片描绘
提示:在卷积网络的相关文献中,存在术语:神经元(neuron),核(kernal),滤波(filter),它们都指同一个事物——核函数,在本文中,我们统一称为卷积核。
参数共享
运用卷积核实践上就是卷积网络的参数,卷积核在输入图像上滑动窗口,这也就意味着输入的图像的像素点共享这一套参数,如下图所示:
这里写图片描绘
卷积网络中的参数共享使我们只需求学习一个参数汇合,而不需求对每一个像素都学习一个单独的参数汇合,它使得模型所需的存储空间大幅度降低。
等变表示
由于整个输入图片共享一组参数,那么模型关于图像中的某些特征平移具有 等变性 。那么,何谓等变呢?
假如函数 f(x)f(x) 和函数 g(x)g(x) 满足:
f(g(x))=g(f(x))
f(g(x))=g(f(x))
那么我们称函数 ff 对变换 gg 具有等变性。同理,平移就是函数 gg ,那么假如我们平移输入的对象,那么输出中树立的表示也会平移相同的量,这一性质在检测输入中的某些共有构造(比方说边缘)是十分有用的,特别在卷积神经网络的前几层(靠近输入的层)。
卷积神经网路
下图是一个典型的卷积神经网络层(我们简称卷积层),传统的卷积层包含如下三个构造:
卷积运算
激活函数(非线性变换)
池化(Pooling)
这里写图片描绘
这里的激活函数起着与全衔接网络一样的作用,ReLUReLU 是最常用的激活函数,下面我们来细致讨论一下池化。
池化
池化通常也被称为池化函数,池化函数的定义就是:一种运用相邻位置的总体统计特征来交换该位置的值,池化的理念有点向时序问题中的滑动窗口均匀。下图表示一种池化办法——最大池化(maxpooling):
这里写图片描绘
上图表示一个2×2的最大池化,其步幅(Stride)为2,我们能够了解为,运用一个 2×22×2 的窗口,以2为步长在输入图像上滑动窗口,计算窗口之内输入元素的最大值并输出。我们不难发现,经过这样一个池化函数以后,输入的尺寸被“紧缩”了,同时,池化并没有引入额外的参数,即池化可以降低输入的尺寸,也就意味着我们在后面的卷积层中需求的参数更少,因而,在运用池化以后,整个神经网络的参数数量会进一步降低。下面是池化的输入输出的尺寸计算公式:
假定输入的尺寸为:w×h×dw×h×d,步幅为 ss ,窗口的大小为 f×ff×f ,则输出的宽,高和深度分别为:
wout=(w−f)s+1
wout=(w−f)s+1
hout=(h−f)s+1
hout=(h−f)s+1
dout=d
dout=d
常用的池化函数主要有最大池化(Max Pooling)战争均池化(Average Pooling),分别是输出相邻的矩阵区域的最大值战争均值,不管是哪种池化,都关于输入的图像中的目的的少量平移具有不变性,即输入中的目的对象发作少量的平移,池化函数的输出不会发作改动。当我们关于卷积的输出停止池化时,由于卷积学习的是别离的特征(比方底层的卷积学习到的是各种边缘特征),特征可能存在一些变换(平移,旋转等等),添加池化函数,可以进一步学习到应该对哪些变换具有不变性。
卷积的一些细节
我们前面大致理解了什么是卷积,在卷积神经网络中,卷积计算还有一些细节问题要思索。
填充和输入输出尺寸
首先,就是输入输出的尺寸换算。和前面的池化一样,我们假定输入的尺寸为 w×h×dw×h×d,卷积的步幅为 ss ,卷积核的大小为 f×ff×f ,卷积网络中常常还有一个处置办法,叫做填充(padding),假如我们不想让我们的卷积核越过图像的边境去滑动的话,我们称之为 有效填充(valid padding) ,令 pp 为填充的像素数,则运用有效填充来处置边境时 p=0p=0 ,但是,在卷积网络的前几层中,我们要保管尽可能多的原始输入信息,以便我们能够提取这些低阶特征。我们想要应用同样的卷积层,但我们想将输出量坚持与输入相同的宽高,为了做到这一点,我们运用一定数量的0填充在边境的四周,使得卷积的输出和输入有着相同的宽高,我们称之为 相同填充(same padding)。输出的宽,高和深度的计算为:
wout=(w−f+2p)s+1
wout=(w−f+2p)s+1
hout=(w−f+2p)s+1
hout=(w−f+2p)s+1
dout=k
dout=k
其中, kk 表示卷积核的深度。
卷积核的深度
通常来说,我们回运用多个卷积核,如下图所示:
这里写图片描绘
不同的核学习不同的特征,有些核可能学习的是一些颜色特征,有些核可能学习的是一些边缘,外形特征,下图是同一层中曾经锻炼好的卷积神经网络的核可视化效果(Krizhevsky et al.)
这里写图片描绘
卷积核的数量我们成为卷积核的深度。
LeNet
下图是LeNet是LeCun等人在1998年提出的用于处理手写字辨认的卷积网络,其整体构造如下:
这里写图片描绘
我们从LeNet动身来理解卷积网络的设计形式。如图,卷积网络通常运用金字塔形构造,即随着层数的增加,输出的深度不时增加,同时,我们运用诸如池化,valid padding和大步幅来减少输出的宽高尺寸。同时,卷积核的尺寸选择已有一定的技巧,通常来说,我们常常在靠近输入的卷积层中运用较大的卷积核以减少输出的尺寸(如 7×77×7 ),而在后面的卷积层中运用小卷积核以充沛树立特征表示(如 3×33×3 )。
卷积网络的末端和前馈神经网络相似,我们将最后一个卷积层的输出展成向量,输入到一个多层感知机中,关于分类问题,依然是运用穿插熵作为损失函数,运用随机梯度降落等算法锻炼整个神经网络的参数。
上一条:手机端人脸识别,微信公众号H5活体检测技
下一条:名片文字OCR识别技术