Shannon 熵(標準定義)

$$
H(X) \;=\; -\sum_i P_i \log P_i \;\ge\; 0
$$

  • $H$ 代表的是 Entropy 不確定性 / 亂度;分布越平均,$H$ 越大(越不確定);分布越尖(越確定),$H$ 越小。
  • 均勻分布(n 個等機率)達最大 $H = \log n$;確定事件 $H = 0$。

在上述説到分布越平均,熵越大越不確定,大概可以思考為篩子6個面每一個面的概率都為 $\frac{1}{6}$,這代表相對的不確定性,因爲你無法明確的説出接下來會篩中1或3,

$熵 \approx 0$:但如果颱風來了,那麽大概率你會說今天會下雨,這就是確定性高
$熵 \gt 0$:篩子6面


Everett 的「資訊」

Everett 不用 $H$,他定義資訊(information)為:

$$
I_X \;=\; \sum_i P_i \log P_i \;=\; -\,H(X)
$$

⚠️ 注意正負號:Everett 的 $I_X$ 就是 負熵(negative entropy)

Shannon $H$ Everett $I$
公式 $-\sum P\log P$ $+\sum P\log P$
意義 不確定性 「銳利度 / 已知程度」
分布變尖時 變小 變大
確定事件 $0$(最小) $0$(最大,因 $P\log P\to0$)

原本的shannon熵在不確定性大時 H 值增加,而確定的時候 H 值為 0

01286-ov0ddfgxprt.png

另外一個解釋方式則是 Everett 想要的「觀測之後會增加」的量。理由是觀測讓分布變尖 → 不確定性 $H$ 下降 → 「資訊」$I$ 上升。用 $I$ 講「觀測獲得資訊」在符號上更順。

59791-4ssget0oyat.png


§4 互資訊 = 關聯(全章的主角)

兩個變數綁多緊?Everett 定義 X 與 Y 的關聯(correlation)

$$
\{X,Y\} \;=\; \sum_{i,j} P(x_i,y_j)\,\log\frac{P(x_i,y_j)}{P(x_i)\,P(y_j)}
$$

這正是現代資訊論的互資訊(mutual information) $I(X;Y)$。逐項拆解:

  • 若 X、Y 獨立:$P(x,y)=P(x)P(y)$ → 每項 $\log 1 = 0$ → $\{X,Y\}=0$。沒關聯
  • 若 X、Y 有關聯:聯合機率偏離「獨立預測」→ $\{X,Y\}>0$。

證明「互資訊 I(X;Y) 一定 ≥ 0」

51222-avqg2i3hn6t.png

看這張圖:藍色曲線是 y = log t(自然對數,凹函數),橘色直線是 y = t − 1(在 t=1 處的切線)。因為 log 是凹函數,它的切線永遠在它自己上方——這條直線只在切點 t=1 碰到曲線,其他地方都比曲線高。這就是整段推導唯一用到的「物理直覺」。

1. 互資訊的定義

$I(X;Y) = \sum p(x,y) \log\frac{p(x,y)}{p(x)p(y)}$

令 $p = p(x,y)(真實聯合分布)$、$q = p(x)p(y)$(假裝獨立時「應該」長怎樣)。於是

$I(X;Y) = \sum p \log\frac{p}{q}$

這就是 p 對 q 的 KL 散度。

2. 套用圖上的不等式

圖上畫的是 log t ≤ t − 1。現在把 t 換成 q/p(注意,是反過來的比值):

$log\frac{q}{p} \le \frac{q}{p} - 1$

3. 兩邊同乘 p,再對所有 (x,y) 求和
因為 p ≥ 0,不等式方向不變:

$p\log\frac{q}{p} \le q - p$

對所有 (x,y) 加總:

$\sum p\log\frac{q}{p} \le \sum q - \sum p$

4. 右邊為什麼是 0

$\sum q(x,y) = \sum p(x)p(y) = \left(\sum p(x)\right)\left(\sum p(y)\right) = 1\times 1 = 1$

$\sum p(x,y) = 1 \quad \text{(本來就是一個機率分布)}$

所以右邊 = 1 − 1 = 0。

5. 左邊等於什麼

$\sum p\log\frac{q}{p} = -\sum p\log\frac{p}{q} = -I(X;Y)$

6. 合起來

$-I(X;Y) \le 0 \;\Longrightarrow\; I(X;Y) \ge 0$

而且,因為 log t = t − 1 唯一在 t = 1 成立(就是圖上那個相切點),所以 I(X;Y) = 0 的充要條件是「對所有 (x,y) 都有 q/p = 1」,也就是 p(x,y) = p(x)p(y) 處處成立——也就是 X、Y 獨立。

所以整個證明的邏輯鏈是:

凹函數的切線不等式(圖中那條線)→ 代入 q/p → 求和後右邊自動消成 0 → 左邊剛好是 −I(X;Y) → 得到 I ≥ 0。

