5分钟搞懂矩阵乘法的本质

很多与深度学习算法相关的面试,面试官可能都会问一类问题,那就是你是如何理解矩阵乘算法的。

更有甚者,会让你当场手写矩阵乘算法,然后问细节,问如何优化,面试现场,残忍至极。

那矩阵乘法的本质到底是什么呢?为什么在神经网络中,甚至如今大火的大模型中,有那么多矩阵乘法出现呢?

1、矩阵乘法的本质

我查了很多资料,得出一个结论:矩阵乘法的本质,是数据整合和再创造的输出。

举个例子。

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

今天家里来了 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 可乐

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

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

左矩阵是一行四列,代表原料。

右矩阵是四行三列,每一列代表对应原料的配比。

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

看到这是不是有点熟悉了。

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

2、深度学习中的矩阵乘法

回到深度学习算法中,矩阵乘法的右矩阵通常是权值矩阵,是作为模型的参数被训练出来的。

一个模型,在对多种数据集训练之后,模型就学习到了一个权值矩阵,实际上一个模型中会学到很多个权值矩阵,这里用一个举例子说明。

这个权值矩阵可以很好的匹配多种输入数据,并对输入数据进行整合和再创。

卷积和全连接算法,或多或少都是一种矩阵乘法,将其转换为矩阵乘法之后,那么和权值矩阵对应的另一个矩阵,就是输入数据。

假设输入的数据是一张图片,那么图片中一个通道维度代表图片的一个特征,通过矩阵乘法对通道进行乘累加操作,便可以实现特征之间的整合和再创。

也就是所谓的特征融合,跟调酒是不是很像?

更显而易见的例子体现在全连接层上,全连接层通过矩阵乘法的运算,把所有的特征全部进行了融合,最终可能就会得到某一个类别。

本文首发:5分钟搞懂矩阵乘法的本质

作者原创,请勿随意转载,写文不易,点个赞呗~

相关推荐
白榆maple19 分钟前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少23 分钟前
数据结构——线性表与链表
数据结构·c++·算法
许野平36 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
咕咕吖2 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu2 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
LunarCod2 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
丫头,冲鸭!!!3 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法