ESRGAN 小註解

我參考 ESRGAN [11] 的論文導讀[1], 把其中相關的名詞做了個整理. 

基本上兩大重點是 RRDB 和 GAN. 這個網路模型前者的修改是拔掉 BN, 後續又出了一篇 [9] 加上 noise 處理. 後者是修改 GAN 的對抗方式, [9] 又做了一些調整就略過. 以下把相關的名詞稍微整理如下.

首先看到 BN 這個詞, 文章中指的是第二種, 但是也順便把第一種 BN 列進來.

Bayesian Network (BN)

在 AI 中的主要應用是把人類的知識加入類神經網路 [2]. 如果單純使用 data training 叫做 machine learning. 既然它的名字裡面有 Bayesian, 顯然它考慮了條件機率, 所以在 training 的過程中, 我們要引入條件機率表 (conditional probability table – CPT).

條件式的因果關係就是 P(B|A) = C 的形式, 因此 BN 網路需要有一群輸入層的 feature 值, 然後以因果關係建立網路結構, 接著用條件機率把每個 node 到下一層 node 的機率以 CPT 表示, 最後會有一個輸出層, 告訴我們有幾種可能的 state, 以及各自有多少機率.

Batch Normalization (BN)

這是另外一個 BN, 在 RealSRGAN 裡面指的是這個, 事實上它也比較常用. 原理就是把輸入正規化為 N(0,1). 即 mean = 0, variance = 1, 這方法在 pattern recognition 和 classification 中也常用.  不過對 NN 來說, 它是指在 internal layer 去做 normalization, 不只是在輸入層.

RRDBNet Network [3]

在 RRDB 的實作中, 裡面有許多的 basic block 串接. Basic block  包括 Dense Block (DB) [4] 和 Residial Block (RB) [5]. Residual in Resisual Dense Block 就是把 dense block 以 residual network 的方式連起來 [3], 把這些 DB 都當作 RB 裡面的一層 layer 看待.

RRDB 在 [1] 講得比較多. BTW, 關於噪音的改進. 可以參考 [9] 這篇的開頭.

Dense Block [4]

主要是每層都和其他幾層相連. 我把它當作 full connection 的分批簡化形式. Dense Block 的串接連成 Dense Network.

Residual Block (RB) [5]

Residual Block 的概念, 像是 Dense block 的變形. 也就是可以跳過一層網路不連.

GAN

GAN 用國文來解釋很簡單, 就是正邪兩派各自去認親, 能夠訓練到邪不勝正, 那麼正的網路就大功告成了.

本圖取材自 [10].

從 coding 的角度來說, 當然還是要看到程式比較有感覺. 我覺得 [6] 的寫法滿好懂的. 若對於只熟悉C語言, 不熟 Pythone 的人需要克服這個底線障礙. 這邊的底線是 [7] 五種底線的第二種, ‘_’ 表示傳回的值有些是 don’t care. 例如:

validity, _, _ = discriminator(gen_imgs)

GAN 的基本流程當然是把生成對抗網路都各 train 一輪.  此時每輸入每一張圖, 都要生成一堆有噪音的圖 (靠隨機變數) – train generator. 然後把這一大把圖, 拿去 train discrimiator. 在生成 generator 的時候, 可以看到有製造噪音的 code 和最後的 back propogation.

# Train Generator
 
optimizer_G.zero_grad()
 
# Sample noise and labels as generator input
z = Variable(FloatTensor(np.random.normal(0, 1, (batch_size, opt.latent_dim))))
label_input = to_categorical(np.random.randint(0, opt.n_classes, batch_size), num_columns=opt.n_classes)
code_input = Variable(FloatTensor(np.random.uniform(1, 1, (batch_size, opt.code_dim))))
 
# Generate a batch of images
gen_imgs = generator(z, label_input, code_input)
 
# Loss measures generator’s ability to fool the discriminator
validity, _, _ = discriminator(gen_imgs)
g_loss = adversarial_loss(validity, valid)
 
g_loss.backward()
optimizer_G.step()

訓練 discrimator 網路時. 要得到 real image 在這個網路的 loss 評分 (終極目標是 loss = 0), 以及 fake image 的 loss 評分 (終極目標是 loss 很大). 兩組 loss 輸出, 取其平均值做 backward propogation 的分數. adversarial_loss 的實作細節看起來是在 Torch 的 loss.py 裡面 [8].

 
# Train Discriminator
 
optimizer_D.zero_grad()
 
