# Machine Learning & Deep Learning 介紹 # Machine Learning名詞 y=b+w×x 整個方程式就是一個model 1.feature (x) 2.Label (y) 3.bias誤差 (b) 4.weight權重 (w) 5.model bias = 實際模型-預測模型 6.confusion Matrix混淆矩陣 ![混淆矩陣](https://i.imgur.com/rtf2DwZ.png) ![型一型二錯誤](https://i.imgur.com/BgsHkOE.png) 常用data base: MNIST CIFAR-10 # Machine Learning目標 **1.Regression: The function outputs a scalar.** 特色: (1)預測天氣 (2)label 為連續性 ![](https://i.imgur.com/bZJhSim.png) x是input,也就是我們參考的**feature** y是output,也就是我們訓練的目標**label** 我們透過調整b(bias)、m(weight,權重),使我們方程式能接近我們想要的結果 [**loss function可用 MSE(Mean Square Error) MAE(Mean Absolute Error)來衡量**](https://reurl.cc/kLW143) **2.Classification: Given options (classes), the function outputs the correct one.** 特色: (1)選出正確的選項 (2)label為「非連續性」 ![](https://i.imgur.com/oHvNxYA.png) **決策邊界(decision boundary):中間的紅線可以將資料分類** [**Loss function 可用 cross entropy 交叉熵來衡量**](https://reurl.cc/kLW143) **3.Structured Learning: create something with structure (image, document)** 特色:自己做出結構性的物品 (如:特斯拉的環境感知) # Machine Learning 作法 ![](https://i.imgur.com/VRj7QuN.png) <br><br> # Machine Learning方程式拆解 方程式可以被拆成 常數+一堆(Piecewise Linear Func)線段型方程式 線段型方程式越多 → 越接近真實情況 ![PieceWise Linear Curves](https://i.imgur.com/Gkvyovp.png) ![sigmoid函數講解](https://i.imgur.com/YuZQUQR.png) <br><br><br> **Optimization of NewModel** 步驟1:將一個大的資料集切成小batch 步驟2:分別計算Gradient& lost Func 步驟3:計算完後優化 **步驟2.3做完為一個epoch(時代) 更新一次參數叫update** ![optimization of New Model](https://i.imgur.com/31shote.png) **例題:** ![例題](https://i.imgur.com/jNOF6UL.png) # Neural Network名詞 Input Layer輸入層 Hidden Layer隱藏層 Output Layer輸出層 ![layer種類](https://i.imgur.com/or9tKRl.png) **[Cost Func成本函數:](https://youtu.be/IHZwWFHWa-w?t=209)** 有點類似懲罰項的功能,用來協助函數判斷做出來的東西符不符合預期 Hyper Parameter: ML 中需要自己設定的參數 **[Gradient 梯度:](https://youtu.be/IHZwWFHWa-w?t=471)** The direction of steepest increase 函數增加最快的方向(最陡) **Gradient Descend梯度下降:** 反覆將input 照負梯度的倍數來輸入,讓成本函數向最小值收斂 1.不是只要找誰該增加or減少,應該要找更改哪一個值cp值最高 如何找出函數最小值(最優解)? 1.對函數做微分 斜率為正-往左找 斜率為負-往右找,直到微分為0時 2.Learning Rate 協助設定找下一個值的時候,應該要跨出去多大一步 <br> **激勵函數(用來決定收到input後要不要做反應):** 1.ReLU(最常用):若值為正數,則輸出該值大小,若值為負數,則輸出為0, ![](https://i.imgur.com/wPH8dbA.png) ![](https://i.imgur.com/ForKvxC.png) 2.Sigmoid:將Label 壓在0-1之間 缺點:在輸出接近 0 或 1 的時候可能產生梯度消失 (vanishing gradient) ![](https://i.imgur.com/RMTepE3.png) ![sigmoid](https://i.imgur.com/JRioCJE.png) <br> <br> **[Backpropogation反向傳播演算法:](https://www.youtube.com/watch?v=Ilg3gGewQ5U)** 從最後一層Output Layer 回推&優化前一層的weight,然後一層接一層的往前優化weight [**OverFitting:**](https://youtu.be/bHcJCp2Fyxs?t=3221) 層數變多 在training set的資料準度變高;但在沒看過的資料上沒有變好 overFitting 解決方法: 1.增加更多training data 例如:[Data augmentation影像資料增補 (影像辨識將圖片左右翻轉)](https://youtu.be/WeHM2xpYQpw?t=1326) 2.增加model的限制 ![overFitting介紹](https://i.imgur.com/ll0pQCl.png) **Machine Learning交換格式:** ONXX(Open Neural Network Exchange): 針對機器學習所設計的開放式的文件格式,用於存儲訓練好的模型。它使得不同的人工智慧框架(如Pytorch、MXNet)可以採用相同格式存儲模型數據並交互。 ONNX的規範及代碼主要由微軟,亞馬遜,Facebook和IBM等公司共同開發目前官方支持加載ONNX模型並進行推理的深度學習框架有: Caffe2, PyTorch, MXNet,ML.NET,TensorRT 和 Microsoft CNTK,並且 TensorFlow 也非官方的支持ONNX。 # Machine Learning 遇到問題時的解決方案: ![Loss ON Training Data](https://i.imgur.com/6eFhwUv.png) [1.Model bias V.S. Optimization 如何判斷?](https://youtu.be/WeHM2xpYQpw?t=713) 答:56層 預測結果卻沒比 20層的好 optimization有問題 [2.OverFitting V.S. Mismatch 如何判斷?](https://youtu.be/WeHM2xpYQpw?t=1132 ) Mismatch: 訓練資料跟測試資料分布不同,增加樣本也沒用 overFitting 解決方法:增加更多training data 例如:[Data augmentation影像資料增補 (影像辨識將圖片左右翻轉)](https://youtu.be/WeHM2xpYQpw?t=1326) benchmark corporate 衡量語音辨識模型: 所謂benchmark corporate的意思就是,有一些data set是公開的。用來訓練語音辨識的資料集。 所有人都共用一模一樣的testing set,那我們就可以比較不同模型的好壞。但是問題是這些testing set的結果都是public的。所以就算是一個很廢的模型,它只能產生很廢的function。只要做得夠多,你還是可以在public的set上得到好的結果。那這就解釋為什麼說這些benchmark corporate最終往往機器可以得到超乎人類的結果。 ![cross validation](https://i.imgur.com/5SVEvc2.png) # 模型訓練不起來怎麼辦? **用Batch and Momentum訓練技巧** 名詞解釋: 1.saddle point鞍點: (如圖左右是最高點 但前後不是) 2.locale minima局部最小值:前後左右都最小 ![](https://i.imgur.com/Bv0qjNH.png) [通常都是saddle point 而非locale mininma](https://youtu.be/QW6uINn7uGk?t=1534) ----------------------------------- 小batch v.s大batch ![](https://i.imgur.com/VQeg8gm.png) (平行運算可協助解決,所以大batch size不一定比較慢) Sharp Minima v.s. Flat Minima 通常喜歡flat Minima ,因為假設有mismatch的情況(虛線),誤差比較小 ![](https://i.imgur.com/LSmakt9.png) ------------------------------------ momentum動量: 特色: [有可能對抗一些Local Minima 和 Saddle Point](https://youtu.be/zzbr1h9sF54?t=1358) 假設在物理世界,Error Surface是斜坡,參數是一顆球,把球從斜坡上滾下來,因為慣性夠大且若動量夠大,有可能不會卡在Local Minima與Saddle Point [Vanilla Gradient Descent](https://youtu.be/zzbr1h9sF54?t=1437) 從Θ0開始,計算其Gradient Descent g0,往g0的反方向update參數,重複以上步驟 [Gradient Descent + Momentum](https://youtu.be/zzbr1h9sF54?t=1481) 原本:往Gradient的反方向 變成:往Gradient的反方向 + 前一步移動的方向 [可發現m可寫成Gradient的weigted Sum](https://youtu.be/zzbr1h9sF54?t=1663) Momentum可解讀成 1.Gradient的反方向 + 前一步移動的方向 2.考慮的Gradient是過去所有Gradient的總和 [上面看不懂可以看動畫](https://youtu.be/zzbr1h9sF54?t=1753) ![](https://i.imgur.com/rdUJQIN.png) --------------------------------- Learning Rate(學習速率) 定義:模型調整時的步伐要跨多大 **比較平滑的地方用大的learning Rate** **比較陡俏的地方用小的learning Rate** 如下圖 ![](https://i.imgur.com/QCsb2LB.png) RMS prop:可以動態調整learning Rate ※Adam演算法: RMSprop + Momentum(現在常用的方法) Learning Rate Scheduling: 1.Learning Rate Decay (有點類似系統資源配置演算法的aging) 2.Warm Up (BERT常用) ![](https://i.imgur.com/E1pkVhL.png) 總結:Gradient descend之進化 Vanilla Gradient descend: 固定的步伐大小與當前Gradient方向 Various Improvements: 1.g:Momentum:考慮過去所有Gradient方向來調整方向 2.σ:Root Mean Square:考慮過去所有Gradient的大小來調整步伐幅度 3.η:Learning Rate Scheduling:考慮時間來調整參數的更新速度 不論是什麼Optimizer,幾乎都是考慮、調整這三個參數 ----------------------------- **Classification as regression:** classfication:通常會將原始值(會有很多值)用softmax 轉換成y'(0-1) 進一步變成label(0 or 1) softmax用途: 1.Softmax 回歸是使用 Softmax 運算使得最後一層輸出的機率分佈總和為 1,舉一個例子,假設我們要辨識手寫數字 0~9,輸入一張數字的影像後,經由 Softmax 回歸,最後將會輸出該影像屬於 0 ~ 9 個別的機率為何,且其個別的機率總和為 1。 2.Softmax 函數通常會放在類神經網路的最後一層,將最後一層所有節點的輸出都通過指數函數 (exponential function),並將結果相加作為分母,個別的輸出作為分子。 (如圖) ![](https://i.imgur.com/aRKcWuO.png) 1.cross entropy交叉熵 比 MSE在日常生活更常被用 [2.Cross-entropy常用到什麼地步?](https://youtu.be/O2VkP8dJ5FE?t=846) pytorch裡面Cross-entropy內建Softmax!! ![](https://i.imgur.com/R0tMXow.png) 3.MSE在 loss很大的地方沒有gradient 找不到 ![](https://i.imgur.com/WrscJ5Y.png) ----------------------------- **Batch Normalization 批次標準化** 1.抽樣做normalization 以節省時間 不然gpu會無法負荷 2.如果是線上服務要做batch normalization不可能每次都等資料全部到齊才做啊? 答:在每次搜到資料時,做moving average 移動平均數,來更新μ ![batch Normalization](https://i.imgur.com/lQE72i5.png) ------------------------- # **Convoultional Neural Network (卷積神經網路) CNN** ![](https://i.imgur.com/WUXaQs0.png) **名詞解釋** 1.Tensor張量: 維度>2的矩陣 2.channel通道: 圖片的層數 3.kernel: 大圖片被切成一小片 4.stride: kernel 移動的距離 5.padding: 超出Receptive Field 的部分(通常用0補起來) 6.Receptive Field 接受區: * (1)把整張圖片切成一個一個區塊 (2)Receptive Field 可以重疊 (3)形狀可以用不同形狀 (例:長方形) ![Receptive Field](https://i.imgur.com/ZXelWGY.png) (4)通常所有channel都會看且都設的很小(3x3) ![kernel size](https://i.imgur.com/Wg5TbA4.png) ![](https://i.imgur.com/47gofe9.png) <br><br><br> **圖片怎麼分類?** 1.一張圖片=3維Tensor 分成RGB ![3維Tensor 分成RGB](https://i.imgur.com/1HJyXvi.png) 2.找一些特徵來看就好(例:一隻鳥只看喙就知道了) ![找一些特徵來看就好](https://i.imgur.com/RAzVclp.png) **Receptive Field的 Neuron 偵測的內容&weight重覆怎麼辦?** 答:parameter Sharing(例如:同一門課不用在不同科系上課 統一開一門就好) **共用參數的Neuron叫做Filter** ![](https://i.imgur.com/Hg1yOfK.png) <br><br><br> **Convolutional Layer = Receptive Field+parameter sharing**(很重要) [有用到Convolutional Layer的網路 叫做CNN](https://youtu.be/OP5HcXJg2Aw?t=1779) ![Convolutional Layer](https://i.imgur.com/oVB6xOB.png) <br><br> Feature Map:一堆做一樣步驟的filter ![Feature Map](https://i.imgur.com/UtEinIj.png) <br><br> [原本3層RGB →64層channel](https://youtu.be/OP5HcXJg2Aw?t=1749) ![Multiple Convolutional Layer](https://i.imgur.com/0K1Hw3j.png) Pooling 池化: 把圖片變小 現在因為運算能力變強了,有時候連pooling都不做,只做convolution ![](https://i.imgur.com/x9o0lsD.png) Flatten :把矩陣拉直變成向量 ![](https://i.imgur.com/4Bwbtmc.png) Data Augmentaion:把圖像左右顛倒 旋轉 來幫助訓練影像辨識 但是CNN不行用Data Augmentation要怎麼辦? 答:Spatial Transformer Layer ![data augmentation](https://i.imgur.com/2OiR6lv.png) [Sigmoid, Softmax怎麼來?為什麼要用MSE和Cross Entropy?談廣義線性模型:](https://www.ycc.idv.tw/deep-dl_4.html) Regression問題時,Normal Distribution使用Linear當Activation Function Binary Classification問題時,Bernoulli Distribution使用Sigmoid當Activation Function Multi-class Classification問題時,Categorical Distribution使用Softmax當Activation Function 當定義完成含有擬合參數的分布模型後,我們就可以用MLE或MAP來找到擬合的優化方式: Regression問題時,使用Mean Square Error Binary Classification問題時,使用(狹義的)Cross Entropy Multi-class Classification問題時,使用 Multi-class Cross Entropy 所有這些以前不加解釋的東西,都可以由廣義線性定理推導出來。 <br><br> # **Self Attention自注意力機制** ## **input部分:** [用one hot encoding 無法判斷字跟字之間的關係,但word Embedding可以](https://youtu.be/hYdO9CscNes?t=111) ![](https://i.imgur.com/ZTS1Y3Q.png) [將聲音→vector](https://youtu.be/hYdO9CscNes?t=204) 1.通常用window框出來 2.常用window大小: 25ms 3.常用移動大小: 10ms 4.1個 frame = 10ms ,1sec有 100個frame ![](https://i.imgur.com/tWLgdK5.png) [將圖→vector](https://youtu.be/hYdO9CscNes?t=331) ![](https://i.imgur.com/l0DHcPd.png) ![](https://i.imgur.com/1UcF0w5.png) ## output部分: [N to N](https://youtu.be/hYdO9CscNes?t=405) 多對多輸出例子(sequence labeling): 1.POS tagging (詞性標註) (part of speech) 2.部分的語音辨識 3.social Network ![](https://i.imgur.com/LF4j50O.png) [N to 1](https://youtu.be/hYdO9CscNes?t=578) 多對一輸出例子: 1.sentiment analysis語意情緒分析 2.語者辨認判斷誰說話的 3.graph ![](https://i.imgur.com/eGvu4sB.png) [N to ? ](https://youtu.be/hYdO9CscNes?t=655) 多對?輸出例子(seq 2 seq): 1.不知道要輸出幾個,由transformer 自己決定 [Fully Connected Layer:](https://ithelp.ithome.com.tw/articles/10220782) 在整個 CNN model 中,如果說前面的 Convolution layer 是為了把 Feature 從Input Image中取出來,那麼通俗來說,Fully connected layer就是為了把萃取來的Feature 對映(Mapping) 到樣本Label的空間(Space)中做Classification Why self attention? [sequence labeling無法精準將單一來源轉成不意思→將windows擴大把附近的字也框起來→依舊不准?→Self Attention](https://youtu.be/hYdO9CscNes?t=736) **Self Attention:** 特色: 1.吃幾個vector 就輸出幾個vector 2.每個vector都考慮過整個句子 3.可以一直重複用 ![](https://i.imgur.com/fLxq7QO.png) [運作方式:](https://youtu.be/hYdO9CscNes?t=1161) ![](https://i.imgur.com/ruhVal5.png) 1.根據a1 找出與其他相關的vector = α ![](https://i.imgur.com/jQHwfh9.png) 2.計算α的模組:計算q&k的矩陣,做dot product ![](https://i.imgur.com/CWTXTkx.png) 3.q1叫做query k2 k3...叫做key 對q1 k2 k3...相乘計算關聯性 ![](https://i.imgur.com/38Gl2zG.png) 4.做soft max 或是其他activation func(例如relu) 5.把所有α+v 並加起來就是b2 ![](https://i.imgur.com/VIh9r9D.png) Multi-head Self-attention(現在常用) 定義:有多個 q k v ## [Position Encoding](https://youtu.be/gmsMY5kc-zw?t=1159) 定義:為每一個位置設一個Positional vector,把ei+ai ![](https://i.imgur.com/bhIPGuN.png) 內容: Self Attention 原本是沒有位置的資訊,如果想要有位置資訊就用Positioin Encoding Self-attention跟CNN的關係如下 ![](https://i.imgur.com/8T2N3Vm.png) 資料量小的時候: CNN>Self-attention 因為彈性較小,需要資料少的較不易overfitting 資料量大的時候 Self-attention > CNN 因為彈性較大,需要較多資料才不會overfitting self attention v.s. RNN **RNN多被Self-attention 取代** 原因: 1.RNN 的vector如果離太遠會無法讀到前面的vector 2.RNN 無法平行處理,只能等前一個運算資料跑完接到下一個(sequential) <br><br> # **Transformer** [sequence to sequence (seq2seq)](**https://youtu.be/n9TlOhRjYoc?t=1549**) 定義:給vector 輸出處理過vector 構成: 1.encoder 將vector轉換成decoder需要用的vector ![](https://i.imgur.com/Xvfizjm.png) [2.decoder:](https://youtu.be/N6aRv06iv2g?t=487) (1)接受encoder處理過的vector再產生輸出 (2)如果前面輸入錯誤,有沒有可能造成error propogation的問題? 有可能但能處理 [(3)decoder 可能讓輸出不斷持續,所以要加一個中斷,以免無限產生](https://youtu.be/N6aRv06iv2g?t=811) ![](https://i.imgur.com/2Hb9f4E.png) NAT 好處: 1.平行化處理,END後面的當作沒有 [2.比較好用(classfifier)控制輸出長度](https://youtu.be/N6aRv06iv2g?t=1269) 壞處: 1.performance往往比AT差 ![](https://i.imgur.com/elhZz2w.png) 流程:如圖 ![](https://i.imgur.com/9EV5cyh.png) encoder與decoder如何溝通? cross attention!!! 步驟: 1.decoder吃begin 產生q(query) 2.encoder產生α並計算k(key) 3.α1*v1 α2*v2....產生v(綠色) ![](https://i.imgur.com/FTkEU6U.png) [Teacher Forcing:](https://youtu.be/N6aRv06iv2g?t=2162) 定義:告訴decoder ground truth,並且做為decoder的輸入 ![](https://i.imgur.com/B2hUo9d.png) [Guided Attention:](https://youtu.be/N6aRv06iv2g?t=2502) 定義:強迫機器要將每個東西都看過 用途:避免機器漏字發生在:語音合成、TTS(text to speach)等情況 ![](https://i.imgur.com/BU8AGdl.png) [Beam Search:](https://youtu.be/N6aRv06iv2g?t=2842) 定義:找一個最有可能的路徑 內容:有時候有用(答案非常明確:語音辨識),有時候沒用(答案不明確:有創造力的內容如文章撰寫) Greedy Decoding:每次都選機率最高的 ![](https://i.imgur.com/gLdMrvJ.png) **[Decoder有時候要加一些雜訊,這樣才會訊連結果比較好](https://youtu.be/N6aRv06iv2g?t=3242)** Exposure Bias: 定義:訓練跟測試的看到的內容不一樣 解決方法:Scheduled Sampling (訓練時加入錯誤的資訊) ----- ## Self Supervised Learning(自監督式學習) 定義: 沒有label的learning就是Self Supervised Learning ![](https://i.imgur.com/S3OyCtX.png) 過程: 1.隨機將輸入的一部分蓋住 蓋住的方法: (1)mask:蓋住的符號 (2)random:加隨機的符號 2.隨便找句子 加入cls sep 3.看看兩個句子是否相接 如果輸出是Yes→相接 輸出是no→不相接 ![](https://i.imgur.com/1tCW0Qk.png) ![](https://i.imgur.com/PTqKHsi.png) ---------------------- ## BERT 名詞解釋: 1.Fine-Tune(微調):分化成不同任務 2.Pretrain:產生BERT 功能: 1.找遮住的字是甚麼(填空題) 2.找下一句是甚麼 3.微調後可以進行不同工作 ![](https://i.imgur.com/Dqqp64R.png) BERT能力如何衡量: **GLUE (General Language Understanding Evaluation):** 用9個任務來協助衡量BERT模型 ![](https://i.imgur.com/Byt7HyG.png) BERT如何被使用: 1.輸入一個sequence 輸出一個類別: 例:情緒分析 BERT如果有Pretrain 會比random Initalization還好 ![](https://i.imgur.com/LLINq0D.png) 2.輸入一個sequence 輸出一個相同長度sequence 例:POS(part of speech) tagging ![](https://i.imgur.com/0KzcrZY.png) 3.輸入兩個句子 輸出一個類別 例:NLI (Natural Language Inferencee) 判斷句子是矛盾 贊成 反對... 輸入句子並且只考慮CLS的輸出→判斷是矛盾 贊成 反對... ![](https://i.imgur.com/t1S3qbd.png) ![](https://i.imgur.com/94voAx6.png) 4.問答系統 Extraction-based Question Answering:答案一定出現在文章內 輸出答案為s跟e(文章內的文字從s到e) BERT理論上吃的長度沒有限制 實際上會有限制不然運算量太大 ![](https://i.imgur.com/SJg4KSQ.png) ![](https://i.imgur.com/BF4AdHm.png) 是否可以traing decoder? 答:可以,用cross Attention 將輸入的直弄亂 旋轉.... 再丟到seq2seq 訓練 ![](https://i.imgur.com/qcXNBbV.png) ![](https://i.imgur.com/o9oQxzP.png) <br><br> # **Generative Adversarial Network生成對抗網路** **名詞解釋:** 1.Generator:可以輸出不固定的ditribution 的network 2.manifold(分歧) ![generator](https://i.imgur.com/o5GTr4r.png) --- **Why distribution?** 因為有時候答案可能是A也可能是B,所以要讓機器有模糊的空間可以判斷 --- # **訓練步驟:** step1:固定generator 更新discriminator ![](https://i.imgur.com/BmFoaZa.png) step2:固定discriminator 更新generator ![](https://i.imgur.com/BB58tx6.png) ※注意:不能調discriminator,不然輸出結果一定會是自己想要的,沒意義 重複step1&2就是 GAN --- interpolation(內插): 把輸入的向量插在 input&output之間,可以看到兩張圖片間的連續變化 ![](https://i.imgur.com/6S6IXEv.png) --- [GAN目標:讓PG&Pdata的divergence Mnimize](https://youtu.be/jNY1WBb8l4U?t=216) ![](https://i.imgur.com/BPHOyAe.png) --- [Generator 的divergence越小越好 (越不能分辨差異)](https://youtu.be/jNY1WBb8l4U?t=777) [Discriminator 的divergence 越大越好 (越能分辨出差異)](https://youtu.be/jNY1WBb8l4U?t=849) ![](https://i.imgur.com/4DtBFLj.png) --- JS Divergence: 只要不相交就一定都是log2→哪個Generator比較好就不知道了 ![](https://i.imgur.com/QOJyzKK.png) --- Wasserstein distance: 1.就是**WGAN** 像一台推土機去計算PG & Pdata,並且可以知道中間過程的好壞 2.Pdata期望值越大越好 PG期望值越小越好 3.Lipschitz 平滑用 ![](https://i.imgur.com/xO5UEeF.png) [SNGAN:](https://youtu.be/MP0BnVH2yOo?t=22) 現在效能比較好的GAN: ![reference link](https://i.imgur.com/NRNrFdv.png) --- GAN for Sequence Generation: 1.用GAN生成一段字 2.原本很困難,但google做出來了 [如何衡量GAN 的好壞](https://youtu.be/MP0BnVH2yOo?t=1151) 問題: 1.mode Collapse: Generator 發現生成某個照片可以騙過Discriminator之後,就一直用那張圖片來騙Discriminator ![](https://i.imgur.com/A0xG2eW.png) 2.mode Dropping generated data 多樣性太侷限跟real data有落差 ![](https://i.imgur.com/Fn6xl0c.png) 方法:Frechet Inception Distance(FID) 衡量real image & generated image 的gaussians distance **越小越好** ![](https://i.imgur.com/AOWpHmP.png) --- **Conditional GAN** 定義: 控制x的輸入,進一步影響Y的輸出 應用: 1.Text to image(字轉圖) ![](https://i.imgur.com/SK7nCET.png) [※在訓練時需要先標註好 text & 圖片,才可以訓練出我們想要的東西](https://youtu.be/MP0BnVH2yOo?t=2362) 2.pix to pix(圖轉圖)又叫image translation ![](https://i.imgur.com/w8JJnlz.png) --- Cycle GAN: 產生兩個generater,來避免generator直接產生一個不相干的圖片(e.g.李弘毅→女二次元圖) 去給discriminator 第一個x轉成y(二次元) 第二個y再轉成x(原本圖片) ![](https://i.imgur.com/IeRajNv.png) Unpaired Data: 定義:不成對的資料 何時會出現? Ans:風格轉換 --- adversarial attack [防範方式:](https://youtu.be/z-Q9ia5H2Ig?t=2018) 被動防禦: 1.smooth使圖片平滑 2.image compression 壓縮圖片再解壓縮 3.generator 用generator 產生圖片後再來用 4.randomization 加入隨機性(e.g.換背景底色 放大縮小) 主動防禦 1.adversarial training:先訓練有被攻擊過的圖片,再把錯誤的標示改成正確的(類似augmentation) --- ML問題: 模型: 1.可解釋性 2.可追蹤性 3.可信賴性 interpretable: 白箱但可解釋 expainable: 黑箱想辦法賦予解釋能力 資料: 1.完整性 2.有些難蒐集 3.來源不同 格式不同 4.隱私問題 (IoT之類) --- Explainable ML: 目標:讓我們能解釋該模型 分類: 1.Local Explanation:根據某張圖片給問題 Why do u think this image is a cat 2.Global Explanation:根據classifier的parameter給問題給細節 What does a “cat” look like? ![](https://i.imgur.com/PF2XK8n.png) 手段: [SmoothGrad](https://youtu.be/WQY85vaQfTI?t=1867):在同一張圖片加不同雜訊,來幫助機器把重要的部分畫清楚一點 --- **Network Compression:** Network Pruning: 把network內的參數去掉 可把參數或neuron去掉(去掉neuron效率會比較好 Lottery Ticket Hypothesis 大樂透假說: 從大network拆成小的network較好 Knowledge Distillation: [分為 teacher network & student network](https://youtu.be/xrlbLPaq_Og?t=385) ![](https://i.imgur.com/nQWxaZ1.png) Ensemble:訓練一堆模型,然後把輸出結果取平均(打比賽用) Parameter Quantization: 把參數的bits 改小 ex:16bits->8bits Architecture Design: 調整filter大小 Dynamic Computation: 定義:在不同設備用不同模型來計算 把設備與運算量配合好 方法: 1.dynamic depth 2.dynamic width --- Reinforcement Learning: 要素: 1.Policy: 針對環境所因應的準則 2.Reward: 行為的Feedback (Ex: 加分或扣分) 3.Value Function: 將狀態轉為value的fuction。RL希望最佳化Value function 4.Model:模擬環境 算法分類: 1.Policy based 2.Value based 3.Model based --- GPT->文字接龍 BERT->文字填空 BLEU Score: 衡量翻譯系統的指標 越大品質越好 大型語言模型的期待 1. 成為專才 專門解特定任務 2. 成為通才 * 想法:[所有問題都是問答的問題](https://youtu.be/F58vJcGgjt0?t=297)-> Prompt的起源 **成為專才好處:** 1. 專才在單一任務有機會贏過通才 ![](https://i.imgur.com/d6xq75k.png) ![](https://i.imgur.com/IObtEDr.png) **如何成為專才?** **[如何改裝BERT讓它成為專才? ](https://youtu.be/F58vJcGgjt0?t=833)** sol: 1. 加外掛 2. 微調(finetune * 不要重新訓練模型 * 把原來的模型做gradient descent 然後更新模型參數 ![](https://i.imgur.com/YGy5ZTV.png) 3. Adapter ![](https://i.imgur.com/igkeoS9.png) ![](https://i.imgur.com/6pXfzsa.png) ![](https://i.imgur.com/swvFd0p.png) 有了 adapter 可以只finetune adapter ,而不去整個模型的參數 只finetune adapter的參數->efficient fine tuning **成為通才好處:** 1. 只要重新設計prompt 就能快速開發新功能 ![](https://i.imgur.com/3kFHQLX.png) Instruction learning: 給題目敘述回答問題 In-cotext learning:給範例回答問題 ![](https://i.imgur.com/bR3zwpX.png) Insruction Tuning: 1. 在training時,給出要做甚麼的指令 ![](https://i.imgur.com/RKuuHKS.png) ![](https://i.imgur.com/BZAuGuy.png) Incontext learning: 1. 如果給不同domain的資料->會沒有效 [2. 給的範例不需要很多](https://youtu.be/aZ_jXZvxyVg?t=559) ![](https://i.imgur.com/rkhBgRj.png) ![](https://i.imgur.com/MjkSozY.png) --- 大模型 頓悟時刻(emergent ability) 定義:到一個時段突然accuracy飆高 ![](https://i.imgur.com/t8u6OBm.png) --- chain of thought 不直接預測y 而是把答案產生過程也寫出來 ![](https://i.imgur.com/fhgciDr.png chain of thought的招式: 1. [self consistency: 產生不同結果 然後產生信心分數權重得出最好的結果 ](https://youtu.be/HnzDaEiN_eg?t=205) [2. least to most prompting: 把複雜的數學問題拆解成簡單一點的問題](https://youtu.be/HnzDaEiN_eg?t=205) hard prompt: 輸入給機器的指令是人類看得懂的文字 soft prompt: 給一堆向量,人類看不懂的字 ![](https://i.imgur.com/29bOh6V.png) --- [scratch pad ](https://youtu.be/SaZTJJNOCOY?t=652) 類似chain of thoght,解數學的時候給機器白板讓它把過程寫出來 instruction tuning switch transformer 1. 訓練的時候訓練所有參數 2. inference的時候 只使用部分的模組 ![](https://i.imgur.com/lMQ4yar.png) --- diffusion model 步驟(reverse process) 1. 生成一個都是雜訊的圖 2. denoise (事先訂好了 遞減 會重複使用) ![](https://i.imgur.com/JRU04jZ.png) denoise 的model輸入 1. 雜訊圖 2. 參數(表示嚴重程度) ![](https://i.imgur.com/QKyY1XJ.png) denoise 模組內 noise predicter:預測圖中雜訊應該長怎麼樣 ![](https://i.imgur.com/nhyGusa.png) 加雜訊到圖片的過程(Forward Process 也可稱為diffusion process) ![](https://i.imgur.com/psbq6aH.png) text to image generator: 就是denoise 裡面noise predicter再額外加訊息(a cat in the snow)讓model訓練 ![](https://i.imgur.com/rrZ7VBb.png) --- --- <br><br> # **趨勢補充資料** fingerPrint feature space 定義:將同樣資料、演算法分成同一群 proGAN: 定義:協助將確定屬於哪一群的最高 GANprintR (removal) 定義:防止被偵測出來 ![](https://i.imgur.com/yxaI5dp.png) ![](https://i.imgur.com/Y12Wrb6.png) ![](https://i.imgur.com/eBVtcNM.png) ![](https://i.imgur.com/GRTgwUM.png) BEC 變臉詐騙 ![](https://i.imgur.com/yhyQu0R.png)