方云團,周秋百
(江蘇大學(xué)計算機科學(xué)與通信工程學(xué)院,江蘇鎮(zhèn)江212013)
1987 年Eli Yablonovitch[1]和Sajeev John[2]分別在研究周期性光學(xué)結(jié)構(gòu)時各自獨立地提出了光子晶體的概念。光子晶體是一種利用兩種或兩種以上不同介電常數(shù)的材料在空間中進行周期性排列形成的晶體結(jié)構(gòu)[3]。光子晶體最顯著的特點就是光子帶隙[4](Photonic band gap,PBG)。光子晶體在TE模和TM模兩種偏振態(tài)下具有不同的能帶結(jié)構(gòu)。TE 模帶隙和TM 模帶隙交疊部分稱為完全光子帶隙。雖然三維光子晶體在任意方向上都可存在光子帶隙,但其制造困難[5]。相對而言,二維光子晶體容易制造,有著廣泛的應(yīng)用。對二維光子晶體傳輸特性的研究具有重要的理論意義和應(yīng)用價值,對其研究的方法主要有平面波展開法[6](Plane wave expansion method,PWE)和時域有限差分法[7](Finite difference time domain method,F(xiàn)DTD)。近年來,隨著神經(jīng)網(wǎng)絡(luò)的興起,Asano T[8]和Inampudi S[9]等人將神經(jīng)網(wǎng)絡(luò)用于對光子晶體的研究。值得注意的是,Liu D[10]將利用神經(jīng)網(wǎng)絡(luò)進行反向設(shè)計的思想引入到光子晶體的研究中。本文旨在講述完整的光子晶體神經(jīng)網(wǎng)絡(luò)建模過程,以正方晶格為研究對象,利用平面波展開法來獲得數(shù)據(jù)集,然后訓(xùn)練神經(jīng)網(wǎng)絡(luò)(Neural network),最終實現(xiàn)用神經(jīng)網(wǎng)絡(luò)來計算光子晶體的能帶。
選擇如圖1所示的晶胞結(jié)構(gòu),晶胞邊長為a,共計有4個自變量r1、r2、θ和d以及一個因變量歸一化頻率ω(2πc a),其中r1與r2為兩個介質(zhì)圓柱的半徑、d為圓心距離、θ為兩圓心方向的方位角、c為光速。
圖1 晶胞結(jié)構(gòu)
光子晶體的介電常量ε(r),考慮E極化電磁波,電場矢量只有一個z分量,電場E(r)的全矢量波方程可以被寫成:
根據(jù)布洛赫定理,E(r)在周期性晶胞中可以被寫成如下形式:
其中,Φ(r)隨著晶格周期發(fā)生周期性改變,K是布洛赫波矢。
考慮到研究問題的周期性,利用布洛赫定理可以將電場展開成平面波之和:
其中,G是倒格子空間描述周期性結(jié)構(gòu)的的晶格矢量,E(K+G)是關(guān)于G的展開系數(shù)。
周期性介質(zhì)中,介電常數(shù)可以展開成傅里葉級數(shù)[11]:
其中
在式(5)中,Au為晶胞的面積。
對第一布里淵區(qū)每一個波矢K建立關(guān)于E(K+G)的線性方程組:
該線性方程組可看作矩陣特征方程,由特征值求得模式頻率,得到光子晶體的能帶結(jié)構(gòu),從而獲得訓(xùn)練神經(jīng)網(wǎng)絡(luò)的樣本數(shù)據(jù)。在進行神經(jīng)網(wǎng)絡(luò)訓(xùn)練之前,需要檢查該模型是否能夠利用神經(jīng)網(wǎng)絡(luò)得出結(jié)果,即需要滿足通用近似定理[12]:一個包含足夠多隱藏層神經(jīng)元的多層前饋網(wǎng)絡(luò),能以任意精度逼近任意預(yù)定的連續(xù)函數(shù)。該定理表明:a.可以設(shè)計一個神經(jīng)網(wǎng)絡(luò)盡可能好地去“近似”某個特定函數(shù),而不是說“準確”計算這個函數(shù)(我們通過增加隱藏層神經(jīng)元的個數(shù)來提升近似的精度);b.被近似的函數(shù)必須是連續(xù)函數(shù)。如果函數(shù)是非連續(xù)的,也就是說有極陡跳躍的函數(shù),那神經(jīng)網(wǎng)絡(luò)就“愛莫能助”了。
將訓(xùn)練集可視化得到圖2,沒有一對多或極陡跳躍的情況,因此該模型是可以用神經(jīng)網(wǎng)絡(luò)來計算的。由圖2(a)可以得出參數(shù)d對最終結(jié)果的影響力有限,因此我們得到如圖3所示的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。由圖2(b),可以得出參數(shù)θ的變化會導(dǎo)致結(jié)果正弦變化;圖2(c)、(d)表明,r越大,頻率越大。
圖2 連續(xù)函數(shù)的驗證。
圖3 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖
本文中激活函數(shù)為S函數(shù),(如圖4所示)。
圖4 Sigmoid函數(shù)
S函數(shù)只對絕對值小的輸入值敏感,因此在訓(xùn)練之前需要對每一列進行歸一化,具體如式(7)所示:
其中x 為原始數(shù)據(jù),m 為一列的最小值,M 為一列的最大值,y 為歸一化后的值,λ 為歸一化系數(shù),取值0.8。對于λ 的取值,正常情況下選擇1,但在建模過程中我們發(fā)現(xiàn)取值為0.8 的時候會得到更優(yōu)解。歸一化之前需要得出最小值和最大值,以備反歸一化時使用。所有數(shù)據(jù)集中,80%作為訓(xùn)練集,20%作為測試集,在數(shù)據(jù)集拆分之前,亂序是有必要的。
在本次示例中所使用的神經(jīng)網(wǎng)絡(luò)算法是BP(Back-propagation)算法[13],分為前向傳播和后向傳播兩個部分,如圖5所示(相關(guān)符號請參照此圖)。
圖5 BP算法結(jié)構(gòu)示意圖
前向傳播以輸入層到隱藏層為例。隱藏層神經(jīng)元h1的輸入加權(quán)和為
隱藏層神經(jīng)元h1的輸出:
其中F( x )是激活函數(shù)[14],本文中:
對式(10)求導(dǎo),有F′( x )=F( x )( 1-F( x )),這使得用S函數(shù)作為激活函數(shù)的神經(jīng)網(wǎng)絡(luò)比用其他函數(shù)的神經(jīng)網(wǎng)絡(luò)學(xué)習速度快[14]。
反向傳播共計分為三個部分。
隱藏層到輸出層的反向傳播(M2與M3分別為隱藏層和輸出層的神經(jīng)元個數(shù)):
將式(12)和(13)代入式(11)并對W2jk求偏導(dǎo)得:
ej是隱藏層節(jié)點中重組的向后傳播誤差:
利用對稱性,可以輕易得出輸入層到隱藏層的反向傳播(M1為輸入層的神經(jīng)元個數(shù)):
權(quán)重更新(LR為學(xué)習率):
上面的公式?jīng)]有包含偏置項,是因為偏置項可以通過給每層加入一個恒為1 的輸入來消除,因此有偏置可以等價轉(zhuǎn)換成沒有偏置的問題,如圖3所示。
利用簡單的BP 算法,神經(jīng)網(wǎng)絡(luò)已經(jīng)可以訓(xùn)練了,但仍然需要作細微調(diào)整。在式(17)和(18)中,有個參數(shù)LR,這個參數(shù)是無法從數(shù)據(jù)中學(xué)習估計得到,只能靠人的經(jīng)驗進行設(shè)計指定,對此需要超參數(shù)優(yōu)化(hyper-parameters optimization,HPO)。在此我們借用這個思想,我們對算法進行優(yōu)化。人們通常稱遍歷一次訓(xùn)練集為一個世代(Epoch)。在Epoch=40 時改變學(xué)習率LR,雖然只是做了一點微調(diào),但效果是非常棒的,如圖6所示。圖6中,橫坐標為世代數(shù)目,縱坐標為均方根誤差RMSE:
其中xi為預(yù)測值,yi為理論值。圖6中,黑色曲線是超參數(shù)優(yōu)化的結(jié)果,在Epoch=100 時,HPO 得到的RMSE就已經(jīng)達到我們預(yù)期的效果;LR=0.5 在Epoch=400 的時候達到預(yù)期效果;至于LR=0.1,甚至達不到預(yù)期效果(步長太小,陷入了“不理想的坑”,出不來了)。
注:若將優(yōu)化的過程看作尋找最低點,那么過程是坑坑洼洼的。開始步長大,可能跳出最優(yōu)谷。最后步長小,可能跳不出次優(yōu)谷。
圖6 均方根誤差
經(jīng)過上面的努力,我們成功地訓(xùn)練了神經(jīng)網(wǎng)絡(luò),將20%的測試集輸入神經(jīng)網(wǎng)絡(luò)得出結(jié)果(式(8)、(9)),并反歸一化后,與平面波展開法得到的結(jié)果比較。我們計算了相對誤差(式(20)),結(jié)果如圖7 所示,由于本身是三個輸入變量,圖7 中只以r1為變量,自然會出現(xiàn)一對多的情形。由圖7 得知,該神經(jīng)網(wǎng)絡(luò)計算的誤差是很小的,完全可以作為一種新的方法用于計算頻率。
圖7 相對誤差
到此,我們已經(jīng)成功計算出K空間的一個點了,再重復(fù)進行以上操作就可以畫出能帶圖了。圖8(b)展示了應(yīng)用神經(jīng)網(wǎng)絡(luò)與平面波展開法分別計算的能帶,結(jié)果幾乎是一樣的。
圖8 二維正方格子(a)第一布里淵區(qū)和(b)TE模第一能帶
現(xiàn)在,我們已經(jīng)成功地利用神經(jīng)網(wǎng)絡(luò)來計算光子晶體能帶了。在各個程序之間,利用txt文件進行數(shù)據(jù)交互,特別注意的是,每一列的最小值與最大值是需要單獨記錄的。
本文通過神經(jīng)網(wǎng)絡(luò)來計算光子晶體能帶。結(jié)果表明,在時間與資源受限的情況下,利用神經(jīng)網(wǎng)絡(luò)可以快速得出準確的光子晶體能帶。如果將神經(jīng)網(wǎng)絡(luò)算法進行優(yōu)化升級,那么所需數(shù)據(jù)集將大幅減小,性能會更加優(yōu)異。