人类的视觉原理

理解 CNN
注意:下面提到的图像指位图
目录实现卷积传播图解不同视角看CNN 参考
CNN
卷积神经网络-CNN 最擅长的就是图片的处理 。它受到人类视觉神经系统的启发 。
CNN的两大特点:
人类的视觉原理
详见:浅谈人类视觉系统与卷积神经网络(CNN)的联系和区别
深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究 。
1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和,以及 Roger。前两位的主要贡献,是“发现了视觉系统的信息处理”,可视皮层是分级的 。
人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 ),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球) 。下面是人脑进行人脸识别的一个示例:
其实对于我们看不同的物体也是类似的,在最底层基本上是类似的 。先是看各种边缘,越往上,就越能提取出此类物体的一些特征(鼻子、眼睛、嘴巴),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确区分不同的物体 。这种逐层提取信息的方式就是许多深度学习算法(包括CNN)的灵感来源 。
后面我们就来通过对几个层的讲解来对CNN有进一步的了解 。
几个关键层
典型的CNN一般由3个部分构成:
卷积层池化层全连接层 名称作用简述
卷积层
提取图像特征
池化层
降维、防止过拟合
全连接层
输出结果
卷积层(、)
【人类的视觉原理】在这部分我们来看一下卷积的过程 。假设我们要提取出下面这个 5 × 5 5 \times 5 5×5 的矩阵的特征(其实位图图像存储底层就是通过这种矩阵的方式存储的,不过位图一般有r、g、b三层的矩阵信息) 。
同时我们定义一个 3 × 3 3 \times 3 3×3的矩阵,在CNN中其实被称作或或。
ok有了前面一个输入矩阵和矩阵的定义,我们可以观察下图看看,是如何对输入矩阵的特征进行提取的 。其实很简单,就是每次将 中的元素与输入矩阵中的每个元素对应相乘然后累加,得到中的一个元素 。

人类的视觉原理

文章插图
针对上述例子的附加解释,顺便讲解一下torch.nn. 的参数 :
用例
import torchimport torch.nn as nnd = torch.Tensor(3, 5)conv = nn.Conv1d(in_channels=3,out_channels=2,kernel_size=2,padding=1,stride=2,bias=True,)print(d)print(conv.weight)print(conv(d))"""## Output## 因为torch.nn中设置的卷积核(kernel)内的数据是随机的,运行的时候输出可能会不一样但数据的维度应当是一样的tensor([[4.9592e-39, 4.2246e-39, 1.0286e-38, 1.0653e-38, 1.0194e-38],[8.4490e-39, 1.0469e-38, 9.3674e-39, 9.9184e-39, 8.7245e-39],[9.2755e-39, 8.9082e-39, 9.9184e-39, 8.4490e-39, 9.6429e-39]])Parameter containing:tensor([[[ 0.3349,0.2759],[-0.0143, -0.3235],[-0.2177, -0.0688]],[[ 0.2330,0.3502],[-0.3834, -0.0521],[-0.1585,0.3144]]], requires_grad=True)tensor([[-0.0977, -0.0977, -0.0977],[-0.2637, -0.2637, -0.2637]], grad_fn=)"""
卷积后得到
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--33)(%E5%8D%B7%E7%A7%%E8%AE%A1%E7%AE%97.png)]
我们可以通过下图的例子进一步理解卷积的过程 。
池化层 ()
池化层()是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样 。有多种不同形式的非线性池化函数,而其中“最大池化(Max )”是最为常见的 。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值 。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其它特征的相对位置的关系重要 。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合 。通常来说,CNN的卷积层之间都会周期性地插入池化层 。