做者 | Dave Smithgit
译者 | 刘畅缓存
编辑 | 阿司匹林、Jane网络
出品 | AI科技大本营机器学习
【导读】人脸识别技术已经有了很是普遍的应用,国内大规模监控系统背后运用的技术就是人脸识别。函数
与你们常规见到的搭建人脸识别的神经网络方法不一样,本文做者 Dave Smith 走了一次不一样寻常路,他在 Excel 中用 9 步就搭建了一我的脸识别的CNN 神经网络,让神探 Sherlock 识别出世界的终结者 “Elon”!在这篇文章中,做者试图以直观的可视化方式呈现出代码背后发生的事情,但愿能够帮助你们消除学习过程当中的一些疑虑,工具
本文的目标就是为您提供一个简单的机器学习入门,将涵盖下图所示的 9 个步骤。学习
补充工具:帮助你们了解如何在 30 秒左右的时间将任意一张图片转换为有条件格式的Excel 文件动画
http://think-maths.co.uk/spreadsheetgoogle
终结者视角—在电子表格中建立卷积神经网络编码
背景
咱们首先假设,在终结者的大脑中有一个名叫'Sherlock Convolution Holmes'的特殊侦探。他的工做就是仔细查看证据(输入图像)并使用敏锐的眼睛和推演能力(特征检测),预测图片中的人物是谁以此来破案(正确分类图像)。
注:为了减小你们对后面内容的疑惑,首先剧透一点,这篇文章的“男主”实际上是 Sherlock Convolution Holmes 。做者多是神探夏洛克的粉丝,整篇文章都是围绕 Sherlock 是如何破案来展开的。
咱们将用电子表格模型来查看图片,分析像素值,并预测它是不是 Elon Musk,Jeff Bezos 或者 Jon Snow,显然这三我的是 Skynet 最大的威胁。用图像化来比喻,CNN就像 Sherlock Holmes。这个过程当中会使用到一些数学公式,咱们在这里给出了参考连接,方便你们学习。
参考连接:
https://drive.google.com/open?id=1TJXPPQ6Cz-4kVRXTSrbj4u4orcaamtpGvY58yuJbzHk
如下9个步骤中的每一个步骤都是这个图像化比喻的一部分。
卷积神经网络体系结构
第一步
▌输入:一张图片就像是成千上万的数字
下面是咱们的输入图片,咱们是如何对这张照片进行操做的呢?
将数码照片看做3个电子表格(1个红色,1个绿色,1个蓝色)堆叠在一块儿,每一个电子表格都是一个数字矩阵。拍摄照片时,相机会测量每一个像素的红色,绿色和蓝色光量。而后,按 0-255 的等级对每一个像素进行排名,并将它们记录在电子表格中:
在上面的 28x28 图像中,每一个像素由 3 行(1个红色,1个蓝色和1个绿色)表示,其值为 0-255。其中像素已根据其值进行了格式化。
没有看到真实的眼睛,看到的只是一堆数字
若是咱们将每种颜色分红单独的矩阵,就会获得 3 个 28x28 矩阵,而每一个矩阵都是训练神经网络的输入:
模型输入
▌训练概述
在你刚出生的时候并不认识什么是狗。但在你成长的过程当中,你的父母会在书中,动画片,现实生活中向你展现狗的照片,最终你能够指着那些四条腿毛茸茸的动物说“这是只狗”。这是因为大脑中数十亿神经元之间的联系变得足够强大,让你能够识别狗。
终结者也是以一样的方式学会谁是 Elon。经过一个监督训练的过程,咱们给它展现成千上万张 Elon Musk,Jeff Bezos 和 Jon Snow 的照片。起初,它有三分之一的机会猜中,但就像一个小孩,随着时间的推移这个概率会提升。网络的链接或“权重/误差”就会随着时间更新,使得它能够基于像素级的输入去预测图片输出。
那么是什么使卷积神经网络与普通神经网络不一样呢?
5个字:平移不变性。让咱们来简单解析它一下:
平移 = 从一个地方移动到另外一个地方
不变性 = 保持不变
对于计算机视觉,这意味着不管咱们把目标移动到哪一个位置(平移),它都不会改变目标的内容(不变性)。
平移不变性(还可加上尺度不变性)
不管他在图像中什么位置(平移),什么大小(尺度不变),卷积神经网络通过训练都能识别到 Elon 的特征。CNN 擅长识别图像任何部分的模式,而后将这些模式叠加在一块儿,以构建更复杂的模式,就像人类同样。
在普通神经网络中,咱们将每一个单独的像素视为咱们模型的输入(而不是3个矩阵),但这忽略了相邻像素是具备特殊的意义和结构。对于 CNN,咱们关注彼此相邻的像素组,这容许模型学习像形状,线条等的局部模式。例如,若是 CNN 在黑色圆圈周围看到许多白色像素,它会将此模式识别为眼睛。
为了让 CNN 实现 translation variance,他们必须依靠特征检测,也就是Sherlock Convolution Holmes 。
第二步
▌特征检测:碰见 Sherlock Convolution Holmes
Sherlock 使用放大镜,仔仔细细地检查每一张图像,找到该图像的重要特征或“线索”。而后将这些简单的线条和形状特征堆叠在一块儿,就能够开始看到像眼睛或鼻子这样的面部特征。
每一个卷积层都会包含一堆特征图或相互构建的“线索”。在全部卷积完成事后,他将全部这些线索放在一块儿,就破解了案件并正确识别出目标。
每一个特征图都像是另外一个“线索”
网络的每一个卷积层都有一组特征图,这些特征图使用分层方式来识别愈来愈复杂的图案/形状。CNN 使用数字模式识别来肯定图像最重要的特征。它使用更多的层将这些模式堆叠在一块儿,所以能够构建很是复杂的特征图。
卷积神经网络检测特征
让人吃惊的是,CNN 他们能够本身学习到这些特征,而不须要工程师编写代码教他学习什么是2只眼睛,1个鼻子,嘴巴等等。
在这种方式下,工程师更像是建筑师。他们告诉 Sherlock,“我给你 2 个空白特征图(“线索”)的堆栈(“卷积层”),你的工做是分析图片并找到最重要的线索。第一个堆栈包含 16 个特征图(“线索”),第二个堆栈包含 64 个特征图.。接下来就能够利用这些侦探技巧去解决问题吧!”
第三步:
为了让 Sherlock 找到案件中的“线索”(即“计算一张特征图”),他须要使用几个工具,咱们将一一介绍:
滤波器——sherlock 的放大镜
卷积数学——滤波器的权重x输入图像的像素
步长——在输入图像上移动滤波器
填充——像“犯罪现场的警惕线”,用来保护线索
▌Sherlock 的放大镜(滤波器)
Sherlock 毫无疑问很是敏锐且具备极高的洞察能力。但若是没有他的特殊放大镜或“滤波器”,他就没法完成他的工做。所以他使用不一样的放大镜来帮助他填充每一个空白特征图的细节。 因此,若是他有 16 张特征图,他就会用 16 个放大镜。
每一个放大镜由多层玻璃组成,每层玻璃重量不一样。玻璃层的数量,也就是咱们的“滤波器深度”,老是与观察的神经网络层的深度相匹配。
一开始,Sherlock查 看的输入图像,它有3层,红色,绿色和蓝色。因此,咱们的放大镜也有 3 层。当咱们构建 CNN时,随着层深度增长,咱们的放大镜也会变得更厚。
为了创建 1 个特征图或“线索”,Sherlock 首先取出 1 个放大镜并将其放在输入图像的左上部分。红色玻璃层只能看到红色输入图像,绿色玻璃看到绿色图像,而蓝色玻璃看到的是蓝色图像。
接下来是进行数学计算。
▌卷积数学
咱们特征图中的每一个像素都是线索的一部分。为了计算每一个像素,Sherlock 必须运用一些基本的乘法和加法。
在下面的例子中,咱们将使用 5x5x3 的输入图像和 3x3x3 的滤波器,每一个像素点须要 27 次乘法:
3 层 x 每层 9 次卷积= 27
将 27 个数字加在一块儿。
将 27 个计算结果加在一块儿以后,咱们再加上1个数字—也就是偏置(bias)。
卷积计算——创建特征地图
让咱们放大来看。一个像素由27次乘法组成,下面图片显示了 27次 乘法中的 9 次:
就偏置而言,您能够将其视为每一个放大镜的手柄。与权重同样,它是模型的另外一个参数,每次训练都会调整这些参数以提升模型的准确性并更新特征图。
滤波器权重——在上面的例子中,将权重保持在1 和 0 是为了计算更方便; 可是,在正常神经网络中,可使用随机较低的值来初始化权重,如使用(0.01)和(0.1)之间的钟形曲线或正态分布类型方法。
元素乘法—用来计算1条线索
▌步长:移动放大镜
在计算了特征图中的第一个像素后,Sherlock 会怎样移动他的放大镜?
答案就是步长参数。做为神经网络的建筑师/工程师,在 Sherlock 计算特征图下一个像素以前,咱们必须告诉他应该向右移动多少像素。在实践中,2 或 3 的步长是最多见的,为了便于计算咱们这里设置步长为 1。这意味着 Sherlock 将他的放大镜向右移动 1 个像素,而后再执行与以前相同的卷积计算。
当放大镜到达输入图像的最右边时,他会将放大镜向下 1 个像素并移动到最左边。
▌为何步长会超过 1?
优势:经过减小计算和缓存,使模型训练速度更快。
缺点:步长大于 1 时,你会由于跳过一些像素从而致使丢失图片的信息,并可能错过一些学习模式。
可是设置步幅为 2 或 3 也是合理的,由于紧邻的像素一般具备类似的值,可是若是它们相距 2-3 个像素,则更有多是对于特征图/模式更重要的像素值变化。
▌如何防止信息丢失(丢失线索)
为了破解这个案子,Sherlock 在一开始的时候就须要不少线索。在上面的例子中,咱们采用了一张 5x5x3 图像,也就是 75 位像素的信息(75 = 5 x 5 x 3)。在第一个卷积层后,咱们只获得了一个 3x3x2 图像,也就是 18 位像素(18 = 3 x 3 x 2)。这意味着咱们丢失了部分证据,这将会让他的搭档John Watson 很是生气。
在 CNN 的前几层中,Sherlock 会看到不少细微的模式,这是一个增长线索的过程。而在后面的层中,能够经过“下采样”的方法来减小线索,Sherlock会将细微的线索堆积起来以便查看更清晰的模式。
▌那么咱们如何防止信息丢失呢?
1:填充:咱们必须在图像周围进行“填充”来保护犯罪现场。
在咱们的例子中,在到达右边缘以前须要移动滤波器 3 次,从上到下都是同样的。这意味着咱们获得的输出高度/宽度为 3x3,那咱们从左到右时丢失了2 个像素,而从上到下移动时咱们又损失了 2 个像素。
为了防止这种信息丢失,一般用零填充原始图像(称为“零填充”或“相同填充”),就像犯罪现场布置的警惕线同样,来保证没有人篡改线索。
在填充以后,若是 Sherlock 再次使用相同的放大镜,那他的 2 个特征图将是 5x5 而不是 3x3。这意味着咱们将留下 50 个像素的信息,由于这个卷积的新输出是 5x5x2 = 50。50 像素比 18 像素要好。可是,咱们是从 75 像素开始的,因此咱们仍然丢失了一些线索。
除此以外咱们还能作些什么呢?
2:使用更多的滤波器—经过在卷积层中添加至少 1 个特征图,为 Sherlock提供更多线索
咱们模型的特征图或“线索”数量是没有限制,这是一个能够控制的参数。
若是咱们将特征图从 2 增长到 3(5x5x2 到 5x5x3),那么总输出像素(75)与输入像素(75)恰好匹配,能够确保没有信息丢失。若是咱们将特征图增长到 10,那么就会有更多的信息(250像素= 5 x 5 x 10)让Sherlock 筛选以找到线索。
总之,前几层中的总像素信息一般高于输入图像,是由于咱们但愿为Sherlock 提供尽量多的线索/模式。在咱们网络的最后几层中,一般作法是下采样获得少许的特征。由于这些层是用来识别图像更明确的模式。
第四步
▌ReLU:非线性模式识别
给 Sherlock 提供充足的信息是很是重要的,但如今是时候进行真正的侦探工做了——非线性模式识别!像识别耳廓或鼻孔等。
到目前为止,Sherlock 已经作了一堆数学来构建特征图,但每一个计算都是线性的(取输入像素并对每一个像素执行相同的乘法/加法),所以,他只能识别像素的线性模式。
为了在 CNN 中引入非线性,咱们使用称为 Relu 的激活函数。从第一个卷积计算咱们的特征图以后,激活函数会检查每一个值来确认激活状态。若是输入值为负,则输出变为零。若是输入为正,则输出值保持不变。ReLU 的做用相似于开/关,每一个特征图的像素值通过 Relu 后,就获得了非线性的模式识别。
回到咱们最初的 CNN 示例,咱们将在卷积后当即应用 ReLU:
虽然有许多非线性激活函数可用于将非线性引入神经网络(好比 sigmoids,tanh,leakyReLU 等),但 ReLU 是 CNN 中最经常使用的,由于它们计算效率高,并能够加速训练过程。
第五步
▌Max Pooling:保留关键的少数信息在大脑中
如今,Sherlock 已经有了一些特征图或“线索”,那么他如何肯定哪些信息是不相关的细节,哪些是重要的?答案就是最大池化!
Sherlock 认为人脑就像一个记忆宫殿。傻瓜会存储各类各样的信息,最终有用的信息却在杂乱无章中丢失了。而聪明人只存储最重要的信息,这些信息能够帮助他们迅速作出决定。Sherlock 采起的方法就是 Max Pooling,使他只保留最重要的信息,从而能够快速作出决定。
最大池化就像Sherlock Holmes 记忆宫殿
经过最大池化,他能够查看像素的邻域并仅保留“最大”值或“最重要”的证据。
例如,若是他正在观察 2x2 的区域(4个像素),那只保留最高值的像素并丢掉其余 3 个。这种技术使他可以快速学习还有助于概括出能够存储和记忆将来图像中的线索。
与以前的放大镜滤波器相似,咱们还能够控制最大池化的步长和池的大小。在下面的示例中,咱们假设步长为 1,最大池化为 2x2:
最大池化—在定义的值邻域中选择“最大”值
在最大池化作完以后,咱们就完成了 1 轮卷积 / ReLU / 最大池化的过程。
在典型的CNN中,进入分类器以前,咱们通常会有几轮卷积 / ReLU / 池的过程。每一轮,咱们都会在增长深度的同时挤压高度/宽度,这样咱们就不会丢失一些证据。
前面的这 1-5 步,重点就是收集证据,接下来就是 Sherlock 查看全部线索并破案的时候了:
第六步
当 Sherlock 训练循环结束时,他有不少零散的线索,而后他须要一个方法能够同时看到所有的线索。其实每条线索都对应一个简单的二维矩阵,可是有成千上万条这样的线索堆积在一块儿。
如今他必须得到的所有线索都收集并组织起来,以便在法庭上展现给陪审团。
拉平前的特征图
他采用了 Flatten Layer 来完成这项工做(Flatten Layer 经常使用在从卷积层到全链接层的过渡),简单来讲这个技术的作法就是:
每一个 2 维像素矩阵变成 1列像素
将 2 维矩阵进行叠加
下图展现了人眼识别的示例:
回到咱们的例子,下面是计算机看到的
如今 Sherlock 已经组织完了他的证据,接下来他须要让陪审团相信他的证据最终都指向同一个嫌疑人。
第七步
在全链接层中,咱们将证据与每一个嫌疑人相连。换句话说就是咱们在展现证据与每一个嫌疑人之间的联系。
全链接层—链接证据与每一个嫌疑人
如下是计算机看到的内容:
全链接层
在 Flatten Layer 和 3 个输出的每一个证据之间是权重和误差。与网络中的其余权重同样,当咱们首次开始训练 CNN 时,这些权重将以随机值初始化,而且随着时间的推移,CNN 会“学习”如何调整这些权重/误差来获得愈来愈准确的预测结果。
如今是 Sherlock 破解案件的时候了!
第八步
在 CNN 的图像分类器阶段,模型的预测结果就是最高分数的输出。
这个评分函数有两部分:
Logit Score:原始分数
Softmax:每一个输出的几率在 0-1 之间。全部分数的总和等于 1。
▌第1部分:Logits ——逻辑分数
每一个输出的 logit 分数是基本的线性函数:
Logit分数 =(证据x权重)+ 误差
每个证据乘以链接证据与输出的权重。全部这些乘法都加在一块儿,而后在末尾添加一个误差项,获得的最高分就是模型的猜想。
Logit 分数计算
为何获得了最高分数却不是最终结果? 有 2 个直观的缘由:
Sherlock 的置信水平:咱们想知道 Sherlock 有多么自信。当他很自信而且结果是对的时候,咱们能够对他进行奖励;但当信他很自信,结果倒是错误的时候,咱们要对他进行惩罚。当咱们在最后计算损失(“Sherlock的准确性”)时,Sherlock 会得到相应的奖励/惩罚。
Sherlock 的置信加权几率:咱们但愿用一种简单的方法,经过 0 到 1 之间的几率来描述这些结果,并获得与实际输出(0或1)相同的预测分数。正确匹配的图像(Elon)为 1,其余不正确的图像(Jeff和Jon)为 0。将正确输出转换为 1 并将错误输出转换为 0 的过程称为独热编码。
Sherlock 的目标是让他的预测尽量接近 1,以此得到正确的输出。
▌第2部分:Softmax——Sherlock 的置信度加权几率分数
2.1.Sherlock 的置信水平:
为了找到 Sherlock 的置信水平,咱们取字母 e(等于2.71828)为底,并计算 logit 得分作幂运算。让高分值越高,而低分值越低。
在进行幂运算中还保证了没有负分数。因为 logit 分数“可能”为负数,因此下图是置信度曲线:
置信度曲线
2.2. Sherlock 的置信加权几率:
为了找到置信加权几率,咱们将每一个输出的置信度量除以全部置信度得分的总和,就能够获得每一个输出图像的几率,全部这些加起来为 1。用 Excel 示例以下:
Softmax
这个 softmax 分类器很是直观。Sherlock 认为,终结者看到的照片是 Elon Musk 的机率是97%(置信度加权)。咱们模型的最后一步是计算损失。损失值告诉咱们侦探 Sherlock 的辨识能力究竟有多好(或者多差)。
第九步
损失函数
每一个神经网络都有一个损失函数,咱们将预测结果与实际状况进行比较。当训练 CNN 时,随着网络权重/误差的调整,咱们的预测结果会获得改善(Sherlock的侦探技能变得更好)。
CNN 最经常使用的损失函数是交叉熵损失函数。在 Google 上搜索交叉熵会出现不少希腊字母的解释,很容易混淆。尽管描述各不相同,但它们在机器学习的背景下都是相同的,咱们将覆盖下面最多见的3个。
比较正确类(Elon,1.00)的几率与 CNN 预测 Elon (his softmax score,0.97)的几率
当CNN的预测接近1时,奖励 Sherlock
当CNN的预测接近0时,惩罚 Sherlock
以上获得的答案都相同!存在 3 种不一样的解释
▌解释 1:实际几率与预测几率之间距离的度量
直觉是,若是咱们的预测几率接近 1,则咱们的损失接近 0。若是咱们的预测接近于 0,那么将受到严厉的惩罚。目标是最小化预测结果(Elon,0.97)与实际几率(1.00)之间的“距离”。
交叉熵 1.距离解释
▌解释 2:最大化对数似然或最小化负对数似然
在 CNN 中,“log” 实际上意味着“天然对数(ln)”,它是在 softmax 的步骤1中完成的“指数/置信度”的倒数。
咱们不是用实际几率(1.00)减去预测几率(0.97)来计算损失,而是经过log 来计算损失,当 Sherlook 的预测结果离 1 越远的时候,损失是指数级增加的。
交叉熵 2.对数损失解释
▌解释 3:KL 散度(Kullback–Leibler divergence)
KL 散度是用来衡量预测几率(softmax得分)与实际几率的差别程度。
该公式分为两部分:
实际几率不肯定的数量。在监督学习的不肯定量始终为零。咱们 100% 确定训练图像是 Elon Musk。
若是咱们使用预测几率,会损失多少的“信息”。
交叉熵 3.KL散度解释
总结
在侦探 Sherlock Holmes 的帮助下,咱们给了终结者一双眼睛,因此他如今有能力寻找并摧毁自由世界的保护者 Elon Musk。(Sorry Elon!)
虽然,咱们只训练终结者来辨别 Elon,Jeff 和 Jon,可是 Skynet 拥有无限多的资源和训练图像,它能够利用咱们构建的网络去训练终结者来识别世间万物!
原文连接:
https://towardsdatascience.com/cutting-edge-face-recognition-is-complicated-these-spreadsheets-make-it-easier-e7864dbf0e1a