我们如何认识这个世界?我们对世界的认识其实就是世界在我们观念中的“投影”。

“投影”,原意是把一个三维的物体投射到一个二维的平面,这个平面上的形状就是投影。因此,人们对事情的认识,其实都是这件事在他那个世界“平面”的投影。这个平面不是我们熟知的二维平面,而是综合了所有参数的N维超平面。从这个角度来讲,所有人对世界的认识都是局限的,也就是说没有人对世界的认识是完全正确的。

图1、超立方体的超平面投影[1]

没有人完全正确,但是每个人对正确的感知度却存在很大区别,也就是说有的人对事情的推断要更正确一些。

一般意义上讲,我们对世界有一个非常具体的理解。一个物体是圆形,而另一个则是方形;这个是红色的,而另一个是黑色的……我们可以群举一系列我们对这个世界的认识,但其实都是一些对特征属性的定义。我们通过对特征属性进行定义以获得我们对于世界的认识,并认为这是最真实的感知。

进一步来说,我们把这些属性归纳为一个向量b,这个向量包含n个属性参数,包括形状、颜色、尺寸等等。我们用这个向量来表述一个事情各方面的属性。如果我们把每个人对事情的认识定义为一个投影,那么从数学的逻辑上,就是把属性向量转换成为另一个属性向量c,而这个属性向量包含认识加工后的属性变量,我们定义它含有m个属性参数,至于属性参数包含什么内容其实并不重要。举例来说你可以认为m=1,表示内容为成功或失败。这样我们就能把人对某个事情的认识转换为一个非常简单的数学逻辑:

c=A×b (1)

这里面A就是一个非常重要的变量,我称之为思维矩阵,这个矩阵形象地表达了人们认识世界的逻辑:我们用思维矩阵A把现实参数体系b转化为我们能够感知的参数体系c。

公式 (1) 其实很明确地将每个人定义为了一个矩阵。我们知道矩阵A包含m x n个变量,其每一行都在充当着转换的作用,结果c正确与否直接跟这些变量相关。当然,人的思维过程可能是多级、多次的,我们做一个重大决定可能要经过多次的深思熟虑,而这个过程可以用连续的矩阵变换来实现,比如:

c1=B×c (2)

其中,c是一个m×1的向量,B是一个k×m的矩阵,那么c1就是一个k×1的向量。我们可以做无数次这种变换,最终的结果就是你的决定。

但是,一个很重要的问题,是不是我们想的时间越长,做出的决定就越准确呢?不一定,事实的结果是,完全相反!

生物进化的一个趋势就是在做出和生死相关决定的时候一般不需要大脑的过滤,而主要是通过潜意识实现的。比如说你在路上骑自行车,没有注意迎面的汽车,当你注意到时候,你的潜意识控制你的四肢立即作出决定,偏离之前行进的方向,从而让你免于事故。这个过程大脑不参与任何决定,做出决定的完全是你的潜意识。当然,你可以认为,潜意识也是大脑反应的一部分,但是至少你这个过程和传统意义上的决定过程完全不同。

我们经历过这么长时间的进化,我们在基因里有了这么强的让我们免于死亡的逻辑,那么我们还需对于每天发生的事情做出决定吗?我们能不能完全依靠潜意识?显然不能。因为我们的大脑不能控制潜意识的发生,这是可悲的,但也是幸运的。如果我们完全受潜意识的支配,那我们和一条毛毛虫没有任何区别。我们之所以进化出了可以做决定的大脑,那就一定有其必然性。

如果每个人做决定都只经过一次,也就是都采用一次矩阵变化,那么造成每个人做出不同决定的原因就是他们秉持的矩阵A不同,具体来讲,就是矩阵A里的元素不同,哪怕只是一个元素!而事实上,A是一个很大的矩阵,也就是n是一个很大的数,导致矩阵A不同太正常了,这也是现实中千差万别的本质原因。

图2、意识, 灵感, 数字, 大脑, 矩阵, 科学[2]

如果每个人的A矩阵不同,那么如何评定A矩阵的好坏呢,也就是谁做出的决定更正确?这是一个相对复杂的问题,回答这个问题,我们需要引入两个基本原则:

1)对于同一问题b,不同的人具有不同的矩阵A;

2)对于不同的问题b,同一个人的矩阵A不同;

