如何用Excel 9步实现CNN人脸识别

百家 作者:大数据文摘 2018-08-12 04:15:53

大数据文摘授权转载自论智


当你入门的时候,可能觉得机器学习很复杂……甚至很可怕。另一方面,Excel却很简单。Excel并不酷炫,但却能避免分散你的注意力,同时帮助你以直观的方式可视化代码后面发生的事情。


我将循序渐进地通过Excel(你可以通过下面的链接下载)向你展示卷积神经网络(CNN)是如何应用于计算机视觉任务的。其中包括一些数学,不过Excel中包含了所有的公式。


https://drive.google.com/open?id=1TJXPPQ6Cz-4kVRXTSrbj4u4orcaamtpGvY58yuJbzHk


如果无法访问Google网盘,可以在大数据文摘微信公众号后台回复“Excel”获得资料。


这一Excel模型查看一幅图像,分析它的像素,并预测是否是Elon Musk、Jeff Bezos、Jon Snow……显然这三位是天网的最大威胁。


终结者视觉——在Excel中创建卷积神经网络


本文将介绍上图中的9个步骤,每个步骤都会使用类比的方法给你的直觉增压。


本文的目标是使用容易操作的Excel,提供入门机器学习的简单路径,并向充满好奇心的读者展示尖端AI技术的奥秘。如果本文对你有帮助,请注册我创建的邮件列表,注册后可以收到更多后续的Excel,帮助你入门机器学习和创建神经网络。



Facebook面部识别系统、某国奥威尔式的大规模监控系统、你的汽车(不久的将来)背后的基础都是计算机视觉。



CNN神探


让我们假装终结者的头脑里住着一个特别的侦探,名叫“夏洛克·卷积·福尔摩斯”。他的工作是仔细查看证据(输入图像),使用敏锐的眼神和推理能力(特征检测),预测图像中的人是谁,从而破案(正确分类图像)。


卷积网络架构


你将学习:

  1. 输入:计算机如何看

  2. 特征检测:像福尔摩斯一样思考

  3. 卷积数学:福尔摩斯的侦探工具

  4. ReLU:非线性模式识别

  5. 最大池化:保留最重要的线索

  6. 扁平化:排列所有线索

  7. 全连接:完成案件拼图

  8. Logit + Softmax:破案

  9. 交叉熵损失:福尔摩斯的“正/误”



输入——一图胜千言


天网的最大威胁——Elon Musk


我从上面的图像中看到了一个有远见的人。他一方面不断改善地球这颗星球,另一方面创建逃离地球的火箭,以防终结者试图摧毁地球。和计算机不同,我看不到像素值,也无法辨认出一张图像不过是红光、绿光、蓝光的堆叠:



另一方面,一台计算机(比如天网)是瞎的……它只能看到数字。


想象一下由3张Excel(红、绿、蓝)堆叠构成的电子图像,每张表格是一个数字矩阵。拍照的时候,相机测量到达每个像素的红光、绿光、蓝光的量。接着它在0-255的范围内评估每个像素,然后将其记录到Excel中。


计算机看到Excel


上为一张28x28的图像,每个像素由三行(红、蓝、绿)表示,取值范围0-255. 每个像素的颜色对应其数值。


终结者没有看到眼睛,他看到的是一串数字


将每种颜色单独放到一个矩阵中,我们得到了3个28x28矩阵,也就是我们之后用来训练神经网络的输入:


模型输入


如果你想知道如何将任意图像转换成Excel,请访问以下网址:

http://think-maths.co.uk/spreadsheet


你将学到如何得到一张“Ex拍”,你的Excel迷朋友们会喜欢的……相信我,在Excel中找到你的马克杯(或者他们的)会让他们捧腹大笑的? (小图效果最佳)。


训练概览——像计算机,又像小孩


你刚出生的时候知道狗是什么样的吗?当然不知道。但随着时间的推移,你的父母会给你看书中、动画片中、真实生活中的狗的图像,渐渐地,你可以指着那些4条腿、毛茸茸的动物说“狗”。你的大脑中数亿神经元间的连接变得足够强,所以你可以识别狗。


