# Machine Learning & Security - [**ppt講義(簡單版)**](https://drive.google.com/file/d/1rFFmOF7BfIU0KCiiEnDHQA1Mts3evXIj/view) - [**ppt講義(進階版)**](https://drive.google.com/drive/folders/1J7WuuxGKE0oVle5WU7cnXvCq9eQfkkAl) - [**interpertability**](https://drive.google.com/drive/folders/1J7WuuxGKE0oVle5WU7cnXvCq9eQfkkAl) - [**AutoML**](https://drive.google.com/drive/folders/1J7WuuxGKE0oVle5WU7cnXvCq9eQfkkAl) - [**HackMD**](https://hackmd.io/JvssQTwyRIej5zq6JEUCVQ) **講師**: 奧義智慧科技 **陳仲寬** [**FaceBook:陳仲寬**](https://www.facebook.com/Bletchley13) **Gmail:** bletchley13@gmail.com --- [TOC] ## recommand books [大演算](https://www.books.com.tw/products/0010722761) [Machine Learning & Security](https://www.books.com.tw/products/F014109393) ## Docker init 簡單的VM(輕量版w) [docker hub](https://hub.docker.com/) Pull docker mlsec image ``` sudo docker pull bletchley/mlsec:taiwanno1 ``` 下載好Ubuntu,並裝好docker後,執行(約6G大小) ``` sudo docker run -p 8888:8888 -it bletchley/mlsec:taiwanno1 bash ``` 下載完後,進到 docker 輸入 ``` jupyter notebook --allow-root ``` 帶有 token 的網址丟進瀏覽器,網址的部分要修改一下 將 http://(`container_id` or `127.0.0.1`):8888 => http://127.0.0.1:8888 如果要確認 docker 現在有開哪些服務,輸入 ``` sudo docker ps ``` --- ## Goals - Understand fundamental concept of machine learning - Realize different machine learning schools - A detail example of network traffic analysis - Several new research related to machine learning and traffic analysis ## Machine Learning ### Definition ``` “A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks T, improves with experience E.” - Mitchell, 1997 ``` ### Data Engineering pharse 如何用E(Experience)提升P(Performance) ![流程](https://i.imgur.com/M9TUXtn.png) - Data mining(資料探勘) 尋找所需的資料 - Data exploration(數據探勘) 對於資料先初步將不合理資料篩除 - Feature generation(特徵生成) 針對剩下的資料擷取特徵 - Feture selection(特徵擷取) 了解Data後,找出好的feature - Cross validation(交叉驗證) 將資料分成多個部分,進行比較,可避免過擬合的發生 - Training data(訓練資料) - Test data(測試資料) ### Model Training pharse ![流程](https://i.imgur.com/AqJocsT.png) - Model selection(選擇模型) - Training data(訓練資料) - Model training(模型訓練) - Model tuning(模型校正) - Resulting model(最終模型) ### Model Validation pharse ![流程](https://i.imgur.com/2N6wicJ.png) - Test data(測試資料) - Ground truth(期望答案) - Resulting model(最終模型) - Evaluate(評估) ## Model 可以想像成一個最佳化的function 輸入後會得到最佳解 ### Any machine learning algorithm consists of - A model family/representation, which describes the universe of models from which we can choose - A loss function, which allow us to quantitatively compare different models - An optimization procedure, where allow us to improve/find the model based according to loss function. <!--### 如何評斷一個ML的好壞--> ### Cross-validation 資料會分成**Test Data**和**Training Data** 如果Training Data 和 Test Data 篩選不夠好,會造成ML結果不佳 這裡的交叉驗證是使用**k-fold validation** 將訓練集分割成k個子樣本,一個單獨的子樣本被保留作為驗證模型的數據,其他k − 1個樣本用來訓練 每個子樣本都驗證一次,平均結果獲得一個單一值 適合用在資料數量少 ``` - No enough data - K part, K-1 for training, 1 for testing - Rotate every round - Average performance ``` ![](https://i.imgur.com/qNk5Dmx.png) ### Train, validate, test 將資料直接分類成Train data和Test data,然後進行訓練 ``` - Enough data - E.g. 60% for training, 20% for validation, 20% for testing - Validate – find the best model ``` ### Out-of-time validation 資料跟時間相關,無法一開始就知道有哪些資料 > 像是Twitter,每天都會更新資料上去,其中分成兩種訓練方式 1. 先訓練出模型,將資料直接分成Validate和Test 2. 先訓練模型,先集中資料(像事先蒐集3天份的資料),最後再進一步Test ![](https://i.imgur.com/Qa7Pp5g.png) ## Evaluate Performance 各個ML系統在不同的threshold設定下會有不同的 - **False positive** - **False negtive** - **True positive** - **True negtive** :::success 可以透過以下方式理解 假設一個情境,並令此情境成立時為 **positive class**,不成立時為 **negative class** 當情境與事實相同時為 **True** ,反之為 **False** 可以參考google developers的[文件](https://developers.google.com/machine-learning/crash-course/classification/true-false-positive-negative),有更詳細的介紹 ![](https://i.imgur.com/dMK2st2.png) ::: 通常False的兩個值和True的兩個值會一高一低 我們可以透過觀察這幾個數據的大小關係,去判斷一個ML的好壞 以下有幾種常見方法: - Accuracy - F-score - Confusion matrix - ROC/AUC ### Accuracy 正確率 ![](https://i.imgur.com/4Z9ALx9.png) ### F-score F-score的基本式為 $F-score=\dfrac{(1 + \beta ^ 2)\ precision \times recall}{\beta ^ 2\ precision + recall}$ F-score是利用**recall**和**percision**兩個值互相抵制的關係做成的綜合結果 當數值越接近1則表示準確率越高 而F1-score則通指當 F-score $\beta=1$ 的狀況 而 Recall 及 precision 分別可由以下算式求得 **Recall=**$\dfrac{true\ positive}{false\ negitive}$ **precision=**$\dfrac{true\ positive}{true\ positives+false\ positive}$ ![](https://i.imgur.com/js7vrpO.png) ### Confusion matrix 盡量將結果為正確率提升,降低錯誤率 正確率與錯誤率兩者之間互相抗衡 可以根據不同情況可以調整參數 在某些特殊情況也許寧可誤報也不要沒報到 利用資料視覺化可以清楚了解正確率以及錯誤率 - heatmap ![heatmap](https://i.imgur.com/yRirHXb.png) ### ROC & AUC - **受試者工作特徵曲線**(ROC, Receiver operating characteristic) - **ROC 曲線下面積**(AUC, area under the curve) ![](https://i.imgur.com/EH3ZEqC.png) 在ROC中,是**False positive** 和 **True positive**的變化圖 AUC越大,代表在綜合狀況中這個model的準確度比較好 ![](https://i.imgur.com/KGM4TM0.png) ## ML Models ![](https://i.imgur.com/XQh0R5g.png) ## Lab 0-1 [練習1 /mlsec/frauddetect/logistic-regression-fraud-detection.ipynb](http://127.0.0.1:8888/notebooks/mlsec/frauddetect/logistic-regression-fraud-detection.ipynb) One hot encoding ```python= df = pd.get_dummies(df, columns = ["paymentMethod"]) df.sample(3) ``` training/testing set ```python= X_train, X_test, y_train, y_test = train_test_split( df.drop('label', axis=1), df['label'], test_size=0.33, random_state=17) ``` Model ```python= # Initialize and train classifier model clf = LogisticRegression().fit(X_train, y_train) # Make predictions on test set y_pred = clf.predict(X_test) ``` - What you should understand - Basic usage about pandas dataframe - Basic usage of sklearn - A standard procedure for ML - One-hot encoding 有些資料做加減是無意義的,可以對它做**One-hot encoding** >例如:班級是重要的資料,但是數值上的距離沒有任何意義 >所以我們可以把他表示成類似bool的樣貌,讓他的+/-存在意義 ## machine learning 101 ![](https://i.imgur.com/dOt1sLu.png) - Types of machine learning use cases: - Regression - [參考資料](https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_linear_regression_works.html) - Classification - [參考資料](https://towardsdatascience.com/machine-learning-classifiers-a5cc4e1b0623) - Anomaly detection - [參考資料](https://medium.com/@cyeninesky3/oneclass-svm-%E7%95%B0%E5%B8%B8%E6%AA%A2%E6%B8%AC%E4%BB%BB%E5%8B%99-anomaly-detection-%E7%9A%84%E7%AE%97%E6%B3%95%E7%90%86%E8%A7%A3%E8%88%87%E5%AF%A6%E8%B8%90-cf5f0bbb01c0) - Recommendation [web](https://www.infoq.com/presentations/relevance-recommendation-system/) > Regression ![](https://i.imgur.com/pySHl7M.png) > Classification ![](https://i.imgur.com/jdOejuo.png) ## Anomaly Detection 偵測異常狀況 可以觀察資料的變化週期、頻率、規律 當出現不符合規律的值,就會被偵測出來 但是實際上要到變化差異多大才偵測,也要依情況不同做調整 ![](https://i.imgur.com/ZPoqxh1.png) 較類似於對於不平常的狀況提出警告,實際上是好或壞無法辨認 **Method** - Outliers vs. novelties - novelties: unobserved pattern in new observations not included in training data - Simple statistics/forecasting methods - Exponential smoothing, Holt-Winters algorithm - Machine learning methods - Elliptical envelope, density-based, clustering, SVM - ML相似度: 以當前所擁有的過去資料,判斷當前資料是否異常 ![](https://i.imgur.com/Ma1cM7l.png) **右邊圖中可以發現標記紅色的點是例外的狀況** ## Problems in ML ### over fitting - 學得太多 - when a model learns the detail and noise in the training data to the extent that it negatively impacts the performance of the model on new data. **How to solve?** ![](https://i.imgur.com/gr1pg2d.png) 將訓練資料分類成兩個部分 **Training Set** **Validate Set** 真正會去訓練的只有Training Set 而Validate Set會拿來做驗證 [參考資料](https://medium.com/%E9%9B%9E%E9%9B%9E%E8%88%87%E5%85%94%E5%85%94%E7%9A%84%E5%B7%A5%E7%A8%8B%E4%B8%96%E7%95%8C/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-ml-note-overfitting-%E9%81%8E%E5%BA%A6%E5%AD%B8%E7%BF%92-6196902481bb) ### under fitting - 學得太少 - not a suitable model and will be obvious as it will have poor performance on the training data - a model that can neither model the training data nor generalize to new data [參考資料](https://medium.com/@ken90242/machine-learning%E5%AD%B8%E7%BF%92%E6%97%A5%E8%A8%98-coursera%E7%AF%87-week-6-2-diagnosing-5a9e43db4593) ## School of ML - 根據演算法分類 - 符號理論學派(Symbolists) - 類比推論學派(logizers) - 貝氏定理學派(Bayesians) - 演化論學派(Evolutionaries) - 類神經網路學派(Connectionists) > 不同學派之間共享許多屬性 # 符號理論學派(Symbolists) > 所有智慧都能變成符號,透過邏輯運算就能求解所有答案 - Rule量太過於龐大,難以執行,但概念還是存在 => 自動Mining Rule ![](https://i.imgur.com/ipEQAIL.png) ## Rule mining 嘗試將物品綁成一個集合(set),看看彼此間是否具有關聯性,計算彼此間support好壞 將全部計算過一遍之後去計算兩者之間的關聯性 ![](https://i.imgur.com/EhrIuNq.png) 我們可以全部Travasal過一遍,但是非常耗時 =>剪枝 ![](https://i.imgur.com/HRX8BhM.png) ![](https://i.imgur.com/ayGyS3f.png) 如果上面的資料已經確定比其他還要小,那麼它底下的也不用去判斷 ## Building Decision Tree - 在每個node提出詢問,再將資料分成兩群(切割) ## Emptropy [資訊:熵_wiki](https://zh.wikipedia.org/wiki/%E7%86%B5_(%E4%BF%A1%E6%81%AF%E8%AE%BA)) 以物理熱理學角度去衡量資料(亂度or熵) ![](https://i.imgur.com/f4IYPpX.png) $Entropy(S) \equiv -p_\oplus log_2 p_\oplus - p_\ominus log_2 p_\ominus$ 計算Information Gain,篩選出比較好的 如果在屬性A上做拆分 則S的熵較小 Sv = S的子集,其屬性A具有值v gain(SA)=原本的熵-sum(A上的熵) $Gain(S,A) \equiv Entropy(S) - \sum_{v \epsilon Values(A))} \frac{\left | S_v \right |}{\left | S \right |} Entrpoy(S_v)$ ![](https://i.imgur.com/1LFsrfo.png) [動態圖表(切割資料)](http://www.r2d3.us/visual-intro-to-machine-learning-part-1/) ![](https://i.imgur.com/wOxHcck.png) 上面綠色區塊以及下面藍色區塊比較集中 左下的資料比較雜亂,因此切割成三個區域 **切得太深可能會發生Over Fitting** ![](https://i.imgur.com/ur2ezKZ.png) 這裡的準確度差異就有點大,可能是切得太深造成Over Fitting 盡量要使資料能比較General(放諸四海皆準) ## Lab 1-2 [練習2 /mlsec/malware/malware-classification.ipynb](http://127.0.0.1:8888/notebooks/mlsec/malware/malware-classification.ipynb) - What to do? - Using Decision Tree to detect malware - Play tree-based algorithm - Which algorithm is best, why? 在windows底下的檔案屬於[PE](https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%A7%BB%E6%A4%8D%E5%8F%AF%E6%89%A7%E8%A1%8C) 在linux底下檔案屬於[ELF](https://zh.wikipedia.org/wiki/%E5%8F%AF%E5%9F%B7%E8%A1%8C%E8%88%87%E5%8F%AF%E9%8F%88%E6%8E%A5%E6%A0%BC%E5%BC%8F) ![](https://i.imgur.com/v9AmoXS.png) 最後一個欄位**legitimate**是最重要的(我們關注的欄位) ## Lab 1-3 [練習3 /mlsec/network/nsl-kdd-classification.ipynb](http://127.0.0.1:8888/notebooks/mlsec/network/nsl-kdd-classification.ipynb) ## challange of Symbolists 符號理論學派ㄉ挑戰 - Knowledge Acquisition - Set of Rules - Limitation - difficult to address uncertaincy ## 補充 cyber grant challenge 做出一個機器能自動 攻擊/防守 # 類比推理學派(Analogizers) 學習的關鍵是認識各種情況的相似之處,從而推斷其他情境的相似地方。 以**距離**及**相似度**來判斷 **維度越高越可能造成overfitting** ## Regresion > regression = finding relationships between variables ![](https://i.imgur.com/RYr2LwL.png) 找到一條線,使得所有點到線的距離總和最低 以下有各種維度 ### Liner ![](https://i.imgur.com/92wjdea.png) ### Polynomial ![](https://i.imgur.com/sWFIKfp.png) ## Model optimization 最優化模型 ### grandient descent(梯度下降法) (做Regression最常用) 沿著斜率逐漸往下走直到最低點,使得各點**ERROR值總合為最小** ![](https://i.imgur.com/oHVefrx.png) 當數值皆穩定下降,則數值(**alpha**、**iters**)為佳 > alpha:學習速率 > iters:學習次數 > [練習學習速率的好網站 :\)](https://developers.google.com/machine-learning/crash-course/training-and-test-sets/playground-exercise) ### Grandient descent ![](https://i.imgur.com/6CPOzE6.png) ## Lab 2-1 [練習4 /mlsec/intro/00-linear-regression.ipynb](http://127.0.0.1:8888/notebooks/mlsec/intro/00-linear-regression.ipynb) - What to do - Understand Gradient Descent Algo - Adjust alpha/learning rate ## Learning Rate ![](https://i.imgur.com/i4xODBt.png) Learning Rate的大小會影響模型Accuracy的穩定度 - Learning Rate 太大 雖然知道數值應該往哪邊調整,但是會一直無法收斂 - Learning Rate 太小 每次數值調整的幅度太小,會使得數據調整時間太久 我們可以每次根據不同的情況來調整Learning Rate <img style="-webkit-user-select: none;margin: auto;cursor: zoom-in;" src="http://1.bp.blogspot.com/-K_X-yud8nj8/VPmIBxwGlsI/AAAAAAAACC0/JS-h1fa09EQ/s1600/Saddle%2BPoint%2B-%2BImgur.gif" width="542" height="419"> ## Lab 2-2 [練習5 /mlsec/intro/01-logistic-regression.ipynb](http://127.0.0.1:8888/notebooks/mlsec/intro/01-logistic-regression.ipynb) - What to do - Make a sigmod function ## Decision Boundary 決策邊界 ### K-nearest neighbor classifier(KNN) ![](https://i.imgur.com/8C6YPfz.png) <!-- 尋找更佳標題中... --> **練習** [練習 /mlsec/network/nsl-kdd-classification.ipynb](http://127.0.0.1:8888/notebooks/mlsec/network/nsl-kdd-classification.ipynb) ### K-means ![](https://i.imgur.com/xU2tAnd.png) ### Lab 2-3 Kmean clustering [練習 /mlsec/intro/04-kmeans-pca.ipynb](http://127.0.0.1:8888/notebooks/mlsec/intro/04-kmeans-pca.ipynb) ### Support vector machines(SVM) 由低維度投影至高維度,並用平面在上面做切割 > [介紹影片](https://www.youtube.com/watch?v=3liCbRZPrZA) {%youtube 3liCbRZPrZA %} ### The Curse of Dimensionality 維度越低越好 對於高維度的各點,距離都很遠 ![](https://i.imgur.com/CaPzkIt.png) # 貝式定理學派(Bayesians) 學習是機率推理的一種形式 好的假設一直更新 => 越來越好 - 根據 **時間** **證據** 更新 **hypothesis** 可信度 透過經驗作調整,證據夠多時間夠久就可以找最好的答案 ![](https://i.imgur.com/Uv9rsFj.png) 更新機率 ![](https://i.imgur.com/9kUYK1s.png) **事前機率很重要** ![](https://i.imgur.com/ESO5XPv.png) 好的假設會一直更新,且越來越好 >why Bayesians? >人們往往會透過機率去做選擇 >像是當降雨機率高時,人們會較常帶雨傘出門 >所以可以利用貝式定理來做機器學習 同樣的機器,在不同環境條件下,會造成不同結果 => **事前機率很重要**(因為很重要,所以說兩遍) 要有好的事前機率 不然事後機率會誤導你? (目前只能透過 **經驗** 或 **猜?** 來得到事前機率) ## Lab 3-1 [練習6 /mlsec/spam/spam-fighting-blacklist.ipynb](http://127.0.0.1:8888/notebooks/mlsec/spam/spam-fighting-blacklist.ipynb) - What to do - Implement blacklist mechanism - Implement Bayes detector ## Markov chain 將貝式的結果轉成圖 ![](https://i.imgur.com/yQtocdP.png) 將矩陣相乘 ![](https://i.imgur.com/ov31P4W.png) ## Hidden Markov 資料中有可以觀察到的/不能觀察到的 不能觀察到的資料之間可能也會互相影響 ![](https://i.imgur.com/5auRCDr.png) ## 蒙地卡羅樹搜尋 Monte Carlo Tree Search [wikipedia](https://zh.wikipedia.org/wiki/%E8%92%99%E7%89%B9%E5%8D%A1%E6%B4%9B%E6%A0%91%E6%90%9C%E7%B4%A2) alphaGO會用的演算法(下棋類) ![](https://i.imgur.com/jf9I2mi.png) ### 補充 Google Page Rank 利用網頁上超連結個數和品質分析網頁的演算法 ![](https://i.imgur.com/vhGcJ1o.png) # 演化論學派(Evolutionaries) - 物競天擇 - Change and Select - Fitness - Mutate - Cross-over 隨機挑選出population,看fittness高低選擇誰留下 繁衍下一代,選擇突變... ![](https://i.imgur.com/tEsf1z8.png) 最重要的是 Crossover 和 Mutation ![](https://i.imgur.com/NruUQXw.png) ## 基因演算法(GA, genetic algorithm) ![](https://i.imgur.com/hDbLGbd.png) - 編碼 每一條染色體是由許多基因所組成 可以用0/1或是實數來編碼 - 產生初始母體 - 計算合適度函數 針對每一條染色體,計算合適度函數(Fitness function) 評估每一個解的好壞程度,判斷是否要保留 - 選擇與複製 由合適度函數的數值,把每一條染色體由數值大至小(優至劣)進行排列,選擇最優秀的一定百分比的染色體進行複製。 - 交配 由選擇與複製所留下的染色體,選出兩條染色體,進行交配。 - 突變 設定一突變率,小部分的染色體會互換基因 # 類神經網路學派(Connectionists) 模擬人腦,設計網路架構 有很多神經元(neural)互相傳遞資訊 - softmax classfication ![](https://i.imgur.com/A5L7D2n.png) 每個pixel都會連結到每個node **讓大的數值任它接近1,讓小的數值盡量接近0** ![](https://i.imgur.com/UBoscRZ.png) 矩陣相乘後加上位移 ![](https://i.imgur.com/1WaOkOv.png) entropy希望越低越好 ![](https://i.imgur.com/d257M4k.png) {%youtube LeAacAzd6oY %} ![](https://imgur.com/wIvsKSc.gif) > [name=鄭皓玶]轉成gifㄌ ## 激勵函數 ### S函數(sigmoid) ![](https://i.imgur.com/LTUnmaj.png) ![](https://i.imgur.com/fhjHkOd.png) 從圖中可以發現到Sigmoid的Accuracy上升速度很慢 ### 修正線性單元(ReLU, Rectified Linear Unit) 用於對上一層的所有輸入求加權和,然後生成一個輸出值(通常為非線性值),並將其傳遞給下一層,此函數是為解決梯度爆炸問題。 低於零的時候很緩慢,超過 0 的時候就上升比較快 ![](https://i.imgur.com/z5LhlFS.png) ![](https://i.imgur.com/c0ucrV2.png) 從圖中可以發現ReLU的Accuracy上升速度很快 ReLU可以比sigmoid更快速訓練模型 ### Demo Overfitting ![](https://i.imgur.com/XEPSbOR.png) 因為learning rate固定,造成Accuracy的不穩定 有時候明明已經走到終點,但是又會走超過 testing & training 差距太多可能是**overfitting** {%youtube iCtkEvMEhpc %} **Solution** ![](https://i.imgur.com/lt1ptSN.png) 將learning rate**修正為不定值** 在經過判斷cross entropy大小來調整learning rate,如果cross entropy較小就讓learning rate調低,反之亦同 >cross entropy ![](https://i.imgur.com/d257M4k.png) ## 卷積神經網路 (CNN, Convolution Neural Networks) > CNN=Convolution + Neural Networks ![](https://i.imgur.com/GQppHNm.png) 專用於擷取圖片特徵 ![](https://i.imgur.com/SI0AGqQ.png) ### convolution ![](https://i.imgur.com/NcydXm0.png) ## 遞歸神經網路 (RNN, Recurrent Neural Networks) ![](https://i.imgur.com/0iC9d1y.png) 專門用於擷取文章特徵 ## 長短期記憶模型 (LSTM, Long short-term memory) ![](https://i.imgur.com/O72athG.png) 適合於處理和預測時間序列中間隔和延遲非常長的重要事件 > [RNN 與 LSTM 的介紹](https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_rnns_lstm_work.html) # Other ## PCA(Principal Component Analysis) 去除相依性,避免從不同的feature裡面學到錯誤 如果x和y呈線性關係,可以以其中一個當作feature,做出剩下1維的圖 - 將坐標軸中心移到數據的中心,然後旋轉坐標軸,使得數據在C1軸上的變異數最大,即全部n個數據個體在該方向上的投影最為分散。意味著更多的信息被保留下來。C1成為第一主成分。 - C2第二主成分:找一個C2,使得C2與C1的共變異數(相關係數)為0,以免與C1信息重疊,並且使數據在該方向的變異數儘量最大 ![](https://i.imgur.com/XnKVnMi.png) # 模型攻擊 ## 練習一 [練習一 (/mlsec/adversarial_learn/classifier-poisoning.ipynb)] train一個machine learning 的model去對抗 adversarial_learn 對抗式 直接更改model本身,使得model的判斷出現錯誤 (http://127.0.0.1:8888/notebooks/mlsec/adversarial_learn/classifier-poisoning.ipynb) **原圖** ![](https://i.imgur.com/hcCm4yw.png) **攻擊後** 在原模型中塞入幾個異常點`*`使得判斷線移動 ![](https://i.imgur.com/p8JzgNN.png) ## 練習二 [練習二 (/mlsec/adversarial_learn/binary-classifier-evasion.ipynb)](http://127.0.0.1:8888/notebooks/mlsec/adversarial_learn/binary-classifier-evasion.ipynb) 用樣本(sample)錯誤訊息去誤導 - vectorizer 一個字出現的頻率 - classifier 惡意xx? 如果拿到一個model 可以reverse 別人的演算法 在垃圾郵件中塞入一堆不是垃圾訊息的片段,可能會讓Model誤以為不是垃圾郵件 ![](https://i.imgur.com/MMmfF6G.png) 在[13]可以找到垃圾訊息比重最低的字串`t/s` 原本的垃圾訊息(1)`<script>alert(1)</script>`再加上1000個`t/s`後會被誤判為一般訊息(0) ## 練習三 [練習三(/mlsec/log_attack_traffic_analysis/NetworkMonitor.ipynb)](http://127.0.0.1:8888/notebooks/mlsec/log_attack_traffic_analysis/NetworkMonitor.ipynb) # Auto ML ## Difficult Task in ML - Data Analysis/Data Purification 資料分析/資料純化 - (If NN is used) Find the best network structure (如果使用NN)找到最佳的網絡結構 - Hyperparameter Tuning 超參數調整 ## Importance of architectures for Vision - Designing neural network architectures is hard 設計神經網絡架構很困難 - Lots of human efforts go into tuning them 許多人努力調整它們 - There is not a lot of intuition into how to design them well 如何很好地設計它們並沒有很多直覺 - Can we try and learn good architectures automatically? 我們可以嘗試自動學習良好的架構嗎? 嘗試使用ML來訓練ML > 原始: Solution = ML expertise + Data + Computation > 新: Solution = Data + 100\*Computation 重複多次,將參數做小量修正,將所有可能情況列舉,找出最佳 ![](https://i.imgur.com/DsQbkbj.png) [練習1 /mlsec/preprocess/sklearn-gridsearch.ipynb](http://127.0.0.1:8888/notebooks/mlsec/preprocess/sklearn-gridsearch.ipynb) [練習2 /mlsec/preprocess/missing-values-imputer.ipynb](http://127.0.0.1:8888/notebooks/mlsec/preprocess/missing-values-imputer.ipynb) # Interpretable Machine Learning ![](https://i.imgur.com/2bPlwZ3.png) 我們不能只是以"那是機器做出的選擇"當作理由太過不負責任 如果我們不知道ML到底學到了什麼,如果出錯了我們就不能知道問題出在哪裡 如果我們能知道機器在想什麼,或是我們能知道機器學了什麼,就能解決這樣的問題 - Problems - Debugging the model - Determine whether the model is synchronized with our knowledge - Judge the decision of a model - What knowledge, information the model can teach us > We need to understand the model we trained – Interpretability, or reasoning ## Explain Data 去理解資料 - Before building any model 建立任何模型之前 - Visualization for data exploration 可視化數據探索 - Exploratory data analysis 探索性數據分析 ![](https://i.imgur.com/PjhU51Y.png) ## Interpretable models 一開始就將Model設定的簡單容易理解 ### Algorithm - SVM - Decision Tree - Bayesian - Markov Chain - NN 可能會造成太複雜 ![](https://i.imgur.com/I7yksV7.png) ## Explain Model - 去理解Model的想法,是甚麼影響它的決策 ![](https://i.imgur.com/9BCFH98.jpg) - 將判斷中的weight高低圖拉出來看 ![](https://i.imgur.com/n6Znv5F.png) - 調整變因,去看看Model會不會因為資料不同而產生不同解果 ![](https://i.imgur.com/qnhBf5z.png) ## Local explaination ### LIME ![](https://i.imgur.com/V7RZ7W5.png) 將整個圖片分成幾塊,嘗試拿掉幾塊去看看整個判斷是否有改變 ![](https://i.imgur.com/PWvL3Wt.png) [練習 (/mlsec/model_reasoning/lime-explainability-spam-fighting.ipynb)](http://127.0.0.1:8888/notebooks/mlsec/model_reasoning/lime-explainability-spam-fighting.ipynb) 將單一郵件的資料丟進去,去看看為甚麼會被標記成spam ![](https://i.imgur.com/K2l14x5.png) ### SHAP 嘗試移除幾個feature,看看兩者之間的差異 - SHAP is black-box agnostic and provides local explainability via additive feature attribution - Shap values quantify feature importance - They correspond to the average distance between the model’s answer and all possible reduced models that omit a feature ![](https://i.imgur.com/m1XypEf.png) ## Global explaination >Global interpretability 幫助我們了解每個 feature 與預測值之間的關係。除此之外,global interpretability 給予我們對於預測值而言,每個 feature 影響的方向 & 數字尺度的概念。 先訓練出複雜的classifer,再輸入資料到classifer裡面,得到相對應的輸出 ![](https://i.imgur.com/Lhpz1iX.png) 再利用上面拿到的資料建立一個Decision Tree,Train出一個簡單的classifer ![](https://i.imgur.com/NeOEZO1.png) # Lab詳細 [Lab 0-1](/6uiWpQ6STKixyvs63UNu2Q) [Lab 1-2](/rqCmvjG6QdKvnx2kW5amsA) [Lab 1-3](/VQyx-xSMTJ-dI7NQT4wc8w) <style> span.hidden-xs:after { content: ' × ML Security' !important; } </style> ###### tags: `ML Security`