# Loss for real images
real_pred, _, _ = discriminator(real_imgs)
d_real_loss = adversarial_loss(real_pred, valid)
 
# Loss for fake images
fake_pred, _, _ = discriminator(gen_imgs.detach())
d_fake_loss = adversarial_loss(fake_pred, fake)
 
# Total discriminator loss
d_loss = (d_real_loss + d_fake_loss) / 2
 
d_loss.backward() 
optimizer_D.step()

以上是普通的 GAN 的處理方式. ESRGAN 的 GAN 不是比較 real image 和 fake image 誰的分數高, 因為我們早已經知道 real image 和 fake image 各自要扮演的角色. 花太多時間讓參數長對有點浪費時間. 

ESRGAN 用的方式是讓真的和假的直接去 PK, 而不是對標準答案. 真的贏過假的參數要加分, 假的贏過真的的參數要扣分. 以下直接貼 [1] 的內容, 但用顏色標註重點.

我们可以看SRGAN的loss:

         l_d_real = self.cri_gan(real_d_pred, True, is_disc=True)
         l_d_fake = self.cri_gan(fake_d_pred, False, is_disc=True)

而ESRGAN的loss:

l_d_real = self.cri_gan( real_d_pred - torch.mean(fake_d_pred), True, is_disc=True)         
l_d_fake = self.cri_gan(fake_d_pred - torch.mean(real_d_pred), False, is_disc=True)

以上就是這篇論文會用到的重要模組. 沒有什麼創見, 就是幫入門者的障礙減少一點.

[Note]

  1. https://zhuanlan.zhihu.com/p/258532044
  2. https://towardsdatascience.com/how-to-train-a-bayesian-network-bn-using-expert-knowledge-583135d872d7
  3. https://blog.csdn.net/gwplovekimi/article/details/90032735
  4. DenseNet 學習心得
  5. https://ithelp.ithome.com.tw/articles/10204727
  6. https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/infogan/infogan.py
  7. https://towardsdatascience.com/5-different-meanings-of-underscore-in-python-3fafa6cd0379
  8. https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/loss.py
  9. https://zhuanlan.zhihu.com/p/393350811
  10. https://github.com/jonbruner/generative-adversarial-networks/blob/master/gan-notebook.ipynb
  11. https://aiqianji.com/blog/article/1
分類: 技術 | 標籤: , , | 發佈留言

我讀 «一小時科普量子力學» – 下

6. 量子隱形傳態 (quantum teleportation)

它的原理是這樣. Alice 有一個量子態不知的微觀粒子 A 要傳給 Bob. Alice 和 Bob 手中各一個糾纏量子對 E1, E2. 因為 E1 和 E2 糾纏, 所以 E1 改變, E2 就會改變. 兩者之間有量子通道的存在. Alice 將粒子 A 和 E1 做某種測量, 因為 E1 被測過之後就改變了, 所以 E2 也就跟著變. 術語是 E2 塌縮到一個特定的量子態. OK, 那干 A 底事呢? A 是我們要傳遞的東西, 到現在都還沒有傳出去…

沒問題, Alice 通過古典通道, 把他量測的結果也告訴 Bob, Bob 根據這個數據, 和塌縮的 E2 反推出 A 粒子的量子態. 這樣我們完全沒有傳送 A 粒子, 但是可以重現 A 粒子. 而 Alice 和 Bob 從頭到尾都不知道 A 粒子的量子態, 所以稱為隱形傳態.

這聽起來怪的地方是古典通道的 cost 會不會高到比量子通道更高? 還有這樣的糾纏真的能實現嗎? 如果 Google 簡體中文的新聞, 大陸已經實現了 6 光子隱形傳態, 在 45 個小時中保持 98% 的量子干涉 (糾纏態) [3].

為了怕大陸新聞是大外宣, 我們來看看英文的 [4]. Zeilinger 的團隊以一光子跨過 143 公里傳遞, 有平均 0.863 的正確率 (The teleportation fidelity). 如果沒有量子糾纏, 瞎猜沒辦法達到這種水準. 可見得量子隱形傳態雛型已經有了, 只是正確性還不夠. 能傳出的量子個數也還太少.

7.  Others

這本書有很多名人故事, 也有厲害的數學. 在這些名人故事中, 我覺得最遺憾的是有 93 年中華民國國籍的楊振寧, 在 2015 年入籍中國. 不過老共的量子電腦都上太空了, 我們物理研發環境確實沒得比. 新聞說鴻海在發展離子阱, 希望他們有所突破.