终结者以同样的方式学习识别Elon。在一个被称为监督训练的过程中,人们给终结者看数千张Elon Musk、Jeff Bezos、Jon Snow的图像。刚开始,它只能随便乱猜(1/3的几率猜对),渐渐地,就像小孩一样,随着它在训练过程中看到越来越多的图像,它猜得越来越准。网络的连接(也就是“权重/偏置”)随着时间的推移而更新,使得它可以基于像素输入预测输出。这是我上一篇文章中讨论过的学习过程(梯度下降)。


CNN训练周期


卷积神经网络和普通神经网络的区别何在?


用两个词概括:平移不变性。


不知所云?让我们解构一下:

  • 平移 = 将某物从一个地方移动到另一个地方

  • 不变性 = 没有改变


在计算机视觉中,这意味着,不管对象移动到图像中的何处(平移),不会改变对象是什么(不变性)。


平移不变性(以及缩放不变性)


这需要训练卷积神经网络识别Elon的特征,不管Elon在图像中的位置在哪里(平移),也不管Elon在图像中的大小(缩放不变性)。


在普通神经网络中,我们本来会将每个像素作为模型的一个输入(而不是3个矩阵),但这忽略了相近的像素具有特别的意义和结构这一事实。在CNN中,我们查看像素组,这允许模型学习形状、线条等局部模式。比方说,如果CNN看到许多白像素包围一个黑圆圈,它会识别出眼睛这一模式。


为了达到平移不变性,CNN需要依靠它的特征侦探夏洛克·卷积·福尔摩斯的服务。


类比: 图像就像由像素组成的Excel



遇见夏洛克·卷积·福尔摩斯——特征侦探


寻找特征的夏洛克


夏洛克住在终结者的头脑中。他每次使用放大镜仔细检查一小片图像,寻找图像的重要特征(“线索”)。在收集到简单的线条和形状之类的线索后,他将它们堆叠起来,开始看到眼睛或鼻子之类的面部特征。


每个卷积层储存基于另一层构建的一组特征映射。最后,夏洛克组合所有线索,这样他就可以破案了(识别目标)。


每个特征映射就像一条线索


网络的每个卷积层都包含一组特征映射,这些映射能够以下图所示的层次化的方式识别越来越复杂的模式/形状。


CNN基于数字的模式识别找到任意图像的最重要特征。随着CNN以更多的网络层不断堆叠这些模式,它可以创建非常复杂的特征映射。


特征层次


真实生活中的CNN和夏洛克做一样的事情:


<iframe class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.6363636363636365" data-w="576" data-src="http://v.qq.com/iframe/player.html?vid=k0349icecuy&width=352&height=198&auto=0" width="352" height="198" data-vh="198" data-vw="352" style="display: none; width: 352px !important; height: 198px !important;"></iframe>

CNN的奇妙之处在于可以自行学习这些特征……工程师不用编写寻找一双眼睛、一个鼻子、一张嘴的集合这样的代码。


以这种方式工作的工程师更像架构师,他们告诉夏洛克:“我给你两叠(‘卷积层’)空白特征映射(‘线索’),你的工作是分析图像,找出最重要的线索。第一叠有16个特征映射(‘线索’),第2叠有64个特征映射……现在发挥你的侦探技能,解决这个案件!”


类比: 每个特征映射就像案件中的一条线索。



为了查明案件中的“线索”(即计算特征映射),夏洛克需要依靠他的侦探工具箱中的一些工具,我们会逐一介绍:

  • 过滤器 —— 夏洛克的放大镜 ?

  • 卷积数学 —— 过滤器权重 x 输入图像像素

  • 步进 —— 沿着输入图像移动过滤器 ? ➡️ ? ➡️

  • 补齐 —— 保护线索的犯罪现场隔离胶带 ?


夏洛克的放大镜/过滤器


