# 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混淆矩陣


常用data base: MNIST CIFAR-10
# Machine Learning目標
**1.Regression: The function outputs a scalar.**
特色:
(1)預測天氣
(2)label 為連續性

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為「非連續性」

**決策邊界(decision boundary):中間的紅線可以將資料分類**
[**Loss function 可用 cross entropy 交叉熵來衡量**](https://reurl.cc/kLW143)
**3.Structured Learning: create something with structure (image, document)**
特色:自己做出結構性的物品 (如:特斯拉的環境感知)
# Machine Learning 作法

<br><br>
# Machine Learning方程式拆解
方程式可以被拆成
常數+一堆(Piecewise Linear Func)線段型方程式
線段型方程式越多 → 越接近真實情況


<br><br><br>
**Optimization of NewModel**
步驟1:將一個大的資料集切成小batch
步驟2:分別計算Gradient& lost Func
步驟3:計算完後優化
**步驟2.3做完為一個epoch(時代)
更新一次參數叫update**

**例題:**

# Neural Network名詞
Input Layer輸入層
Hidden Layer隱藏層
Output Layer輸出層

**[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,


2.Sigmoid:將Label 壓在0-1之間
缺點:在輸出接近 0 或 1 的時候可能產生梯度消失 (vanishing gradient)


<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的限制

**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 遇到問題時的解決方案:

[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最終往往機器可以得到超乎人類的結果。

# 模型訓練不起來怎麼辦?
**用Batch and Momentum訓練技巧**
名詞解釋:
1.saddle point鞍點: (如圖左右是最高點 但前後不是)
2.locale minima局部最小值:前後左右都最小

[通常都是saddle point 而非locale mininma](https://youtu.be/QW6uINn7uGk?t=1534)
-----------------------------------
小batch v.s大batch

(平行運算可協助解決,所以大batch size不一定比較慢)
Sharp Minima v.s. Flat Minima
通常喜歡flat Minima ,因為假設有mismatch的情況(虛線),誤差比較小

------------------------------------
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)

---------------------------------
Learning Rate(學習速率)
定義:模型調整時的步伐要跨多大
**比較平滑的地方用大的learning Rate**
**比較陡俏的地方用小的learning Rate**
如下圖

RMS prop:可以動態調整learning Rate
※Adam演算法: RMSprop + Momentum(現在常用的方法)
Learning Rate Scheduling:
1.Learning Rate Decay (有點類似系統資源配置演算法的aging)
2.Warm Up (BERT常用)

總結: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),並將結果相加作為分母,個別的輸出作為分子。
(如圖)

1.cross entropy交叉熵 比 MSE在日常生活更常被用
[2.Cross-entropy常用到什麼地步?](https://youtu.be/O2VkP8dJ5FE?t=846)
pytorch裡面Cross-entropy內建Softmax!!

3.MSE在 loss很大的地方沒有gradient 找不到

-----------------------------
**Batch Normalization 批次標準化**
1.抽樣做normalization 以節省時間 不然gpu會無法負荷
2.如果是線上服務要做batch normalization不可能每次都等資料全部到齊才做啊?
答:在每次搜到資料時,做moving average 移動平均數,來更新μ

-------------------------
# **Convoultional Neural Network (卷積神經網路) CNN**

**名詞解釋**
1.Tensor張量: 維度>2的矩陣
2.channel通道: 圖片的層數
3.kernel: 大圖片被切成一小片
4.stride: kernel 移動的距離
5.padding: 超出Receptive Field 的部分(通常用0補起來)
6.Receptive Field 接受區:
* (1)把整張圖片切成一個一個區塊
(2)Receptive Field 可以重疊
(3)形狀可以用不同形狀 (例:長方形)

(4)通常所有channel都會看且都設的很小(3x3)


<br><br><br>
**圖片怎麼分類?**
1.一張圖片=3維Tensor 分成RGB

2.找一些特徵來看就好(例:一隻鳥只看喙就知道了)

**Receptive Field的 Neuron 偵測的內容&weight重覆怎麼辦?**
答:parameter Sharing(例如:同一門課不用在不同科系上課 統一開一門就好)
**共用參數的Neuron叫做Filter**

<br><br><br>
**Convolutional Layer = Receptive Field+parameter sharing**(很重要)
[有用到Convolutional Layer的網路 叫做CNN](https://youtu.be/OP5HcXJg2Aw?t=1779)

<br><br>
Feature Map:一堆做一樣步驟的filter

<br><br>
[原本3層RGB →64層channel](https://youtu.be/OP5HcXJg2Aw?t=1749)

Pooling 池化: 把圖片變小
現在因為運算能力變強了,有時候連pooling都不做,只做convolution

Flatten :把矩陣拉直變成向量

Data Augmentaion:把圖像左右顛倒 旋轉 來幫助訓練影像辨識
但是CNN不行用Data Augmentation要怎麼辦?
答:Spatial Transformer Layer

[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)

[將聲音→vector](https://youtu.be/hYdO9CscNes?t=204)
1.通常用window框出來
2.常用window大小: 25ms
3.常用移動大小: 10ms
4.1個 frame = 10ms ,1sec有 100個frame

[將圖→vector](https://youtu.be/hYdO9CscNes?t=331)


## output部分:
[N to N](https://youtu.be/hYdO9CscNes?t=405)
多對多輸出例子(sequence labeling):
1.POS tagging (詞性標註) (part of speech)
2.部分的語音辨識
3.social Network

[N to 1](https://youtu.be/hYdO9CscNes?t=578)
多對一輸出例子:
1.sentiment analysis語意情緒分析
2.語者辨認判斷誰說話的
3.graph

[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://youtu.be/hYdO9CscNes?t=1161)

1.根據a1 找出與其他相關的vector = α

2.計算α的模組:計算q&k的矩陣,做dot product

3.q1叫做query k2 k3...叫做key 對q1 k2 k3...相乘計算關聯性

4.做soft max 或是其他activation func(例如relu)
5.把所有α+v 並加起來就是b2

Multi-head Self-attention(現在常用)
定義:有多個 q k v
## [Position Encoding](https://youtu.be/gmsMY5kc-zw?t=1159)
定義:為每一個位置設一個Positional vector,把ei+ai

內容: Self Attention 原本是沒有位置的資訊,如果想要有位置資訊就用Positioin Encoding
Self-attention跟CNN的關係如下

資料量小的時候:
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

[2.decoder:](https://youtu.be/N6aRv06iv2g?t=487)
(1)接受encoder處理過的vector再產生輸出
(2)如果前面輸入錯誤,有沒有可能造成error propogation的問題? 有可能但能處理
[(3)decoder 可能讓輸出不斷持續,所以要加一個中斷,以免無限產生](https://youtu.be/N6aRv06iv2g?t=811)

NAT
好處:
1.平行化處理,END後面的當作沒有
[2.比較好用(classfifier)控制輸出長度](https://youtu.be/N6aRv06iv2g?t=1269)
壞處:
1.performance往往比AT差

流程:如圖

encoder與decoder如何溝通?
cross attention!!!
步驟:
1.decoder吃begin 產生q(query)
2.encoder產生α並計算k(key)
3.α1*v1 α2*v2....產生v(綠色)

[Teacher Forcing:](https://youtu.be/N6aRv06iv2g?t=2162)
定義:告訴decoder ground truth,並且做為decoder的輸入

[Guided Attention:](https://youtu.be/N6aRv06iv2g?t=2502)
定義:強迫機器要將每個東西都看過
用途:避免機器漏字發生在:語音合成、TTS(text to speach)等情況

[Beam Search:](https://youtu.be/N6aRv06iv2g?t=2842)
定義:找一個最有可能的路徑
內容:有時候有用(答案非常明確:語音辨識),有時候沒用(答案不明確:有創造力的內容如文章撰寫)
Greedy Decoding:每次都選機率最高的

**[Decoder有時候要加一些雜訊,這樣才會訊連結果比較好](https://youtu.be/N6aRv06iv2g?t=3242)**
Exposure Bias:
定義:訓練跟測試的看到的內容不一樣
解決方法:Scheduled Sampling (訓練時加入錯誤的資訊)
-----
## Self Supervised Learning(自監督式學習)
定義:
沒有label的learning就是Self Supervised Learning

過程:
1.隨機將輸入的一部分蓋住
蓋住的方法:
(1)mask:蓋住的符號
(2)random:加隨機的符號
2.隨便找句子 加入cls sep
3.看看兩個句子是否相接
如果輸出是Yes→相接
輸出是no→不相接


----------------------
## BERT
名詞解釋:
1.Fine-Tune(微調):分化成不同任務
2.Pretrain:產生BERT
功能:
1.找遮住的字是甚麼(填空題)
2.找下一句是甚麼
3.微調後可以進行不同工作

BERT能力如何衡量:
**GLUE (General Language Understanding Evaluation):**
用9個任務來協助衡量BERT模型

BERT如何被使用:
1.輸入一個sequence 輸出一個類別:
例:情緒分析
BERT如果有Pretrain 會比random Initalization還好

2.輸入一個sequence 輸出一個相同長度sequence
例:POS(part of speech) tagging

3.輸入兩個句子 輸出一個類別
例:NLI (Natural Language Inferencee)
判斷句子是矛盾 贊成 反對...
輸入句子並且只考慮CLS的輸出→判斷是矛盾 贊成 反對...


4.問答系統 Extraction-based Question Answering:答案一定出現在文章內
輸出答案為s跟e(文章內的文字從s到e)
BERT理論上吃的長度沒有限制 實際上會有限制不然運算量太大


是否可以traing decoder?
答:可以,用cross Attention
將輸入的直弄亂 旋轉.... 再丟到seq2seq 訓練


<br><br>
# **Generative Adversarial Network生成對抗網路**
**名詞解釋:**
1.Generator:可以輸出不固定的ditribution 的network
2.manifold(分歧)

---
**Why distribution?**
因為有時候答案可能是A也可能是B,所以要讓機器有模糊的空間可以判斷
---
# **訓練步驟:**
step1:固定generator 更新discriminator

step2:固定discriminator 更新generator

※注意:不能調discriminator,不然輸出結果一定會是自己想要的,沒意義
重複step1&2就是 GAN
---
interpolation(內插): 把輸入的向量插在 input&output之間,可以看到兩張圖片間的連續變化

---
[GAN目標:讓PG&Pdata的divergence Mnimize](https://youtu.be/jNY1WBb8l4U?t=216)

---
[Generator 的divergence越小越好
(越不能分辨差異)](https://youtu.be/jNY1WBb8l4U?t=777)
[Discriminator 的divergence 越大越好
(越能分辨出差異)](https://youtu.be/jNY1WBb8l4U?t=849)

---
JS Divergence:
只要不相交就一定都是log2→哪個Generator比較好就不知道了

---
Wasserstein distance:
1.就是**WGAN** 像一台推土機去計算PG & Pdata,並且可以知道中間過程的好壞
2.Pdata期望值越大越好 PG期望值越小越好
3.Lipschitz 平滑用

[SNGAN:](https://youtu.be/MP0BnVH2yOo?t=22)
現在效能比較好的GAN:

---
GAN for Sequence Generation:
1.用GAN生成一段字
2.原本很困難,但google做出來了
[如何衡量GAN 的好壞](https://youtu.be/MP0BnVH2yOo?t=1151)
問題:
1.mode Collapse: Generator 發現生成某個照片可以騙過Discriminator之後,就一直用那張圖片來騙Discriminator

2.mode Dropping
generated data 多樣性太侷限跟real data有落差

方法:Frechet Inception Distance(FID)
衡量real image & generated image 的gaussians distance
**越小越好**

---
**Conditional GAN**
定義: 控制x的輸入,進一步影響Y的輸出
應用:
1.Text to image(字轉圖)

[※在訓練時需要先標註好 text & 圖片,才可以訓練出我們想要的東西](https://youtu.be/MP0BnVH2yOo?t=2362)
2.pix to pix(圖轉圖)又叫image translation

---
Cycle GAN:
產生兩個generater,來避免generator直接產生一個不相干的圖片(e.g.李弘毅→女二次元圖)
去給discriminator
第一個x轉成y(二次元)
第二個y再轉成x(原本圖片)

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?

手段:
[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)

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. 專才在單一任務有機會贏過通才


**如何成為專才?**
**[如何改裝BERT讓它成為專才? ](https://youtu.be/F58vJcGgjt0?t=833)**
sol:
1. 加外掛
2. 微調(finetune
* 不要重新訓練模型
* 把原來的模型做gradient descent 然後更新模型參數

3. Adapter



有了 adapter 可以只finetune adapter ,而不去整個模型的參數
只finetune adapter的參數->efficient fine tuning
**成為通才好處:**
1. 只要重新設計prompt 就能快速開發新功能

Instruction learning: 給題目敘述回答問題
In-cotext learning:給範例回答問題

Insruction Tuning:
1. 在training時,給出要做甚麼的指令


Incontext learning:
1. 如果給不同domain的資料->會沒有效
[2. 給的範例不需要很多](https://youtu.be/aZ_jXZvxyVg?t=559)


---
大模型 頓悟時刻(emergent ability)
定義:到一個時段突然accuracy飆高

---
chain of thought
不直接預測y 而是把答案產生過程也寫出來

[2. least to most prompting: 把複雜的數學問題拆解成簡單一點的問題](https://youtu.be/HnzDaEiN_eg?t=205)
hard prompt:
輸入給機器的指令是人類看得懂的文字
soft prompt:
給一堆向量,人類看不懂的字

---
[scratch pad ](https://youtu.be/SaZTJJNOCOY?t=652)
類似chain of thoght,解數學的時候給機器白板讓它把過程寫出來
instruction tuning
switch transformer
1. 訓練的時候訓練所有參數
2. inference的時候 只使用部分的模組

---
diffusion model
步驟(reverse process)
1. 生成一個都是雜訊的圖
2. denoise (事先訂好了 遞減 會重複使用)

denoise 的model輸入
1. 雜訊圖
2. 參數(表示嚴重程度)

denoise 模組內
noise predicter:預測圖中雜訊應該長怎麼樣

加雜訊到圖片的過程(Forward Process 也可稱為diffusion process)

text to image generator:
就是denoise 裡面noise predicter再額外加訊息(a cat in the snow)讓model訓練

---
---
<br><br>
# **趨勢補充資料**
fingerPrint feature space
定義:將同樣資料、演算法分成同一群
proGAN:
定義:協助將確定屬於哪一群的最高
GANprintR (removal)
定義:防止被偵測出來




BEC 變臉詐騙
