21/6/28 讀書筆記
安全多方計算 基礎MPC協議之GC
接下來展示的MPC協議都只針對semi-honest adversary情景:
姚氏混淆電路協議 Yao's Garbled Circuits Protocol
又稱GC,其中參與者為雙方,執行回合數(rounds)常數級,支持布爾運算。GC是很多MPC協議的基礎,其表現優異,即使其通信復雜度並不是最好的,但是其常數級的rounds使得其不因circuit而改變。
我們考慮一個函數\(F(x,y)\),其值域X和Y均有限且離散。對每對輸入<x,y>,我們認為\(F(x,y)\)可以被表示為一個二維表格\(T\)。其中\(T_{xy}=F(x,y)\)。對於兩個參與者P1和P2,P1持有X,P2持有Y。當需要計算\(F(x,y)\)時,P1首先對整個表格\(T\)進行加密,即對每個\(T_{xy}\),分別提供密鑰\(k_x\)和\(k_y\),並將其加密。由於P1知道自己提供的x的具體值,故能夠給出唯一的\(k_x\),但是由於P1並不知道P2會提供哪個y,因此P1需要給出所有的\(k_y(y∈Y)\)。P1給出整個表格\(T\)(亂序的)、唯一的\(k_x\)、一組\(k_y\),其中\(k_y\)基於不經意傳輸(OT)進行傳遞。P2得到表格\(T\)和\(k_x\),並經過不經意傳輸得到唯一的\(k_y\),此時對於表格\(T\)中所有元素,只有一個元素能夠被解密成功,即<x,y>對應的\(T_{xy}\)。
這里有一個小問題,就是P2只有遍歷所有可能的元素才能找到目標,但是P2並不知道真正的目標長什么樣子,也不知道自己是否解密了正確的元素。因此需要在正確信息中添加一定的識別碼,如果解密結果沒有識別碼就說明解密錯誤,解密的結果應該被拋棄。
還有一種稱為Poing-toPermute的改進方式(1990),其中P1給出的表格\(T\)經過了重排(Permute),然后在\(k_x,k_y\)中包含一定的指向重排后的\(T\)中特定元素的指針信息。這樣P2就能通過兩個密鑰找到並解密特定的元素。
對於電路的情景,我們將P1和P2視作一個大的計算電路的兩個部分,兩者間存在多條wire傳遞信息。對於每個wire,其可能取0或者1,P1各自為其設置一個密鑰\(k_0\)和\(k_1\)。實際電路執行過程中,一個wire要么是0要么是1,我們稱這個確定的實際值是active value,對應的密鑰為active label。對於一個gate,其有兩個輸入wire,對應\(k_i\)和\(k_j\)兩個active label,有一個輸出wire,對應一個active label \(k_o\)。我們對這個gate構造一張表(假設gate的性質可以用G(i,j)描述):
其中\(k_i^0\)表示i號wire在取0時對應的密鑰,又或者可以稱為i號wire對應0的active label
P1將這個\(T_G\)混淆(重排)后,搭配active label發送給P2。對於這個gate,P2既不知道其輸入,也不知道具體的輸出,它能夠得到的只有這個gate輸出的對應的active label,再將這個label傳遞給下一次gate計算。對於P2,其最終能夠得到的只有最終結果所處wire的active label,這個值隨后會被發送給P1。P1知道這個active label對應於什么值,故能夠得到最終的結果。
以下面這個電路為例,假設1、2、3號wire的實際輸入分別為A,B,C,其中A和C來自於P1的輸入,B是P2的輸入,來模擬一下整個MPC的過程:

- P1將\(k_1^A\),\(T_{AND}\),以及2號wire對應的兩個wire label(\(k_2^0,k_2^1\))發送給P2
- P2通過OT得出\(k_2^B\),然后根據\(k_1^A\),\(T_{AND}\)計算出4號wire的active label \(k_4^{AND(A,B)}\)。P2將這個label發送給P1。
- P1通過查詢wire label(\(k_4^0,k_4^1\))從而知道4號wire的實際值為AND(A,B),而其已知3號wire的輸入為C,故將\(k_3^C\)和\(T_{OR}\)發送給P2。(注意這里即使P1知道輸入A和輸出C,但是它仍然不能確定P2的輸入B)
- P2知道\(k_4^{AND(A,B)}\),然后根據\(k_3^C\)和\(T_{OR}\)計算得出5號wire的active label \(k_5^{OR(AND(A,B),C)}\)並返回給P1
- P1通過查詢wire label(\(k_5^0,k_5^1\))得到了最后的結果E
在這個過程中,P2一直都是懵逼的,它只是得到了所需要的wire的active label,但是並不知道這些label的明文對應着什么。P1沒有進行電路的實際計算,而是構建和加密了所有gate的表,計算由P2隱性地執行了。GC將P2變成了完全的工具人!(x
如果你足夠細心的話,可以從上面描述的過程中發現一些問題。在計算時,P1實際上並不需要多次和P2間進行交流,而是一次性將所有的需要的數據發送給P2,而只查看結果即可。上面描述的過程旨在展示這種方式在處理中間變量(intermediate wire)時也適用。在上述過程中的AND門計算中就涉及中間變量4號wire,P1似乎能夠靠一個輸入和輸出(4號wire)推算出另一個來自P2的輸入,但是這種情況在面對復雜電路時一般是不考慮的。
數據挖掘導論 數據預處理
數據預處理的形式有多種,方法也非常繁多,其中主要的思想和方法包括:
- 聚集:通過將多個對象合並為一個對象,實現對於數據集的壓縮。聚集可以減少實際數據集的大小,改變數據集的宏觀程度,改變行為的穩定性(比如年平均值通常比月平均值更加穩定)。但是會丟失一些可能的細節,比如一個月里哪幾天的銷售額明顯更高。
- 抽樣:選擇數據集子集進行分析。需要進行有效抽樣,即抽取的子集具有和原數據集一樣的感興趣的性質。對於需要考慮稀有對象時,可以采用分層抽樣的方式。抽樣的大小通常決定了抽樣帶來的信息損失情況,可以采取漸進抽樣(自適應抽樣),即動態改變抽樣規模直到預測成功率穩定在可接受的值。
- 維歸約:維度描述了對象屬性的復雜程度。當維度過高時將引發維災難,數據在某些維度空間變得越發稀疏,使得很多數據分析方法失去意義。通過創建新的屬性來將一些(相關聯的)舊屬性合並,進而減少數據的維度。創建新屬性的方法有特征選擇法和線性代數技術。前者從舊屬性中直接挑選出一個子集作為新屬性,后者通過主成分分析(PCA)等線性代數的方法將原屬性進行線性組合,進而得出相互正交的新屬性(即使新屬性看起來沒有任何實際意義)。
- 特征選擇或特征子集選擇:用於維歸約的方法,通常致力於減少冗余特征和不相關特征。前者指一些關聯性較強的屬性,以至於完全其中一者可以替代另一者;后者指與所感興趣的特征相關性低的屬性,比如在考察學生成績時的學生ID屬性就是不相關特征。
- 特征子集的選擇方法包括嵌入、過濾和包裝三種。其中嵌入依賴於具體的數據挖掘算法(通常在構造決策樹分類器時)。過濾和包裝在選擇特征子集的過程上一致,都是搜索-評估-驗證或再搜索,只是所采用的評估方法不同:
- 過濾:利用獨立於數據挖掘任務的方法,在數據挖掘之前進行特征選擇。
- 包裝:利用數據挖掘算法本身作為黑盒,搜索並測試最優或較優的特征子集
- 特征加權:區別於直接放棄某些特征,而是對不同特征置不同權重,使得不同屬性在數據挖掘過程中起到不同作用。
- 特征子集的選擇方法包括嵌入、過濾和包裝三種。其中嵌入依賴於具體的數據挖掘算法(通常在構造決策樹分類器時)。過濾和包裝在選擇特征子集的過程上一致,都是搜索-評估-驗證或再搜索,只是所采用的評估方法不同:
- 特征創建:通過原來的屬性創建新的屬性集合,新的屬性集可能更小(實現了維歸約),且能更有效捕獲數據間的信息。包括三種創建新屬性的相關方法:
- 特征提取:對某些基本數據,比如圖像,其像素可能並不能直接得出什么信息。此時我們通過某些技術從這些基本的數據中提取出某些特征(比如是否包含人臉),然后利用這些提取的特征進行數據挖掘。特征提取的方式依賴於具體的數據場景,而與數據挖掘本身關系不大。
- 映射數據到新的空間:采用新的視角看待問題,比如對於某些包含復雜周期和噪音的時序數據,提取其中的頻率特征可以有效表現出其中的周期規律。和特征提取的區別在於其提取的方式更具有普遍性。
- 特征構造:對於我們所感興趣的信息而基於現有屬性進行構造,比如我們希望按照制造材料進行產品分類,故將質量和體積特征重新構造為密度特征。這種構造或許能由數據挖掘算法本身發掘出來,但是如果能在預處理時就指出這個關系則能大幅提高挖掘效率和質量。
- 離散化和二元化:將原本連續或離散的值進一步離散或二元化,這對於某些數據挖掘算法(尤其是分類算法)有較好的效果。離散化方法分為監督和非監督量:
- 監督情況下,我們考慮屬性本身的性質並通過人工的方式制定連續值的分割區間問題。通常采用熵分析法。
- 非監督情況下,我們可以考慮使用等寬、等頻率、K-均值等方式決定分割區間問題。當然由於沒有考慮數據本身的實際意義,有可能導致一些尷尬的結果,比如對於系號,6和21屬於同類院系,卻和5、4、3等划分為同類。
- 變量變換:對於數據中的某屬性,同時對所有對象的該屬性進行某些變換,使其能夠更好體現所需要的信息。變量的變換通常是為了改變數據的特性從而使得數據本身能夠更加符合需求。比如對收入而言,一天100和一天1000之間的差異的意義大於一天1億和一天2億,但是后者間的差距更大,更容易被挖掘算法捕獲,因此我們需要進行一定的轉化。變量變換包括兩種方法:
- 簡單函數:對變量進行一些簡單的變換,比如求對數、指數等,使其在數據特性上發生改變。這種改變的前提在於充分了解數據和目標需求間的關系,變換方式嚴重依賴於實際意義,不恰當的變換會導致適得其反。
- 規范化和標准化:這兩個是一個意思,為了使得變量的整個集合具有某些特定性質,比如將一個跨度很大的變量集合通過標准化形成均值為0、標准差為1的變量集合。這也有利於降低極端值、離群點帶來的影響(當然,在你需要避免他們的前提下)
數據挖掘導論 相似性和相異性的度量
相似度和相異度描述了對象間的相似和差異程度,兩者間可以相互變換。我們采用鄰近度來統一描述這兩個問題。鄰近度的度量和具體的屬性的數據類型有關:
- 對於標稱,對象之間要么完全一致,要么不同
- 對於序數、區間、比率,通常與對象間差值有關
距離:距離是具有特殊性質的相異度,定義閔可夫斯基距離:
當r=1時為曼哈頓距離,r=2是為歐幾里得距離(\(L_2\)范數),r=∞時表示對象屬性間的最大距離(上確界,\(L_{max}\)范數)
我們將度量(metric)基於以下三點進行定義,對函數d(x,y):
- 非負性:對於任何x與y,d(x,y)>=0;當且僅當x=y時,d(x,y)==0
- 對稱性:對於任何x與y,d(x,y)==d(y,x)
- 三角不等式:對於三個對象x、y、z,d(x,z)<=d(x,y)+d(y,z)
可見距離本身是一種度量
對於相似度,度量中的三角不等式通常不成立,而保持其他兩條性質。
一些描述相異度和相似度的例子
對於二元數據(即每個屬性都是0或者1),有兩個鄰近度評價方式:
-
簡單匹配系數(Simple Matching Coefficient):
\[SMC=\frac{屬性值相匹配的數目}{屬性個數} \] -
Jaccard系數:對於非對稱屬性,SMC很可能判定相似性過高(因為大家很多都是相同的無意義的0)。定義:
\[J=\frac{匹配的個數}{不涉及0-0匹配的個數} \]
而推廣到非對稱的非二元數據中,我們不僅需要像Jaccard系數一樣忽略0-0匹配,還需要能夠應對更多元的向量,提出余弦相似度:
||x||表示對象向量的長度,即各屬性數據通過勾股定理求長度(而不是指屬性的個數!)。余弦相似度實際上通過對象向量空間內兩者間的余弦值描述相似程度。
而另一方面也可以基於Jaccard系數給出廣義Jaccard系數(又稱Tanimoto系數),其表示為:
而從更加廣義的統計角度上看,我們在考察線性相關性時引入皮爾森相關系數:
該系數常在-1~1間取值,1表示完全正相關,-1表示完全負相關,0表示不存在線性相關關系(但是不否認非線性相關)
鄰近度計算中的普遍問題
- 距離度量的標准化和相關性:標准化是因為在屬性的值域不同時,值域大的屬性將左右距離度量(比如同時考慮年齡和收入),故需要對值域進行標准化。相關性是指屬性間存在相關性且值域不同時,歐幾里得距離相同的對象間的差異程度可能不同,此時采用Mahalanobis距離來衡量兩個對象的距離。其將不同屬性間先按照主成分旋轉以使得屬性之間獨立,再進行標准化。
- 組合異種屬性的相似度:組合異種屬性指一個對象同時擁有定性和定量的屬性。我們針對每個屬性單獨考慮其相似度,然后通過一定方式進行組合,同時考慮非對稱屬性而忽略0-0匹配。
- 在權重條件下的鄰近度計算:有時我們對不同屬性賦予了不同的權重以更好反映各個屬性對於問題的重要程度。通常權重和為1,我們在計算距離時的對每個屬性計算差距時添加對應權重。