毫无疑问,夏洛克非常敏锐,具备出色的观察技能,但是,如果没有那些特制的放大镜(过滤器),夏洛克没法完成他的工作。他使用不同的放大镜帮助填充每张空白特征映射的细节。所以,如果他有16个特征映射……他会有16块放大镜。


每块放大镜由多层玻璃组成,而每层玻璃由不同的权重组成。玻璃的层数,也就是过滤器深度,总是等于输入层的深度。


刚开始,夏洛克看到的输入图像有3层——红、绿、蓝。所以,放大镜也有3层。


随着我们进一步创建CNN,层的深度会增加,相应地,放大镜也会变厚。


为了创建1个特征映射(一条线索),夏洛克从取出一个放大镜,并置于输入图像的左上角开始。红层玻璃只能看到红输入图像,绿层玻璃只能看到绿图,而蓝层玻璃只能看到蓝图。


现在是数学部分。


卷积数学


特征映射中的每个像素是线索的一部分。为了计算每个像素,夏洛克需要进行一些基本的乘法和加法。


在下面的例子中,我们使用5x5x3的输入图像和3x3x3的过滤器,每个像素需要进行以下计算:

  • 3x3x3过滤器每层的卷积乘法 = 27

  • 将27个数字加起来

  • 再加上1个数字——偏置


<iframe class="video_iframe" data-vidtype="2" allowfullscreen="" frameborder="0" data-ratio="1.4333333333333333" data-w="688" data-src="http://v.qq.com/iframe/player.html?vid=f1345zo5udf&width=352&height=264&auto=0" width="352" height="264" data-vh="264" data-vw="352" style="display: none; width: 352px !important; height: 264px !important;"></iframe>

让我们仔细看下数学。一个像素需要27次乘法(3层,每层9次乘法),下面的截图显示了27次乘法中的9次:


分素相乘


至于偏置,你可以把它想象成放大镜的把手。像权重一样,它是模型的另一个参数,在训练过程中自动调整,以提高模型的精确度,并更新特征映射细节。


过滤器权重——在上面的例子中,我为了简化数学,将权重的值设为-1、0、1;然而,一般而言,你需要用较小的值随机初始化权重……比如0.01到0.1之间的值,基于钟形曲线或正态分布取样。想要了解更多权重初始化的知识,可以看这篇入门。


步进 —— 移动放大镜


计算特征映射的第1个像素之后,夏洛克将把放大镜往哪移呢?


步进:每次移动放大镜1像素


答案取决于步进参数。作为架构师/工程师,我们需要告诉夏洛克,他应该将他的放大镜向右移动(步进)多少像素。实践中最常见的步长值为2或3,但出于简单性,这里我们将步长设为1. 这意味着夏洛克将放大镜向右移动1像素,然后进行和之前一样的卷积运算。


当他的放大镜到达输入图像的最右边时,他将放大镜移到最左,然后往下移动1像素。


步长为何大于1?


优点:更少运算,内存中储存的运算结果更少,从而使模型更快。


缺点:由于跳过像素有错过模式的潜在可能性,损失了关于图像的数据。


2或3步长通常是合理的,因为紧跟着一个像素的像素通常具有相似的值,而隔着2-3个像素的像素,更可能具有不同的值,这样的值对特征映射/模式而言可能很重要。


如何预防信息损失(丢失线索)


为了破案,夏洛克刚开始接触案件的时候需要大量线索。在我们上面的例子中,我们的输入为一张5x5x3的图像,或者75像素信息(75 = 5 x 5 x3),在第一个卷积层后,我们得到了一张3x3x2的图像,或者18像素(18 = 3 x 3 x 2)。这意味着我们损失了证据,这让夏洛克的搭档约翰·华生非常反感。



在CNN的刚开始几层,夏洛克倾向于查看大量细微模式(更多线索)。在靠后的卷积层中,随着夏洛克堆叠细微的线索,查看较大的模式,“降采样”也就是降低像素的总量(更少线索)没什么问题。