矩阵A的每个元素其实依赖于每个人对之前所有事情的认识结果。矩阵A中的每个值都是经过无数次矩阵变换的结果,这个变换过程我们一般称为学习过程。所有的这些元素都是矩阵变换结果,而这些元素又将作为下一次变换的矩阵元素。

最原始的信息b经过第一次转换变成了信息c,变化矩阵其实是一个单位矩阵,也就是所见即所得,我们看到了什么其实最后就留下了什么,也就是:

c=I×b=b (3)

这其实就是最初或幼年时候我们对世界的认识。

当我们第一次获得信息之后,我们会将信息进行加工并保存在我们的“内存”里,也就是我们开始改写矩阵A,如果第一次获得的信息是颜色,那么之后我们改写的就是跟颜色相关的所有A元素,但是此时的改写是低级的,我们只是改写了诸如“哦,这个感觉好特殊,以前没有见过”。所以我们只是把A元素的一些变量改写了一个数,从之前的0改写成了一个1或其他大小。值得注意的是,此时A矩阵主对角元素是1,而次对角元素则出现了类似于0.01,-0.002之类的数字。我们把第一次的感知转换成为了对A矩阵元素的改写,虽然改写的位置很少,绝对数值很小,但是其实最重要的一刻已经开始了。如果把这个最小过程重新定义,我们会发现这其实也是一个小的,或者叫最小的A矩阵转换:

Ai,j=Lk×d (4)

其中Ai,j 表示A矩阵里第i行和j列的元素的数值,Lk表示序列为k的学习矩阵,一般维数为1×k,而d表示“所学”的信息向量,一定程度上是预期和事实之间的差异。d具有k个元素。从这个角度讲,我们可以直接定义A矩阵为一个超级矩阵,具有M x N个变量,N > M 表示我们能感知的,或最常感知的信息源数量,比如:温度、颜色、压力、长度、数量等等。M一般是指决定参数的大小,比如最简单的:是或否,做还是放弃,做多还是做少等等。

事实上到目前为止,我们对世界的感知是非常初级的,这期间的感知是最直观的。而这些都是我们基因里固有的东西,也就是条件反射,比如当我们触碰一根针的时候我们会疼。

所有有意义的学习过程其实是在我们获得语言能力后产生的,因此语言能力的重要性是决定性的。这种决定的表现是我们可以把我们的感受跟一个符号联系起来,同时我们可以用这个符号跟别人获得信息的交换。这其实就是一个量化的过程,也就是我们可以把A矩阵的元素数值进行具体的量化。

当我们获得某种信息的时候,我们会将其转换、并量化为一个特性向量,然后通过合理地封装,将这部分信息转换并修改A矩阵的一个或多个变量的数值。也就是公式 (4) 所代表的过程,这是一个学习的过程,其本质不同于做决定的过程。因为做决定的时候我们根本不知道后果会怎样,而学习的过程事实上是在知晓后果之后发生的。所以,学习过程是一个信息加强过程,而决定的过程是一个经验依赖过程。而最能准确描述这个过程的就是贝叶斯模型。

图3、贝叶斯模型[3]

贝叶斯模型用概率的方法描述“决定”过程:

P(D | E) = P(E | D) x P(D) / (P(E | D1) + P(E | D2) + P(E | D3) + …) (5)

其中,D表示决定,E表示经验。公式 (5) 表达了一个事情,我们根据以前的经验(包括现有的知识,其实也是经验)来做出一个决定D,其所能代表的值的概率可以用 (5) 来表达。举例来说,基于以前的经验我们做出“是”的概率可能为70%,而做出“否”的概率为30%。

概率模型的好处是凡事都可以用概率来描述一个事情发生的可能性,其坏处是,我们实际上还是不知道该事情会不会发生。当然,你可以认为如果得出的概率大于50%,我们就认定该事会发生,但其实仔细一想就知道,这个太理想化了,在很多事情上其实不切实际。但是不管怎样,贝叶斯模型给我们指明了一条路:那就是我们可以通过不停地转化做出越来越准确的决定。也就是通过不停的矩阵转化将事情发生的概率逐渐加大,在此过程中,我们唯一要做的就是不断地提供准确数据。这其实,就是机器学习的所谓训练的本质。

