本书阅读来到第六章,难度陡然加大。
第6章:卷积神经网络
第7章:现代神经网络
第8章:循环神经网络
第9章:现代循环神经网络
看起来都是研究神经网络的,想要掌握并不简单,本书虽然内容上已经很详实了,但对于没有相关知识基础的人来说,难度依然是很大的,就好像用B概念来解释A,结果你对B概念其实也不懂,不得不再去学习B是什么。
先看看这几章的目录:
这几部分中,卷积神经网络是最基础、也是应用最广泛的。我们先来了解他的定义。
卷积神经网络定义:
卷积神经网络(Convolutional Neural Network,CNN),是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。
神经网络我们可能还能理解,那么什么叫卷积呢?
卷积(Convolution)是通过两个函数f和g生成第三个函数的一种数学运算,用于将两个函数组合成一个新的函数,反映了其中一个函数与另一个函数翻转并移位的形式之间的相互关系。在其最基本的形式中,卷积是一个积分,表示两个函数的乘积在某个变量上的积分。
这样听起来好像还是似懂非懂。
换个说法,卷积是两个变量在某范围内相乘后求和的结果。
重点:先相乘后求和。
我们来举个例子吧。
首先是离散的情况,因为它的计算相对简单。
卷积结果为:
比如:
他们的卷积结果为:
计算过程为:
再举个更立体的例子:
以一个长度为5的一维张量I和长度为3的一维张量k(卷积核)为例,介绍其过程。
卷积的计算过程是:K沿着I顺序移动,每移动到一个固定位置,对应位置的值相乘再求和,计算过程如下:
也就是说:
说了这么多,我们想知道,卷积的作用是啥呢?
对于图像处理与计算机视觉,卷积操作用于实现各种图像增强技术,如模糊、锐化、对比度增强等。此外,卷积神经网络(CNN)利用卷积层来自动学习图像的特征表示。
对于计算机视觉来说,每一个图像是由一个个像素点构成,每个像素点有三个通道,分别代表RGB三种颜色(不计算透明度),我们以手写识别的数据集MNIST举例,每个图像的是一个长宽均为28,channel(通道数)为1的单色图像,如果使用全连接的网络结构,即,网络中的神经与相邻层上的每个神经元均连接,那就意味着我们的网络有28×28=784个神经元(RGB3色的话还要乘3),hidden层如果使用了15个神经元,需要的参数个数(w和b)就有:28×28×15×10+15+10=117625个,这个数量级到现在为止也是一个很恐怖的数量级,一次反向传播计算量都是巨大的,这还只是一个单色的28像素大小的图片,如果我们使用更大的像素,计算量可想而知。
上面说到传统的网络需要大量的参数,但是这些参数是否重复了呢,例如,我们识别一个人,只要看到他的眼睛,鼻子,嘴,还有脸基本上就知道这个人是谁了,只是用这些局部的特征就能做做判断了,并不需要所有的特征。
我们通过卷积的计算操作来提取图像局部的特征,每一层都会计算出一些局部特征,这些局部特征再汇总到下一层,这样一层一层的传递下去,特征由初级变为高级,最后在通过这些局部的特征对图片进行处理,这样大大提高了计算效率,也提高了准确度。
典型的卷积神经网络如下:
输入层(Input Layer):主要是对原始的图像数据进行预处理
卷积层(Convolution Layers):可以看作是输入样本和卷积核的内积运算。从前一层提取移位不变特征。即当输入数据是图像的时候,卷积层会以3维(H,W,C)(H为高度,W为宽度,C为channel通道数)数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。注:卷积层的输入和输出数据通常又被称为特征图(Feature Map)。卷积层的输入数据称为输入特征图(Input Feature Map),输出数据称为输出特征图(Output Feature Map)。卷积层一般由线性层和激活函数组成。
池化层(Pooling Layers):作用是减小卷积层产生的特征图尺寸。将前一层的多个单元的激活组合为一个单元。池化是缩小高、长方向上的空间的运算,通常减小一半。(其实池化层也有提取特征的意义,但其主要目的是减少计算量)
全连接层(Fully Connected Layers):收集空间扩散信息(将2维矩阵或多维矩阵拉直,变成上图那样“一列”的向量)
输出层(Output Layer):选择类。
这里比较关键的环节就是前面提到的卷积层。
在卷积神经网络中,卷积操作是指将一个可移动的小窗口(称为数据窗口,如下图绿色矩形)与图像进行逐元素相乘然后相加的操作。这个小窗口其实是一组固定的权重,它可以被看作是一个特定的滤波器(filter)或卷积核。这个操作的名称“卷积”,源自于这种元素级相乘和求和的过程。这一操作是卷积神经网络名字的来源。
卷积需要注意哪些问题?
a.步长stride:每次滑动的位置步长。
b. 卷积核的个数:决定输出的depth厚度。同时代表卷积核的个数。
c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
图片经过卷积后的样子
与人眼观看事物原理相似,卷积神经网络可以看到事物的轮廓
经典的卷积神经网络用于图像识别例子如下:
推荐下面这个视频,其讲解比较通俗易懂,有助于我们理解卷积神经网络。
什么是卷积神经网络,卷积到底卷了啥?
通俗来讲:
那我们得到的这些图片呢,就叫做特征图。当然还有很多种的卷积核。你比如说,我们可以在在计算机领域当中,通过设计出不同的这个卷积核,或者说滤波,卷积运算就可以提取图像当中的各种特征。或者说进行图像的一个滤波。那提取特征又有啥用呢?是时候揭开我们开篇的这个疑问了,我们人脑是如何快速辨认出一个物体的呢?早在上世纪60年代的时候啊,加拿大美籍的神经科学家叫大卫休本,和瑞典的一位神经科学家叫做威ER,他们就发现了一些奥秘。他们发现我们的视觉系统是分层的啊,像V1V2V3什么这个等等,在初级视觉皮层当中的每个或者我们说每一组神经元,他们的分工就是不同的,有的地方呢你比如说他可能对运动特征比较敏感,有的地方呢,对方位比较敏感。你比如说这是一根直线啊,你摆放的角度不同,那么刺激到的我们这个相应的神经元呢,它也是不一样的,那还有的地方呢,可能对颜色特征比较敏感。所以这项研究其实就是在说我们的初级视觉皮层啊,具备了视觉特征检测的这个能力。这些不同的特征一层一层的传递下去,最终所有的特征合成出了这个物体它的全貌。然后我们的大脑呢,再做出这个辨认那这样呢,也因为这项发现啊,还获得了1981年的诺贝尔生理医学奖。这就是人类视觉系统,它大致的这个运作。那你发现啊,你看我们这个初级视觉皮层啊,这种提取特征的能力是不是和卷积运算就很像啊?这就是卷积神经网络能够突出重围的原因。实际上,卷积神经网络就是通过不同的卷积核来提取不同的特征啊,甚至我们要多层次的啊,反复的去提取这个特征啊。当然这里边儿还有一些其他的工序啊,比如说。然后池化过程啊,等等啊。经过多层处理之后,哎,我们就可以提取出一张图片里边儿我们想要的这个特征啊,你比如说,我们提取出了啊,一个人脸的轮廓。那当然还有一个很重要的基础,那就是。就是需要大量的数据来进行深度学习。这就是卷积神经网络。简而言之,就是他模仿我们人类视觉神经系统。
这下我相信大家比较明白了吧,卷积神经网络,就是模仿我们人类视觉神经系统,通过不同的卷积核来提取不同的特征,最后达到图像识别的功能。
下面我们实际跑一个卷积的例子。
一维卷积:
import numpy as np
# 定义输入信号
signal = np.array([1, 2, 3, 4, 5])
# 定义卷积核(滤波器)
kernel = np.array([0.5, 1, 0.5])
# 使用 numpy.convolve 执行卷积操作
convolution_result = np.convolve(signal, kernel, mode='valid')
print("卷积结果:", convolution_result)
运行结果为:
二维卷积的例子:
在这个示例中,我们首先创建了一个示例的二维图片数据和一个卷积核。然后,我们计算了卷积后的输出图像的尺寸,并初始化一个用于存储输出的数组。接下来,我们使用两层嵌套的循环遍历输入图像,并在每个位置执行卷积操作,将结果存储在输出图像中。最后,我们打印了卷积的结果。
本次分享就到这里。
本帖最后由 cc1989summer 于 2024-9-28 22:22 编辑