曾祥潘 廣東省廣州市白云區(qū)景泰小學
吳俊杰 北京師范大學物理系
孫麗君 山東省淄博第二中學
近年來,隨著計算機硬件的高速發(fā)展,以深度學習為代表的人工智能技術(shù)如計算機視覺、自然語言處理等在生產(chǎn)生活等諸多領(lǐng)域中取得了長足進步。這些應用能夠成功部署都依賴于大量訓練數(shù)據(jù)。那么,在物理研究等領(lǐng)域能否引入深度學習?答案是肯定的。但所面臨的一個問題是,深度學習是以數(shù)據(jù)驅(qū)動的,而在物理實驗中經(jīng)常難以取得大量準確的數(shù)據(jù)。為此,有不少科學家提出了解決方案。其中,美國布朗大學應用數(shù)學系的Karniadakis教授及其合作者們提出了一套深度學習算法框架,將其命名為“物理信息神經(jīng)網(wǎng)絡”(Physics-informed Neural Network,簡稱PINN)。PINN被提出后迅速獲得了大量關(guān)注,并在物理學、工程等領(lǐng)域得到了應用。
本文在平拋運動的學習中,引入開源PINN深度學習框架,模擬出平拋運動數(shù)值,從而了解PINN的基本原理及其在物理研究中的使用方法,培養(yǎng)學生利用計算機解決問題的習慣,體驗人工智能技術(shù)在科學研究中的應用。
神經(jīng)網(wǎng)絡是深度學習框架的主要模型。物理信息神經(jīng)網(wǎng)絡是指在神經(jīng)網(wǎng)絡中嵌入了物理公式,利用物理公式作為限制條件加入神經(jīng)網(wǎng)絡,使得神經(jīng)網(wǎng)絡的訓練結(jié)果滿足物理規(guī)律。物理公式的嵌入方法,通常加入到神經(jīng)網(wǎng)絡的損失函數(shù)(Loss)。其基本訓練流程如圖1所示。
物理信息神經(jīng)網(wǎng)絡這一深度學習框架的訓練過程,首先要生成訓練集。通常利用隨機函數(shù),根據(jù)物理公式的適用范圍生成一批隨機數(shù)作為訓練集。訓練集從神經(jīng)網(wǎng)絡輸入層進入,經(jīng)過隱藏層等一系列計算,最后從輸出層取得計算結(jié)果;同時,訓練集也經(jīng)過物理公式計算,得到精確數(shù)值。取得神經(jīng)網(wǎng)絡計算的近似值與物理公式計算的精確值之后,計算出兩者的均方誤差,作為損失函數(shù),通過反向傳播調(diào)整神經(jīng)網(wǎng)絡參數(shù),使得神經(jīng)網(wǎng)絡的計算接近精確數(shù)值。經(jīng)過多輪的訓練,神經(jīng)網(wǎng)絡的計算結(jié)果最終與精確值擬合。
平拋運動是高中力學中的一個曲線運動。物體以一定的初速度沿水平方向拋出,如果物體僅受重力作用,這樣的運動叫作平拋運動。物體做平拋運動的公式如圖2所示。平拋運動可看作是水平方向的勻速運動和豎直方向的自由落體運動的合運動。
為了降低深度學習框架的使用難度,簡化代碼和神經(jīng)網(wǎng)絡配置,本案例只選取平拋運動豎直方向位移公式作為研究對象。豎直方向位移公式轉(zhuǎn)化Python代碼為:
y=1/2*g*t**2
代碼中的“y”是豎直方向位移,“g”是重力加速度,“t”是時間。
本文使用了開源物理信息神經(jīng)網(wǎng)絡框架,全部代碼文件可在以下網(wǎng)址取得:https://github.com/SachchitV/PINN_Simple。使用物理信息神經(jīng)網(wǎng)絡前先在框架主文件進行配置,包括神經(jīng)網(wǎng)絡結(jié)構(gòu)、訓練集以及損失函數(shù)。
(1)配置神經(jīng)網(wǎng)絡結(jié)構(gòu)及訓練參數(shù)
神經(jīng)網(wǎng)絡的類型有很多種,目前最熱門的是卷積神經(jīng)網(wǎng)絡。然而,物理信息神經(jīng)網(wǎng)絡只需要最簡單的全連接神經(jīng)網(wǎng)絡就能夠很好地工作。
全連接神經(jīng)網(wǎng)絡結(jié)構(gòu)配置項目如圖3所示。
輸入層。計算豎直位移公式,對神經(jīng)網(wǎng)絡輸入t(時間),計算出y(豎直位移),因此輸入層只需要一個數(shù)值t,設為1。
輸出層。計算豎直位移結(jié)果,輸出一個數(shù)值y,設為一。
隱藏層與神經(jīng)元。這兩項關(guān)系到整個神經(jīng)網(wǎng)絡的規(guī)模并影響計算結(jié)果的精度。如果設置較大,計算的精度一般會比較高;但是神經(jīng)網(wǎng)絡規(guī)模大,訓練時間和推理時間明顯變長。經(jīng)過試驗發(fā)現(xiàn),對于平拋運動豎直位移數(shù)值這類比較簡單的計算,只需要規(guī)模比較小的神經(jīng)網(wǎng)絡就能夠取得滿意的結(jié)果。本例設為2個隱藏層、10個神經(jīng)元。
訓練次數(shù),即Echo,神經(jīng)網(wǎng)絡訓練次數(shù)??蓮?00開始,逐次增加,根據(jù)訓練結(jié)果調(diào)整,直至訓練結(jié)果與精確值擬合。
學習率,用于設定神經(jīng)網(wǎng)絡每次訓練時調(diào)整參數(shù)的步長,保持默認值即可。如果發(fā)現(xiàn)增加訓練次數(shù)后,數(shù)據(jù)擬合沒有改善,可以適當增加學習率。
(2)準備訓練集
物理信息神經(jīng)網(wǎng)絡可以使用實驗實測數(shù)據(jù)作為訓練集,也可以用隨機函數(shù)生成訓練集。在本例中使用隨機函數(shù)生成訓練集,考慮到平拋運動實驗中物體落地過程的時間較短,隨機數(shù)生成范圍設定為0~2秒,隨機生成50個數(shù)據(jù)(如圖4)。
圖4 生成訓練集
(3)嵌入物理公式
物理公式在損失函數(shù)中嵌入(如圖5)。其中g(shù)為重力加速度常數(shù),取值為9.80665。t是時間,把生成的訓練集賦值給t。最后把豎直位移公式的計算代碼“1/2*g*t**2”加入損失函數(shù)。
圖5 損失函數(shù)內(nèi)嵌物理公式
在物理信息神經(jīng)網(wǎng)絡框架配置完成后,運行代碼文件,神經(jīng)網(wǎng)絡訓練完成的效果如圖6所示。
圖6中的左側(cè)圖像是神經(jīng)網(wǎng)絡沒有訓練,計算出模擬值與精確值的擬合情況,屬于欠擬合狀態(tài)。右側(cè)圖像是訓練3000遍后數(shù)據(jù)的擬合情況,數(shù)據(jù)完全擬合。物理信息神經(jīng)網(wǎng)絡完美地模擬了平拋運動豎直位移的變化過程。
圖6 模型訓練前后數(shù)據(jù)擬合對比