当前位置: 首页 > article >正文

【最后203篇系列】010 关于矩阵的一点思考

说明

今天拿起一本矩阵的书又翻了翻,毕竟AI搞到最后还得是数学。

我是感觉自己高数始终有点学的迷迷糊糊的,就打算这一年慢慢把矩阵部分扫一遍,毕竟这快肯定是实打实有用的。其他高级部分就等我发财之后再说了,哈哈。

内容

今天看了点点矩阵乘法的基本概念,这个点我以前就一直在思考,因为并不仅仅是计算,而是为什么有这样的计算。我记得以前还看过一个国外的科普视频,大约讲了一个班级的学生出门玩坐公交啥的,然后用矩阵就可以方便的计算各种费用。

关键点是在于:矩阵这种格式究竟是为什么场景设计的?

先说个抽象点的。

我先画了个图,其实稍微有点不对(结果矩阵的第一个元素应该是第一行乘以第一列),不过大概想表达个意思:矩阵乘法应该想象成一个机关,或者说算子,或者说开关,都行。就是一个可以想象的,很具体的动作。

在这里插入图片描述
这里豆包稍微解读了一下,是这个意思。
在这里插入图片描述
我觉得可以这么想象,矩阵就像一个铡刀:

  • 1 底座(矩阵1): m x n
  • 2 直立的铡刀(矩阵2): n x p

咔嚓一下,铡刀90度旋转切下来,这个过程中,对齐的部分积压为一个元素值。以下面的矩阵为例,A是基座,B要想象横过来,然后A的第一行[1,2,3]是紧贴B的最底下的一行[2,4,6],这两个向量等长,意味着铡刀的长和基座是对齐的。B旋转下来时,[1,2,3]和[2,4,6]挤压(内积),变成了28。旋转完成时,剩下的结果,就是一片新的"板材"。这样可以有一个比较形象的类比,比较好记。
在这里插入图片描述

再说个具体点的应用,这个应该也是MLR概念的一部分。

逻辑回归的公式,大概这样
在这里插入图片描述
我以前更习惯用β那套符号,b也就是β0。

逻辑回归有一个比较经典的问题:变量选择。假设我们生成了1000个x,那么选哪些才最好呢?

如果按照解析思维,就算什么重要性,相关性啥的,嗯,反正我不太想回忆那个。其实一个更简单的思路,就是–试试呗。

暴力破解不太可能,也不经济,1000个特征的组合数还是比较吓人的。

在这里插入图片描述
我随便跑了一些
在这里插入图片描述
所以暴力法一定不太对,那么用遗传算法就可以 x1-x1000,每个变量的选择都可以认为是0,1 Mask的;但是遗传算法也会产生很大的计算量,那么怎么加速呢? 矩阵。

假设A矩阵是参数,B矩阵是变量选择。那么A矩阵应该是 n X 1000的矩阵,那么第一行就是w0,与某一组x挤压(内积)后就得到了一个y‘。

所以A矩阵的n行,代表了n种可能的参数。

我们把B矩阵横过来,此时的形状是p X 1000,那么p是什么呢? p可以是遗传算法生成的种群。

假设我们可以对A的参数可能性进行优化(梯度),那么每一次计算都可以将多种可能性一次性计算出来,然后评估。C矩阵则是评估矩阵。

一种可能的情况是,我们先定住A,然后让B进行遗传进化;然后我们再定住B,让A进行迭代。每次计算完毕后,我们通过评估C来看结果是怎样的。

在这里插入图片描述

如果是1000X1000的矩阵,大约是4MB显存,我们完全可以扩大10倍,例如A矩阵是 1万 x 1千,B矩阵是 1千X1万,这两者的显存大约80MB。然后假设计算的瞬间显存会翻倍,那么是160MB峰值,C矩阵是1万X1万,大约是400MB。总共不到1个G的显存,所有的消费级显卡都可以很容易计算。

关于有多快,这个大模型很打官腔:
在这里插入图片描述
然后我追问了一下:
在这里插入图片描述
嗯,然后我实测了了一下,简单的结论是处理一次是秒级,大部分时间是损耗在从内存搬到显存上的。

3060TI,第一次计算 0.5秒
在这里插入图片描述

再次计算14.8毫秒。所以还是很符合理论估计的。
在这里插入图片描述
再用4060ti试一下:机器配置稍微好一点,0.3秒

在这里插入图片描述
第二次 13.7毫秒。所以4060ti在计算力上没啥提升,显存16G还是方便很多的。
在这里插入图片描述
然后是4090,机器是租用的额,cpu配置稍微弱了点,6核12线程的。
在这里插入图片描述
再算一次就厉害了。
在这里插入图片描述

未来的架构,有可能是直接写显存的(现在豆包的架构已经这么改了),所以这类型的计算,非常具有可行性。

假设我们在进行遗传算法,每次迭代大约1-2秒,这个速度已经很快了,应该可以在很短的时间,比如10分钟左右,找到一组合适解。这种方法最大的好处就是通用,不必将道理。设计好评估的方法就可以了,除了roc,auc之类的,可能同时考虑aic或者bic,不管怎么样,给到一套合理的评估方法就行了。这个本身也是模型验收必然要做的。


http://www.kler.cn/a/571928.html

相关文章:

  • pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码
  • linux中使用firewall命令操作端口
  • 面试基础---Spring Cloud 微服务架构中的网关:Spring Cloud Gateway 与 Zuul 深度解析
  • 机器学习数学基础:38.统计学变量与相关系数
  • SQL进阶技巧:上课时长计算
  • oracle decode
  • R语言 | 在图形上标注P值的R包
  • 【多模态目标检测】【AAAI 2025】FD2-Net
  • PyCharm 的详细安装步骤(以 Windows 系统为例,其他系统类似)
  • vue3(笔记)4.0 vueRouter.导航守卫.ElementPuls知识点
  • NetMizer dologin.php sql注入漏洞复现(XVE-2024-37672)(附脚本)
  • MySQL--共享锁和排他锁
  • AF3 block_diag函数解读
  • QTcpSocket使用指南与实践
  • Unity摄像机跟随物体
  • 2025年03月04日Github流行趋势
  • 深入理解 Android MediaCodec 视频编码
  • React进阶之前端业务Hooks库(六)
  • 遗传算法详解及在matlab中的使用
  • SSM记忆旅游网站