• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    生成式人工智能/大語言模型

    利用 NVIDIA NIM 生成金融市場場景數據

    雖然生成式 AI 可用于創作巧妙的詩歌、酷炫的圖像和柔和的聲音,但仔細觀察這些令人印象深刻的內容生成器背后的技術可以揭示概率學習者、壓縮工具和序列建模者。當應用于量化金融時,這些方法可以幫助解開和學習金融市場中的復雜關聯。

    市場場景對于風險管理、策略回測、投資組合優化和監管合規性至關重要。這些假設數據模型代表了潛在的未來市場狀況,有助于金融機構模擬和評估結果,并做出明智的投資決策。

    具體方法可以證明您在各個領域的熟練程度,例如:

    • 使用變分自編碼器或降噪擴散模型生成數據
    • 使用基于Transformer的生成模型對具有復雜依賴關系的序列進行建模
    • 使用狀態空間模型理解和預測時間序列動態

    雖然這些方法可以以不同的方式運行,但也可以組合使用,以產生強大結果。

    本文將探討變分自動編碼器 (VAE)、降噪擴散模型 (DDM) 和其他生成工具如何與大型語言模型 (LLM) 集成,以高效創建具有所需屬性的市場場景。本文將介紹由 NVIDIA NIM 提供支持的場景生成參考架構,NVIDIA NIM 是一系列旨在加速生成模型部署的微服務,以便高效地創建具有所需屬性的市場場景。

    一個工具集,多個應用

    生成式 AI 為以前通過不同方法解決的各種量化金融問題提供了一個統一框架。經過訓練的模型可以學習其輸入數據的分布,然后作為各種任務的基礎模型。

    例如,它可以生成用于創建模擬或風險場景的樣本。它還可以確定哪些樣本不分布,作為異常值檢測器或壓力場景生成器。當市場數據在不同頻率下移動時,橫斷面市場快照存在差距。生成式模型可以以合理的方式提供與實際數據匹配的缺失數據,從而有助于即時預報模型或處理非流動點。最后,自回歸下一個令牌預測和狀態空間模型可以幫助預測。

    對于利用此類生成式模型的領域專家而言,一個重大瓶頸是缺乏平臺支持,無法將他們的想法和意圖與部署這些模型所需的復雜基礎設施聯系起來。雖然 LLM 已在金融等各行各業中獲得主流使用,但它們主要用于知識處理任務(如問答和總結)或編碼任務(如生成代碼存根以供人類開發者進一步增強),以及集成到專有庫中。

    將 LLM 與復雜模型集成可以彌合量化專家與生成式 AI 模型之間的溝通差距,如下所述。

    市場場景生成

    傳統上,市場場景的生成依賴于多種技術,包括專家規范(‘將美國收益曲線向上移動 ?50 bp in parallel’)、因子分解(‘沿第一個 PCA 方向移動 -10 bp 以調整歐元交換曲線’)以及方差協方差或引導等統計方法。雖然這些技術有助于生成新的場景,但它們缺乏對基礎數據分布的完整了解,通常需要手動調整。隱式學習數據分布的生成方法能夠輕松克服這一建模瓶頸。

    LLM 可以通過強大的方式與場景生成模型相結合,以實現簡化的交互,同時充當市場數據探索的自然語言用戶界面。例如,如果市場行為與之前的事件(例如重大的金融危機、上次的美國選舉、閃存崩潰或互聯網泡沫破滅)中的行為類似,交易員可能希望評估其書籍的曝光率。根據此類事件的記錄知識訓練的 LLM 可以根據此類事件或歷史時期找到并提取感興趣的特征,并將其傳遞給生成式市場模型,以創建類似的市場條件,以便在下游應用程序中使用。

    圖 1 展示了生成市場場景的參考架構,將用戶規格與合適的生成工具關聯起來。’Sample Implementation’ 部分顯示了由 NVIDIA NIM 提供支持的實現示例代碼。

    該過程從用戶指令開始;例如,請求模擬類似于‘處于金融危機峰值’的利率環境。代理(或代理集合)首先將其路由到由LLM提供支持的解釋器來處理此請求,該解釋器會解釋自然語言請求并將其轉換為中間格式(在本例中,是JSON文件)。

    然后,LLM 將‘金融危機峰值’轉換為具體的歷史時期(2008 年 9 月 15 日至 10 月 15 日),并將感興趣的市場對象(例如美國掉期曲線和掉期波動表面)映射到各自的預訓練生成模型(VAE、DDM 等)。可以通過數據檢索器組件檢索有關歷史興趣期的信息,并將其傳遞到相應的生成工具以生成類似的市場數據。

    Reference architecture for market scenario generation, connecting user specifications with suitable generative tools. Starting with a user request to generate market scenarios similar to those of a given historical period, an agent first routes it to an LLM-powered Interpreter that translates the request to a concrete historical period and maps the market objects of interest (e.g., swap curves, volatility surfaces) to corresponding pre-trained generative models. Historical data is retrieved by a data retriever component and passed on to these models which, in turn, generate novel market scenarios.
    圖 1. 使用 NIM 微服務的市場場景生成器參考架構

    生成過程需要在根據市場數據預訓練的生成模型上運行推理。圖 2 和圖 3 展示了使用對應于新冠肺炎(COVID-19)疫情開始的 VAE 模型生成的產量曲線場景示例。

    3D latent space projections shown as points that represent historical (circles) and synthetic (triangles) US yield curves at the start of the COVID-19 pandemic (Late Feb to mid April 2020).
    圖 2. 新冠肺炎(COVID-19)疫情開始時、2020 年 2 月下旬至 4 月中旬美國歷史產量曲線的潛在空間投影(左),以及通過在已實現產量曲線附近的潛在空間中采樣增加的場景(右)
    Historical and synthetically generated yield curve scenarios for the start of COVID-19. Historical curves are shown in solid lines. Newly-generated curves are shown with dashed lines. One can observe that the newly-generated curves respect the overall shape of the input data, without directly copying it.
    圖 3.新冠肺炎 (COVID-19) 疫情開始時根據歷史和綜合生成的收益率曲線場景

    表 1 展示了其他市場場景請求以及相應的 JSON 輸出。在這種情況下,用戶查詢指示要用于說明目的的模型。在生產環境中,路由代理可以自動選擇正確的模型。

    查詢 答案 模型和注釋
    ‘使用 VAE 模型,輸出的收益率曲線與 2020 年下半年相似。’ {“scenarios”: [
    ????{
    ?????“method”: “VAE”,
    ?????“object_type”: “yield curve”,
    ?????“period”: {
    ?????????“start_date”: “2020-07-01”,
    ?????????“end_date”: “2020-12-31”}
    ????}
    ]}
    Llama3-70b-instruct 正確地找到 2020 年的下半年。
    生成類似于post-COVID一年的產量曲線。 {“scenarios”: [
    ????{
    ?????“method”: “VAE”,
    ?????“object_type”: “yield curve”,
    ?????“period”: {
    ?????????“start_date”: “2020-03-01”,
    ?????????“end_date”: “2022-12-31”}
    ????}
    ]}
    Llama3-70b-instruct 正確地選擇‘VAE’作為默認方法,并識別新冠肺炎(COVID)后的時期。
    使用 DDPM 生成 2024 年第一季度類似的隱含體積表面。 {“scenarios”: [
    ????{
    ?????“method”: “DDPM”,
    ?????“object_type”: “implied vol surfaces”,
    ?????“period”: {
    ?????????“start_date”: “2024-01-01”,
    ?????????“end_date”: “2024-03-31”}
    ????}
    ]}
    mixtral-8x22b-instruct-v0.1 的正確日期為 2024 年的第一季度。
    生成類似于 Flash Crash 兩周周期的收益曲線。 {“scenarios”: [
    ????{
    ?????“method”: “VAE”,
    ?????“object_type”: “yield curve”,
    ?????“period”: {
    ?????????“start_date”: “2010-04-30”,
    ?????????“end_date”: “2010-05-13”}
    ????}
    ]}
    Llama3-70b-instruct 正確地將 Flash Crash 日期定在 2010 年 5 月 6 日,約在其前后 2 周內。
    模擬去年相似的通貨膨脹曲線。 {“scenarios”: [
    ????{
    ?????“method”: “VAE”,
    ?????“object_type”: “inflation curve”,
    ?????“period”: {
    ?????????“start_date”: “2022-01-01”,
    ?????????“end_date”: “2022-12-31”}
    ????}
    ]}
    Llama3-70b-instruct 注意:模型的知識截止日期是什么?從 NVIDIA 目錄中的模型卡中找出答案。在這種情況下,是 2023 年 3 月,所以此模型的‘去年’是 2022 年。
    模擬金融危機高峰時的收益曲線和swaption vol surfaces. {“scenarios”: [
    {
    ??“method”: “VAE”,
    ??“object_type”: “yield curve”,
    ??“period”: {
    ??????“start_date”: “2008-09-15”,
    ??????“end_date”: “2008-10-15”}
    },
    {
    “method”: “VAE”,
    “object_type”: “swaption volatility surface”,
    “period”: {
    ?????????“start_date”: “2008-09-15”,
    ?????????“end_date”: “2008-10-15”
    }}]}
    meta/Llama3-70b-instruct 正確識別兩種類型的市場對象,以及2008年9月15日Lehman Brothers崩潰后的金融危機峰值。
    表 1.NVIDIA NIM 獲取的場景生成問答示例

    使用生成模型進行市場結構分析

    金融市場本質上是復雜的,其特征是雜的高維數據,通常被視為多元時間序列。檢測導致大規模財務收益的瞬息萬變的模式需要智能建模和大量計算。

    降低維度的一種方法是考慮數據中存在的內部結構:曲線、曲面和更高維的結構。這些結構傳遞的信息可以用于降低復雜性。它們還可以被視為要通過生成模型的潛在空間嵌入和分析的信息單元。在本節中,我們將回顧如何在此上下文中使用 VAE 和 DDM 的示例。

    VAE 用于學習市場曲線的分布

    可以將債券收益、掉期、通貨緊縮和匯率視為具有一維術語結構,例如零息、即期、遠期或基礎曲線。同樣,期權波動可視為 2D 或更高維空間中的(超)表面。一個典型的掉期曲線可能有多達 50 個張量。我們無需研究 50 個相應的時間序列如何相互關聯,而是可以考慮掉期曲線的單個時間序列,并使用 VAE 來了解這些對象的分布情況,詳情請參閱’Multiresolution Signal Processing of Financial Market Objects‘。

    這種方法的優勢在于能夠集成先前隔離的數據:傳統上按貨幣(例如USD、EUR、BRL)或任務(例如場景生成、即時預報、異常檢測)單獨建模的市場對象行為現在可以集成到反映市場互聯性的單個生成模型的訓練中。

    圖 4 展示了 VAE 在收益曲線等市場數據對象上的訓練循環:編碼器將輸入對象壓縮到具有高斯分布的隱空間中,解碼器從該空間中的點重建曲線。隱空間是連續的、顯式的,通常是較低維的,因此導航非常直觀。不同貨幣或市場機制的曲線聚集在不同的區域,允許模型在這些集群內或之間導航,以根據所需的市場特征無條件或有條件地生成新曲線。

    Diagram showing the high-level architecture of a VAE training on market data: an encoder compresses input objects such as yield curves into a latent space with a Gaussian distribution; a decoder reconstructs curves from points in this space. The latent space of a VAE is continuous, explicit, typically of lower dimensionality, and intuitive to navigate.
    圖 4. 關于市場數據(如收益曲線)的 VAE 訓練循環

    特別是,生成過程可以根據特定的歷史周期來生成形狀可能與歷史周期相似的曲線,而不是精確的副本。例如,與新冠肺炎(COVID-19)大流行開始對應的美國庫存收益曲線在圖 2(左)中顯示為 VAE 的 3D 隱空間中的圓,該 VAE 已根據收益曲線數據進行訓練。由于 VAE 隱空間是連續的,它們自然會將自己呈現給定義興趣點周圍的鄰域,并從這些鄰域進行采樣,以生成與歷史相似(但不相同)的新型收益曲線場景,如圖 2(右)中顯示為三角形。

    圖 5 展示了用于訓練 VAE 模型的更完整的收益曲線,以及按速率水平分組的聚類,以及對應于在美國財政部市場關閉時錯誤包含數據點的離群值(Good Friday,2017)。人們可以輕松想象場景生成之外的其他應用,包括非線性因子分解、異常檢測等。

    In the 3D latent space of a VAE trained on US Treasury curves data (1993-2019), the financial crisis forms a distinct cluster, highlighting a significant deviation from pre-crisis conditions and transitioning into a unique post-crisis low-rates environment.
    圖 5. 在使用美國國庫券曲線數據訓練的 VAE 的 3D 隱空間(1993-2019 年)中,金融危機形成了一個獨特的集群,凸顯出與危機前狀況的重大偏差,并過渡到獨特的危機后低利率環境。

    用于學習波動性表面的 DDM

    DDM 通過可逆擴散的棱鏡接近生成過程。如圖 6 所示,它們的運作方式是逐步向數據中引入噪聲,直到數據成為標準高斯。然后,它們學習反向此過程,從純噪聲開始生成新的數據樣本。在前向通道中逐漸添加噪聲,直到所得對象與高斯噪聲無區別。在后向通道中,模型會學習重建原始表面所需的降噪。如果您想了解更多信息,請參閱生成式 AI 研究聚焦:揭秘基于擴散的模型

    A diagram showing the high-level architecture of a DDM trained to learn the distribution of 2D market objects such as volatility surfaces. It consists of a forward pass of gradual noise injection and a backward pass of learning the denoising process.
    圖 6.經過訓練的 DDM 的高級架構,該架構用于學習 2D 市場對象(如波動性表面)的分布情況

    為了了解隱含揮發性表面的分布情況,我們探索了 DDM (具體來說是 DDPM,或降噪擴散概率模型) 的能力。本示例使用由大約 20000 個揮發性表面組成的合成數據集,該表面由’Managing Smile Risk‘ 中描述的 SABR (隨機 Alpha-beta-rho) 隨機揮發性模型生成 (受初始條件 ?F_0\alpha_0?的限制)。

    ?

    dF_t = \alpha_t (F_t)^{\beta} dW_t
    d\alpha_t = \nu \alpha_t dZ_t
    \langle dW_t, dZ_t \rangle = \rho dt

    輸入表面示例如圖 7 所示。

    我們的目標是評估此類模型恢復輸入數據分布(在本例中為 SABR 分布)的能力。如果經驗表面直接來自期權市場價格,則分布未知,并且擁有能夠以非參數方式捕獲分布的工具,可以為沒有足夠自由度來表示數據的稀疏參數模型提供寶貴的替代方案。然后,它可以用于生成波動表面場景,或以合理的方式填充缺失區域。

    Example of an input SABR volatility surface used for model training. The surface is shown as a 3D plot with axes: log-moneyness, time to maturity in years, and implied log-volatility.
    圖 7. 用于模型訓練的輸入 SABR 表面示例

    針對這項工作,我們調整了此架構的簡化版本。輸入是 16 \times 16 隱含的揮發性網格,對應于各種期權貨幣對和到期時間對。其他類型的輸入,例如揮發性立方體(moneyness-maturity-underlying)或其他變體,也可以以類似的方式處理。

    圖 8 展示了在波動面輸入上訓練 DDPM 模型的幾個步驟。

    Screenshot showing progressions of 16x16 images during the first few epochs of training a DDPM model. Beginning with pure noise, the model progressively learns the noise process needed to denoise the images and generate SABR-like surfaces.
    圖 8. 幾個訓練步驟:從純噪聲開始,模型逐步學習噪聲過程

    圖 9 顯示了兩個合成生成的表面,這些表面隨后與 SABR 模型進行了匹配,以驗證其形狀是否與 SABR 相似。綠點表示與生成的表面匹配的 SABR 表面,以驗證 DDPM 模型是否學習了類似于 SABR 的形狀。

    Two synthetically-generated surfaces that have subsequently been fitted with SABR models to verify that their shapes are SABR-like. Green points represent SABR surfaces fitted to the generated ones, verifying that the DDPM model has learned the SABR-like shapes.
    圖 9.從噪聲過渡到生成的樣本,顯示中間噪聲表面(上)和新生成的揮發性表面(紫色,底部)

    示例實現

    本節展示了使用 NVIDIA 托管的 NIM 端點(包括 Llama 3.1 70B Instruct LLM)構建圖 1 中參考架構的 LLMQueryInterpreter 組件的示例。請注意,許多其他 NVIDIA 以及開源 LLM 也可以通過 NIM 使用,包括 Nemotron、Mixtral、Gemma 等。通過 NIM 訪問這些 LLM 可確保它們針對 NVIDIA 加速基礎設施上的推理進行了優化,并提供了一種快速輕松的方法來比較多個模型的響應。

    import openai
    import os
    from langchain_nvidia_ai_endpoints import ChatNVIDIA
     
    # NVIDIA API configuration
    NVIDIA_API_KEY = os.environ.get("NVIDIA_API_KEY") # click “Get API Key” at https://www.nvidia.com/en-us/ai/
    if not NVIDIA_API_KEY:
        raise ValueError("NVIDIA_API_KEY environment variable is not set")
     
    client = openai.OpenAI(base_url=NVIDIA_BASE_URL, api_key=NVIDIA_API_KEY)
     
    class LLMQueryInterpreter:
        """ NVIDIA NIM-powered class that processes scenario requests from user."""
         
        def __init__(self, llm_name="meta/llama-3.1-70b-instruct", temperature=0):
            self._llm = ChatNVIDIA(model=llm_name, temperature=temperature)
         
            # define output JSON format
            self._scenario_template = """
            {"scenarios": [
                {
                    "method": <generative method name, e.g., "VAE">,
                    "object_type": <object type, e.g., "yield curve">,
                    "period": {
                        "start_date": <start date of event>,
                        "end_date"  : <end date of event>
                    }
                },
                {
                    "method": <generative method name, e.g., "DDPM">,
                    "object_type": <object type, e.g., "volatility surface">,
                    "period": {
                        "start_date": <start date of event>,
                        "end_date"  : <end date of event>
                    }
                },
     
                // Additional scenarios, as needed
            ] }
            """
     
            # instructions for the LLM
            self._prompt_template = """"
            Your task is to generate a single, high-quality response in JSON format. \
            Format the output according to the following template: {scenario_template}. \
            Offer a refined, accurate, and comprehensive reply to the instruction. \
     
            Every query has a structure of this form: \
            "Use <method> to generate <market_object_type> similar to <period>". \
            Valid methods are "VAE" or "DDPM"; use "VAE" by default, if no method is specified.\
            If a different method is requested, return "invalid" as the method type. \
     
            Answer the following query without any additional explanations, return only a JSON output:
            {query} 
     
            """
     
        def process_query(self, query):
            # query = "Using a VAE model, output yield curves similar to those in the second half of 2020"
     
            llm_request = self._prompt_template.format(**{ "query": query, "scenario_template": self._scenario_template })
            llm_answer = self._llm.invoke(llm_request)
             
            return llm_answer.content
     
    # Example usage
    query = "Using a VAE model, output yield curves similar to the Flash Crash"
    llm = LLMQueryInterpreter()
    print(llm.process_query(query))
     
    # Output
    {
    "scenarios": [
        {
            "method": "VAE",
            "object_type": "yield curve",
            "period": {
                "start_date": "2010-05-06",
                "end_date": "2010-05-06"
            }
        }
    ]
    }

    結束語

    Quant、交易員和投資專業人士越來越多地與 AI 工具合作,使用它們進行建模和探索,這讓人興奮不已。這些先進工具的集成增強了金融建模和市場探索,有望推動市場參與者的能力和見解的發展。它們可以以創新的方式進行組合,并使用 NVIDIA NIM 輕松提供服務。

    ?

    +1

    標簽

    人人超碰97caoporen国产