大家好啊,我是董董灿。
在很多 AI 模型中,都会出现内积运算。无论是卷积/全连接还是 Transformer 架构中的矩阵乘法(或线性映射),其核心运算逻辑都是内积运算。
因此,很多时候,我们也把内积运算称作是一种"特征提取和融合运算"。
那么如何来理解这种"特征提取和融合"呢?
本文就用一个非常通俗的矩阵乘法的例子,让你来理解这个过程。
矩阵运算的本质
先看一个调酒的例子,我在很多场合都会用这个例子来讲解"特征提取"的作用。
假如你是一个鸡尾酒调酒师,家里储存了很多鸡尾酒的原料,有金酒、利口酒、柠檬汁和可乐等等。
今天家里来了 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 可乐
我们知道矩阵乘法的规则是,左矩阵的第一行乘以右矩阵的第一列,得到第一个值,第一行乘以第二列得到第二个值,...,以此类推。
上面这种连乘的操作,就可以用矩阵乘法来表示。
左矩阵是一行四列,代表原料。
右矩阵是四行三列,每一列代表对应原料的配比。
按照矩阵乘法的规则,他们的结果应该是一个一行三列的矩阵,分别代表调配出来的三种鸡尾酒。
看到这是不是有点熟悉了。
矩阵乘法,通过相乘再累加的操作,实际上是对资源(鸡尾酒的原料)的整合和再创(创造出了新的口味,如自由古巴)。
也就是说,如果矩阵乘法的一个矩阵是权值矩阵,就可以把矩阵乘法理解为:对输入资源的一种提取和融合操作。
而在AI神经网络中,输入资源可以认为是特征,因此,在 AI 算法中,类似的矩阵乘法运算,都是对特征进行的提取和融合。
是不是好理解一些了呢?
与之对应的,卷积运算和全连接运算,即核心逻辑都是以权值和输入进行乘法,然后累加的操作,与上述类似。
因此,卷积可以提取输入资源的特征(大部分是图像),全连接也可以提取输入资源的特征。
最后,送一句话给大家:生活不止眼前,还有诗和远方,共勉~