我们总结一下学习和认知的过程:

1)我们采用矩阵A来做所有的决定,基于现实信息源b,做出决定的特性向量为c;

2)我们用学习矩阵Li来做增强性训练,Li和d的点乘的结果为Aij,完整的A矩阵应该是三维矩阵,并具有维度M×N×K;

3)如果我们做多次决定,那么最终决定为多个决定矩阵的乘积,即c=C×B×A×b;

4)多次决定过程,本质上是采用贝叶斯概率模型加强信任度的过程。

从2)可以看出,学习矩阵有点像一个个的圆柱,这个矩阵从断面上看有M×N个“细胞”,每个“细胞”有K个变量,或K个存储字节。值得注意的是,对于每一个圆柱,K的大小(长短)可以不同。

现在的问题归结为如何定义A矩阵和信息源b。在定义这些之前,我们再来回顾一下我们是怎么学习的。

举一个非常简单的例子,当我们看到树的时候会发生什么?在我们还没有语言之前,我们看到树会直接联想到这几个特性:“不动”、“有树干”、“叶子是绿的”、“有树枝”等等。然后当我们下次再看到树的时候我们会立即用脑海里仅存的这些属性去和眼前的树相对比,一旦发现其中有一个特性不一样,那我们就能肯定眼前的这个不是“树”,或者说更为确切地说,眼前这个不是我们自己认为的“树”。比方说,我们看到一个猫从眼前走过,眼睛看到的信息,或者说信息源告诉大脑,这个会“动”,所以肯定不是“树”。但是当我们看到一些相似的东西的时候我们可能会混淆,甚至感到疑惑。例如我们看到一株灌木,有“干”,有“枝”,叶子是“绿的”,但是好像也不是树,觉得怪怪的,因为眼前这个东西很矮,是不是矮的就不是树呢?也未必,但是至少这种情况会让我们产生质疑。当周围的人忽然跟你说,这个不是树,这个是灌木,那么你脑子就有了一个词,或者说一个符号,那就是“灌木”。

图4、树枝

值得注意的是,这是在我们学习语言之后产生的。在获得语言能力之前,我们其实可以分辨二者的不同,但是没有办法将这种不同用一些具有鲜明意义的符号来加以区别。这种过程如果不断地开展,那么在我们脑子里就会产生一系列的符号,或者说语言来表达这些不同的物体,比如“树”、“灌木”、“花”、“草”,然后最终产生一个更具意义的名字:“植物”。这就是我们学习的过程,一个不断加强的符号关联过程。

这其实可以产生一个很明确的关联逻辑,如果一个物体最终被证明是我们之前认定的物体,也就是意识关联性全对,我们将这个过程的结果或这个关联性定义为1。而我们将关联性失败的过程定义为0,这可能是事实是对的,而我们关联错了,也可能是事实不是,但是我们之前认定是对的。最后,我们将我们认定不是和事实确实不是也定义为1。那么上面的所有逻辑(G)其实就是一个预期(E)和事实(R)的与的关系,也即:

G=E ∩ R (6)

而事实上,同时也从直观的理解上,E=1和R=1同时满足的情况在我们脑子里产生的印象要强于全否,也就是E=0和R=0的情况(即便是二者的G都相同,而且G=1)。这有点像加强印象只能通过全对来实现,而全否貌似什么都没有发生一样。比如,一个人预测黑人会成为美国总统,最终的结果证明他是对的,其效果要远强于另一种情况,也即这个预测黑人不可能成为美国总统,而最终他确实没有成为美国总统。后者对该人几乎没有造成什么影响,而前者则极大地加强了他对自己将来预测谁会成为美国总统的预期。

我们定义学习向量L并让其只有4个变量,也即:

L=[P1 P2 P3 P4] (7)

其中,Pi <1代表相对应关联的权重,且:

P1+P2+P3+P4=1 (8)

我们定义P1为全是的情况,P2、P3为预期错误的情况,而P4则为全否的情况。根据上面的讨论,P1权重最大,让我们来定义:

P1=ɛ×P4 (9)

P4=ɛ×P2 (10)

P2=P3=p (11)

因此,可以得出:

(2+ɛ+ɛ2) ×p =1 (12)

