CNN卷积神经网络
1、神经网络
首先了解神经网络 , 大家移步这俩篇博客 , 一篇为纯理论 , 一篇为实战加理论 。
机器学习之神经网络学习及其模型
入门讲解:使用numpy实现简单的神经网络(BP算法)
2、卷积神经网络之层级结构
cs231n课程里给出了卷积神经网络各个层级结构 , 如下图

文章图片
上图中CNN要做的事情是:给定一张图片 , 是车还是马未知 , 是什么车也未知 , 现在需要模型判断这张图片里具体是一个什么东西 , 总之输出一个结果:如果是车那是什么车所以
最左边是数据输入层 , 对数据做一些处理 , 比如去均值(把输入数据各个维度都中心化为0 , 避免数据过多偏差 , 影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等 。 CNN只对训练集做“去均值”这一步 。 中间是
CONV:卷积计算层 , 线性乘积求和 。
RELU:激励层 , 上文2.2节中有提到:ReLU是激活函数的一种
POOL:池化层 , 简言之 , 即取区域平均或最大最右边是
FC:全连接层
这几个部分中 , 卷积计算层是CNN的核心 , 下文将重点阐述 。
3CNN之卷积计算层
3.1CNN怎么进行识别简言之 , 当我们给定一个"X"的图案 , 计算机怎么识别这个图案就是“X”呢?一个可能的办法就是计算机存储一张标准的“X”图案 , 然后把需要识别的未知图案跟标准"X"图案进行比对 , 如果二者一致 , 则判定未知图案即是一个"X"图案 。
而且即便未知图案可能有一些平移或稍稍变形 , 依然能辨别出它是一个X图案 。 如此 , CNN是把未知图案和标准X图案一个局部一个局部的对比 , 如下图所示

文章图片
而未知图案的局部和标准X图案的局部一个一个比对时的计算过程 , 便是卷积操作 。 卷积计算结果为1表示匹配 , 否则不匹配 。
具体而言 , 为了确定一幅图像是包含有"X"还是"O" , 相当于我们需要判断它是否含有"X"或者"O" , 并且假设必须两者选其一 , 不是"X"就是"O" 。
理想的情况就像下面这个样子:

文章图片
标准的"X"和"O" , 字母位于图像的正中央 , 并且比例合适 , 无变形
对于计算机来说 , 只要图像稍稍有一点变化 , 不是标准的 , 那么要解决这个问题还是不是那么容易的:

文章图片
计算机要解决上面这个问题 , 一个比较天真的做法就是先保存一张"X"和"O"的标准图像(就像前面给出的例子) , 然后将其他的新给出的图像来和这两张标准图像进行对比 , 看看到底和哪一张图更匹配 , 就判断为哪个字母 。
但是这么做的话 , 其实是非常不可靠的 , 因为计算机还是比较死板的 。 在计算机的“视觉”中 , 一幅图看起来就像是一个二维的像素数组(可以想象成一个棋盘) , 每一个位置对应一个数字 。 在我们这个例子当中 , 像素值"1"代表白色 , 像素值"-1"代表黑色 。

文章图片
当比较两幅图的时候 , 如果有任何一个像素值不匹配 , 那么这两幅图就不匹配 , 至少对于计算机来说是这样的 。
对于这个例子 , 计算机认为上述两幅图中的白色像素除了中间的3*3的小方格里面是相同的 , 其他四个角上都不同:

文章图片
因此 , 从表面上看 , 计算机判别右边那幅图不是"X" , 两幅图不同 , 得出结论:

文章图片
但是这么做 , 显得太不合理了 。 理想的情况下 , 我们希望 , 对于那些仅仅只是做了一些像平移 , 缩放 , 旋转 , 微变形等简单变换的图像 , 计算机仍然能够识别出图中的"X"和"O" 。 就像下面这些情况 , 我们希望计算机依然能够很快并且很准的识别出来:

文章图片
这也就是CNN出现所要解决的问题 。
Features

文章图片
对于CNN来说 , 它是一块一块地来进行比对 。 它拿来比对的这个“小块”我们称之为Features(特征) 。 在两幅图中大致相同的位置找到一些粗糙的特征进行匹配 , CNN能够更好的看到两幅图的相似性 , 相比起传统的整幅图逐一比对的方法 。
每一个feature就像是一个小图(就是一个比较小的有值的二维数组) 。 不同的Feature匹配图像中不同的特征 。 在字母"X"的例子中 , 那些由对角线和交叉线组成的features基本上能够识别出大多数"X"所具有的重要特征 。

文章图片
这些features很有可能就是匹配任何含有字母"X"的图中字母X的四个角和它的中心 。 那么具体到底是怎么匹配的呢?如下:

文章图片

文章图片

文章图片

文章图片

文章图片
看到这里是不是有了一点头目呢 。 但其实这只是第一步 , 你知道了这些Features是怎么在原图上面进行匹配的 。 但是你还不知道在这里面究竟进行的是怎样的数学计算 , 比如这个下面3*3的小块到底干了什么?

文章图片
这里面的数学操作 , 就是我们常说的“卷积”操作 。 接下来 , 我们来了解下什么是卷积操作 。
3.2什么是卷积对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定 , 所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作 , 也是卷积神经网络的名字来源 。
非严格意义上来讲 , 下图中红框框起来的部分便可以理解为一个滤波器 , 即带着一组固定权重的神经元 。 多个滤波器叠加便成了卷积层 。

文章图片
OK , 举个具体的例子 。 比如下图中 , 图中左边部分是原始输入数据 , 图中中间部分是滤波器filter , 图中右边是输出的新的二维数据 。

文章图片
中间滤波器filter与数据窗口做内积 , 其具体计算过程则是:40+00+00+00+01+01+00+01+-4*2=-8
3.3图像上的卷积
在下图对应的计算过程中 , 输入是一定区域大小(width*height)的数据 , 和滤波器filter(带着一组固定权重的神经元)做内积后等到新的二维数据 。
具体来说 , 左边是图像输入 , 中间部分就是滤波器filter(带着一组固定权重的神经元) , 不同的滤波器filter会得到不同的输出数据 , 比如颜色深浅、轮廓 。 相当于如果想提取图像的不同特征 , 则用不同的滤波器filter , 提取想要的关于图像的特定信息:颜色深浅或轮廓 。
如下图所示

文章图片
3.4GIF动态卷积图在CNN中 , 滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算 。 每计算完一个数据窗口内的局部数据后 , 数据窗口不断平移滑动 , 直到计算完所有数据 。 这个过程中 , 有这么几个参数:
a.深度depth:神经元个数 , 决定输出的depth厚度 。 同时代表滤波器个数 。
b.步长stride:决定滑动多少步可以到边缘 。
c.填充值zero-padding:在外围边缘补充若干圈0 , 方便从初始位置以步长为单位可以刚好滑倒末尾位置 , 通俗地讲就是为了总长能被步长整除 。

文章图片
cs231n课程中有一张卷积动图 , 貌似是用d3js和一个util画的 , 我根据cs231n的卷积动图依次截取了18张图 , 然后用一gif制图工具制作了一gif动态卷积图 。 如下gif图所示

文章图片
可以看到:
两个神经元 , 即depth=2 , 意味着有两个滤波器 。
数据窗口每次移动两个步长取3*3的局部数据 , 即stride=2 。
zero-padding=1 。 然后分别以两个滤波器filter为轴滑动数组进行卷积计算 , 得到两组不同的结果 。 如果初看上图 , 可能不一定能立马理解啥意思 , 但结合上文的内容后 , 理解这个动图已经不是很困难的事情:
左边是输入(773中 , 7*7代表图像的像素/长宽 , 3代表R、G、B三个颜色通道)
【CNN卷积神经网络】中间部分是两个不同的滤波器Filterw0、Filterw1
推荐阅读
- 特朗普|特朗普:福克斯新闻网比“假新闻”CNN还糟糕,根本没法看
- |外媒:特朗普行政令有可能进一步分裂全球互联网
- 环球网|特朗普发推骂福克斯“比假新闻媒体CNN还差”,还顺便推荐了另一家媒体……
- 特斯拉|特斯拉开发Dojo神经网络训练计算机 后者是性能野兽
- iTunes|算法之“算法”:所有机器学习算法都可以表示为神经网络
- 美国有线电视新闻网|特朗普固执使用“中国病毒”描述疫情,CNN反驳:绝对不是
- 美股研究社|马斯克:特斯拉正开发“Dojo”神经网络训练计算机
- 中年|特斯拉放新专利,神经网络可自动适应硬件平台,这可不多见
- 环球网|特朗普固执使用“中国病毒”描述疫情,CNN反驳:绝对不是
- |用神经网络给照片补光,谷歌这项研究却实现了「鬼片」效果
