clustergan 是第乙個解決gan在潛在空間聚類問題的工作,通過從乙個one-hot編碼變數和連續潛在變數的混合中對潛在變數進行取樣,結合反向網路(將資料投射到潛在空間)與聚類特定損失共同訓練,能夠實現在潛在空間的聚類。
主要貢獻
在一般的gan中,即使潛在變數保留了關於觀測資料的資訊,潛在點也會基於潛在分布而平滑地分散,導致沒有可觀察到的聚類。
為了解決上述問題,提出了三種主要的演算法思想:
利用離散和連續潛在變數的混合,以在潛在空間中建立非光滑幾何
提出了一種適應離散連續混合的新型反向傳播演算法,以及乙個顯式反向對映網路,以獲得給定資料點的潛變數,因為該問題是非凸的。
建議聯合訓練gan以及具有聚類特定損失的反向對映網路,以便投影空間中的距離幾何反映變數的距離幾何。
如下圖所示為使用離散連續取樣進行訓練的結果。
如下圖所示為 clustergan 的網路結構圖,由 generator,discriminator,encoder 組成,以下簡稱為 g,d,e,引入 e 的原因在於需要強制執行潛在向量的精確恢復:
訓練流程為:從離散連續分布中取樣,經過反向解碼得出潛在變數,經由g生成fake-image,將fake-image分別丟入d和e,在d中的操作和普通gan一樣,在e中將fake-image反向解碼為 zn 和 zc,希望經由 e 得出的結果應該要和輸入一樣。
離散連續混合取樣
clustergan 在乙個 one-hot vector 和正太隨機變數串聯組成的先驗中取樣,這樣做的目的在於使得gan能夠做到在類間插值,即同時做到良好的插值和聚類,因為在傳統上,潛在空間資料的連續性是良好插值的先行條件,如果潛在空間是連續的,那麼便無法很好地實現聚類。換句話說,插值似乎與聚類目標存在分歧。
反向傳播解碼
clustergan 使用基於改進的反向傳播解碼,目的在於將 sample 到的樣本轉換為潛在向量(即可以作為 g 輸入的向量)。
具體演算法思想如下:
線性生成聚類clustergan 的損失函式在普通 gan 的基礎損失函式上增加了聚類特定損失項。
公式如下:
其中正則化係數 βn 和 βc 的相對大小使得能夠靈活地選擇以改變保留潛在編碼的離散和連續部分的重要性;
類似作為k-means的精神,該方法中的gan訓練涉及聯合更新 θg 和 θe。
其聯合更新演算法如下:
DLL知識小結
目標 在dll中實現乙個函式,用乙個exe對函式進行顯式的呼叫,只需將dll放在vc同一工程下。動態鏈結庫的實現 include stdafx.h bool apientry dllmain handle hmodule,dword ul reason for call,lpvoid lpreser...
介面知識小結
使用介面可以讓程式更加容易維護和擴充套件,比如,在任務模板中,再增加實現介面的類時,不需要修改呼叫該介面的類的 abstract 類和介面都可以有 abstract 方法。介面中只有可以有常量,不能有變數 而 abstract 類中既可以有常量也可以有變數。abstract 類中也可以有非 abst...
sql知識小結
查詢產品表中所有有訂單的產品資訊,包括編號,名稱 其實就是看看產品表中哪些產品有訂單 select distinct p.p id,p.p name from t product p inner join t order o on p.p id o.p id order by p id order ...