Everett 在 Appendix I 就是用「對數是凹函數」的凸性不等式證這件事(原文「Convex function inequalities」「Refinement theorems」)。這就是深度 3 要你看到的:關聯非負,不是約定,是定理。

在項目開始之初爲什麽選 OSM 而不是政府開放資料

做城市量化分析時,第一個問題永遠是「資料從哪來」。選項通常有三類:

來源 優點 缺點
政府開放資料(國土測繪、CPA 建照) 權威 各年版本不一致、API 不穩、跨城市格式差異大
商業 GIS(Google / HERE) 完整 商用授權昂貴、無歷史快照
OpenStreetMap(OSM) 免費、全球統一 schema、可拉歷史 由社群貢獻、覆蓋率隨時間變動

- 閱讀剩餘部分 -

這篇延續上一個 CodeGraph 的深度解析數據庫

59431-s247m5gr8fn.png

在上一篇文章CodeGraph 安裝與使用教學:整合 Claude Code、Cursor、Codex 的程式碼圖譜工具中資料如下:

(py3.10) D:\Git\mitagent>codegraph status                                                                                                                                                                                                                                   
CodeGraph Status                                                                                                                                                                                                                                                            
Project: D:\Git\mitagent                                                                                                                                                                                                                                                    
Index Statistics:                                                                                                                                                                                                                                                           
  Files:     25                                                                                                                                                                                                                                                             
  Nodes:     423                                                                                                                                                                                                                                                            
  Edges:     982                                                                                                                                                                                                                                                            
  DB Size:   1.26 MB                                                                                                                                                                                                                                                        
  Backend:   node:sqlite - built-in (full WAL)                                                                                                                                                                                                                              
  Journal:   wal                  

其中,Nodes(423)代表程式碼裡的「實體」

每個 node 是一個可識別的程式碼符號:

Kind 數量 意思
function 127 獨立函式(def foo() / function bar()
import 81 import 語句本身(被視為一個節點)
method 58 類別裡的方法(class.method()
constant 57 常數定義(const X = ... / UPPER_CASE
variable 34 模組層級的變數
file 25 每個原始碼檔案本身
class 23 類別定義
interface 9 TypeScript interface
route 9 HTTP 路由端點(自動偵測到了!)

Edges(982條)= 節點之間的「關係」

邊代表符號之間的連結,例如:

  • A 呼叫 B(call edge)
  • A import 了 B(import edge)
  • A 繼承自 B(extends edge)
  • 檔案 A 包含函式 B(contains edge)

使用 codegraph init 後生成 codegraph.db,在 D:\Git\mitagent\.codegraph\ 目錄,下讀取 sqlite db 如下

67772-d5xpt2n9yfv.png

結構解釋

這個 codegraph.db 裡面分成四類:

資料表(13個)— 核心數據

表名 存什麼
nodes 所有程式碼符號(函式、類別、變數等),就是那 423 個 node
edges 符號之間的關係(呼叫、import、繼承等),就是那 982 條 edge
files 索引的 25 個原始碼檔案(路徑、語言、hash)
nodes_fts 虛擬表,FTS5 全文搜尋引擎,讓 AI 可以模糊查符號名稱
nodes_fts_* FTS5 的內部輔助表(config/data/docsize/idx),不用管
unresolved_refs 解析失敗的參照(例如 import 了找不到的模組)
project_metadata 專案設定(版本、最後更新時間)
schema_versions DB schema 版本管理
sqlite_sequence / sqlite_statl SQLite 內建系統表

索引(18個)— 加速查詢

都是幫核心表建的查詢加速索引,例如:

  • idx_nodes_kind — 快速找所有 function/class/method
  • idx_nodes_lower_name — 大小寫不敏感搜尋符號名
  • idx_edges_source_kind / idx_edges_target_kind — 快速走訪關係圖

觸發器(3個)— 自動同步 FTS

Trigger 時機
nodes_ad 刪除 node 時,自動更新全文搜尋索引
nodes_ai 插入 node 時,自動更新全文搜尋索引
nodes_au 更新 node 時,自動更新全文搜尋索引

傳統的 IP 封鎖和 Rate Limit 正在失效。當對手能無限旋轉 IP、偽裝 Header, 你真正的防線藏在一個沒人注意的地方——U+2019,那個「右彎引號」。

97551-q5ecttejsed.png


問題在哪

假設你花了幾年訓練一個垂直領域的 LLM,或者你的 API 輸出本身就是有價值的資產。 現在有人開始大量抓取你的輸出,用來微調(fine-tune)他們自己的模型。 傳統反爬蟲?封 IP——對方換 Proxy;加 Rate Limit——對方放慢速度; 要求登入——對方批量買帳號。

- 閱讀剩餘部分 -