c++矩阵出现奇怪的数_如何理解人们在决策中的“矩阵”运算?
我們如何認識這個世界?我們對世界的認識其實就是世界在我們觀念中的“投影”。
“投影”,原意是把一個三維的物體投射到一個二維的平面,這個平面上的形狀就是投影。因此,人們對事情的認識,其實都是這件事在他那個世界“平面”的投影。這個平面不是我們熟知的二維平面,而是綜合了所有參數的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++矩阵出现奇怪的数_如何理解人们在决策中的“矩阵”运算?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: value数字 vue_基于Vue开发数
- 下一篇: copyof java_死磕 java集