03.知識不是樹:高重疊知識空間中的路徑問題
系列:《從路徑覆蓋到行星智能:記憶編譯型計算存在論》 部別:第一部——搜尋、記憶與路徑覆蓋 版本:v0.1 日期:2026-08-01
摘要
許多搜尋問題習慣以樹來表示:從一個根節點開始,每一步產生若干分支,直到找到答案。然而對知識、推理、規劃與長期智能體而言,樹往往只是「展開過程」的表面表示,而不是底層狀態空間本身。真實知識結構通常具有多重父節點、交叉連結、循環、平行關係、局部重合、同一狀態的多路徑抵達,以及不同表面表示之間的結構等價。若把這類空間強行展開成樹,同一個底層狀態可能被複製成大量不同樹節點,進而使搜尋系統把「路徑數量」誤認為「新知識數量」。
本文以圖論、商空間、路徑重疊與泛函表示為基礎,提出「高重疊知識空間」的最小模型。本文區分節點重複、邊重複、局部路徑重複、終點重複與結構重複,並說明為什麼真正需要覆蓋的對象可能不是所有表面路徑,而是狀態、關係、局部結構與等價類。進一步地,本文引入路徑投影、重疊核與商圖的概念,為下一篇「從路徑數量到有效覆蓋率」建立形式基礎。
關鍵詞: 知識圖譜、圖論、路徑覆蓋、結構重複、商圖、等價類、循環、知識空間、狀態空間、記憶去重
1.樹是一種很好的搜尋表示,但不是世界本身
對一個具有分支的問題,我們常畫成:
v 0 → { v 1 , v 2 , … , v b } v_0
\rightarrow
\{v_1,v_2,\ldots,v_b\} v 0 → { v 1 , v 2 , … , v b }
接著每個節點繼續向下展開:
v i → { v i 1 , v i 2 , … } v_i
\rightarrow
\{v_{i1},v_{i2},\ldots\} v i → { v i 1 , v i 2 , … }
於是形成一棵搜尋樹:
T = ( V T , E T ) T=(V_T,E_T) T = ( V T , E T )
這種表示非常自然。
因為它清楚展示:
但樹具有一個非常強的結構限制:
任意兩個節點之間只有唯一的簡單路徑。
也就是說,若某節點已經在一個父節點之下出現,它不會再以同一個圖節點同時屬於另一個父節點。
對真正的知識空間而言,這通常不成立。
例如某個概念 c c c 可能同時由:
a → c a\rightarrow c a → c
與:
b → c b\rightarrow c b → c
兩條路抵達。
若仍要畫成樹,就必須複製:
c ( 1 ) , c ( 2 ) c^{(1)},c^{(2)} c ( 1 ) , c ( 2 )
於是表面上看起來像兩個不同節點:
a → c ( 1 ) a\rightarrow c^{(1)} a → c ( 1 )
b → c ( 2 ) b\rightarrow c^{(2)} b → c ( 2 )
但底層其實是:
c ( 1 ) ≡ c ( 2 ) ≡ c c^{(1)}\equiv c^{(2)}\equiv c c ( 1 ) ≡ c ( 2 ) ≡ c
因此:
搜尋樹中的節點數量,可以大於底層真實狀態數量。 \boxed{
\text{搜尋樹中的節點數量,可以大於底層真實狀態數量。}
} 搜尋樹中的節點數量,可以大於底層真實狀態數量。
2.樹展開會把「多路徑抵達」複製成「多個狀態」
設底層狀態空間是圖:
G = ( V , E ) G=(V,E) G = ( V , E )
從根節點 r r r 出發,可以存在兩條不同路徑:
p 1 : r → a → c p_1:
r\rightarrow a\rightarrow c p 1 : r → a → c
與:
p 2 : r → b → c p_2:
r\rightarrow b\rightarrow c p 2 : r → b → c
如果把搜尋歷史展開成樹,常會得到:
r → { a → c 1 b → c 2 r
\rightarrow
\begin{cases}
a\rightarrow c_1\\
b\rightarrow c_2
\end{cases} r → { a → c 1 b → c 2
其中:
c 1 ≠ c 2 c_1\neq c_2 c 1 = c 2
作為「樹節點」是不同的;
但:
π ( c 1 ) = π ( c 2 ) = c \pi(c_1)=\pi(c_2)=c π ( c 1 ) = π ( c 2 ) = c
其中 π \pi π 是從搜尋樹映射到底層狀態圖的投影。
因此可以把搜尋樹理解為:
π : T → G \pi:T\rightarrow G π : T → G
而且通常:
∣ π − 1 ( v ) ∣ ≥ 1 |\pi^{-1}(v)|\geq1 ∣ π − 1 ( v ) ∣ ≥ 1
某些底層狀態可能有非常多個樹中的副本。
若:
∣ π − 1 ( v ) ∣ ≫ 1 |\pi^{-1}(v)|\gg1 ∣ π − 1 ( v ) ∣ ≫ 1
表示很多不同搜尋歷史其實反覆抵達同一個底層狀態。
這是本系列所說「高重疊」的第一個來源。
3.知識空間更適合表示成圖,而不是樹
最簡單的知識圖可以寫成:
G K = ( V K , E K ) G_K=(V_K,E_K) G K = ( V K , E K )
其中:
V K V_K V K :概念、命題、狀態、事件、模型或知識單元;
E K E_K E K :它們之間的關係。
若關係具有方向:
E K ⊆ V K × V K E_K\subseteq V_K\times V_K E K ⊆ V K × V K
則可以使用有向圖。
若同一對節點之間存在多種關係:
u → r 1 v u\xrightarrow{r_1}v u r 1 v
u → r 2 v u\xrightarrow{r_2}v u r 2 v
則更接近多重有向圖。
若一條關係同時涉及多個節點:
e = ( v 1 , v 2 , … , v k ) e=(v_1,v_2,\ldots,v_k) e = ( v 1 , v 2 , … , v k )
則可以進一步使用超圖。
這也符合知識圖譜的一般思想:將實體或概念表示為節點,將它們的關係表示為邊,並允許在圖上進行關係推理、補全與路徑推斷。
所以本文不主張:
所有知識都必須是普通圖 \text{所有知識都必須是普通圖} 所有知識都必須是普通圖
而是主張:
知識至少需要允許非樹狀關係。 \boxed{
\text{知識至少需要允許非樹狀關係。}
} 知識至少需要允許非樹狀關係。
4.第一種重複:節點重複
最簡單的情況是:
兩條不同路徑抵達同一節點:
p 1 : a → b → z p_1:
a\rightarrow b\rightarrow z p 1 : a → b → z
p 2 : a → c → z p_2:
a\rightarrow c\rightarrow z p 2 : a → c → z
此時:
end ( p 1 ) = end ( p 2 ) = z \operatorname{end}(p_1)
=
\operatorname{end}(p_2)
=
z end ( p 1 ) = end ( p 2 ) = z
如果 z z z 後方還有一整片子圖:
G z G_z G z
而搜尋系統不知道兩個 z z z 是同一狀態,就可能把:
G z G_z G z
完整搜尋兩次。
若同一狀態有 k k k 條抵達路徑,則最壞情況下:
同一後繼區域被重複展開 k 次 \text{同一後繼區域被重複展開 }k\text{ 次} 同一後繼區域被重複展開 k 次
所以最基礎的 visited set、memoization、transposition table 等機制,其核心作用就是:
辨認「不同路徑是否已經抵達同一狀態」。 \boxed{
\text{辨認「不同路徑是否已經抵達同一狀態」。}
} 辨認「不同路徑是否已經抵達同一狀態」。
5.第二種重複:邊與關係重複
兩條路徑也可能不是共用完整節點集合,而只是共用某些轉換:
p 1 = ( a , b , c , d ) p_1=
(a,b,c,d) p 1 = ( a , b , c , d )
p 2 = ( x , b , c , y ) p_2=
(x,b,c,y) p 2 = ( x , b , c , y )
它們共享:
b → c b\rightarrow c b → c
如果:
b → c b\rightarrow c b → c
代表一個昂貴推理、轉換、證明步驟或模擬程序,那麼第二次重新計算它可能完全沒有必要。
因此,重用單位不一定是:
完整答案 \text{完整答案} 完整答案
也可以是:
局部邊 \text{局部邊} 局部邊
或:
局部轉換算子 \text{局部轉換算子} 局部轉換算子
這使記憶的粒度從「整題記住」進一步細化到:
可重用的局部狀態轉換 \boxed{
\text{可重用的局部狀態轉換}
} 可重用的局部狀態轉換
6.第三種重複:局部路徑重複
更一般地,兩條路徑可能共享一整段:
p 1 = ( a , b , c , d , e ) p_1=
(a,b,c,d,e) p 1 = ( a , b , c , d , e )
p 2 = ( x , b , c , d , y ) p_2=
(x,b,c,d,y) p 2 = ( x , b , c , d , y )
共有子路徑:
q = ( b , c , d ) q=(b,c,d) q = ( b , c , d )
可以定義:
q ⪯ p 1 q\preceq p_1 q ⪯ p 1
且:
q ⪯ p 2 q\preceq p_2 q ⪯ p 2
如果這類局部重疊大量存在,那麼路徑集合:
P = { p 1 , p 2 , … , p N } \mathcal P=
\{p_1,p_2,\ldots,p_N\} P = { p 1 , p 2 , … , p N }
的總長度:
∑ i = 1 N ∣ p i ∣ \sum_{i=1}^{N}|p_i| i = 1 ∑ N ∣ p i ∣
會遠大於它們真正包含的獨特結構總量。
因此:
路徑總長度不是知識總量。 \boxed{
\text{路徑總長度不是知識總量。}
} 路徑總長度不是知識總量。
這一點非常重要。
7.第四種重複:終點相同,但中間歷史不同
有些不同路徑完全沒有共享中間節點,卻得到同一結果:
p 1 : a → b → c → z p_1:
a\rightarrow b\rightarrow c\rightarrow z p 1 : a → b → c → z
p 2 : a → x → y → z p_2:
a\rightarrow x\rightarrow y\rightarrow z p 2 : a → x → y → z
這時不能簡單說其中一條「沒有價值」。
因為兩條路可能:
使用不同證明方法;
具有不同成本;
對不同條件更穩健;
提供不同中間知識;
在某些故障下可以互相備援。
所以:
end ( p 1 ) = end ( p 2 ) \operatorname{end}(p_1)
=
\operatorname{end}(p_2) end ( p 1 ) = end ( p 2 )
並不推出:
p 1 ∼ p 2 p_1\sim p_2 p 1 ∼ p 2
我們需要更細的等價定義。
也就是:
兩條路徑在什麼意義下才算「重複」?
8.第五種重複:表面不同,但結構等價
這是最困難的一種。
例如兩條路徑:
p 1 = ( v 1 , v 2 , v 3 , v 4 ) p_1=
(v_1,v_2,v_3,v_4) p 1 = ( v 1 , v 2 , v 3 , v 4 )
p 2 = ( u 1 , u 2 , u 3 , u 4 ) p_2=
(u_1,u_2,u_3,u_4) p 2 = ( u 1 , u 2 , u 3 , u 4 )
表面上:
v i ≠ u i v_i\neq u_i v i = u i
甚至來自完全不同領域。
但可能存在某個結構保持映射:
ϕ : v i ↦ u i \phi:v_i\mapsto u_i ϕ : v i ↦ u i
使得:
( v i , v j ) ∈ E ⟺ ( ϕ ( v i ) , ϕ ( v j ) ) ∈ E ′ (v_i,v_j)\in E
\iff
(\phi(v_i),\phi(v_j))\in E' ( v i , v j ) ∈ E ⟺ ( ϕ ( v i ) , ϕ ( v j )) ∈ E ′
那麼兩條路徑可能具有同一種關係骨架。
例如:
一個控制系統的負回饋;
一個生物系統的抑制調節;
一個市場中的價格回調;
一個軟體系統中的錯誤校正。
它們的語義材料不同,但在某個抽象層可能共享:
偏離 → 偵測 → 反向作用 → 回到穩定區 \text{偏離}
\rightarrow
\text{偵測}
\rightarrow
\text{反向作用}
\rightarrow
\text{回到穩定區} 偏離 → 偵測 → 反向作用 → 回到穩定區
此時,單純用字面相似度或節點 ID 去重是無效的。
真正需要辨認的是:
結構重複 \boxed{
\text{結構重複}
} 結構重複
9.因此必須引入等價關係
設路徑集合為:
P \mathcal P P
定義一個等價關係:
p i ∼ p j p_i\sim p_j p i ∼ p j
表示:
在目前研究目的與抽象尺度下, p i p_i p i 與 p j p_j p j 可以被視為同一類結構。
若 ∼ \sim ∼ 滿足:
p ∼ p p\sim p p ∼ p
p i ∼ p j ⇒ p j ∼ p i p_i\sim p_j
\Rightarrow
p_j\sim p_i p i ∼ p j ⇒ p j ∼ p i
以及:
p i ∼ p j , p j ∼ p k ⇒ p i ∼ p k p_i\sim p_j,\;
p_j\sim p_k
\Rightarrow
p_i\sim p_k p i ∼ p j , p j ∼ p k ⇒ p i ∼ p k
則可形成等價類:
[ p ] = { q ∈ P : q ∼ p } [p]
=
\{q\in\mathcal P:q\sim p\} [ p ] = { q ∈ P : q ∼ p }
於是我們不再只看:
∣ P ∣ |\mathcal P| ∣ P ∣
而開始看:
∣ P / ∼ ∣ |\mathcal P/{\sim}| ∣ P / ∼ ∣
也就是表面路徑被壓縮後,真正不同的結構類別數量。
10.從路徑集合到商空間
這一步是整個系列的重要轉折。
若大量知識片段只是在表面上不同,而在某個任務尺度下具有等價結構,那麼真正需要覆蓋的對象可以從:
P \mathcal P P
改成:
P / ∼ \mathcal P/{\sim} P / ∼
類似地,若節點本身存在等價關係:
u ∼ V v u\sim_V v u ∼ V v
則可將節點集合壓縮成:
V / ∼ V V/{\sim_V} V / ∼ V
並形成商圖:
G / ∼ V G/{\sim_V} G / ∼ V
商圖中的每一個節點代表一整個等價類,而不是單一原始狀態。
因此:
高效覆蓋的第一步,可能不是走更多路,而是先決定哪些路其實屬於同一類。 \boxed{
\text{高效覆蓋的第一步,可能不是走更多路,而是先決定哪些路其實屬於同一類。}
} 高效覆蓋的第一步,可能不是走更多路,而是先決定哪些路其實屬於同一類。
11.但等價關係永遠依賴目的
不能把:
p i ∼ p j p_i\sim p_j p i ∼ p j
理解成絕對真理。
同一對路徑可能:
在粗尺度下:
p i ∼ p j p_i\sim p_j p i ∼ p j
但在細尺度下:
p i ≁ p j p_i\not\sim p_j p i ∼ p j
例如兩個演算法都能排序。
若研究目標只是:
輸入集合 → 輸出有序集合 \text{輸入集合}
\rightarrow
\text{輸出有序集合} 輸入集合 → 輸出有序集合
它們可能被歸為同一功能類。
但若研究:
時間複雜度;
空間需求;
穩定性;
平行化;
資料分布敏感性;
那麼兩者又必須分開。
因此更準確地寫成:
p i ∼ θ p j p_i\sim_{\theta}p_j p i ∼ θ p j
其中 θ \theta θ 是:
任務 + 尺度 + 關注變數 + 容忍誤差 \text{任務}
+
\text{尺度}
+
\text{關注變數}
+
\text{容忍誤差} 任務 + 尺度 + 關注變數 + 容忍誤差
所以「去重」本身其實也是一個智能判斷問題。
12.知識圖不是靜態圖,而可能是時間圖
如果知識、環境與策略會改變,那麼:
G t = ( V t , E t , W t ) G_t=(V_t,E_t,W_t) G t = ( V t , E t , W t )
會隨時間演化。
某個關係在 t 1 t_1 t 1 成立:
( u , v ) ∈ E t 1 (u,v)\in E_{t_1} ( u , v ) ∈ E t 1
不代表它在 t 2 t_2 t 2 仍成立:
( u , v ) ∉ E t 2 (u,v)\notin E_{t_2} ( u , v ) ∈ / E t 2
某個路徑以前有效:
p ∈ P t 1 v a l i d p\in\mathcal P_{t_1}^{\mathrm{valid}} p ∈ P t 1 valid
後來可能失效:
p ∉ P t 2 v a l i d p\notin\mathcal P_{t_2}^{\mathrm{valid}} p ∈ / P t 2 valid
這意味著記憶系統不能只問:
我以前看過嗎?
還必須問:
我以前看過的這個結構,現在仍然有效嗎?
所以路徑記憶至少要帶有:
時間 + 條件 + 適用範圍 \text{時間}
+
\text{條件}
+
\text{適用範圍} 時間 + 條件 + 適用範圍
這也為後續「狀態索引」埋下基礎。
13.知識圖也可能是多層圖
同一組節點可以同時存在不同類型的邊:
E = E c a u s a l ∪ E s e m a n t i c ∪ E t e m p o r a l ∪ E p r o c e d u r a l ∪ E s i m i l a r i t y E=
E_{\mathrm{causal}}
\cup
E_{\mathrm{semantic}}
\cup
E_{\mathrm{temporal}}
\cup
E_{\mathrm{procedural}}
\cup
E_{\mathrm{similarity}} E = E causal ∪ E semantic ∪ E temporal ∪ E procedural ∪ E similarity
例如兩個概念之間可能同時存在:
因果關係;
相似關係;
時序關係;
包含關係;
推導關係。
因此一條知識路徑真正應寫成:
p = ( v 0 , r 1 , v 1 , r 2 , v 2 , … , r n , v n ) p=
(v_0,r_1,v_1,r_2,v_2,\ldots,r_n,v_n) p = ( v 0 , r 1 , v 1 , r 2 , v 2 , … , r n , v n )
其中 r i r_i r i 表示關係類型。
這比單純:
( v 0 , v 1 , … , v n ) (v_0,v_1,\ldots,v_n) ( v 0 , v 1 , … , v n )
保留更多結構資訊。
而當關係類型不同,即使節點序列相同:
( v 0 , v 1 , v 2 ) (v_0,v_1,v_2) ( v 0 , v 1 , v 2 )
兩條路徑仍可能不是同一條知識路徑。
14.高重疊知識空間的最小模型
現在可以定義一個簡化的高重疊知識空間:
K = ( G , P , ∼ , ω ) \mathfrak K=
(G,\mathcal P,\sim,\omega) K = ( G , P , ∼ , ω )
其中:
G = ( V , E ) G=(V,E) G = ( V , E )
是底層知識圖;
P \mathcal P P
是可行知識路徑集合;
∼ \sim ∼
是依照任務尺度定義的結構等價關係;
ω \omega ω
則描述節點、邊或路徑之間的重疊程度。
例如定義兩條路徑的節點重疊率:
O V ( p i , p j ) = ∣ V ( p i ) ∩ V ( p j ) ∣ ∣ V ( p i ) ∪ V ( p j ) ∣ O_V(p_i,p_j)
=
\frac{|V(p_i)\cap V(p_j)|}
{|V(p_i)\cup V(p_j)|} O V ( p i , p j ) = ∣ V ( p i ) ∪ V ( p j ) ∣ ∣ V ( p i ) ∩ V ( p j ) ∣
以及邊重疊率:
O E ( p i , p j ) = ∣ E ( p i ) ∩ E ( p j ) ∣ ∣ E ( p i ) ∪ E ( p j ) ∣ O_E(p_i,p_j)
=
\frac{|E(p_i)\cap E(p_j)|}
{|E(p_i)\cup E(p_j)|} O E ( p i , p j ) = ∣ E ( p i ) ∪ E ( p j ) ∣ ∣ E ( p i ) ∩ E ( p j ) ∣
則可以組合為:
O ( p i , p j ) = α O V ( p i , p j ) + β O E ( p i , p j ) + γ O S ( p i , p j ) O(p_i,p_j)
=
\alpha O_V(p_i,p_j)
+
\beta O_E(p_i,p_j)
+
\gamma O_S(p_i,p_j) O ( p i , p j ) = α O V ( p i , p j ) + β O E ( p i , p j ) + γ O S ( p i , p j )
其中 O S O_S O S 是結構相似度。
這不是唯一的定義,只是一個最小骨架。
15.路徑數量可以呈爆炸,但有效結構未必同步爆炸
假設搜尋深度為 d d d ,平均分支數為 b b b 。
樹展開可能產生:
N t r e e ∼ b d N_{\mathrm{tree}}
\sim
b^d N tree ∼ b d
個路徑前綴。
但若大量前綴映射到相同底層狀態:
π : T → G \pi:T\rightarrow G π : T → G
則底層唯一狀態數可能只有:
N s t a t e ≪ N t r e e N_{\mathrm{state}}
\ll
N_{\mathrm{tree}} N state ≪ N tree
若再將結構等價類壓縮:
N c l a s s = ∣ V / ∼ ∣ N_{\mathrm{class}}
=
|V/{\sim}| N class = ∣ V / ∼ ∣
則甚至可能:
N c l a s s ≪ N s t a t e ≪ N t r e e N_{\mathrm{class}}
\ll
N_{\mathrm{state}}
\ll
N_{\mathrm{tree}} N class ≪ N state ≪ N tree
因此我們得到三種完全不同的「大小」:
N t r e e , N s t a t e , N c l a s s \boxed{
N_{\mathrm{tree}},
\quad
N_{\mathrm{state}},
\quad
N_{\mathrm{class}}
} N tree , N state , N class
它們分別代表:
展開歷史的大小;
底層狀態空間的大小;
任務尺度下不可再合併的結構類數量。
這三者不能混為一談。
16.這也是為什麼「全面覆蓋」不能直接理解為走完所有路徑
如果要求:
遍歷所有表面路徑 \text{遍歷所有表面路徑} 遍歷所有表面路徑
在有循環的圖中,甚至可能不存在有限終點。
例如:
a → b → c → a a\rightarrow b\rightarrow c\rightarrow a a → b → c → a
如果允許 walk 重複節點,則可以產生:
a → b → c → a a\rightarrow b\rightarrow c\rightarrow a a → b → c → a
a → b → c → a → b a\rightarrow b\rightarrow c\rightarrow a\rightarrow b a → b → c → a → b
a → b → c → a → b → c a\rightarrow b\rightarrow c\rightarrow a\rightarrow b\rightarrow c a → b → c → a → b → c
以及無限延長的序列。
所以:
∣ W ∣ = ∞ |\mathcal W|=\infty ∣ W ∣ = ∞
即使底層圖:
∣ V ∣ < ∞ |V|<\infty ∣ V ∣ < ∞
因此:
全面覆蓋 ≠ 列舉所有可能 walk。 \boxed{
\text{全面覆蓋}
\neq
\text{列舉所有可能 walk。}
} 全面覆蓋 = 列舉所有可能 walk 。
更合理的覆蓋對象可能是:
所有節點;
所有邊;
所有重要局部結構;
所有等價類;
所有高價值狀態轉換;
所有尚未被解釋的殘差方向。
第四篇將正式處理這個問題。
17.用泛函分析理解「重疊知識」
除了圖論,也可以把知識片段表示為某個內積空間中的元素:
ϕ i ∈ H \phi_i\in\mathcal H ϕ i ∈ H
若兩個知識片段完全不相關,理想化地可以有:
⟨ ϕ i , ϕ j ⟩ ≈ 0 \langle\phi_i,\phi_j\rangle\approx0 ⟨ ϕ i , ϕ j ⟩ ≈ 0
若高度重複,則:
∣ ⟨ ϕ i , ϕ j ⟩ ∣ |\langle\phi_i,\phi_j\rangle| ∣ ⟨ ϕ i , ϕ j ⟩ ∣
較大。
定義 Gram 矩陣:
G i j = ⟨ ϕ i , ϕ j ⟩ G_{ij}
=
\langle\phi_i,\phi_j\rangle G ij = ⟨ ϕ i , ϕ j ⟩
若大量知識片段高度線性相關,則即使:
N ≫ 1 N\gg1 N ≫ 1
有效張成維度仍可能很低:
dim span { ϕ 1 , … , ϕ N } ≪ N \dim
\operatorname{span}
\{\phi_1,\ldots,\phi_N\}
\ll
N dim span { ϕ 1 , … , ϕ N } ≪ N
這提供另一個理解方式:
一百萬個知識碎片,不代表有一百萬個獨立知識方向。
18.新的知識價值可以看成對既有子空間的殘差
設目前已覆蓋的知識子空間為:
S t = span { ϕ 1 , … , ϕ t } \mathcal S_t
=
\operatorname{span}
\{\phi_1,\ldots,\phi_t\} S t = span { ϕ 1 , … , ϕ t }
新知識候選為:
ϕ \phi ϕ
投影到既有空間:
Π S t ϕ \Pi_{\mathcal S_t}\phi Π S t ϕ
則真正不能被現有知識表示的部分是:
ϕ ⊥ = ϕ − Π S t ϕ \phi^\perp
=
\phi-\Pi_{\mathcal S_t}\phi ϕ ⊥ = ϕ − Π S t ϕ
其大小:
∥ ϕ ⊥ ∥ \|\phi^\perp\| ∥ ϕ ⊥ ∥
可以被理解為一種「新增方向量」。
如果:
∥ ϕ ⊥ ∥ ≈ 0 \|\phi^\perp\|\approx0 ∥ ϕ ⊥ ∥ ≈ 0
那麼這個新碎片大部分只是已有知識的重新表述。
如果:
∥ ϕ ⊥ ∥ ≫ 0 \|\phi^\perp\|\gg0 ∥ ϕ ⊥ ∥ ≫ 0
則它開啟了新的方向。
這就是第四篇「邊際覆蓋收益」的一個自然數學入口。
19.圖論重疊與泛函重疊不是同一件事
這裡必須避免偷換概念。
圖論中的:
p i ∩ p j p_i\cap p_j p i ∩ p j
描述節點或邊是否重合。
泛函空間中的:
⟨ ϕ i , ϕ j ⟩ \langle\phi_i,\phi_j\rangle ⟨ ϕ i , ϕ j ⟩
描述某種表示下的相似或相關程度。
兩者不是同一個量。
因此可以把高重疊至少拆成:
O t o p o l o g y O_{\mathrm{topology}} O topology
拓撲/圖結構重疊;
O s e m a n t i c O_{\mathrm{semantic}} O semantic
語義重疊;
O f u n c t i o n a l O_{\mathrm{functional}} O functional
功能重疊;
O c a u s a l O_{\mathrm{causal}} O causal
因果結構重疊。
最後形成多尺度重疊向量:
O = ( O t o p o l o g y , O s e m a n t i c , O f u n c t i o n a l , O c a u s a l ) \mathbf O
=
(
O_{\mathrm{topology}},
O_{\mathrm{semantic}},
O_{\mathrm{functional}},
O_{\mathrm{causal}}
) O = ( O topology , O semantic , O functional , O causal )
這比單一「相似度」更適合後續的智能分類。
20.重複不一定是垃圾
高重疊也不代表所有重複都應被刪除。
某些重複具有功能價值。
例如:
20.1 冗餘可以提供驗證
兩條獨立路徑得到相同結果:
p 1 → z p_1\rightarrow z p 1 → z
p 2 → z p_2\rightarrow z p 2 → z
可能提高對 z z z 的信心。
20.2 冗餘可以提供容錯
如果:
p 1 p_1 p 1
失效,仍有:
p 2 p_2 p 2
可用。
20.3 不同路徑可能揭示不同中間結構
即使終點相同:
end ( p 1 ) = end ( p 2 ) \operatorname{end}(p_1)=\operatorname{end}(p_2) end ( p 1 ) = end ( p 2 )
中間知識價值仍不同。
20.4 重複可以估計穩定性
若多個條件、資料集或起點都導向同一結構,這本身就是新資訊。
所以:
高效去重不是刪掉所有重複,而是區分「無效重算」與「有價值冗餘」。 \boxed{
\text{高效去重不是刪掉所有重複,而是區分「無效重算」與「有價值冗餘」。}
} 高效去重不是刪掉所有重複,而是區分「無效重算」與「有價值冗餘」。
21.因此需要「覆蓋」而不是「去重」作為更高層目標
若只追求去重,系統可能刪掉必要的:
驗證路徑;
替代策略;
容錯結構;
證據獨立性;
不同機制。
真正合理的目標應該是:
Coverage \text{Coverage} Coverage
而不是單純:
Deduplication \text{Deduplication} Deduplication
去重只是工具。
覆蓋才是目的。
於是問題從:
這條路以前走過嗎?
提升為:
這條路相對於現在已有的知識,還增加了什麼不可替代結構?
這正是下一篇的核心。
22.高重疊知識空間中的快速通道
當系統辨認出:
p 1 , p 2 , … , p k p_1,p_2,\ldots,p_k p 1 , p 2 , … , p k
其實都共享某個公共中間結構:
q q q
就不必每次從起點重走完整路徑。
可以建立:
入口 → q → 後續分支 \text{入口}
\rightarrow
q
\rightarrow
\text{後續分支} 入口 → q → 後續分支
也就是快速通道。
更一般地,若某個子圖:
H ⊆ G H\subseteq G H ⊆ G
已經被充分理解,就可以把 H H H 壓縮成一個宏節點:
[ H ] [H] [ H ]
從:
G G G
形成更高階圖:
G ′ G' G ′
這相當於把已經探索成熟的知識區域「編譯」成可快速調用的模組。
因此:
路徑壓縮是記憶編譯的前身。 \boxed{
\text{路徑壓縮是記憶編譯的前身。}
} 路徑壓縮是記憶編譯的前身。
23.知識空間會形成階層式壓縮
假設原始圖為:
G 0 G_0 G 0
經過局部聚類與等價壓縮:
G 0 → G 1 G_0
\rightarrow
G_1 G 0 → G 1
再將成熟結構繼續抽象:
G 1 → G 2 G_1
\rightarrow
G_2 G 1 → G 2
最終得到多尺度表示:
G 0 → G 1 → ⋯ → G L G_0
\rightarrow
G_1
\rightarrow
\cdots
\rightarrow
G_L G 0 → G 1 → ⋯ → G L
其中:
G 0 G_0 G 0 :細粒度事件與知識碎片;
G 1 G_1 G 1 :局部模式;
G 2 G_2 G 2 :問題族;
G 3 G_3 G 3 :高階結構;
G L G_L G L :少量非常抽象的狀態類型。
面對問題時,智能體不必永遠從 G 0 G_0 G 0 搜尋。
可以先在:
G L G_L G L
完成粗定位,再逐層下降。
這就是未來「極致分類—快速索引」最自然的結構。
24.記憶在高重疊圖中的真正作用
前一篇將記憶能力記為:
μ \mu μ
回憶能力記為:
ρ \rho ρ
現在可以更準確理解兩者。
記憶不只是保存:
V V V
還需要保存:
E E E
以及:
哪些路徑其實共享結構 \text{哪些路徑其實共享結構} 哪些路徑其實共享結構
因此真正的記憶結構更接近:
M t = ( G t , ∼ t , P t , S t ) \mathcal M_t=
(G_t,\sim_t,\mathcal P_t,\mathcal S_t) M t = ( G t , ∼ t , P t , S t )
其中:
G t G_t G t :已知狀態與關係;
∼ t \sim_t ∼ t :目前辨認出的等價關係;
P t \mathcal P_t P t :重要歷史路徑;
S t \mathcal S_t S t :壓縮後的高階結構。
這種記憶不只是「存檔」。
它本身就是一張持續重組的搜尋地圖。
25.高重疊會使「記憶越多越有價值」成為可能
在完全獨立的候選空間中:
x i ⊥ x j x_i\perp x_j x i ⊥ x j
記住 x i x_i x i 幾乎不能幫助處理 x j x_j x j 。
但在高度重疊空間中:
O ( x i , x j ) ≫ 0 O(x_i,x_j)\gg0 O ( x i , x j ) ≫ 0
記住一個狀態或路徑,可能同時降低大量鄰近問題的成本。
也就是:
Δ M ( x i ) \Delta M(x_i) Δ M ( x i )
帶來的收益不只作用於 x i x_i x i ,還可能作用於:
N ( x i ) N(x_i) N ( x i )
即一整片鄰域。
因此:
知識越高度重疊,好的記憶與分類系統越可能產生超線性的重用收益。 \boxed{
\text{知識越高度重疊,好的記憶與分類系統越可能產生超線性的重用收益。}
} 知識越高度重疊,好的記憶與分類系統越可能產生超線性的重用收益。
這也是後面「極強記憶智能體」為什麼值得獨立討論。
26.但高重疊同時也帶來錯誤類比風險
如果:
O ( x i , x j ) O(x_i,x_j) O ( x i , x j )
很高,系統可能過早判定:
x i ∼ x j x_i\sim x_j x i ∼ x j
但真正決定行動的某個細微變數:
z k z_k z k
其實不同。
於是:
高相似 ⇏ 策略等價 \text{高相似}
\not\Rightarrow
\text{策略等價} 高相似 ⇒ 策略等價
這是非常重要的風險。
所以等價關係最好不是:
x i ∼ x j x_i\sim x_j x i ∼ x j
單一布林值,而可能是:
P ( x i ∼ θ x j ) P(x_i\sim_\theta x_j) P ( x i ∼ θ x j )
或者帶有置信度與適用條件。
這樣未來遇到邊界案例時,系統才能知道:
這是一個「看起來很像」但仍值得重新展開的狀態。
27.本系列所說的「知識碎片」現在可以正式重寫
原本直覺上的:
碎片片 \text{碎片片} 碎片片
可以被寫成:
F = { f 1 , f 2 , … , f N } \mathcal F=
\{f_1,f_2,\ldots,f_N\} F = { f 1 , f 2 , … , f N }
但這些碎片不是孤立集合。
它們透過關係:
R ( f i , f j ) R(f_i,f_j) R ( f i , f j )
形成圖:
G F = ( F , R ) G_{\mathcal F}
=
(\mathcal F,R) G F = ( F , R )
而每一個新的推理、閱讀、計算或行動,都可能:
新增節點;
新增邊;
合併等價節點;
發現新路徑;
壓縮成熟子圖;
推翻舊關係;
建立跨區域橋樑。
所以知識增長不是:
N → N + 1 N\rightarrow N+1 N → N + 1
而更接近:
G t → G t + 1 G_t\rightarrow G_{t+1} G t → G t + 1
這就是「知識空間」比「知識列表」更精確的原因。
28.本文的核心命題
本文可以收斂成四個命題。
命題一:搜尋樹不是底層狀態空間
T ≠ G \boxed{
T\neq G
} T = G
搜尋樹可以是圖的歷史展開,但會複製多路徑抵達的相同狀態。
命題二:路徑數量不等於獨立知識量
∣ P ∣ ∝̸ Independent Knowledge \boxed{
|\mathcal P|
\not\propto
\text{Independent Knowledge}
} ∣ P ∣ ∝ Independent Knowledge
尤其在高重疊空間中,路徑數可能遠大於有效結構數。
命題三:真正的去重需要任務依賴的結構等價
p i ∼ θ p j \boxed{
p_i\sim_\theta p_j
} p i ∼ θ p j
其中 θ \theta θ 決定什麼差異重要、什麼差異可以忽略。
命題四:高效覆蓋應作用於商空間與殘差,而不是原始路徑總數
也就是從:
P \mathcal P P
逐步轉向:
P / ∼ \mathcal P/{\sim} P / ∼
以及:
ϕ − Π S ϕ \phi-\Pi_{\mathcal S}\phi ϕ − Π S ϕ
真正關注不可被既有結構替代的部分。
29.結論:真正昂貴的不是路多,而是不知道哪些路其實已經走過
如果每一條路徑都完全獨立,那麼大量路徑確實只能依靠更強計算逐一處理。
但若知識空間具有:
大量交叉;
多路徑抵達;
局部共用;
循環;
結構等價;
跨領域同構;
時間演化;
那麼真正的問題就不再只是:
如何更快展開? \text{如何更快展開?} 如何更快展開?
而是:
如何知道新的展開究竟增加了多少真正的新結構? \boxed{
\text{如何知道新的展開究竟增加了多少真正的新結構?}
} 如何知道新的展開究竟增加了多少真正的新結構?
因此,下一篇將不再計算:
走過幾條路 \text{走過幾條路} 走過幾條路
而開始計算:
每一條新路徑帶來多少邊際有效覆蓋。 \boxed{
\text{每一條新路徑帶來多少邊際有效覆蓋。}
} 每一條新路徑帶來多少邊際有效覆蓋。
也就是第四篇:
《從路徑數量到有效覆蓋率》
的核心問題。
參考資料
Ji, S., Pan, S., Cambria, E., Marttinen, P., & Yu, P. S., A Survey on Knowledge Graphs: Representation, Acquisition and Applications , IEEE Transactions on Neural Networks and Learning Systems / arXiv:2002.00388.https://arxiv.org/abs/2002.00388
NetworkX Documentation, Directed Acyclic Graphs .https://networkx.org/documentation/stable/reference/algorithms/dag.html
NetworkX Documentation, Cycles .https://networkx.org/documentation/stable/reference/algorithms/cycles.html
NetworkX Documentation, Quotient Graph .https://networkx.org/documentation/networkx-2.6/reference/algorithms/generated/networkx.algorithms.minors.quotient_graph.html
NIST, Graph Theory / Tree discussion , Special Publication 958.https://nvlpubs.nist.gov/nistpubs/sp958-lide/html/140-144.html
系列內部依賴
前置: 01《知道答案之後,真的就容易了嗎?》、02《暴力窮舉不只需要計算力》後續: 04《從路徑數量到有效覆蓋率》、06《記憶編譯型狀態智能體》、07《極致分類、快速索引與計算直覺》。
一句話摘要
高重疊知識空間中,真正需要計算的不是「有多少表面路徑」,而是「還有多少不可由既有結構替代的路徑類與殘差方向」。 \boxed{
\text{高重疊知識空間中,真正需要計算的不是「有多少表面路徑」,而是「還有多少不可由既有結構替代的路徑類與殘差方向」。}
} 高重疊知識空間中,真正需要計算的不是「有多少表面路徑」,而是「還有多少不可由既有結構替代的路徑類與殘差方向」。