为什么我们能识别英文字母?


首先,我们学习了26个英文字母。这是一个很重要的先验条件。没有学习过阿拉伯语让你去看就是一堆字符…等等,这好像并不重要。如果单纯从形状上来看似乎对人脑完全没有影响。看着下面的阿拉伯字母表好像单纯区分开来是件很容易的事情。

为什么我们能识别英文字母?

这样来看“能区分开来”和“能认识,看懂”是2种不同的能力。以下只说前一种能力。这越来越让我觉得这种能力像是与生俱来的。在识别这个过程中我们到底看到了什么以至于让我们一眼就可以识别出来。注意到“一眼”能说明人脑运算之快,如果能捕捉这一瞬间大脑内部神经元发生的活动或许能更深一步理解这个过程。运算快并不是个可有可无的功能,深度学习正是因为GPU的计算快才大规模发展起来。我相信在未来随着人类制造的计算机越来越快能够解决一些更加复杂的问题。回到正题,首先你为什么知道它就是英文字母。我们需要把其他事物和英文字母区分开。然后需要区分不同的字母。这是一个二分类和多分类问题。将英文字母这个符号集合和其他事物区分开需要字母集合有着比较统一的特征。比如字母就只是线段和曲线段构成的。第一个二分类问题更深层次的讲,我们是在区分实际存在的物体与人造的符号系统。但是这里面又存在很多更复杂的问题。你知道书本记录了文字(至少大多数),你知道车牌上是文字。这些先验条件很容易让这个问题变得简单。如果我让你从建筑,一颗树的形状来找出文字。这变得困难些了。你需要脑补,自发的去构造出符合文字的形状。比如你可以把一颗光秃秃,笔直的树看作字母I。所以第一个问题看似不存在,实际上只是对人来说并不难。究其原因还是我们自己创造了这些符号,我们知道这些符号可能会出现在哪些地方。第二个多分类问题是问题的核心。让不同的人重复写很多个L,为什么都能认出来。我认为我们记住了L这个字母的特征,具体来讲,对我来说,L先向下画一竖,在90度右转。而这里右转实际上是一个比较重要的特征。它有利于和I这个字母区分开。如果我们简化英文字母只有ABCD。如何区分这4个字母。你可能很模糊就说“它们看起来形状就不一样“。那看下面的图形:

为什么我们能识别英文字母?

你还很容易区分这2个图形吗?这时候你需要睁大眼睛仔细观察了。你需要注意图像的局部细节才能区分开。诸如ABCD这类图形能很容易区分是因为它们的特征太明显了而并不是因为你不需要去关注这些局部细节。那么这些细节有哪些体现呢?

为什么我们能识别英文字母?

图中框出了一些“特征“,这些特征可以是局部的也可以是全局的。看这些细节你很容易发现ABCD的不同之处。比如,一条直线与水平线多少度,几条直线交接出构造出的特征,弧线特征等等。当然了,这些只是我人为挖掘出来的。对人大脑来说,可能我们优先关注全局的特征,当全局特征不足以区分时会更关注局部特征。那么对于机器呢?有人做了CNN模型的可视化,想知道CNN究竟如何识别的。下面是一个分类手写数字0到9的例子。

为什么我们能识别英文字母?

这个图案是模型生成的,模型认为图中0这个图案很像手写体0,直观的感觉好像并不是。看看6这个图案好像是挺像数字6的。一个深度学习模型如何识别出不同图像的并不很好解释,这也是深度学习一直被诟病的。

以上纯属个人想法。2019.4.20