cw演算法
1. 詞典編碼的演算法步驟
步驟一:開始的時候詞典包含所有可能的單字元,而當前前綴P是空的。
步驟二:當前字元C:=字元流中的下一個字元。
步驟三:判斷P+C是否在詞典中。
如果是,則用C擴展P,即P=P+C
如果否,則
①輸出代表當前前綴P的碼字
②將前綴-字元串P+C添加到字典中
③令P:=C
步驟四:判斷字元流中是否還有字元需要編碼。
如果是,則返回到步驟二
如果不是,輸出代表當前前綴P的碼字,並結束 步驟一:在開始解碼時詞典包含所有可能的前綴根。
步驟二:cW:=碼字流中的第一個碼字。
步驟三:輸出當前綴符串string.cW到字元流。
步驟四:先前碼字pW:=當前碼字cW.
步驟五:當前碼字cW:=碼字流中的下一個碼字。
步驟六:判斷先前綴符串是否在詞典中。
如果「是」,則:1把當前綴符串string.cW輸出到字元流;2當前前綴p:=先前綴符串pW;3當前前綴符串string.cW的第一個字元;4把綴符串P+C添加到詞典中。
如果「否」,則:1當前前綴p:=先前綴符串pW;2當前字元C:=當前綴符串pW的第一個字元;3輸出綴符串P+C到字元流,然後把它添加到詞典中。
步驟七:判斷碼字流中是否還有碼字要譯。
如果「是」,就返回到步驟4,如果「否」,結束。
2. 對抗樣本之CW原理&coding
本文採用手稿模擬的角度,盡量使讀者較為直白的面對冷冰冰的公式。
拋去CW演算法不談。一般來說,生成樣本演算法都要保證如下兩個條件:
條件一,保證了生成樣本與原始干凈樣本盡量的相似。
條件二,保證了生成樣本確實能成功攻擊模型。
仔細想想,這兩個條件是不是就滿足了生成樣本的全部需求哩。
問題定義清楚了,那問題的數學描述就成了關鍵。
數學描述:
其手稿模擬如下:
CW演算法手稿模擬:
常人思路攻擊:
CW攻擊:
CW是一個基於優化的攻擊,主要調節的參數是c和k,看你自己的需要了。它的優點在於,可以調節置信度,生成的擾動小,可以破解很多的防禦方法,缺點是,很慢。
歡迎留言,力所能及,必答之。