所以,如果定义ɛ=2,就有p=1/8,P4=1/4,P1=1/2;如果ɛ=4,p=1/22,P4=2/11,P1=8/11。

我们继续回到树这个例子。比如我现在要做一个决定来识别眼前这个物体到底是不是真正的树,我需要搭建一个决定矩阵A,假设我们凭借5个属性来做决定,包括“不能动”、“有干”、“有枝”、“有叶子”、“叶子是绿的”,那么我们的决定矩阵A就包含5行和5列,每一个矩阵的元素都表示和这5个属性的相关性,比方说第(1,1)个格子指的是“不能动”∩“不能动”,第(1,2)表示“不能动”∩“有树干”等等。每一个矩阵元素的值就是通过关联与该元素相关的两种属性之后的值。其实也就是L×d之后的值。对于一个特定的Aij,每次学习后,其值都是在原基础线性叠加。

Aij := Aij+Lk×d (13)

而后面的累积量,其实就是采用当前关联获得对世界认识的贡献值。比方说对于(1,2)节点,你用“不能动”和“有主干”来确定是不是树,那么第一次你看到树的时候其实是这样,所以你会认为只要这两个都有、都成立的时候对方物体一定是树,所以你得出A12=8/11(ɛ=4)。但是当你第二次看到一个陌生的“灌木”的时候,你发现采用“不能动”和“有主干”其实不能断定那个是树,现实的情况是不是树,判断错误,因此其贡献只有1/22,A12被更新,但是这次的贡献不大。在后续的过程中,我们不断接触新的物体,不断地去关联我们的认识和现实,从而不断地修正A矩阵的各个值。当我们学习的足够多的时候,其实A矩阵就建立起来了。然后以后所做的所有决定都是基于这个矩阵和现实源b。我们现在获得的向量c是一个严格的n×1的向量,其维数是n而不是m,这与之前的讨论是矛盾的。但其实这只是初次的信息转换,有点像程序里面的接口函数。我们把现实数据转换为我们能够识别的“机器语言”。

很明显,矩阵A是实对称矩阵。我们姑且假定它有m个特征值,那么A可以经过矩阵转化变成一个实对角矩阵J,也即除去对角线非零其余都为零,而对角线非零元素只有m个,从1排到m。有m个特征值,就有m个特征向量,也就其所代表的空间是一个m维的投影空间。进一步说,每一个这种特征向量都是代表一个特定方向的坐标轴。如果我们有一个n维的信息源数据,那么逻辑上我们可以把其精简为m维,因为很可能我们有冗余信息。想象一下,我们现在在m维空间里的第一象限,根据信息源的数值画出一个点来,我们观察这个点的位置,发现其居于一个假象的从原点出发的锥形的曲面内,那我们就很自信地说:“树”。如果不在这个曲面内,且离得很远,我们就会说:“不是树”,如果在外面但是离得不远,我们则会说:“不确定”。

怎么定义或获得m维的A矩阵,这其实就是精确定义一个物质属性的所有m维信息,比如什么属性才能表征“树”。提取出来能够精确表征树的属性就是构成A矩阵的所有元素,其权重或大小则代表其贡献。特性的数量即为m,每个特性的权重就是其特征值。也就是说,要判断一个东西是不是树,其实用这些属性就足够了,少则不完备,多则冗余,但是多的比少的好,因为多的可以转化为恰好,少的则不行。


[1]图片来源:

http://www.integratedvisions.net/?ubltangoportfolio=projections-of-sacred-geometry-collaborative-projection-drawings

[2]图片来源:

https://wallup.net/mind-inspiration-numbers-brain-matrix-science-tech-abstract/

[3]图片来源:

https://luminousmen.com/post/data-science-bayes-theorem


作者:郭志鹏

毕业于清华大学(本、博),牛津大学、英国皇家学会研究会员,长期从事数字化工业方面的研究,包括高性能算法、高能X射线检测、图像处理以及相关工业领域的材料和核心工艺开发等,立志创造有国际竞争力的自主化CAE软件,摆脱国际垄断,提升和振兴民族工业水平。