書中公式密集的地方大家可以跳過.  量子力學的數學模式, 本書介紹過: 1925 年海森堡矩陣力學, 1926 年薛丁格波動方程式, 1948 年費曼路徑積分, 以及和它們和等效的狄拉克 q 數形式, 至少四種. 基本上除了路徑積分之外, 都無法和相對論結合. 故路徑積分的數學篇幅較多. 在 7.3 節 “相對論性量子力學” (P.201~), 介紹的就是與相對論有關的公式和計算. 

8. 附錄: 對稱和守恆.

(1) 空間平移對稱:動能守恆

(2) 空間旋轉對稱: 角動量守恆

(3) 時間平移對稱:能量守恆

無論在巨觀的古典力學或是微觀的量子力學, 這三者都依然守恆. 守恆和對稱看起來都是應該是”天經地義”.  但是弱交互作用力 [2] 下, 宇稱卻不守恆 (parity nonconservation)[1]. 鈷 60 原子核的左旋或右旋, 在幾乎絕對零度下, 發射出的電子數量大不同. 

當初包立從 β 衰變出的電子有固定能量, 而推論出微中子 (大陸叫中微子) 的存在. 結果上帝居然不搞平等, 只要左旋右旋就可以造成電荷不同, 叫他一時難以接受, 不過他最後還是接受了啦, 還幫 “宇稱女士” 寫了死亡證明書 [5]. 楊政寧和李振道便以這個不守恆得諾貝爾獎. 做出實驗證明這個假說的吳健雄則摃龜…

9. 結語

看看本書中的諾貝爾獎小故事, 貢獻很大卻錯失獎項的人很多. A 貢獻比 B 大, 結果 B 獲獎的狀況也有. 愛因斯坦應該得十次只得一次. 田中耕一無心把別人認為不可能的東西做出來, 拿去申請專利, 而意外得到諾貝爾獎, 更是前幾年大家津津樂道的趣聞.  

基本上數學不好的人沒辦法深入欣賞量子力學, 但是看到物理學家努力解讀這個世界的故事, 還是覺得挺有趣的. 即使是愛因斯坦這麼聰明的人, 至死也想不出能統一廣義相對論和量子力學的數學架構. 我想一般人若不是要創立新教當教主, 抓住量子物理其中片面的解讀, 就想要建立一套新的宇宙觀, 恐怕是沒有必要.  我們可以接受不完美, 就像接受宇稱不對稱一樣. 知道多少就是多少.

最後附上兩大學術理論相矛盾之處:

  廣義相對論 量子力學
基本差異 定域 非定域
時空 4 維平等 4 維 + 自旋

時間一階導數

空間二階導數

引力 算得準 必須要測不準原理

[Notr]

  1. 宇稱不守恆
  2. 弱交互作用力
  3. http://scitech.people.com.cn/BIG5/n1/2020/1221/c1007-31972908.html
  4. https://en.wikipedia.org/wiki/Quantum_teleportation
  5. https://kknews.cc/zh-tw/science/yb4n5ag.html
分類: | 標籤: , | 2 則留言

我讀 «一小時科普量子力學» – 上

本來以為我的量子力學粗淺地瞭解到一個程度就要往前走了, 但是看到這本書, 還是讓我停留了下來. 畢竟 “一小時” 我有. 當然, 作者是騙人的. 他說的是 “一小時起”, 跟百貨公司一折起的意思一樣.

這本書的作者朱梓忠博士是廈門大學物理系教授. 原著應該是以簡體字發表. 因為沒有寫譯者是誰, 推測是電腦自動翻譯, 所以翻錯的地方也不算少. 我在後面放了一個勘誤表. 基本上繁簡翻譯錯誤, 大家一看就知, 不影響閱讀.

  1. 量子誕生

量子起源於對液態鋼的觀察, 當時的主要工業就煉鋼. 熟練的工人以鋼水的顏色來判斷此時的溫度. 因此科學家認為溫度和顏色應該要有一個關係.  學術上叫做黑體輻射, 不吸收不穿透只反射物體叫做黑體. 後來兩組科學家推導出的公式, 一個只適合短波, 一個只適合長波. 普郎克湊出一個公式可以同時解釋長波和短波, 但是還沒有足夠理論基礎.

普郎克公式:

這公式說明能量是一份一份的 (微分), 而不是連續的. 自此才產生 “量子” 的觀念.  過去大家都認為連續才是正常 (類比也比數位先接受吧). 普郎克論文發表日的 1900/12/14 被追溯為量子誕生日.

