G3.0 地標換個排列,為什麼答案不該變?
本篇重用1 篇
地標名單換順序,城市沒有換
前兩個單元一直在移動或旋轉影像。現在我們不給整張地圖,只給幾個地標:台大正門、總圖、公館站,各有自己的位置與屬性。
朋友把同一份名單重新排序,總圖從第二列移到第一列,它真的在城市裡移動了嗎? 沒有。改變的只是存資料的方法,不是地理事實。
這種輸入叫 set(集合):元素本身有意義,排列順序沒有。若同一元素能重複出現,我們更精確地稱為 multiset;本單元會讓重複與點數也有機會影響答案,不默默把它們刪掉。
把資料表的 row 重排寫下來
有 個點,每個點有 個特徵,把它們寫成矩陣
可以含座標與地標型別。令 是 的 permutation matrix(置換矩陣):每列與每欄恰好有一個 ,其餘為零。左乘 就選出新的 row 順序。
例如
注意, 沒有旋轉 的座標。它只是把整列連同所有屬性一起搬動。若 label、mask 或邊的索引也依賴這些點,就要一起更新,不能只改一半。
這個任務要一個答案,還是每個點一個答案?
若問「這群地標是不是台大附近」,模型輸出一個全局類別:
這是 permutation invariance。全局答案沒有 row index,所以不應因名單排列改變。
若問「每個點是道路、建築,還是捷運站」,輸出 的第 列對應第 個點。重排輸入後,答案也必須重排:
這是 permutation equivariance。答案不是整份保持原排列,而是繼續跟著自己的點。和 G1 的座標、箭頭一樣,要先看輸出型態,再決定合理 action。
Flatten 為什麼會偷偷加入順序?
先只讓每個點有一個 scalar 值。一般線性 readout 可以是
交換前兩列後,差值為
除非 ,或這一次資料剛好相同,答案就會變。對所有交換都 invariant,要求每個 row 使用相同權重。
這是另一種共享:CNN 沿著位置共享,集合模型沿著元素共享。兩者對應不同 action,但「不要因為表示方式改了,就換一套規則」的主線相同。
Zaheer 等人 [1] 的 Deep Sets 與 Qi 等人 [2] 的 PointNet 會給出兩種常用做法。下一篇先問:每個點使用同一個函數,再把結果加起來,是否就能處理集合?
補充Permutation invariance 不代表 rotation invariance
一群點可以被重新排序而不影響答案,但把所有座標旋轉後,MLP 仍可能給出不同特徵。忽略排列只解決存資料的順序;座標的幾何 action 留到 G6 處理。
課堂提問
逐點分類時,重新排列輸入卻要求輸出的 row 完全不動,會出什麼問題?
先想一想,再展開看整理後的答案
同一列已經換成另一個點,原答案會對到錯誤的地標。正確要求是輸出跟著同一個 permutation 重排,而不是整份輸出保持原排列。
動手看一次
按下 shuffle,只重排資料列。比較全局 sum 與使用 row index 的加權和;開啟逐點 label,確認標籤始終跟著同一個地標。