---
# System prepended metadata

title: 第二天上午

---

#  生成式圖畫AI 原理(講不到的已劃掉)
### Diffusion model

1. Step 1:給一張完整的圖片(清楚說明)
2. Step 2:以高斯分布(常態分佈)的方式往圖片上加入隨機噪點，從一張圖到混亂雜訊，從混亂雜訊中生成圖

3. Step 3:不斷調整參數，以生成圖片(加入變方自編碼器)


#### 專有名詞解釋
##### 高斯分布(常態分佈)（Normal Distribution）
1. 很多隨機分布的結果產生的圖
![image](https://hackmd.io/_uploads/B16wsprRa.png)

##### 變方自編碼器(Variational Auto-encoder ,VAE)
![image](https://hackmd.io/_uploads/Hk9Qa6H06.png)
1. 最大化生成數據的相似性
2. 可以解讀隱含向量中的每一個維度代表的意思
3. 編碼器:輸入數據映射到均值和變異數參數
4. Latent Space:壓縮數據後的存放空間
5. 解碼器:使用這些參數來生成新的樣本
6. 損失函數:實際值和預測值的殘差

    1. 重建損失（Reconstruction Loss）:
        a.用來衡量解碼器生成的數據與原始數據之間的差異
        b.通常使用均方誤差或二元交叉熵

            ⭑均方誤差(MSE):預測值和實際觀測值間差的平方的均值 
            ⭑二元交叉熵(binary cross entropy):當ya == 1，帶到橘色，以此類推
            ⭑交叉熵(Cross Entropy):有K個類別，每個樣本有自己的標籤ya(e.g. y1、y2...)，a為第a類的標籤
        ![image](https://hackmd.io/_uploads/rku-cABAa.png)

    2. 正則化損失（Regularization Loss）:對損失函數中的某些參數做一些限制(懲罰項)


 
## 圖片生成framework

> 【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路
https://www.youtube.com/watch?v=JbfcAaBT66U

![image](https://hackmd.io/_uploads/H1zBPhG10.png)


### Text Encoder
1. 輸入文字
2. 文字模型對生成圖片結果影響較大

    (a)為文字encoder model大小
    *    T5為Google用的encoder
    *    結果越往右下越好
    
    (b)為Diffusion Model中的Noise Predicter大小
    *    可見影響不大
    
![螢幕擷取畫面 2024-03-19 104446](https://hackmd.io/_uploads/BJAE3_I0a.png)

### Generation Model
1. 用文字的representaiton產生中間產物圖片壓縮的結果，可以是小圖或是Latent Representation
2. 先從Normal Distribution裡Sample出Latent Representiton
3. 不斷加上文字(文字也是以Latent Representiton來表示)，然後經過Denoise的Model去掉Noise
4. 反覆直到產出的結果夠好了

### Decoder
1. 將中間產物轉為成圖片，可以是小圖或是Latent Representation

2. 如何訓練出Decoder模型

    *    小圖
            * 輸入小圖
            * 再將它還原成一張圖片
         
    *    Latent Representation

            * 訓練Autoencoder
            * 先有encoder書一張圖片
            * 將圖片轉變成一個Latent Representation
            * 用Decoder還原為原來的圖片，使輸入與輸出越近越好


### 專有名詞介紹
#### ~~Frchét Inception Distance(FID)~~
真實圖片與生成圖片兩者的距離，越小越好
![螢幕擷取畫面 2024-03-19 110519](https://hackmd.io/_uploads/H17Z-KUAp.png)
#### ~~Contrastive Language-Image Pre-Training(CLIP)~~
內涵圖片與文字的兩個encoder，計算兩者向量的距離，結果算出，文字與圖片的對應關係越大越好
![螢幕擷取畫面 2024-03-19 111058](https://hackmd.io/_uploads/Syr87FLAa.png)


## ~~~~生成方法~~~~
> 【生成式AI】生成式學習的兩種策略：要各個擊破，還是要一次到位
> https://www.youtube.com/watch?v=AihBniegMKg

### Autoregressive(AR)-各個擊破
*  一次產生一個元素，接著參考前面生出的繼續生成
*  非常花時間
*  品質好，因依序生成，導致生成關聯性較合理

### Non-autoregressive(NAR)-一次到位
* 一次把所有像素Pixel產生出來
* 有足夠的平性運算能力，就能省很多時間
* 品質較差，因關聯性可能會出錯

### 結合兩者優勢-N次到位
* 方法
    1. 先用一次到位，生成較模糊的照片
    2. 再用一次到位的方法將其變得更清楚
    3. 接著不斷反覆
* 因優先決定好大致方向，較不會有邏輯奇怪的地方

## Generation Model
> ML Lecture 17: Unsupervised Learning - Deep Generative Model (Part I)
> https://www.youtube.com/watch?v=YNUek8ioAJk&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=26
> ML Lecture 18: Unsupervised Learning - Deep Generative Model (Part II)
> https://www.youtube.com/watch?v=8zomhgKrsmQ&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=28
>【生成式AI】速覽圖像生成常見模型
> https://www.youtube.com/watch?v=z83Edfvgd9g

### Autoencoder(AE)2006
> 【機器學習2021】自編碼器 (Auto-encoder) (上) – 基本概念
> https://www.youtube.com/watch?v=3oHlf8-J3Nc
> 【機器學習2021】自編碼器 (Auto-encoder) (下) – 領結變聲器與更多應用
> https://www.youtube.com/watch?v=JZvEzb5PV3U

* encoder 和 decoder 分別就是壓縮和解壓縮
* 輸入為一個高維度的圖片，中間被壓縮成低維度，最後再被解壓縮回高維度的圖
* 或是換一個說法，原本是很長的一串code，可能100行，然後壓縮成10行，最後解壓縮回100行
* 最後要讓他解壓縮回來的圖與原本的圖越像越好


#### 壓縮
如下圖，解釋為何可以壓縮與如何壓縮
* 假設我們用來訓練的圖形有四張3*3的圖形
* 我們可以發現他們有相似的地方，並歸類成兩類
* 接著，就可以將壓縮的結果就以1*2的圖形來表示，達到辨別的效果

![image](https://hackmd.io/_uploads/H10MPSZx0.png)

#### 應用
應用還蠻廣泛的，原理都是一樣的，都會有一個reconstruct的過程
#####   語音
* 可以在中間vector的部份的時候，有一部分是存語音內容，另一部分是說話語氣、口吻或音調之類的(說話人的特色)
* 接著，就是將兩段語音做結合
* 取甲的語音的說話人的特色再結合乙的語音中的內容，就可以做到變聲器的效果
* 該段語音就會聽起來像是甲說的

![image](https://hackmd.io/_uploads/SJOatrZeA.png)




### Variational Autoencoder(VAE)2013
> [Day5] VAE，好久不見
>https://ithelp.ithome.com.tw/articles/10323542#vae%E4%BB%8B%E7%B4%B9
* 將圖片轉為code，加上noise，使一定的範圍內reconstruct回來都會是相同的圖
* 產生的圖會與原本的圖相似
* 較無創意，且相似的圖並不代表合理，僅為模仿
* 假設放入兩張圖進去(滿月與弦月)後，我們可以取他們兩者中間的地方，去生成由兩者結合出的圖片

![螢幕擷取畫面 2024-03-21 230459](https://hackmd.io/_uploads/ryHhh6KAp.png)

#### 下圖為VAE的問題
* 由VAE生成出兩張新的與real image{7}相似的圖
* 其中左圖試圖將7下擺延長，而右圖卻是再毫不相干的空白處點了一點
* 兩者同樣與real image相似，卻能看出右圖明顯不合理
![螢幕擷取畫面 2024-03-22 123655](https://hackmd.io/_uploads/rJTZsYcCa.png)


#### 優點

1. **良好的生成能力**

    VAE透過編碼和解碼流程，具有良好的資料產生能力。

2. **統計特性**

    VAE在統計上具有更好的解釋性，可提供資料的機率分佈。

#### 缺點

1. **產生樣本可能模糊**

    VAE在優化重構損失時，可能會過度平滑資料分佈，導致產生的樣本模糊，品質較低。

2. **計算複雜性**

    VAE的訓練過程可能涉及複雜的數學計算，增加了訓練難度。



### Generative Adversarial Network(GAN)2014
> [Day6] GAN，聽說你最強，參數很難調
> https://ithelp.ithome.com.tw/articles/10324412
> Day 28：小學生談『生成對抗網路』(Generative Adversarial Network，GAN）
> https://ithelp.ithome.com.tw/articles/10196257
> Generative Adversarial Network +(李鴻毅
> https://www.youtube.com/watch?v=0CKeqXl5IY0&list=PLJV_el3uVTsPMxPbjeX7PicgWbY7F8wW9
> Improved Generative Adversarial Network (李鴻毅
> https://www.youtube.com/watch?v=KSN4QYgAtao&list=PLJV_el3uVTsPMxPbjeX7PicgWbY7F8wW9&index=18
> Simple Generative Adversarial Network (GAN) (那個擺動圖
> https://www.youtube.com/watch?v=ebMei6bYeWw
> MNIST GAN Training
> https://www.youtube.com/watch?v=IUi0REAWj2c


* 演化的概念
![螢幕擷取畫面 2024-03-21 230307](https://hackmd.io/_uploads/H1sDnaFRp.png)
* 會有好幾代的Generater與Discriminater
* 兩者皆是neural network
* 第一代Generater負責以某種distribution生成一些圖片
* 接著，第一代的Discriminater會根據real image跟Generater生成的圖片去調整它的參數
* Generater的output便是Discriminater的input
* 將Generater生成的圖片都標示為fake，real image標示為1為real

![螢幕擷取畫面 2024-03-23 111326](https://hackmd.io/_uploads/HJ2mFajCT.png)


* 第二代Generater就會依據第一代Discriminater去update，調整參數，最後調整至生成出的圖片可以去騙過第一代的Discriminater，讓它將第二代Generater的圖片判斷為real
* 接著第二代Discriminater便同第一代的Discriminater的原理去調整參數
* 然後不斷反覆的建立新的Generater與Discriminater



![螢幕擷取畫面 2024-03-21 230745](https://hackmd.io/_uploads/SkK_apY0p.png)


#### 優點：

1. **高品質的生成**

    GAN透過生成器與判別器的對抗訓練，能生成高品質、逼真的樣本。

2. **多樣性**

    GAN能夠捕捉到資料分佈的多樣性，產生豐富多樣的樣本。

#### 缺點：

1. **訓練不穩定**

    GAN的訓練過程可能非常不穩定，難以除錯。

2. **模式崩潰問題**

    在某些情況下，GAN可能會遇到模式崩潰，導致產生的樣本品質下降。
    

    
### VAE與GAN比較
> [Day 6] 如何評估 GAN 生成影像的表現？
> https://ithelp.ithome.com.tw/articles/10318402
> 深度生成模型中的兩種方法GAN和VAE，各自的優缺點有哪些
> https://docs.pingcode.com/ask/48910.html


| Model | VAE  | GAN  |
| -------- | ---- | ---- |
| 影像生成 |  更適用於需要統計建模的任務 |  更適用於產生高品質的影像  |
| 訓練穩定性  |  訓練過程通常較穩定  |  可能需要更精細的調試  |
| 複雜性與可解釋性 | 提供了更好的統計特性和解釋性 | 通常更難以理解和調試 |

### Diffusion model(2015)

> 【生成式AI】Diffusion Model 原理剖析 (1/4) (optional)
> https://www.youtube.com/watch?v=ifCDXFdeaaM
> 【生成式AI】淺談圖像生成模型 Diffusion Model 原理
> https://www.youtube.com/watch?v=azBugJzmz-o

* 首先會先有很多次的add noise的過程，稱為Forward Process(Diffusion Process)
* 再來就是Reverse Process去做一樣很多次的Denoise的過程
* 希望最後Denoise的結果與最初add noise前的原圖越像越好

![image](https://hackmd.io/_uploads/SkPuRNMgC.png)

#### Add noise
* 過程中除了add noise還會也一個step的標籤
* 標籤是為了記錄圖片被加過了幾次noise(也就是noise的嚴重程度)，就像是給予ID一樣
* 也是為了方便之後denoise時使用
* 數字越小就代表他越接近原圖
* 數字越大代表雜訊越多

![image](https://hackmd.io/_uploads/H1VyvVzxC.png)

#### Denoise
* Denoise是透過Noise predicter完成的
* Noise predicter的功能是預測出這張圖中的noise長怎麼樣
* 輸入為一張加過noise的圖與step
* 輸出為它預測出來的noise圖
* 最終再將有noise的圖再減去生成出的noise圖，產生過濾的效果
* 結果就是noise稍微變淡一點的圖
* 要注意它不是一次就變成沒有noise的圖，是透過一步一步完成的
* 每次的denoise都是使用相同的Noise predicter
* 可以輸出不同程度的noise圖，主要是因為輸入的step數字不同

![image](https://hackmd.io/_uploads/HJlCHEGg0.png)

#### Noise predicter
* 因為直接輸出denoise過後的圖難度比較高，其實就相當它已經會產生一隻帶有noise的貓，也就幾乎等於它自己就會畫貓了
* 為了簡化難度才選擇讓它生成出一個noise的圖片

![image](https://hackmd.io/_uploads/ByIgFVfxA.png)


## 我覺得寫的蠻有趣的參考資料
### VAE GAN 優缺點
> 深度生成模型中的兩種方法GAN和VAE，各自的優缺點有哪些
> https://docs.pingcode.com/ask/48910.html

### Diffusion
我覺得很有趣
> 擴散模型 - 現代AI圖像生成的大躍進
> https://www.find.org.tw/index/tech_obser/browse/528ee009bdd5fdc88b41af7669010306/

### Diffusion 和 GAN
這個也很有趣
> 眼見不一定為憑？生成式AI帶來的信任危機！
> https://www.cmmedia.com.tw/home/articles/44235?utm_source=YH

### Diffusion
很長，但是詳細到炸裂，下面數學的部分根本看不懂可以略過
> 實作理解Diffusion Model: 來自DDPM的簡化概念
> https://medium.com/ai-blog-tw/%E9%82%8A%E5%AF%A6%E4%BD%9C%E9%82%8A%E5%AD%B8%E7%BF%92diffusion-model-%E5%BE%9Eddpm%E7%9A%84%E7%B0%A1%E5%8C%96%E6%A6%82%E5%BF%B5%E7%90%86%E8%A7%A3-4c565a1c09c

### Diffusion 和 GAN
很多幹話，但他融入的很多時事或是現實的東西來比喻
> Midjourney V5來了！透過 AI 繪圖原理，你就知道怎麼訓練做圖生成！
> https://www.youtube.com/watch?v=EpoE7D2wOeU

### Model 合集
很多亂七八糟的東西，但有很多是參考李宏毅的寫的
> https://ithelp.ithome.com.tw/users/20120468/ironman/6878
> https://ithelp.ithome.com.tw/users/20162522/ironman/6400