量子的觀念一時還不能被大家接受, 也不知道有什麼用? 愛因斯坦首先用量子的觀念解釋 “光電效應”, 說明如果光的頻率不對, 不管多強都無法打出電子. 這個解說證明一切跟頻率有關, 他也因此獲得諾貝爾物理學獎 (相對論沒有得獎).

2. 原子模型

最初 Rutherford 原子模型: 按照萬有引力模式, 電子繞原子核有如行星繞太陽 –> 但電子繞圈將產生磁場, 發出電磁波–> 按照 Maxwell Equation, 電子在 10-10 秒 能量就耗盡, 應該要失去能量掉入電子核 .

波耳修改模型為不同軌道有不同能階, 跳躍才需要能量 –> 包立修改模型為每個能階只能裝得下固定數量的電子 (包立不相容定理) –>  後來發現比電子更小的粒子, 費米子的自旋為半整數, 依然符合包立不相容定理. 玻色子自旋是整數, 但不符合包立不相容定理, 可以群聚在同一狀態.

β 衰變時 (亦即原子放出電子), 離開的電子應該根據當初所在的位階有不同能量, 但實際量測到的能量固定 (更完整地說是能量、動量以及自旋角動量守恆), 觀察的方法不是測量而是看光譜的連續性. 包立於是推論有中微子 (台灣翻譯為微中子) 的存在, 不管失去的電子在哪個位階, 都有對應的微中子跟著離開 (1932 年). 當初只是一個假設, 還因為後來中子被發現 (1932 年), 兩者撞名. 包立這款中子被改命名為微中子.

書上提到包立有很多小故事, 說明他微人也跟別人不相容, 非常好看 (P.137~P.142). WIKI 也有寫一點 [8]. 因為他非常天才又能把人批評到沒信心, 提出自旋理論的克羅尼格因此放棄研究, 最後與諾貝爾獎失之交臂. 

3. 波粒二相性

楊氏雙縫實驗 (光子) –> 電子也可以重現這個實驗 –> 一顆光子也可以通過雙縫 –> 一顆電子也可以通過雙縫 –> 更大的粒子也可以同時通過雙縫 –> 如何既是波又是粒子? 德布羅意提出物質波的概念, 物質的能量即是波的能量.

3. 量子力學

海森堡為量子建立矩陣運算的基礎, 產生量子力學 (1925/7/29). 與海森堡的路徑不同, 薛丁格由物質波出發, 建立波動方程式 (薛丁格方程式) – 有定態, 非定態兩種表示法. 非定態公式包含時間因素 [1]. 薛丁格的公式比海森堡的公式好用. 當然還有其他人想出等效的表達方式 [2], 不過現在都以薛丁格的公式為主, 並且它是量子力學中的公設.

薛丁格的公式既然是公設, 它無法被證明. –> 玻恩以機率解釋薛丁格的波函數:

量子在空間中存在任何一點的機率是一樣的, 但是散射後出現在某一方向的機率正比於波函數的平方. 也就是雖然隨機但是有規律 (模方才有機率). 

換言之, 玻恩的解釋完備了薛丁格方程式. 電子雖然是波, 但是它不像電磁波這樣會往外擴散, 而是它數學上表現得像波. 有人開玩笑說玻恩就憑這個註解拿到諾貝爾獎. 書上有解釋人家貢獻很多, 薛丁格得獎時就認為獎應該頒給玻恩, 結果玻恩本人 72 歲才拿到這個獎.

另一方面愛因斯坦相信一個完整的理論系統不應該有機率這個東西存在, 他留下 “上帝是不擲骰子的” 這種名言. “I, at any rate, am convinced that He (God) does not throw dice” (P.243). 愛因斯坦身為量子力學先驅, 認為一定是還有東西為解決 (隱變量), 才會發生機率性.

故他在第六次索爾維會議[3] 上以 “光子箱” 回馬槍挑戰 “測不準原理” 的基本教義. 據說波耳(哥本哈根學派領袖) 當場呆若木雞, 第二天才又找出一個 “光子箱” 測不準的地方辯論獲勝. 但書上也提到一則軼聞, 說波耳在過世前一天都還在黑板上研究 “光子箱”, 表示他還是很擔心萬一測得準要怎麼辦?  (p.122).  

愛因斯坦找不到的隱變量, 其他人也沒找到. 貝爾[5]就是其中之一, 他努力的結果就是證明量子理論要成立必須綁定 “非定域性”, 若違反他的貝爾不等式[9], 就可以證明有量子糾纏. 後續的人就靠著這個數學基礎證明真的有量子糾纏的存在. 

