Towards Evaluating the Robustness of Neural Networks
這是一篇論文閱讀筆記,論文原文:神經(jīng)網(wǎng)絡(luò)的魯棒性評(píng)價(jià)
寫(xiě)在前面
??本人在閱讀這篇論文的時(shí)候也參考了別人的博文,參考博文的鏈接我會(huì)在文章最后的參考資料中列舉出來(lái),如有侵權(quán)請(qǐng)聯(lián)系我刪除。本文主要是對(duì)這篇論文的一些思想的理解,包括公式推導(dǎo)還有一些總結(jié)。除此之外發(fā)現(xiàn)原文在論文第6頁(yè)中提出的7個(gè)目標(biāo)函數(shù)中,第5個(gè)目標(biāo)函數(shù)有錯(cuò)誤,主要是對(duì)數(shù)里面的式子寫(xiě)反了,如果是仔細(xì)看的話是能夠看出來(lái)的。原來(lái)的式子如下面的公式1所示,修改之后應(yīng)該如公式2所示。在文中提到FFF就是經(jīng)過(guò)了softmax輸出的概率,那么FFF的取值范圍為[0,1][0,1][0,1],那么對(duì)于下面的(1)式來(lái)說(shuō),就不滿足對(duì)數(shù)函數(shù)的定義域大于0,所以這個(gè)式子有問(wèn)題。而(2)式則滿足其定義域,并且相關(guān)意義,這個(gè)在后面會(huì)解釋。
f5(x′)=?log?(2F(x′)t?2)(1)\begin{aligned} f_5(x') = -\log (2F(x')_t-2) \tag{1} \end{aligned} f5?(x′)=?log(2F(x′)t??2)?(1)
f5(x′)=?log?(2?2F(x′)t)(2)\begin{aligned} f_5(x') = -\log (2-2F(x')_t) \tag{2} \end{aligned} f5?(x′)=?log(2?2F(x′)t?)?(2)
文章簡(jiǎn)介
??雖然神經(jīng)網(wǎng)絡(luò)在大多數(shù)的機(jī)器學(xué)習(xí)任務(wù)上取得了SOTA的效果,但是存在這樣的一個(gè)事實(shí),那就是神經(jīng)網(wǎng)絡(luò)容易受到對(duì)抗樣本的攻擊。也就是說(shuō),對(duì)于輸入的x,能夠找到一個(gè)x′x'x′,使得x′x'x′與xxx十分接近,但是會(huì)被神經(jīng)網(wǎng)絡(luò)誤分類(lèi)成另外一個(gè)類(lèi)別(非正確的類(lèi)別)。所以使我們訓(xùn)練出的神經(jīng)網(wǎng)絡(luò)能夠防御對(duì)抗樣本的攻擊顯得意義重大。而防御蒸餾就是最近被提出的一個(gè)方法,對(duì)于任何一個(gè)神經(jīng)網(wǎng)絡(luò),使用對(duì)抗蒸餾提高其魯棒性,降低對(duì)抗攻擊的準(zhǔn)確率。沒(méi)有使用防御蒸餾之前,對(duì)抗攻擊的成功率為95%,但是使用了防御蒸餾之后,對(duì)抗攻擊的成功率降到了0.5%。
??但是在這篇文章當(dāng)中,作者通過(guò)提出三種對(duì)抗攻擊算法,證明了防御蒸餾也不過(guò)爾爾嘛。(這里提一嘴,作者這種寫(xiě)作手法著實(shí)厲害,先說(shuō)防御蒸餾怎么怎么牛皮,然后第二段就說(shuō),在我們的文章中,我們提出了三種算法成功擊破防御蒸餾,所以這也不過(guò)爾爾嘛🐶,潛臺(tái)詞就是之前的對(duì)抗攻擊算法都是什么trash)。作者提出的三種對(duì)抗攻擊算法是根據(jù)使用到的三種不同的距離劃分的,分別是L0范數(shù)、L2范數(shù)、無(wú)窮范數(shù)。并且與先前提出的對(duì)抗攻擊算法相比通常都更有效。除此之外,作者還建議在簡(jiǎn)單的可遷移性測(cè)試中使用高置信度的對(duì)抗樣本,這也可以被用于攻破防御蒸餾。
??作者在這篇文章的contributions如下:
- 他們提出了三個(gè)新的攻擊算法,分別使用L0范數(shù)、L2范數(shù)、無(wú)窮范數(shù)來(lái)進(jìn)行度量。并且作者提出的使用L0范數(shù)進(jìn)行攻擊的算法是第一個(gè)在ImageNet上能使網(wǎng)絡(luò)錯(cuò)分類(lèi)。
- 作者將這些攻擊算法應(yīng)用到防御蒸餾上面,并且發(fā)現(xiàn)使用了防御蒸餾和沒(méi)有使用防御蒸餾在面對(duì)這些攻擊是同樣的效果,也就是都沒(méi)有防御住。
- 作者提出,在簡(jiǎn)單的遷移性測(cè)試中,使用高置信度的對(duì)抗樣本來(lái)評(píng)估防御,并且表明該測(cè)試打破了防御蒸餾。
- 對(duì)于尋找對(duì)抗樣本,作者系統(tǒng)地評(píng)價(jià)了目標(biāo)函數(shù)的選擇并且表明目標(biāo)函數(shù)的選擇明顯地影響了攻擊效果。
防御蒸餾
??首先我們先來(lái)了解一下什么是防御蒸餾。首先防御蒸餾的原文在這里,防御蒸餾的過(guò)程如下圖所示。有一個(gè)初始網(wǎng)絡(luò)和一個(gè)蒸餾網(wǎng)絡(luò),對(duì)于初始網(wǎng)絡(luò)而言,輸入訓(xùn)練數(shù)據(jù)X以及訓(xùn)練的標(biāo)簽Y,然后以溫度T來(lái)訓(xùn)練模型F。接著將初始網(wǎng)絡(luò)輸出的概率作為軟標(biāo)簽去蒸餾網(wǎng)絡(luò)中去訓(xùn)練,蒸餾網(wǎng)絡(luò)與初始網(wǎng)絡(luò)完全一樣,唯一不同的就是蒸餾網(wǎng)絡(luò)的訓(xùn)練標(biāo)簽是初始網(wǎng)絡(luò)輸出的概率值。這里的溫度T是什么意思呢?我們看下面的公式(1)就能明白了,對(duì)于分類(lèi)的深度神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),最后一層是將logit值輸入到softmax函數(shù)中實(shí)現(xiàn)歸一化,所以最終輸出的也就是概率。而在這里引入溫度T,我們可以看到公式(1)中溫度T的位置,其實(shí)也就是將邏輯值縮放相應(yīng)的倍數(shù)。不過(guò)在下面那張圖中可以看到(水印還沒(méi)去hhh)隨著溫度T的升高,概率的分布越平緩,而這概率的分布也就是類(lèi)的分布,所以說(shuō)T越大,類(lèi)的分布越平緩。我們知道我們的logit值是要被送到softmax函數(shù)中去歸一化的。如果只是T為1,從下面的圖中我們可以看出,最后F(X)輸出的概率肯定是后面的極大,前面的極小(因?yàn)閳D中就是這樣的一個(gè)趨勢(shì),前面的很小,并且?guī)缀鯖](méi)有改變什么,后面的劇烈改變,并且極大)。但是如果T增大了,那么最終得到的概率也是平穩(wěn)增長(zhǎng)的。
F(X)=[eZi(X)/T∑l=0N?1ezl(X)/T]i∈0..N?1(1)\begin{aligned} F(X) = \left[\frac{e^{Z_i(X)/T}}{\sum_{l=0}^{N-1}e^{z_{l}(X)/T}}\right]_{i \in 0..N-1} \tag{1} \end{aligned} F(X)=[∑l=0N?1?ezl?(X)/TeZi?(X)/T?]i∈0..N?1??(1)
??接下來(lái)我們就該思考,這樣就能夠防御對(duì)抗攻擊了嗎?其中的原理是什么?首先訓(xùn)練過(guò)程中增加溫度常數(shù)T會(huì)使得模型產(chǎn)生的標(biāo)簽分布更加均勻的預(yù)測(cè)輸出,可以預(yù)見(jiàn),當(dāng)溫度系數(shù)接近無(wú)窮大的時(shí)候softmax接近均勻分布。這樣做的目的是什么呢?其實(shí)使輸出的概率更加平滑是為了蒸餾模型在訓(xùn)練之后能夠得到更好的泛化能力。怎么理解?舉個(gè)例子,softmax層的輸出,除了正例之外,負(fù)標(biāo)簽也帶有大量的信息,比如某些負(fù)標(biāo)簽對(duì)應(yīng)的概率遠(yuǎn)遠(yuǎn)大于其他負(fù)標(biāo)簽。而在傳統(tǒng)的訓(xùn)練過(guò)程中,所有的負(fù)標(biāo)簽都被統(tǒng)一對(duì)待,而使用了溫度T,我們可以明顯地感受到負(fù)標(biāo)簽的信息量被放大了。在手寫(xiě)數(shù)字分類(lèi)識(shí)別的任務(wù)中,假設(shè)某個(gè)輸入的”2“更加形似”3“,softmax的輸出值中”3“對(duì)應(yīng)的概率為0.1,而其它負(fù)標(biāo)簽對(duì)應(yīng)的值都很小,而另一個(gè)”2“更加形似”7“,”7“對(duì)應(yīng)的概率為0.1.這兩個(gè)”2“對(duì)應(yīng)的硬標(biāo)簽的值是相同的,但是對(duì)應(yīng)的軟標(biāo)簽卻是不同的,由此可見(jiàn)軟標(biāo)簽蘊(yùn)含著比硬標(biāo)簽多的信息,并且軟標(biāo)簽分布的熵相對(duì)高時(shí),其軟標(biāo)簽蘊(yùn)含的指示就更豐富。
??誠(chéng)然,這樣做確實(shí)增強(qiáng)了模型的泛化能力,那么又是怎么能夠防御住對(duì)抗攻擊呢?其實(shí)作者在文中給出了說(shuō)明(這里指的是防御蒸餾這篇文章),首先作者先求模型的敏感性,更確切的說(shuō),模型的敏感性是模型對(duì)輸入敏感,也就是輸入的改變對(duì)模型的影響程度(舉個(gè)簡(jiǎn)單的例子,假設(shè)y=2x+1y=2x+1y=2x+1,與y=3x+1y=3x+1y=3x+1這是兩個(gè)線性模型,一個(gè)導(dǎo)數(shù)為2一個(gè)導(dǎo)數(shù)為3,則說(shuō)明第二個(gè)模型對(duì)輸入更加敏感,因?yàn)橹灰斎敫淖円稽c(diǎn),輸出改變的就有很多)。一般來(lái)說(shuō),我們是對(duì)模型的輸入求偏導(dǎo),用Jacobian矩陣來(lái)表示或者梯度來(lái)表示,如果梯度較大說(shuō)明輸出對(duì)輸入較敏感,如果梯度較小那么輸出對(duì)輸入不敏感。在這里作者求了softmax對(duì)輸入x的偏導(dǎo),如下圖,我們可以發(fā)現(xiàn)隨著溫度T的升高,模型的梯度減小,說(shuō)明模型的敏感性降低。既然模型的敏感度降低,那么就說(shuō)明模型輸入的小小改變對(duì)輸出影響不是很大,而對(duì)于對(duì)抗攻擊算法(比如說(shuō)FGSM),就是在損失函數(shù)中對(duì)輸入求偏導(dǎo),最終取使得損失函數(shù)增大方向的梯度,然后添加擾動(dòng)。但是現(xiàn)在模型的敏感度降低了,那么你添加的擾動(dòng)自然也就沒(méi)有效果了。
作者的方法
目標(biāo)函數(shù)
??對(duì)于作者而言,現(xiàn)在要?jiǎng)?chuàng)建出一種對(duì)抗攻擊算法,首先我們得考慮這種對(duì)抗攻擊算法要具備什么樣的特點(diǎn),這些特點(diǎn)總結(jié)如下:
- 在人眼看來(lái),生成的對(duì)抗樣本要和原來(lái)的圖像沒(méi)有什么區(qū)別或者對(duì)辨別影響不大。
- 對(duì)抗樣本輸入到網(wǎng)絡(luò)中,網(wǎng)絡(luò)對(duì)它的判斷是另外一個(gè)類(lèi)別的(反正只要不是正確的就行了)。
??那么針對(duì)上面兩個(gè)條件,對(duì)抗樣本的生成問(wèn)題就變成了下面這個(gè)有約束的優(yōu)化問(wèn)題,最小化我們的對(duì)抗樣本圖像與原圖像之間的距離,同時(shí)要滿足經(jīng)過(guò)網(wǎng)絡(luò)之后輸出的目標(biāo)為t(這里的t只要不是正確的類(lèi)別就可以),并且限制添加擾動(dòng)之后還在我們既定的范圍之內(nèi)(因?yàn)閷?duì)于圖像來(lái)說(shuō),我們是把像素值歸一化到[0,1],所以添加擾動(dòng)之后的范圍也需要是[0,1])。這里的距離可以使用L0L_0L0?范數(shù)、L2L_2L2?范數(shù)、無(wú)窮范數(shù)。
minimizeD(x,x+δ)s.t.C(x+δ)=tx+δ∈[0,1]n\begin{aligned} minimize\ D(x,x+\delta) \\ s.t.\ C(x+\delta) = t \\ x+\delta \in [0,1]^n \end{aligned} minimize?D(x,x+δ)s.t.?C(x+δ)=tx+δ∈[0,1]n?
??這個(gè)時(shí)候作者心里就犯嘀咕了,這怎么求嘛。對(duì)于上述的優(yōu)化問(wèn)題,利用現(xiàn)有的算法直接求解是不行的。所以我們需要將條件進(jìn)行等價(jià)轉(zhuǎn)換,轉(zhuǎn)換成我們能夠求解的形式。對(duì)于C(x+δ)=tC(x+\delta) = tC(x+δ)=t來(lái)說(shuō),由于我們的神經(jīng)網(wǎng)絡(luò)時(shí)高度非線性的,所以直接求解行不通,那么我們就將這個(gè)條件進(jìn)行一個(gè)等價(jià)轉(zhuǎn)換。作者在這里定義出一個(gè)目標(biāo)函數(shù)f,當(dāng)且僅當(dāng)C(x+δ)=tC(x+\delta) = tC(x+δ)=t,f(x+δ)≤0f(x+\delta)\leq 0f(x+δ)≤0。所以作者在這里列舉出了7個(gè)f,也就是下面的公式(1)到公式(7)。現(xiàn)在我們一一來(lái)進(jìn)行公式的解讀,其實(shí)所有的這些公式的核心思想就是使得我們的模型在輸入x′x'x′也就是我們的對(duì)抗樣本的情況下給出的置信度最高(輸出的概率值最高),那么肯定就實(shí)現(xiàn)了C(x+δ)=tC(x+\delta) = tC(x+δ)=t。
f1(x′)=?lossF,t(x′)+1(1)\begin{aligned} f_1(x') = -loss_{F,t}(x')+1 \tag{1} \end{aligned} f1?(x′)=?lossF,t?(x′)+1?(1)
f2(x′)=(max(F(x′)i)i≠t?F(x′)t)+(2)\begin{aligned} f_2(x') = (\underset{i\neq t}{max(F(x')_i)} - F(x')_t)^{+} \tag{2} \end{aligned} f2?(x′)=(i?=tmax(F(x′)i?)??F(x′)t?)+?(2)
f3(x′)=softplus(max(F(x′)i)i≠t?F(x′)t)?log(2)(3)\begin{aligned} f_3(x') = softplus(\underset{i\neq t}{max(F(x')_i)} - F(x')_t) - log(2) \tag{3} \end{aligned} f3?(x′)=softplus(i?=tmax(F(x′)i?)??F(x′)t?)?log(2)?(3)
f4(x′)=(0.5?F′(x)t)+(4)\begin{aligned} f_4(x') = (0.5-F'(x)_t)^{+} \tag{4} \end{aligned} f4?(x′)=(0.5?F′(x)t?)+?(4)
f5(x′)=?log?(2?2F(x′)t)(5)\begin{aligned} f_5(x') = -\log (2-2F(x')_{t}) \tag{5} \end{aligned} f5?(x′)=?log(2?2F(x′)t?)?(5)
f6(x′)=(maxi≠t(Z(x′)i)?Z(x′)t)+(6)\begin{aligned} f_6(x') = (\underset{i\neq t}{max}(Z(x')_i) - Z(x')_t)^+ \tag{6} \end{aligned} f6?(x′)=(i?=tmax?(Z(x′)i?)?Z(x′)t?)+?(6)
f7(x′)=softplus(maxi≠t(Z(x′)i)?Z(x′)t)?log?(2)(7)\begin{aligned} f_7(x') = softplus(\underset{i\neq t}{max}(Z(x')_i) - Z(x')_t) - \log (2) \tag{7} \end{aligned} f7?(x′)=softplus(i?=tmax?(Z(x′)i?)?Z(x′)t?)?log(2)?(7)
??下面是對(duì)上述函數(shù)的解讀:
- 第一個(gè),這個(gè)目標(biāo)函數(shù)我比較迷惑,暫不解釋。
- 第二個(gè),+號(hào)表示求括號(hào)里面與0的最大值,所以(x)+(x)^{+}(x)+表示max(x,0)max(x,0)max(x,0)。括號(hào)里面表示的是經(jīng)過(guò)模型判斷之后,判斷是其它種類(lèi)的概率與是我們目標(biāo)概率的差值。如果括號(hào)里面的值是負(fù)的,那么經(jīng)過(guò)外面的加號(hào),最大值只能小于等于0。所以要想實(shí)現(xiàn)f(x+δ)<=0f(x+\delta)<=0f(x+δ)<=0,那么括號(hào)里的值必須為負(fù)值,括號(hào)里面的值為負(fù)值,那么就說(shuō)明輸入x′x'x′輸出概率為我們指定類(lèi)別的概率最高,那么也就是C(x+δ)=tC(x+\delta) = tC(x+δ)=t。
- 我們對(duì)第三個(gè)式子進(jìn)行一個(gè)化簡(jiǎn)假設(shè)softplus括號(hào)里的值為m,那么有log?(1+em)?log?(2)≤0\log (1+e^{m})-\log (2) \leq 0log(1+em)?log(2)≤0,也就是1+em≤21+e^{m}\leq 21+em≤2,也即是em≤1e^{m}\leq 1em≤1,也就是$m\leq 0 $,所以等價(jià)于第二個(gè)式子。
- 第四個(gè),相當(dāng)于加了個(gè)0.5的概率約束希望其成為最大可能類(lèi)。
- 第五個(gè),如果實(shí)現(xiàn)f(x+δ)<=0f(x+\delta)<=0f(x+δ)<=0,那么?log?(2?2F(x′)t)<=0-\log (2-2F(x')_t)<=0?log(2?2F(x′)t?)<=0,等價(jià)于log?(2?2F(x′)t)>=0\log (2-2F(x')_t)>=0log(2?2F(x′)t?)>=0,注意到這個(gè)函數(shù)是一個(gè)減函數(shù),所以有2?2F(x′)t<=12-2F(x')_t<=12?2F(x′)t?<=1,等價(jià)于F(x′)t≥0.5F(x')_t\geq 0.5F(x′)t?≥0.5,與上面第四個(gè)式子的思想相同。
- 第六個(gè),思路與第二個(gè)是一樣的,不同的是,這里使用的是logit的值。
- 第七個(gè),相當(dāng)于第三個(gè)的變種,但是使用的是logit的值。
??接著作者就將我們的問(wèn)題轉(zhuǎn)化成了如下問(wèn)題,那么這種問(wèn)題在數(shù)學(xué)上是可以用拉格朗日乘數(shù)法來(lái)進(jìn)一步轉(zhuǎn)化,變成求該拉格朗日函數(shù)的最值問(wèn)題。那么使用拉格朗日乘數(shù)法之后,就變成了后面的式子。其中δ\deltaδ就是我們的擾動(dòng)。這里的ccc是一個(gè)合適的常量并且c>0c>0c>0,在文對(duì)于c的選取,作者做了實(shí)驗(yàn),從0.01取到100,最終發(fā)現(xiàn)c取1的時(shí)候效果最好,如下圖所示。
minimizeD(x,x+δ)s.t.f(x+δ)≤0x+δ∈[0,1]n\begin{aligned} minimize\ D(x,x+\delta)\\ s.t.\ f(x+\delta)\leq 0\\ x+\delta \in [0,1]^{n} \end{aligned} minimize?D(x,x+δ)s.t.?f(x+δ)≤0x+δ∈[0,1]n?
minimize∣∣δ∣∣p+c?f(x+δ)s.t.x+δ∈[0,1]n\begin{aligned} minimize\ \left| | \delta | \right|_{p} + c·f(x+\delta)\\ s.t.\ x+\delta \in[0,1]^{n} \end{aligned} minimize?∣∣δ∣∣p?+c?f(x+δ)s.t.?x+δ∈[0,1]n?
??其實(shí)上面的函數(shù)中還有個(gè)約束,那就是x+δ∈[0,1]nx+\delta \in[0,1]^{n}x+δ∈[0,1]n,也就是擾動(dòng)后的圖像必須還是得在我們的范圍之內(nèi)(因?yàn)樵诎褕D片輸入到模型中,圖片的像素值會(huì)被歸一化到[0,1]而我們添加擾動(dòng)之后,這個(gè)約束仍然成立),在文中作者把這個(gè)稱(chēng)作盒約束。對(duì)于盒約束,作者提出三種方式來(lái)解決,這里我們就提最后一種方式。作者引入新的變量www,將上述優(yōu)化δ\deltaδ的問(wèn)題轉(zhuǎn)化為優(yōu)化www,定義如下,首先雙曲正切tanh?x=ex?e?xex+e?x\tanh x = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}tanhx=ex+e?xex?e?x?,其取值范圍為[-1,1],所以12(tanh?(wi)+1)\frac{1}{2}(\tanh (w_i)+1)21?(tanh(wi?)+1)的取值范圍為[0,1],那么將xix_ixi?移過(guò)去,則為xi+δix_i+\delta_ixi?+δi?的范圍為[0,1]。
δi=12(tanh?(wi)+1)?xi\begin{aligned} \delta_{i} = \frac{1}{2}(\tanh (w_i)+1) -x_{i} \end{aligned} δi?=21?(tanh(wi?)+1)?xi??
??那么對(duì)于使用L2L_2L2?范數(shù)進(jìn)行度量,我們等價(jià)求解的問(wèn)題如下,在這里f(x′)f(x')f(x′)這個(gè)函數(shù)用所有非目標(biāo)標(biāo)簽的最大logit值減去目標(biāo)標(biāo)簽的logit值,也就是說(shuō)如果x′x'x′被識(shí)別到目標(biāo)標(biāo)簽,那么maxZ(x′):i≠t?Z(x′)tmaxZ(x'):i\neq t\ - Z(x')_tmaxZ(x′):i?=t??Z(x′)t?是負(fù)的,假如 k = 0,則f(x′)=0f(x')=0f(x′)=0,意味著該函數(shù)將不會(huì)被懲罰,否則如果x′x'x′被識(shí)別到非目標(biāo)標(biāo)簽,該函數(shù)將會(huì)受到懲罰,通過(guò)改變k的值可以得到我們?cè)O(shè)想的置信度,k的值越模型越容易分錯(cuò),并且錯(cuò)的那一類(lèi)概率越大。
minimize∥12(tanh?(w)+1)?x∥22+c?f(12(tanh?(w)+1))f(x′)=max(maxZ(x′)i:i≠t?Z(x′)t,?k)\begin{aligned} minimize\ \left\| \frac{1}{2}(\tanh (w) +1) - x \right\|^{2}_{2} + c·f(\frac{1}{2}(\tanh (w) +1))\\ f(x') = max(max{Z(x')_{i}:i \neq t} - Z(x')_{t},-k) \end{aligned} minimize?∥∥∥∥?21?(tanh(w)+1)?x∥∥∥∥?22?+c?f(21?(tanh(w)+1))f(x′)=max(maxZ(x′)i?:i?=t?Z(x′)t?,?k)?
先寫(xiě)到這里,以后想到了再更新(挖坑)
參考資料
[1] lan的小餅干,2021.基于優(yōu)化的CW攻擊方法[DB/OL].[2021-11-14].https://zhuanlan.zhihu.com/p/361169580
[2] 專(zhuān)注于計(jì)算機(jī)視覺(jué)的AndyJiang,2020.深度學(xué)習(xí)之知識(shí)蒸餾[DB/OL].[2021-11-14].https://blog.csdn.net/andyjkt/article/details/108501693
總結(jié)
以上是生活随笔為你收集整理的Towards Evaluating the Robustness of Neural Networks的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: wincc按钮控制的vb脚本_VB操作w
- 下一篇: 互联网+策划书