那么,在CNN刚开始的时候,我们如何预防这样的信息损失呢?


一、补齐——通过补齐图像保护犯罪现场



在上面的例子中,我们在撞上右边缘前,只能移动过滤器3次……从上往下同样如此。这意味着我们所得输出的高/宽为3x3,从左往右,损失了2像素,而从上往下又损失了2像素。


为了预防这种信息损失,常见的做法是用零“补齐”原始图像(称为全零补齐(zero padding或same padding))……有点类似用犯罪现场隔离胶带确保没人破坏证据。



补齐之后,如果夏洛克再次使用相同的放大镜,他的两个特征映射的大小会是5x5而不是3x3。


这意味着我们最终得到了50像素的信息(5x5x2=50)。


50像素比18要好。不过别忘了……我们刚开始有75像素,所以我们仍然错过了一些线索。


所以我们还能做什么让夏洛克和约翰·华生满意?


二、更多过滤器——至少在我们的卷积层中加上一个特征映射,给夏洛克更多线索


模型对特征映射(“线索”)的数量并没有限制……这是我们可以控制的超参数。


如果我们至少将特征映射从2增加到3(5x5x2到5x5x3),那么总输出像素(75)就和输入像素(75)相等了。如果我们将映射增加到10,那么我们会有更多信息供夏洛克探究(5x5x10 = 250)。


事情变得越来越有趣了


总结一下,刚开始几层的信息像素总数一般高于输入图像,因为我们想要给夏洛克尽可能多的细微模式/线索。在网络的最后几层,我们常常进行降采样,信息像素变少,这是因为这些层识别图像中较大的模式。


类比: 过滤器就像放大镜,而补齐就像犯罪现场隔离胶带。



非线性模式识别——ReLU


给夏洛克足够的案件信息很重要,但现在到了进行真正的侦探工作的时候了——非线性模式识别!比如耳廓和鼻洞。


到目前为止,夏洛克进行了大量数学运算以构建特征映射,但所有运算都是线性的(在每个输入像素上进行一些乘法和加法操作),因此,他只能识别像素的线性模式。


为了给CNN引入非线性,我们将使用一种称为修正线性单元(Rectified Linear Unit)的激活函数,简称ReLU。在我们初次进行卷积运算得出特征映射后,每个值都通过这一函数,看看是否点亮/激活。


如果输入值是负数,那么输出将为零。如果输入值是正数,那么输出将和输入一样。ReLU就像一个开关,让特征映射的每个值通过ReLU之后,就创建了非线性模式识别。


回到我们原本的CNN例子,我们在卷积之后马上应用ReLU:


尽管有许多非线性激活函数可以为神经网络引入非线性(Sigmoid、Tanh、Leaky ReLU等),ReLU是CNN中目前最流行的激活函数,因为ReLU在算力上很高效,能加快训练。你可以参阅Andrej Karpathy的overview on non-linear activation functions了解每种函数的优劣(译者注:也可以参考理解神经网络的激活函数,同样比较了不同激活函数的优劣)。


类比: ReLU就像开关。



最大池化——在大脑阁楼中保留关键的少量信息


现在夏洛克有一些特征映射(“线索”)要查看,如何确定哪些信息是关键的,哪些信息是无关的细节?最大池化。


夏洛克认为人类的大脑就像一个空阁楼。傻瓜会在里面存放各种各样的家具和物品,让有用的信息在一堆杂物中不知所踪。而智者仅仅储存最重要的信息,从而在需要的时候可以快速做出决定。从这个意义上说,最大池化是夏洛克版的大脑阁楼。为了更快地做出决定,他只保留最重要的信息。



通过最大池化,夏洛克在相邻的像素中仅仅保留最大值,证据中最重要的部分。


例如,如果他查看一个2x2区域(4像素),他仅仅保留其中值最高的像素,丢弃其余3个像素。这一技术让他可以快速地学习,同时也有助于他概括(而不是“记忆”)可用于未来图像的线索。