c++矩阵出现奇怪的数_如何理解人们在决策中的“矩阵”运算?相关推荐

  1. 内存映射获取行数_使用内存映射文件获取巨大的矩阵

    内存映射获取行数 总览 矩阵可能真的很大,有时甚至比您可以容纳在一个数组中的要大. 您可以通过具有多个数组来扩展最大大小,但这会使堆大小确实很大且效率低下. 一种替代方法是在内存映射文件上使用包装器. ...

  2. python 矩阵运算 for循环_如何用 Python 科学计算中的矩阵替代循环

    展开全部 因为在Mathematica中使用循环确实是低效的.32313133353236313431303231363533e78988e69d8331333361313961..... 深层次的原 ...

  3. 怎么在python中输入矩阵_如何使用NumPy在Python中实现矩阵?

    矩阵被用作数学工具,在现实世界中有多种用途.在本文中,我们将按照以下顺序讨论Python中关于使用著名的NumPy库的矩阵的所有内容:什么是NumPy以及何时使用它?在NumPy 矩阵被用作数学工具, ...

  4. python 矩阵运算 for循环_如何用Python科学计算中的矩阵替代循环?

    比如求一个平面稳态导热问题,控制方程就是拉普拉斯方程: (我才发现原来有[插入公式]这个功能) 按照最简单的毅种循环来写就是: def laplace(u): nx, ny = u.shape for ...

  5. python计时器timeit返回秒数_一日一技:Python中的timeit()方法

    timeit()方法 python中的timeit()方法, 它用于获取代码的执行时间.该库将代码语句运行一百万次,并提供从集合中花费的最短时间.这是一种有用的方法,有助于检查代码的性能. 语法如下: ...

  6. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数-阿里云开发者社区...

    在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的Javascript去限制TextArea的内容为 ...

  7. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数

    阅读: 1586 评论: 13 作者: 麒麟 发表于 2009-12-21 09:00 原文链接 在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统 ...

  8. java excel 列数_计算Excel工作表列中的行数(提供的Java代码)

    在参考我之前的问题How to calculate number of rows in a column of Excel document using Java时,我能够计算给定表格中的总列数.现在 ...

  9. excel中如何对矩阵得对角线进行求和_如何使用MATLAB对Excel中的多参数进行计算?...

    THE START MATLAB和Excel这两者之间有着什么样的关系呢?今天我把之前学习以及用到的关于用MATLAB读写Excel数据,并进行计算处理的经验分享给需要的小伙伴.参加过数学建模的这个应 ...

最新文章

  1. JDBC_通过DriverManager获得数据库连接
  2. java实现插入排序算法 附单元测试源码
  3. b+树时间复杂度_阿里面试,问了B+树,这个回答让我通过了
  4. PHP页面间参数传递的四种方式
  5. PMP之项目整合管理
  6. 无法定位程序输入点 在.exe上_win7提示explorer.exe应用程序错误的解决方法
  7. android触摸消息的派发过程
  8. 基于短视频的人脸解析比赛
  9. Python中的图书管理系统
  10. 开源游戏《一小时人生》GitHub仓库被删,CEO亲自道歉
  11. nodejs与sqlite
  12. execute()方法
  13. 苹果plus html,iPhoneX 苹果8 8PLus区别:所有功能参数 最详细全面对比
  14. 如何在Ubuntu 20.04上安装和使用Docker
  15. 激活office 2007 的方法
  16. clickhouse配置项config.xml详解——服务器配置参数
  17. 互操作性2.0:奠定公链万亿美元生态的基础设施
  18. 使用Matlab SPM12与MRIcroGL进行头核磁ROI的标准化与Overlap图的制作
  19. (转)用AGG实现高质量图形输出(一)
  20. NLP实战之HAN文本分类

热门文章

  1. 界面设计方法(2)— 5.功能按钮设计(新增,查询)
  2. 基于深度学习的异构时序事件患者数据表示学习框架
  3. 作者:高富平(1963-),男,博士,华东政法大学二级教授、博士生指导小组负责人...
  4. 作者:李超(1988-),男,上海交通大学硕士生,主要研究方向为大数据网络。...
  5. 《大数据》2015年第3期“研究”——社交网络影响力传播研究(上)
  6. 【软件工程】实体类的持久性
  7. 【数据库系统】笛卡尔积与自然连接
  8. 排序分发“魔法照片”(洛谷P1583题题解,Java语言描述)
  9. 【数据结构与算法】比较法分析查找算法与查找结构
  10. jQuery的实现原理和核心