卷积层是如何学习到图像特征的?

你好啊,我是董董灿。

卷积层是如何学习到图像特征的?

想搞懂这个问题,需要先了解我们所说的特征指的是什么?然后再了解卷积核是如何学到的特征。

我们一步步来。

1、我们先来理解图像的特征

对于一张原始图像而言,说原始图像是相对于经过卷积处理而言的。

对于卷积处理后的输出的图像,一般我们叫它特征图。而我这里说的“原始图像”指的是神经网络原始输入的图像。

这里找了一张图像。请你仔细观察。

你会发现图像中有一些明显的“意象”,比如红色的帐篷、美女黑色的长发、黄色的火焰。这些描述都是针对某一“物体”进行的描述。

比如,我们可以说美女的长发是“黑色”,那么这里的黑色就是长发的一种特征,相对应的,长发还可以有“红色”、“灰色”等等特征。

这种特征我们很常见,通常可以称之为“颜色特征”。比如帐篷的“红色特征”、火焰的“黄色特征”。

除了常见的颜色特征,还有很多其他更符合我们人类理解的特征:比如形状特征、轮廓特征等等。

形状特征就比如上图帐篷的“三角形”特征。

所以,你可以看到,特征可以认为是“一个物体”在某方面的属性值。

对于我们人类而言,某个物体的特征一般是需要我们人类可以用语言描述出来的,比如美女的特征一般有:黑色的长发、苗条的身材、姣好的面容等等。

而对于AI(神经网络模型)而言,某个物体的特征是AI自己可以认识而我们人类可能无法分辨的特征。

因此,你会看到很多时候,卷积输出的特征图有几百(甚至几千)个通道,每个通道代表了这个卷积经过卷积运算学习到的一个特征。

类比于原始输入的 RGB 图像仅有 3 个颜色通道,你可以粗略的认为原始输入图像仅有 3 个最显著的颜色特征(每个特征通道仅有一个颜色分量),而经过卷积计算之后,输出的通道数则有成百上千个,此时卷积学到了成百上千个特征。

好了,了解了什么是特征以及AI学到的特征之后,接下来看看题主重点问到的问题:卷积核是如何学到特征的?


2、卷积计算是如何学到特征的

这里我默认你是知道卷积的运算逻辑的,也默认你懂一些反向传播来更新卷积核参数的知识。

对于卷积核而言,其中的数值在训练过程中一般是初始值,在训练中经过 N 轮次(N 非常大,取决于你的任务和训练数据集)的迭代训练之后,会逐渐收敛到一个稳定的数值。

收敛之后的卷积核参数便可以被冻结下来,模型便可以拿去进行推理。以图像识别任务为例,如果你的模型训练完成,那么你就可以拿着训练好的模型(包括里面所有卷积层中的冻结的卷积核参数)去识别一张图中画的物体是狗还是猫了。

关键问题有两点:

  • 模型在反向传播时更新卷积核的参数,使卷积运算可以学到特征;
  • 模型在正向传播时,根据学到的特征尝试去预测目标。

反向传播无需纠结太多,精髓在于梯度,而梯度就是用来更新卷积核的,这个梯度你可以理解为某次前向传播过程中,利用已经学到的“特征”尝试去预测目标时得到的结果与真正目标之间的差距,然后把这个差距反向告诉卷积核,使其朝着差距更小的方向更新。

这样经过 N 轮次的迭代,卷积核学到的特征就非常接近真实图像中已有的特征了,虽然这些特征我们人类可能无法解释清楚,但是AI模型是知道的。

那我们再看看,在正向传播的时候,卷积做了什么事情。


3、卷积做了什么事情

卷积的核心计算逻辑是内积运算,有时也可以称之为是在特征(通道)维度的乘累加运算。

这个运算事实上和矩阵乘法是类似的。

因此,我将带你通过一个简单的内积运算,来探究一下卷积(也可以同样去理解矩阵乘法)在计算过程中做了什么事情。

这个例子我在很多场合都给一些朋友讲过,我认为对理解乘累加运算非常有用。

假设,你是一个鸡尾酒调酒师,家里储存了很多鸡尾酒的原料,有金酒、利口酒、柠檬汁和可乐等等。

今天家里来了 3 位客人,他们分别喜欢喝“自由古巴”、“长岛冰茶”以及“龙舌兰日出”这 3 款鸡尾酒,并向你下了单。

希望你给他们调配出来各自喜欢的鸡尾酒。

巧的是,这 3 款鸡尾酒的原料都是金酒、利口酒、柠檬汁和可乐。

你作为一个调酒师,分分钟就把客人的爱好的鸡尾酒给调出来了。

你是怎么做的呢?你知道配方:

  • 自由古巴: 20%金酒 + 45% 利口酒 + 10%柠檬汁 + 25%可乐
  • 长岛冰茶: 60%金酒+ 30%利口酒 + 5% 柠檬汁 + 5% 可乐
  • 龙舌兰日出:30%金酒 + 10%利口酒 + 30%柠檬汁 + 30%可乐

你在调配鸡尾酒的过程中,是按照这个配方来调配的。

这里的原料,比如利口酒和可乐,就是输入资源,配比(比如可乐的 25% )就是赋予该资源的权重。

将相同的原料按照不同的配比混合起来,就得到了不同口味的鸡尾酒。

这种做法,可以抽象一下,写成一个公式:

  • 自由古巴 = 0.2 x 金酒 + 0.45 x 利口酒 + 0.1 x 柠檬汁 + 0.25 x 可乐
  • 长岛冰茶 = 0.6 x 金酒 + 0.3 x 利口酒 + 0.05 x 柠檬汁 + 0.05 x 可乐
  • 龙舌兰日出 = 0.3 x 金酒 + 0.1 x 利口酒 + 0.3 x 柠檬汁 + 0.3 x 可乐

我们知道矩阵乘法的规则是,,第一行乘以第二列得到第二个值,...,以此类推

上面这种连乘的操作,就可以用矩阵乘法来表示。

左矩阵是一行四列,代表原料。右矩阵是四行三列,每一列代表对应原料的配比。按照矩阵乘法的规则,他们的结果应该是一个一行三列的矩阵,分别代表调配出来的三种鸡尾酒。

矩阵乘法,通过相乘累加的操作,实际上是对资源(鸡尾酒的原料)的整合和再创(创造出了新的口味,如自由古巴)。

如果把输入资源(左侧的一行四列的矩阵)看作是一些特征呢?

那不就相当于对这些特征进行了进一步的融合,得到了新的特征吗?

因此,你可以看到,如果你把左侧输入资源看做原始图像或者卷积的输入特征图,乘号右侧原料的配比看做卷积核中的权值参数,那么等号右侧的结果不就是对输入特征图进行了一次融合操作吗?

可能原来有 N 个特征,经过卷积的运算后,将这 N 个特征融合成了 M 个特征(M 可能大于 N,小于N,等于N)。

因此,卷积的运算,是对卷积输入特征的融合,这是前向传播发生的事情。

那么我们将前向的特征融合和反向传播结合起来,你是不是可以更加清晰的知道卷积是如何学到特征的了呢?

总结一下就是——

前向不断地去融合出新的特征(就像炼丹一样,不断地练出新的丹药),反向传播不断的再去指导你改进你的炼丹水平,直到整个训练过程收敛,你的炼丹技术也就水到渠成了,而这个过程中,AI 模型也就学到了它想学到的东西(特征),尽管这些特征我们人类并不知道代表了什么。


版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/73490.html