和之前的放大镜过滤器类似,我们同样可以控制最大池化的步长和大小。在下面的例子中,我们将步长设为1,池化尺寸设为2x2:



最大池化之后,我们完成了1回合卷积/ReLU/最大池化。


典型的CNN在分类器之前会有若干回合卷积/ReLU/池化。在每一回合中,我们将在增加深度的同时挤压高/宽,这样我们不会在此过程中遗失证据。


第一步至第五步,我们专注于收集证据,现在是时候让夏洛克查看所有线索,侦破案件了:



现在我们已经有了证据,让我们开始挖掘证据的意义……


类比: 最大池化就像夏洛克的阁楼理论,保留关键信息,抛弃驳杂无用的信息。



在训练周期的末尾,夏洛克得到了堆积如山的线索,需要找到一下子查看所有线索的方式。每条线索不过是一个2维矩阵,但我们有堆叠在一起的数以千计的矩阵。


作为一名私家侦探,夏洛克很擅长应付这样的混沌,但他需要将证据呈上法庭,整理证据以供陪审团查看。


扁平化之前的特征映射


他通过一种简单的转换技术(称为扁平化)做到了这一点:

  1. 将每个由像素组成的2维矩阵转换为一列像素

  2. 将原本的二维矩阵(现在的一列像素)一个接一个地排列起来


在人类的眼睛看来,变换是这样的:



而在计算机看来,是这样的:



现在夏洛克已经整理好证据了,是时候说服陪审团证据清楚地指向一个嫌疑人。


类比:扁平化就像把证据呈上法庭。



在全连接层中,我们将方方面面的证据连接起来。某种意义上,我们完成案件的拼图,向评审团表明证据和每个嫌疑人之间的联系:



在计算机看来,全连接层是这样的:



在扁平层的每份证据和3个输出之前是一组权重和偏置。类似网络中的其他权重,这些值会在刚开始训练CNN的时候随机初始化,而随着时间的推移,CNN将“学习”如何调整这些权重/偏置以得到更精确的预测。

现在,到了夏洛克揭晓谜底的时间了!


类比:全连接层就像说服陪审团下决定。



在CNN的图像分类器阶段,模型的预测为得分最高的输出。模型的目标是让正确的输出得分最高,而让错误的输出得分较低。


评分分为两部分:


  1. Logit分数——原始得分

  2. Softmax——每个输出的概率(0-1之间)。所有输出得分之和等于1


Logit——逻辑得分


每个输出的Logit得分是一个基本的线性函数:

Logit得分 = (证据 x 权重) + 偏置


每片证据乘以连接证据至输出的权重。所有乘积相加,最后加上偏置项,得分最高的为模型的猜测。



所以,为什么不到此为止?直观地说,有两个原因:

  1. 夏洛克的置信度——我们想要知道夏洛克对结果有多自信,这样,当夏洛克的置信度很高同时他是正确的时候,我们会奖励他,而在夏洛克的置信度很高同时他是错误的时候,我们会惩罚他。我们在下一部分计算损失(“夏洛克的精确度”)时会具体讨论奖励/惩罚。

  2. 夏洛克的置信度加权概率——我们想要能够方便地解释这些0到1之间的概率,并且我们想要预测得分和实际输出(0或1)处于同一尺度。实际正确的结果(Elon)的概率为1,其他错误的结果(Jeff和Jon)的概率为0. 将正确输出转为一,错误输出转为零的过程称为独热编码。


夏洛克的目标是让他对正确输出的预测尽可能接近1.


2. Softmax——夏洛克的置信度加权概率得分


2.1 夏洛克的置信度


为了得出夏洛克的置信度,我们以e(等于2.71828…)为底数,以logit得分为指数。这样,一个较高的得分将变为非常高的置信度,而一个较低的得分将变为非常低的置信度。


这番指数运算同时也确保了我们不会有任何负分(logit得分“可能”是负数)。



2.2 夏洛克置信度加权概率


为了得出置信度加权概率,我们将每个输出置信度除以所有置信度得分之和,这就确保了所有概率之和为1。



