我的同事 Jannek Thomas 通过索贝尔边缘检测滤波器(与上上一幅图类似)去掉了图像中除了边缘之外的所有信息——这也是为什么卷积应用经常被称作滤波而卷积核经常被称作滤波器(更准确的定义在下面)的原因。由边缘检测滤波器生成的 feature map 对区分衣服类型非常有用,因为只有外形信息被保留下来。
彩图的左上角是搜索 query,其他是搜索结果,你会发现自动编码器真的只关注衣服的外形,而不是颜色。 再进一步:有许多不同的核可以产生多种 feature map,比如锐化图像(强调细节),或者模糊图像(减少细节),并且每个 feature map 都可能帮助算法做出决策(一些细节,比如衣服上有 3 个纽扣而不是两个,可能可以区分一些服饰)。 使用这种手段——读入输入、变换输入、然后把 feature map 喂给某个算法——被称为特征工程。特征工程非常难,很少有资料帮你上手。造成的结果是,很少有人能熟练地在多个领域应用特征工程。特征工程是——纯手工——也是 Kaggle 比赛中最重要的技能。特征工程这么难的原因是,对每种数据每种问题,有用的特征都是不同的:图像类任务的特征可能对时序类任务不起作用;即使两个任务都是图像类的,也很难找出相同的有效特征,因为视待识别的物体的不同,有用的特征也不同。这非常依赖经验。 所以特征工程对新手来讲特别困难。不过对图像而言,是否可以利用卷积核自动找出某个任务中最适合的特征? 进入卷积神经网络 卷积神经网络就是干这个的。不同于刚才使用固定数字的卷积核,我们赋予参数给这些核,参数将在数据上得到训练。随着卷积神经网络的训练,这些卷积核为了得到有用信息,在图像或 feature map 上的过滤工作会变得越来越好。这个过程是自动的,称作特征学习。特征学习自动适配新的任务:我们只需在新数据上训练一下自动找出新的过滤器就行了。这是卷积神经网络如此强大的原因——不需要繁重的特征工程了! 通常卷积神经网络并不学习单一的核,而是同时学习多层级的多个核。比如一个 32x16x16 的核用到 256×256 的图像上去会产生 32 个 241×241(latex.png)的 feature map。所以自动地得到了 32 个有用的新特征。这些特征可以作为下个核的输入。一旦学习到了多级特征,我们简单地将它们传给一个全连接的简单的神经网络,由它完成分类。这就是在概念上理解卷积神经网络所需的全部知识了(池化也是个重要的主题,但还是在另一篇博客中讲吧)。 第二部分:高级概念 我们现在对卷积有了一个良好的初步认识,也知道了卷积神经网络在干什么、为什么它如此强大。现在让我们深入了解一下卷积运算中到底发生了什么。我们将认识到刚才对卷积的讲解是粗浅的,并且这里有更优雅的解释。通过深入理解,我们可以理解卷积的本质并将其应用到许多不同的数据上去。万事开头难,第一步是理解卷积原理。 卷积定理 要理解卷积,不得不提 convolution theorem,它将时域和空域上的复杂卷积对应到了频域中的元素间简单的乘积。这个定理非常强大,在许多科学领域中得到了广泛应用。卷积定理也是快速傅里叶变换算法被称为 20 世纪最重要的算法之一的一个原因。
第一个等式是一维连续域上两个连续函数的卷积;第二个等式是二维离散域(图像)上的卷积。这里指的是卷积,指的是傅里叶变换,表示傅里叶逆变换,是一个正规化常量。这里的「离散」指的是数据由有限个变量构成(像素);一维指的是数据是一维的(时间),图像则是二维的,视频则是三维的。 为了更好地理解卷积定理,我们还需要理解数字图像处理中的傅里叶变换。 快速傅里叶变换 快速傅里叶变换是一种将时域和空域中的数据转换到频域上去的算法。傅里叶变换用一些正弦和余弦波的和来表示原函数。必须注意的是,傅里叶变换一般涉及到复数,也就是说一个实数被变换为一个具有实部和虚部的复数。通常虚部只在一部分领域有用,比如将频域变换回到时域和空域上;而在这篇博客里会被忽略掉。你可以在下面看到一个信号(一个以时间为参数的有周期的函数通常称为信号)是如何被傅里叶变换的:
红色是时域,蓝色为频域 (责任编辑:本港台直播) |