當物理學遇上金融學:利用人工智慧求解布萊克-斯科爾斯方程
以下是如何使用基於物理資訊的神經網絡,透過 Python 解決金融模型的方法。
詳細資料這並非財務建議。我擁有航空航天工程博士學位,主要研究方向是機器學習。 我不是 身為財務顧問,本文的目的僅在於展示實體資訊神經網路(PINN)在金融領域的強大功能。
我16歲那年愛上了物理學。原因很簡單,卻也很有力:我相信物理學 公平的.
我從未因為光速一夜之間發生變化,或突然間它可能變得……而在練習中犯錯。x 不。每次我讀物理論文時都會想, “這似乎不合邏輯。” 事實證明 是我沒聽懂。
所以,物理學總是公平的,這就是它一直如此的原因。 穆斯林物理學透過其一套規則(稱為規則集)展現了這種完美性和公平性。 微分方程.

我所知道的最簡單的微分方程式是這樣的:

很簡單:我們從這裡開始,x0時間 t=0 為 0,我們以 5 公尺/秒的恆定速度運動。這意味著一秒後,我們距離起點 5 公尺(或者如果你喜歡的話,也可以用英里來表示);兩秒後,我們距離起點 10 公尺;43128 秒後……我想你明白了。
正如我們剛才所說,這似乎是鐵律:完美、完美、無可辯駁。然而,想像一下現實生活中的情況。想像一下你正在散步或開車。即使你盡力以目標速度行駛,你也永遠無法始終保持這個速度。你的思緒會在某些時候飛速運轉;你可能會分心,可能會在紅燈前停車,而且很可能是這些情況的組合。所以,也許我們之前提到的那個簡單的微分方程式並不足以解決問題。我們可以試著預測你相對於這個微分方程的位置。 但 有幫助 人工智能這一概念對於建立複雜系統模型至關重要。
這個想法被應用在 基於物理學的神經網絡 (PINN)。我們稍後會詳細描述它,但其基本思想是我們試圖匹配 誰 數據以及我們從描述該現象的微分方程中得到的資訊。這意味著我們要強制我們的解大致符合我們對物理學的預期。我知道這聽起來像玄學,但我保證,隨著本文的深入,你會逐漸明白其中的原理。
現在,最關鍵的問題來了:
金融、物理學和基於物理學的神經網路之間有什麼關係?
事實證明,微分方程式不僅對那些對自然宇宙規律感興趣的人有用,而且在以下方面也很有用: 財務模型例如,該模型使用 布萊克-斯科爾斯 在某些嚴格假設下,推導出用於確定買權價格的微分方程 無風險錢包.
這段極為複雜的引言有兩個目的:
- 故意讓你有點摸不著頭腦,這樣你才會繼續讀下去🙂
- 激發你的好奇心,看看這一切最終會走向何方。
我希望我成功了😁。如果成功了,文章的其餘部分將按照以下步驟進行:
- 我們將討論 布萊克-斯科爾斯模型它的假設及其微分方程
- 我們將討論… 基於物理的神經網路(PINN)它從何而來,又有什麼用處?
- 我們將開發自己的演算法,該演算法使用 Black-Scholes 資料集訓練 PINN。 蟒蛇 和 火炬 和 OOP.
- 我們將展示我們演算法的結果。
我好興奮!去實驗室! 🧪
1. 布萊克-斯科爾斯模型:深入剖析
如果您有興趣閱讀有關 Black-Scholes 模型的原始研究論文,您可以找到它。 這裡絕對值得一讀🙂
好了,現在我們需要了解這個世界。 金融 了解我們所處的背景、影響因素以及支配這些因素的規律至關重要。理解金融基礎知識及其與黑人學校的關係也必不可少。
首先,在金融領域,有一種強大的工具叫做 黃瓜 買權賦予你權利(但沒有義務)在預定的未來日期(例如一年後)以特定價格購買股票,這個價格稱為行使價格。 價格).
現在,我們來仔細想想。假設今天的股價是 100 美元。假設我們持有一份行權價為 100 美元的買權。假設一年後,股價上漲到 150 美元。太好了!我們可以用這份買權買進股票,然後立即賣出!這樣我們就賺了 150 美元 - 100 美元 = 50 美元。另一方面,如果一年後股價跌到 80 美元,我們就做不到了。事實上,我們最好不要行使買權,這樣就不會虧錢。
所以,經過一番思考,這個想法 買股票 和 賣出選擇權 看 完全集成我的意思是,股票價格的隨機性(即價格的漲跌)實際上可能會… 緩解它 透過保持正確數量的選項。這被稱為 Delta對沖。 這是風險管理中的一項基本策略。
基於一系列假設,我們可以推導出 公平選擇權價格 為了得到一個錢包 無風險這個概念是布萊克-斯科爾斯模型的基礎。
我不想贅述推導過程的細節(坦白說,原文不難理解),但無創投組合的微分方程式如下:

在哪裡:
C這是t時刻的選擇權價格。sigma這是股票的波動性。r這是無風險利率t這是時間(目前 t=0,結束日期 T)。S這是目前的股價
由此方程,我們可以推導出無風險投資組合的買權的合理價格。此方程為封閉的解析方程,形式如下:

和:

其中 N(x) 是標準常態分佈的累積分佈函數 (CDF),K 是行使價格,T 是到期日。
例如,這是一個圖表 股價(x) 惆悵 購買選擇權(y)根據布萊克-斯科爾斯模型。

這聽起來很棒,但這跟物理學和PINN有什麼關係呢?這個方程式看起來是解析的,那為什麼是PINN?為什麼是人工智慧?我為什麼要讀這篇文章?答案在下面👇:
2. 基於物理學的神經網絡
如果您對物理資訊神經網路(PINN)感興趣,可以參考原始論文。 這裡再次強調,值得一讀。 🙂
現在,上面的方程式 轉交但需要再次強調的是,這只是理想情況下的合理價格公式。如果我們暫時忽略這一點,試著根據股票價格和時間來預測選擇權價格,會發生什麼事?例如,我們可以使用前饋神經網絡,並透過反向傳播演算法對其進行訓練。這種方法是利用神經網路進行期權定價的基礎。
在這種訓練機制中,我們最大限度地減少誤差:
L = |Estimated C - Real C|:

這沒問題;這是你能採取的最簡單的神經網路方法。問題在於我們完全忽略了布萊克-斯科爾斯方程式。那麼,還有其他方法嗎?我們能把它們結合起來嗎?
當然可以,如果我們把錯誤設定為:
L = |Estimated C - Real C|+ PDE(C,S,t)
其中 PDE(C,S,t) 為:

它應該盡可能接近 0:

但問題依然存在。為什麼這種方法比簡單的布萊克-斯科爾斯方程式「更好」?為什麼不直接使用微分方程式?原因在於,在現實生活中,求解微分方程式有時並不能保證得到「真實」的解。物理學通常會對事物進行近似,而這種近似方式可能會導致我們預期與實際觀察到的結果之間存在差異。正因如此,基於物理資訊的神經網路(PINN)才如此出色:它試圖擬合物理規律,但同時又嚴格要求結果必須與資料集中的「觀察」結果相符。這種將物理模型與實驗數據結合的方法,正是其獨特之處。
就我們而言,為了建立無風險投資組合,我們可能會發現理論上的布萊克-斯科爾斯模型並不能完美契合我們觀察到的吵雜、有偏差或不完整的市場數據。或許波動率並非恆定不變,或許市場並非有效,或許方程式的基本假設並不成立。這時,PINN 等方法便能發揮作用。我們不僅能找到滿足布萊克-斯科爾斯方程式的解,而且還能「信任」我們從數據中觀察到的結果。這使得模型更加靈活,能夠適應現實世界的市場狀況。
好了,理論就講到這裡。讓我們開始寫程式碼吧。 👨💻
3. 使用 Python 的實際應用
您可以找到完整的程式碼,以及一個很棒的 README.md 檔案、一個優秀的筆記本和一個非常清晰的標準程式碼。 這裡該程式碼專門設計用於使用 PINN 神經網路求解 Black-Scholes 方程,PINN 神經網路是金融建模領域的先進技術。
注意:本節內容會比較密集(包含大量程式碼),如果您對程式設計不感興趣,可以直接跳到下一章。我會用更簡單的方式呈現結果。 🙂
非常感謝大家走到這一步❤️
讓我們來看看如何實現這一點。現在,讓我們來探討如何將這種技術應用於求解布萊克-斯科爾斯方程,重點關注其實際應用和細節方面。
3.1 Config.json 文件
整個程式碼可以使用一個非常簡單的設定檔運行,我將其命名為 配置文件.
你可以把它放在任何你想放的地方,我們稍後會看到。
這個文件至關重要,因為它定義了所有控制模擬、資料產生和模型訓練的參數。下面我簡單解釋一下每個值的含義:
K: 執行價格 這是選擇權賦予你未來購買股票的權利的價格。T: 距離到期日還有時間多年以後。所以T = 1.0這意味著該期權將在一年後到期(例如,一年後)。r: 無風險利率 用戶需自行負責對未來價值進行折現。這是我們在模擬中確定的利率。sigma: 波動 此箭頭表示預測股票價格的難度,或說風險程度。同樣,這是一個模擬參數。N_data: 數字 人工數據點 我們需要建立用於訓練的模型。這將決定模型的大小。min_S和max_S: 股票價格範圍 我們在創建合成資料時想要採樣的內容:最低和最高股價。bias: 選擇權價格中可添加可選的偏移量這樣做是為了模擬數據中的系統性變化。目的是為了在現實世界和布萊克-斯科爾斯模型數據之間建立對比。noise_variance: 噪音水平 此參數被加到選擇權價格中,用於模擬測量或市場噪音。新增此參數的原因與之前相同。epochs: 數字 重複 模型將基於此進行訓練。lr: 學習率 針對優化器。這控制著模型在訓練過程中更新的速度。log_interval我們想要的次數(以時代為單位) 列印記錄 監測培訓進度。
這些參數各司其職;有些塑造了我們模擬的金融世界,有些則控制神經網路如何與之互動。即使是微小的改動也可能導致截然不同的行為,這使得該文件既強大又敏感。更改此 JSON 檔案中的值將顯著改變程式碼的輸出。
3.2 main.py(main.py 檔案)
現在,讓我們來看看此配置的其餘程式碼在實踐中是如何使用的。
我們程式碼的主要部分來自 主文件要使用 Torch 訓練您的 PINN 網絡,並且 布萊克·斯科爾斯的.py.
這是 main.py 檔案:
所以,你可以這樣做:
- 建立您的 config.json 文件
- 運行命令
python main.py --config config.json
main.py 檔案使用了許多其他檔案。
3.3 black_scholes.py 及其插件
Black-Scholes 模型的應用位於該文件中。 black_scholes.py:
該文件可用於建立、訓練、匯出和預測模型。
函數也使用了一些輔助文件,例如 data.py、loss.py 和 model.py。
文件內包含一個 Torch 範本。 模型:
資料產生器(請參閱設定檔)位於該檔案中 資料.py:
包含偏斜值的綜合損失函數為 loss.py該功能對於提高模型的準確性至關重要。
4. 結果
好的,當執行 main.py 時,我們的前饋神經網路 (FFNN) 就會被訓練,並且得到以下結果:

如你所見,模型誤差並非嚴格為零,但模型的偏微分方程式遠小於資料。這意味著模型(自然地)迫使我們的預測更加穩健,以滿足微分方程的要求。這正是我們之前所說的:無論使用現有資料還是使用 Black-Scholes 模型,我們都能提升效能。
我們可以定性地觀察到,雜訊+偏差(相當現實的)真實世界資料集與 PINN 網路之間存在高度相似性。

這是 t = 0 時的結果,此時股票價格隨買權在固定 t 值下的變化而變化。很酷吧?但這還不是全部!你可以用以上程式碼透過兩種方式探索結果:
- 與許多人一起玩耍 參數 在 config.json 中找到
- 看到預測 t>0
祝您玩得愉快! 🙂
5. 結論
非常感謝你來到這裡。這真是一段漫長的旅程😅
本文回顧了以下內容:
- 我們從物理學開始。它的規律,用微分方程寫成,是公平、優美且(通常)可預測的。
- 我們接著討論了財務問題。我們遇到了布萊克-斯科爾斯模型——一個旨在以無風險方式對選擇權進行定價的微分方程式。
- 我們探索了物理資訊神經網路(PINN)。PINN是一種神經網絡,它不僅能匹配數據,還能滿足基本微分方程式的要求。它們是建構複雜系統模型的強大工具。
- 我們所有功能都是用 Python 實現的。使用 PyTorch 和乾淨的標準資料庫,您可以修改參數、建立合成資料並訓練自己的 PINN 來解決 Black-Scholes 方程式。
- 我們拍攝了結果。 我們看到網路不僅學會了匹配鋸齒狀的數據,還學會了匹配 Black-Scholes 方程式預測的行為。
我知道一下子吸收所有這些資訊並不容易。在某些方面,我必須盡量簡潔,或許比必要的更簡短。不過,如果您想更清楚地了解情況,請再次查看… GitHub 資料夾。 即使您對軟體不感興趣,這裡也提供了一個清晰的 README.md 檔案和一個簡單的模板。 範例/BlackScholesModel.ipynb 該項目按步驟進行了解釋。
評論被關閉。