softmax分类器很直观。夏洛克认为有97%(置信度加权)的几率终结者查看的图像是Elon Musk。


模型的最后一步是计算损失。损失告诉我们侦探夏洛克到底有多棒(或者到底有多糟)。


类比:Logit + Softmax就像查看一排嫌疑人,并指出罪犯



所有神经网络都有一个损失函数,用来比较预测和实际值。在CNN训练的过程中,随着网络权重/偏置的调整,预测改进了(夏洛克的侦探技能变得更厉害了)。


CNN最常用的损失函数是交叉熵。用Google搜索交叉熵出现的一些解释都涉及大量希腊字母,很容易让人困惑。尽管这些描述各不相同,在机器学习的语境下它们都意味着一样东西,我们下面将介绍最常见的3种解释,便于你理解。


在描述每种公式变体之前,先概括一下它们的共同点:

  • 比较正确分类的概率(Elon,1.00)和CNN的预测(Elon的softmax得分,0.97)。

  • 当夏洛克对正确分类的预测接近1时(低损失),奖励他?

  • 当夏洛克对正确分类的预测接近0时(高损失),惩罚他?



结果是一样的!3种不同的解释……


1号解释——衡量实际概率和预测概率的距离


距离捕捉了以下直觉:如果对正确标签的预测接近1,那么损失接近0. 如果对正确标签的预测接近0,那么将受到严厉的惩罚。目标是最小化正确分类的预测(Elon,0.97)和正确分类的实际概率(1.00)的距离。


赏罚“对数”公式背后的直觉将在2号解释中讨论。



2号解释——最大化log似然或最小化负log似然


在CNN中,“对数”实际上指“自然对数(ln)”,它是softmax中以自然对数为底的指数的逆运算。


对夏洛克远离1.00的预测而言,相比直接从实际概率(1.00)中减去预测概率(0.97)来计算损失,对数运算将惩罚以指数级别加重了。


最小化负对数似然和最大化对数似然均导向softmax预测趋向1.0,损失趋向0.0的结果。



3号解释——KL散度


KL(Kullback-Leibler)散度衡量预测概率(softmax得分)和实际概率的差异。


KL散度的公式包括两部分:

  1. 实际概率的不确定性。

  2. 使用预测概率损失的信息量。


在监督学习分类问题的模型训练中,实际概率的不确定性总是等于0. 我们百分之百确定训练图像的分类无误。此时,最小化预测概率分布和实际概率分布之间的KL散度等价于最小化交叉熵。



类比:交叉熵损失就像评估夏洛克的侦探技能。


总结


在夏洛克·卷积·福尔摩斯这位特别的侦探的帮助下,终结者有了一对能够搜索并摧毁自由世界的保护者Elon Musk的眼睛(对不住了,Elon!)。


虽然我们仅仅训练了终结者识别Elon、Jeff、Jon……天网有无穷多的资源,可以随意训练图像,因此天网可以利用我们创建的模型训练终结者识别任何人类和物体。


订阅邮件列表和分享


如果你喜欢本文,并想收到更多通过Excel进行机器学习的内容,可以访问excelwithml.com免费订阅邮件列表。


你也可以在Twitter上关注ExcelwithML。


更多可交互资源

  • 画一个数字,查看CNN如何预测它:http://scs.ryerson.ca/~aharley/vis/conv/flat.html

  • 用Google和你的摄像头训练自己的CNN: https://experiments.withgoogle.com/teachable-machine

  • Andreij Karpathy的实时图像分类模型:https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

  • Fast.AI讲解CNN的视频(不可交互,不过是一个很好的讲座):https://www.youtube.com/watch?time_continue=2548&v=9C06ZPF8Uuc


在未来与机器的战争中,我们的命运就在你的手中?


相关报道:

https://towardsdatascience.com/cutting-edge-face-recognition-is-complicated-these-spreadsheets-make-it-easier-e7864dbf0e1a


【今日机器学习概念】

Have a Great Definition

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接