貝爾不等式為:|Pxz-Pzy|≤1+Pxy

其中,Ax為正的意思為在x軸上觀察到A量子的自旋態為正,而Pxz代表Ax為正和Bz為正的相關性。在古典力學中,此不等式成立。在量子世界中,此不等式卻不成立。

4. 量子密碼

量子密碼基於測不準原理而來, 量子只要被讀取, 就會改變也不可複製. 因此 Charles Bennett and Gilles Brassard  – 雙 B 發明了量子編碼, 如 BB84, BB92. wiki [6] 寫得比書上 更清楚. 建議去看 WIKI.

BB84 簡單地說, Alice 在兩種互不正交的基裡面選擇 0 或 1 去傳送, 例如有 (0度, 90度) 和 (45 度, -45 度) 兩個基, 他們旋轉 45 度所以不正交. 接收者 Bob 不知道 Alice 選擇的基, 所以隨機亂猜是哪個基,  只有猜對基才能判斷正確 0 或 1, 若猜錯基得到的值剛好在 0 和 1 之間, 不知道是哪一個? 如果有人 (Eve) 在此時竊聽, Bob 收到的東西就會改變. 故可以防盜. 若無人竊聽, 隨後 Alice 再把他當初使用的基發給 Bob, Bob 在沒有人竊聽的情況下, 就能知道哪幾個 bit 猜對, 哪幾個 bit 猜錯. 猜對的 bit 就用為雙方的 key.

BB92: 前提和 BB84 一樣, 但 Alice 這次只傳, 45 和 90  度的值,  Bob 隨機亂選基去讀取, 若是讀到 0 度, 肯定當初只能是 45, 看到 135 度, 肯定當初只能是送 90 度. 於是 Bob 知道哪幾次自己猜對了基! Bob 就用他可以確定的基回傳 Alice. 雙方把這一系列的基轉換成 0,1 當作key. 同樣, 有人竊聽時, Bob 回傳給 Alice 的基也會有錯的, 那這次 key 就不能用. 當然 channel 本身不能有 error. 而單光子通道也不易實現. 不然 RSA key 早就淘汰了.

5. 量子電腦

量子電腦厲害的地方有兩個, 第一個就是量子位 (qubit) 可以同時表達多個態, 例如自旋, 圓偏振, 激發態,…每一態都相當於傳統的 1 bit, 所以一個量子位就等於傳統的多個 bit. 其次是考慮量子非定域性 (糾纏), 還有態可以疊加. 雖然有這些預期的優點, 但是根據測不準原理, 當量子電腦的尺寸大到一個地步, 量子的特性就消失了. 

在讀這類書之前, 我本來有一個疑問: 不是說測不準嗎? 不準我怎麼做計算? 讀很多次取平均更是不合快速計算的原理啊? 其實 “不準” 本身是個誤解,應該說是一對共軛變量的準確度如同魚與熊掌不可兼得。而製作量子電腦的難處在於做出量子阱, 這個阱的功用是讓被操作的量子不會亂跑. 目前其中一種趨勢是用離子為量子, 所以量子阱即為離子阱. [10]

目前最新的進展是: 2021 年 10 月, 中國打造的量子電腦「祖沖之號」透過60個量子位元, 進行24次的量子操作, 只要4個多小時就能完成. 最快的超級電腦 Summit 要 4.8 萬年. 如果大家比較相信 Google 量子電腦的數據, 那就是能讓電腦進行20次指定的量子操作,實驗重複一百萬次,僅耗時200秒就完成. 相較於 Summit 需要  16 天 [7].

[勘誤]

  1. P50. 葡萄幹 –> 葡萄乾
  2. P.66, P.233  自己幹涉 –> 自己干涉
  3. P128 復常數 –> 複常數
  4. P136 被髮射出來 –> 被發射出來
  5. P185 相幹性 –> 相干性 (多次)
  6. P208 必鬚 –> 必須
  7. P243 物理學泰的 –> 物理學泰斗的

[note]

  1. 薛丁格波動方程式
  2. 保羅狄拉克
  3. 索爾維會議
  4. John Von Neumann
  5. John Steward Bell
  6. BB84
  7. https://www.ithome.com.tw/tech/149757
  8. 沃夫岡·包立
  9. 貝爾定理, 貝爾不等式
  10. 不是零就是一?打造離子阱量子電腦,台灣有機會嗎? (aif.tw)
分類: | 標籤: , | 發佈留言