[心得] 當actor-critic遇到black-scholes

看板DataScience作者 ( )時間1年前 (2023/01/28 14:45), 編輯推噓2(204)
留言6則, 3人參與, 1年前最新討論串1/1
Medium網頁好讀版 https://tinyurl.com/u4au6u2e 本文試著將Reinforcement Learning的Actor-Critic模式與選擇權評價模型裡的投資組合 複製框架(delta hedge)兩種極為相似的概念整合,實作出可以同時計算選擇權價格(對應 到RL的critic)與避險比率(對應到RL的actor)的強化學習框架。 https://miro.medium.com/max/750/1*Jzkn6FmYbD0UC_GkukwHvg.png
Black-Scholes Model 相信交易過選擇權的人一定都對Black-Scholes與Delta不陌生(已經熟悉Black-Scholes的 讀者可以直接跳過這一段,這邊不打算花太多篇幅講解它)。首先,根據此理論,選擇權 評價公式長這樣: https://miro.medium.com/max/750/1*Jzkn6FmYbD0UC_GkukwHvg.png
還有一個很重要的公式,Delta,代表若要複製一個選擇權的報酬,所需持有的標的物的 數量,就是前面選擇權價格公式的其中一部分: https://miro.medium.com/max/252/1*dE53bK_AWzr8o3-dXkAbVQ.png
Black-Scholes雖然是一套從純理論出發的公式,但他能在實務中屹立長久,靠的就是這 個評價模型 與 複製報酬的架構。在這個架構中,造市者藉由持有一個特定比例(delta) 的選擇權標的物,就可以對沖掉選擇權價格的漲跌。至於這價格公式與Delta公式怎麼來 的?簡單的說,先假設股價的走勢呈現幾何布朗運動(這是最基礎的假設,當然也有更複 雜的模型,例如固定收益的LMM或是Hull-White),再套入Ito’s Lemma得到一個微分方程 ,接著再以選擇權的到期報酬(payoff),以買權為例,Max(0, stock price — strike) ,作為邊界條件去解微分方程式,就可以得到價格公式與delta公式。 https://miro.medium.com/max/538/1*qOd9yf62We6Ysay0sDHSiA.png
描述股價瞬時變動的幾何布朗運動模型 Actor-Critic 這裡同樣的,已經對強化學習的Actor-Critic演算法熟悉的讀者可以跳過這段,因為網路 上有太多優秀的教學資源,所以這邊我同樣的也簡單的介紹一下就好。Actor-Critic是一 種結合policy based與value based的強化學習演算法,Actor負責執行動作,Critic負責 替前者執行的動作給予評價。兩者各自有一個類神經網路,Actor靠Critic給出的評價來 以policy-gradient更新參數,Critic則是藉由Actor實際與環境互動出來的結果,以 Bellman-Equation來更新參數。 藉由不斷的「環境互動 — 更新Policy — 更新Critic」的循環,最終達到策略最佳化的 目的。而回顧Black-Scholes的框架,他的價格公式與Delta公式,是由對股價走勢的假設 (幾何布朗運動)決定,並由數學推導(解微分方程)來獲得。而強化學習的Actor與Critic 的函數,是由Agent與環境的互動出來的經驗決定,並由學習獲得,這兩者有很多相似之 處,因此把Actor Critic稍加改造應該可以訓練出一個不用理解Black-Scholes Model就 可以近似出其價格公式與Delta公式的神經網路。 Critic的更新方法: https://miro.medium.com/max/588/1*kL8PqGCaaaxv6EjOcGz7qg.png
這邊的→符號,是指以梯度下降法更新神經網路權重θ,使左邊的值趨近右邊值,也就是 以右邊為target來訓練θ。Critic是用來衡量根據目前狀態St,未來所有Reward的折現期 望值(是的,折現期望值,這點也跟財務工程的思維很像),如果我們要用一個神經網路來 估計選擇權價值,回顧一下,Black-Scholes框架的一個重點就是用delta避險來複製選擇 權,那我們會希望評估值的變動會儘量接近避險部位價值的變動 https://miro.medium.com/max/616/1*zI3FcKVQQ_nTnJbSUNUbvw.png
移項後再把delta*St替換為RL 領域熟悉的符號r,就得到 https://miro.medium.com/max/632/1*BgIZkrwjxvL8kdl3-WpZ2g.png
(選擇權版本的critic更新公式,注意rt的部分與原版A2C正副相反) 訓練Actor 除了訓練評價函數V(也就是critic)來計算選擇權價格以外,我們還需要一個actor來決定 delta避險部位,而這次是反過來,critic要去指導actor函數,critic透過advantage function來告訴actor,剛剛選的action是好還是壞。 https://miro.medium.com/max/720/1*V0gHx98xs5aLW7FJXjrI2A.png
(原版actor critic的期望reward的梯度) 注意在原本的actor-critic框架中,Actor是產生一組離散的機率分佈,代表執行各種 action的機率,訓練actor的方式是讓reward總和的期望值最大化,而要最大化期望值, 就是靠advantage function來告訴actor什麼action是好,什麼action是壞,數學上來說 就是用policy gradient來更新這個policy的權重。 https://miro.medium.com/max/1094/1*sNVHuhAliTKOyxGAeRoBng.png
(原版actor critic的期望reward的梯度) 但是因為我們要決定的是一個避險比例delta,它只是一個數值,而非在多個action中選 一個來執行(離散機率分佈),所以問題更簡單,只要讓他產生的delta值去逼近 advantage function(這就成為一個簡單的regression problem) 實作 建立起理論基礎後,下一步就是來實作了,作為一個概念驗證專案(POC),這邊先不打算 從實際市場歷史股價來訓練,而是先用Black-Scholes Model產生出模擬股價(雖然原本的 目的是做出model-less架構),並用這些模擬價格訓練出選擇權估值函數與delta函數,並 驗證算出來的值是否與Black-Scholes公式相差不遠。 程式碼部分如下,首先是產生模擬股價的BlackProcess類 https://medium.com/media/ad9ff5c07bec38ad1ee711fad713756b 再來是強化學習必定要有的自定義Env類,這邊並沒有繼承openAI的env,而是直接創建新 的類 https://medium.com/media/083e21555e72a3fc27412557766028a7 還有產生actor與critic model的function,餵給actor與critic的input有5個,分別是價 內程度、價內程度的平方、剩餘天期、剩餘天期的平方、價內程度*剩餘天期。(值得注意 的是,因為選擇權價格永遠大於0,所以critic最後一層的activation要用sigmoid,而 delta值有正有負(看是call還是put),所以actor最後一層activation選tanh。) https://medium.com/media/dd4f17469493152f7ec6e9324bf6ac35 以及定義好要進行神經網路學習的loss function: https://medium.com/media/33f25206127a3fc90fb6d324fcdb510b 接著是actor-critic的訓練流程: https://medium.com/media/d4e2fc91b531013789648686a1d912cd 最後是結合再一起進行測試,假設的初始股價S0=1,波動度30%,無風險利率1%,天期為 30日,履約價K=1.1。 https://medium.com/media/ec1dc2f0d99fce3d08c1d55ef29799d8 測試的結果,可以發現不論是估值還是delta算出來的結果跟Black-Scholes公式天差底遠 ,在經過50回合訓練後,神經網路預估的選擇權價值是0.0106,Black-Scholes公式計算 值為0.0347,delta方面,神經網路預估值是-0.0689,Black-Scholes公式計算值為0.521 。 為了解決這個問題,在真正開始actor-critic互動式訓練之前,先對兩者分別進行「預訓 練」。 首先是actor(delta預估函數)的預訓練,假設天期為10個交易日的選擇權,則我們製作一 個輸出10個delta值的Model,因為用delta避險倉位要能複製選擇權的最終payoff,所以 讓輸出的delta各自乘以對應時間的dS,相加後,再加上選擇權初始價值,整個總和讓它 逼近選擇權到期時的Payoff,因為我們還沒有正確的價格函數,所以選擇一個價外選擇權 ,並假設其價格等於0。 https://miro.medium.com/max/828/1*WjxUgS8OFwUo5hsJ4M0f5w.png
接著利用預訓練完畢的actor(delta預估函數)來預訓練critic(估值函數),從期末的 payoff值開始,以反序方式,藉由本期估值等於下一期估值減去避險部位損益,當作估值 函數的神經網路學習目標。 https://miro.medium.com/max/640/1*BCWsULH9oG4mwWvwIUhnYw.png
在先對模型施以預訓練後再進入actor-critic後,我們發現兩個模型很快地進入狀況,在 50回合訓練後,估值方面,神經網路的預估為0.0373,Black-Scholes公式解為0.0347, delta方面,神經網路的預估為0.4471,Black-Scholes計算值為0.5210。 雖然這只是一個用模擬價格訓練出來的Proof of Concept模型,還是最簡單的vanilla選 擇權,但是它初步驗證了將actor-critic與Black-Shcoles兩個框架相似之處融合之後的 可行性。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.248.45 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1674888303.A.AFC.html

01/29 13:16, 1年前 , 1F
感謝大大分享。只是如果在github有全部程式碼,就更方便
01/29 13:16, 1F

01/29 13:17, 1年前 , 2F
複製結果及研究了。
01/29 13:17, 2F

01/29 18:50, 1年前 , 3F
01/29 18:50, 3F

01/29 21:09, 1年前 , 4F

01/29 21:10, 1年前 , 5F
不知為何demo的notebook檔上傳到github就什麼都沒了
01/29 21:10, 5F

01/29 21:10, 1年前 , 6F
要測試的話直接執行main.py
01/29 21:10, 6F
文章代碼(AID): #1ZrCHlhy (DataScience)
文章代碼(AID): #1ZrCHlhy (DataScience)