SAGE 白皮書
泓技科技控股有限公司
← 主頁

穩健自適應投資策略:四階敏感度平滑估計與 Adam 優化器整合

SAGE: Smooth Adaptive Gradient Estimation for Robust Portfolio Optimization


作者: 算法研究部

機構: WTECH(HK) Technology Limited

日期: 2026-07-05

版本: v1.0

審閱: 算法研究部主管


摘要

在量化投資中,對期望收益與風險的高階敏感度分析能夠捕捉參數微小變動的非線性影響,但極小機率事件常導致數值不穩定(梯度爆炸或除零)。本文提出一套改良演算法 —— SAGE(Smooth Adaptive Gradient Estimator),結合貝氏平滑歸一化、軟截斷與解析極限保護,徹底避免因機率趨近於零而引發的數值發散,同時保留高階導數結構。

核心貢獻包括:

1. 貝氏平滑歸一化:以 Dirichlet 先驗(離散情況)或連續混合平滑(連續情況)取代硬截斷,保證機率永遠大於零且處處可微

2. 多層級梯度保護:基於 tanh 的軟截斷(Huber-type saturation)保留無窮階可微性,配合解析極限後備處理極端尾部

3. 高階對角近似:考量完整張量計算量 O(n^k) 於工程上不可行,採用對角近似(diagonal approximation),為業界標準做法

我們進一步將此估計器嵌入基於 Adam 的自適應優化流程,使策略參數能穩定收斂至最優解。實驗表明,SAGE 在一至四階導數的數值驗證中全部通過(20/20,最大誤差 3.53×10⁻⁶),邊界情況(probs → 0/1)下梯度保持穩定。

本文提供完整數學推導、演算法偽代碼、PyTorch 實作,以及單元測試與 ablation study 框架,兼顧理論深度與工程實用性,適合量化研究員與技術開發者。

關鍵詞: 高階敏感度、貝氏平滑、梯度截斷、Adam 優化器、投資組合優化、PyTorch


1. 引言

1.1 問題背景

金融市場的厚尾與極端事件特性,常使依賴機率加權的敏感度指標(如 Delta、Gamma、Vega 等高階導數)在尾部區域劇烈震盪。傳統數值方法直接計算 $\frac{\partial \log p}{\partial \theta}$ 時,一旦 $p(x) \to 0$,分數函數便趨向無窮,污染整個期望值估計。

具體而言,考慮一組以策略參數 $\theta \in \mathbb{R}^d$ 參數化的機率分佈 $p(x;\theta)$,目標是最大化期望效用:

$$\mathcal{L}(\theta) = \mathbb{E}_{p(x;\theta)}[U(X)] = \int U(x) p(x;\theta) dx$$

其中 $U(\cdot)$ 為效用函數。透過 score function gradient estimator(REINFORCE),一階梯度為:

$$\nabla_\theta \mathcal{L} = \mathbb{E}_{p(x;\theta)}\left[U(x) \nabla_\theta \log p(x;\theta)\right]$$

當 $p(x) \to 0$ 時,$\nabla_\theta \log p = \frac{\nabla_\theta p}{p}$ 中的除法運算導致梯度爆炸,使 Monte Carlo 估計的變異數趨於無窮。

1.2 本文貢獻

針對上述問題,本文提出 SAGE 框架,包含三層防護:

1. 第一層 — 貝氏平滑:以 Dirichlet 先驗或連續混合平滑取代硬截斷,保證機率下界

2. 第二層 — 軟截斷:對梯度施加 tanh 飽和,保留可微性同時抑制極端值

3. 第三層 — 解析極限後備:當數值仍趨向無限時,切換至尾部解析近似

三層防護逐步升級,在保護效果與計算精度間取得平衡。

1.3 文章結構

  • 第 2 節:形式化問題
  • 第 3 節:詳述改良方法(貝氏平滑、軟截斷、高階遞推)
  • 第 4 節:與 Adam 優化器的整合
  • 第 5 節:程式實作教學
  • 第 6 節:數值驗證與實驗
  • 第 7 節:工程落地考量
  • 第 8 節:結論

  • 2. 問題形式化

    2.1 符號定義

    符號含義維度
    ------------------
    $\theta$策略參數(配置權重、選擇權執行價等)$\mathbb{R}^d$
    $X$資產回報隨機變數$\mathbb{R}^K$($K$ 個狀態)
    $p(x;\theta)$參數化機率分佈simplex
    $U(x)$效用函數$\mathbb{R}$
    $\mathcal{L}(\theta)$期望效用目標函數$\mathbb{R}$
    $g_k(\theta)$$k$ 階導數張量$\mathbb{R}^{d^k}$

    2.2 高階敏感度

    定義 $k$ 階敏感度:

    $$g_k(\theta) = \frac{d^k}{d\theta^k} \mathcal{L}(\theta), \quad k = 1, 2, 3, 4$$

    其中:

  • $g_1 \in \mathbb{R}^d$:梯度向量(用於優化方向)
  • $g_2 \in \mathbb{R}^{d \times d}$:Hessian 矩陣(用於曲率風險懲罰,Gamma)
  • $g_3 \in \mathbb{R}^{d \times d \times d}$:三階張量(用於偏態懲罰,Skew)
  • $g_4 \in \mathbb{R}^{d \times d \times d \times d}$:四階張量(用於峰態懲罰,Kurtosis)
  • 2.3 數值瓶頸

    核心困難發生在尾部區域:當 $p(x)$ 極小,

    $$\nabla_\theta \log p(x;\theta) = \frac{\nabla_\theta p(x;\theta)}{p(x;\theta)}$$

    分子可能非零而分母趨近於零,導致數值爆炸。傳統的 $\epsilon$-floor 方案($\tilde{p} = \max(p, \epsilon)$)存在不連續性與質量重新分配突兀的缺點。

    2.4 Score Function Estimator 的適用條件

    需特別注意:上述 score function estimator 假設 $U(x)$ 不依賴 $\theta$。若效用函數本身為 $\theta$ 的函數(如選擇權執行價直接影響 payoff),則應使用 pathwise derivative(reparameterization trick)。本文聚焦於前者——以 $\theta$ 參數化資產配置權重,$U(x)$ 為固定回報的情境。


    3. 穩健估計方法

    3.1 貝氏平滑歸一化

    #### 3.1.1 離散情況 — Dirichlet 平滑

    假設有 $K$ 個市場狀態,原始機率向量 $\mathbf{p} = (p_1, \dots, p_K)$。引入 Dirichlet 先驗 $\text{Dir}(\alpha_1, \dots, \alpha_K)$,後驗平滑機率為:

    $$\tilde{p}_i = \frac{p_i + \alpha_i}{\sum_{j=1}^K (p_j + \alpha_j)} \tag{1}$$

    選取 $\alpha_i = \eta \cdot q_i$,其中 $q_i$ 為參考分佈(如均勻分佈 $1/K$ 或長期歷史平均),$\eta > 0$ 控制平滑強度。

    關鍵性質:

  • 即使原始 $p_i = 0$,$\tilde{p}_i \geq \frac{\alpha_i}{\sum(p_j + \alpha_j)} > 0$
  • 運算處處可微,保證 $\log \tilde{p}_i$ 與其導數始終有限
  • $\eta \to 0$ 時還原為原始分佈;$\eta \to \infty$ 時收斂至先驗分佈
  • #### 3.1.2 連續情況 — 混合平滑

    對於連續密度,採用混合平滑:

    $$\tilde{p}(x) = (1 - \epsilon) p(x;\theta) + \epsilon q(x) \tag{2}$$

    其中 $q(x)$ 為已知厚尾基準密度(建議使用自由度 $\nu = 3$ 的 Student's t 分佈),$\epsilon$ 很小(典型值 $10^{-4}$ 至 $10^{-3}$)。

    對數導數為:

    $$\nabla_\theta \log \tilde{p}(x) = \frac{(1 - \epsilon)\nabla_\theta p(x)}{(1 - \epsilon)p(x) + \epsilon q(x)} \tag{3}$$

    當 $p(x) \to 0$,分母趨向 $\epsilon q(x) > 0$,梯度被有效抑制。

    ⚠️ 權衡注意: 在尾部區域,分子 $(1-\epsilon)\nabla_\theta p(x)$ 同樣趨近於零,導致梯度訊號發生雙重衰減(分子變小 + 分母有 floor)。需透過 $\epsilon$ 的選取在 bias-variance tradeoff 間取得平衡。建議以 validation Sharpe ratio 為指標進行校準。

    #### 3.1.3 兩種平滑的選用指南

    情境推薦模式原因
    ----------------------
    離散資產配置(選股權重)Dirichlet 平滑輸出為 simplex,Dirichlet 為自然共軛先驗
    連續定價參數(選擇權)混合平滑連續密度無自然離散化
    混合情境(多模態)自適應切換根據輸出熵動態選擇

    3.2 極限保護:軟截斷與解析後備

    #### 3.2.1 軟截斷(Huber-type Saturation)

    即使使用平滑機率,極端參數下仍可能產生過大的 $\nabla_\theta \log \tilde{p}$。對每個樣本點的貢獻 $h(x) = U(x) \cdot \nabla_\theta \log \tilde{p}(x)$,施加平滑飽和函數:

    $$h_{\text{safe}}(x) = c \cdot \tanh\left(\frac{h(x)}{c}\right) \tag{4}$$

    其中 $c$ 為飽和尺度。此設計具有以下優點:

  • **無窮階可微**:$\tanh \in C^\infty$,保留完整計算圖
  • **自適應縮減**:當 $|h| \ll c$ 時 $\tanh(h/c) \approx h/c$,$h_{\text{safe}} \approx h$(近乎恆等)
  • **飽和保護**:當 $|h| \gg c$ 時 $\tanh(h/c) \approx \pm 1$,$h_{\text{safe}} \approx \pm c$(有界)
  • #### 3.2.2 多維梯度處理

    ⚠️ 重要修正(v1.0): 論文初稿使用逐元素 $\tanh$ 截斷,但此做法會破壞梯度向量各分量間的協方差結構。在多維參數 $\theta \in \mathbb{R}^d$ 中,Adam 優化器依賴二階矩估計(梯度平方的指數移動平均)進行自適應歸一化,若各分量被獨立壓縮,二階矩的相對大小將被扭曲。

    推薦方案:Norm-based Clipping

    $$\hat{g} = \begin{cases} g, & \|g\|_2 \leq c \\ c \cdot \frac{g}{\|g\|_2}, & \|g\|_2 > c \end{cases}$$

    此方案保留梯度方向資訊,僅限制尺度,且計算開銷與逐元素方案相當。在我們的實作中,$c$ 的默認值設為 $1.0$,可透過 clip_threshold 參數調整。

    #### 3.2.3 解析極限切換

    當 $p(x) < \delta$ 或 $\|\nabla_\theta \log p\| > M$ 時,直接使用尾部解析近似。例如若分佈尾部近似為 $p(x) \propto e^{-a x^b}$:

    $$\log p \approx \text{const} - a x^b, \quad \nabla_\theta \log p \approx -a b x^{b-1} \frac{\partial x}{\partial \theta}$$

    這遠比數值除法穩定。在實施時,可預先為常用分佈建表,或在程式內利用自動微分時插入自訂後備(custom gradient)。


    3.3 高階導數的穩定遞推

    #### 3.3.1 通用公式

    結合以上保護,在對數空間計算所有敏感度。以二階為例:

    $$\frac{d^2\mathcal{L}}{d\theta^2} = \int U(x) \tilde{p}(x) \left[ \nabla_\theta^2 \log \tilde{p}(x) + \big(\nabla_\theta \log \tilde{p}(x)\big)^2 \right] dx \tag{5}$$

    更高階項可由 Faà di Bruno 公式展開,或更實務地,透過自動微分框架(如 PyTorch 的 torch.autograd.grad)重複呼叫獲得。

    #### 3.3.2 對角近似

    ⚠️ 工程註記: 完整高階張量的維度為 $d^k$,計算複雜度 $O(d^k)$。以 $d = 20$ 資產為例:

  • Hessian($20 \times 20$):400 元素,可完整計算
  • 三階張量($20^3$):8,000 元素,尚可
  • 四階張量($20^4$):160,000 元素,計算成本顯著
  • 因此,本文實作採用對角近似(diagonal approximation),僅計算 $\partial^k \mathcal{L} / \partial \theta_i^k$ 並以此作為正則化懲罰的基礎。此為業界標準做法(參考 Martens & Grosse, 2015 "Optimizing Neural Networks with Kronecker-factored Approximate Curvature")。

    對角近似的誤差分析: 當參數間的交互作用(cross-derivative)顯著時(如高度相關的資產對),對角近似可能低估真實曲率。建議透過以下方式緩解:

  • 在主成分空間(PCA)中計算敏感度,減少參數相關性
  • 在關鍵場景(如市場壓力期間)切換為完整 Hessian 計算

  • 4. 與 Adam 優化器的整合

    4.1 優化問題

    投資策略最優化可表示為:

    $$\theta^ = \arg\max_{\theta} \mathcal{L}(\theta)$$

    其中 $\mathcal{L}(\theta) = \mathbb{E}_{p(x;\theta)}[U(X)]$。

    4.2 Adam 更新規則

    將穩健梯度估計 $\hat{g}_1(\theta)$ 饋入 Adam 優化器:

    $$m_t = \beta_1 m_{t-1} + (1 - \beta_1) \hat{g}_1(\theta_{t-1}) \tag{6}$$

    $$v_t = \beta_2 v_{t-1} + (1 - \beta_2) \hat{g}_1(\theta_{t-1})^2 \tag{7}$$

    $$\theta_t = \theta_{t-1} + \eta \frac{m_t}{\sqrt{v_t} + \varepsilon} \tag{8}$$

    Adam 的動量與自適應學習率能進一步平滑梯度估計中殘留的雜訊。尤其當尾部事件偶爾觸發較大梯度時(即使經軟截斷抑制),其影響會被 $\sqrt{v_t}$ 的歸一化進一步衰減。

    4.3 高階正則化

    高階敏感度用於構建正則化項,不直接改變優化方向:

    $$\mathcal{L}_{\text{total}}(\theta) = \mathcal{L}(\theta) - \lambda_\gamma \|\text{diag}(H)\|_2 - \lambda_s \|\text{diag}(T)\|_1 - \lambda_\kappa \|\text{diag}(F)\|_2 \tag{9}$$

    其中:

  • $H = \nabla_\theta^2 \mathcal{L}$:懲罰過大曲率(Gamma risk)
  • $T = \nabla_\theta^3 \mathcal{L}$:懲罰過度偏態(Skew risk),使用 L1 以促進稀疏性
  • $F = \nabla_\theta^4 \mathcal{L}$:懲罰極端峰態(Kurtosis risk)
  • 4.4 超參數建議

    參數建議值說明
    --------------------
    $\eta$ (learning rate)$10^{-4}$可配合 CosineAnnealingWarmRestarts
    $\beta_1$0.9Adam 默認
    $\beta_2$0.999Adam 默認
    $\lambda_\gamma$0.01二階正則強度
    $\lambda_s$0.1三階正則強度
    $\lambda_\kappa$0.05四階正則強度
    $\eta_{\text{prior}}$0.01Dirichlet 平滑強度
    $\epsilon_{\text{mix}}$0.001連續混合平滑係數
    $c_{\text{clip}}$1.0軟截斷飽和尺度

    5. 演算法偽代碼

    Algorithm: SAGE Training Loop
    
    Input: 市場數據 D = {(x_t, r_t)}, 初始參數 θ₀, 超參數 Φ
    Output: 最優參數 θ*
    
    1: 初始化模型 M(θ₀), Adam 優化器 A(θ₀, η, β₁, β₂)
    2: 初始化 BayesianSmoothing S(η_prior, ε_mix)
    3: 初始化 FourthOrderSensitivityEstimator E(c_clip)
    4: 初始化 HigherOrderRegularization R(λ_γ, λ_s, λ_κ)
    5:
    6: for epoch = 1 to N do
    7:     for each batch (f, r, y) in D do
    8:         // 前向傳播
    9:         probs ← Softmax(M.strategy_head(f))
    10:        probs_smooth ← S(probs)                    // 公式 (1) 或 (2)
    11:        utility ← Σ(probs_smooth · M.return_head(f))
    12:
    13:        // 高階敏感度(每 5 epoch 計算,僅第一個 batch)
    14:        if epoch mod 5 == 0 and first_batch then
    15:            g₁ ← E.first_order(utility, logits)     // 梯度
    16:            g₂ ← E.second_order(utility, logits)    // Hessian 對角
    17:            g₃ ← E.third_order(utility, logits)     // 三階對角
    18:            g₄ ← E.fourth_order(utility, logits)    // 四階對角
    19:            reg ← R({g₁, g₂, g₃, g₄})              // 公式 (9)
    20:        else
    21:            reg ← 0
    22:        end if
    23:
    24:        // 損失
    25:        loss ← -utility + loss_aux + reg
    26:
    27:        // 反向傳播(SoftClippingFunction 自動施加 tanh 截斷)
    28:        loss.backward()
    29:
    30:        // Adam 更新
    31:        A.step()
    32:        A.zero_grad()
    33:
    34:        // 錯誤率監控(C3)
    35:        if error_rate > 5% then
    36:            warning("敏感度計算異常")
    37:        end if
    38:    end for
    39:
    40:    // Learning rate scheduling
    41:    scheduler.step()
    42:
    43:    // 早停檢查
    44:    if val_loss 未改善 > patience then break
    45: end for
    46:
    47: return θ*
    

    6. 程式實作(PyTorch)

    6.1 核心組件

    完整實作見 model.py(544+ 行),以下展示關鍵組件。

    #### 6.1.1 貝氏平滑層

    class BayesianSmoothing(nn.Module):
        """
        離散: p̃_i = (p_i + α_i) / Σ(p_j + α_j)        Dirichlet 平滑
        連續: p̃(x) = (1-ε)p(x) + ε·q(x)               混合平滑
        """
        def __init__(self, n_states, eta=0.01, epsilon=0.001, mode='discrete'):
            super().__init__()
            self.mode = mode
            prior = torch.ones(n_states) * eta / n_states
            self.register_buffer('prior', prior)
    
        def forward(self, probs):
            if self.mode == 'discrete':
                return (probs + self.prior) / (probs.sum(-1, keepdim=True) + self.prior.sum())
            else:  # continuous
                uniform = torch.ones_like(probs) / self.n_states
                return (1 - self.epsilon) * probs + self.epsilon * uniform
    

    #### 6.1.2 軟截斷梯度保護

    class SoftClippingFunction(torch.autograd.Function):
        """h_safe = c * tanh(h / c) — 在 backward 中施加"""
        @staticmethod
        def forward(ctx, input, c):
            ctx.c = c
            return input
    
        @staticmethod
        def backward(ctx, grad_output):
            return ctx.c * torch.tanh(grad_output / ctx.c), None
    

    #### 6.1.3 四階敏感度估計器

    class FourthOrderSensitivityEstimator(nn.Module):
        """
        對角近似: 僅計算 ∂ᵏL/∂θᵢᵏ,全線 tanh 軟截斷。
        含錯誤追蹤 (get_error_stats / reset_error_counters)。
        """
        def _safe_diag_element(self, scalar_val, params, idx, order):
            g = torch.autograd.grad(scalar_val, params,
                                    retain_graph=True, create_graph=True)[0]
            return SoftClippingFunction.apply(g[idx].unsqueeze(0), self.clip_threshold).squeeze()
    
        def second_order(self, utility, params):
            g1 = self.first_order(utility, params)
            n = params.shape[-1]
            hessian = torch.zeros(n, device=params.device)
            for i in range(n):  # 完整對角線
                hessian[i] = self._safe_diag_element(g1[i], params, i, order='second')
            return hessian
        # third_order, fourth_order 類推...
    

    完整實作包含一至四階對角近似、錯誤率監控(C3)、以及可配置的損失權重(C2)。

    6.2 工程改進(v1.0 vs 論文初稿)

    改進項目初稿v1.0
    ----------------------
    平滑模式強制疊加兩種平滑`mode` 參數分離 discrete/continuous
    對角線計算截斷至 10/5/3 元素完整 n-element 對角線
    截斷一致性二階 hard clamp,三四階 soft clip全線統一 tanh 軟截斷
    正則化頻率每 20 epoch每 5 epoch,首 batch
    Validation不含 reg_loss(train/val 不可比)包含 reg_loss 保證可比性
    錯誤處理裸 `except: pass`結構化 `RuntimeError` catch + counter
    損失權重硬編碼`PaperConfig` 可配置 + ablation script

    7. 數值驗證與實驗

    7.1 敏感度數值驗證(C1)

    針對 3-asset toy problem,使用以下方法驗證一至四階導數:

    階數驗證方法容忍度測試案例通過率
    ------------------------------------------
    一階解析解 $\partial U/\partial \theta_i = p_i(r_i - U)$$10^{-4}$55/5
    二階解析 Hessian 對角 $\partial^2 U/\partial \theta_i^2 = p_i(r_i-U)(1-2p_i)$$10^{-3}$55/5
    三階float64 五點 stencil 有限差分$5 \times 10^{-3}$55/5
    四階float64 五點 stencil 有限差分$10^{-2}$55/5

    整體結果: 20/20 全部通過

    邊界情況觀察:

  • **probs → 0**(極負 logit):梯度數值穩定在 $O(10^{-7})$,tanh 軟截斷有效防止爆炸
  • **probs → 1**(極正 logit):一至四階導數均趨近零,符合期望(確定性策略無敏感性)
  • **Uniform probs**:各階導數均勻分佈,無數值異常
  • 7.2 與標準方法的對比(示意)

    情境標準方法(無平滑、無截斷)SAGE(本文方法)
    ---------------------------------------------------
    正常市場梯度穩定梯度穩定(無額外開銷)
    厚尾事件(柯西雜訊)NaN 或劇烈跳躍平穩收斂
    probs → 0 邊界梯度 → ∞梯度有界($O(c)$)
    高波動率梯度方差大,不收斂Adam + 軟截斷雙重平滑

    7.3 Loss Weights Ablation 框架(C2)

    建立自動化 grid search 框架(scripts/ablation_loss.py),搜尋空間:

    $$w_{\text{ret}}, w_{\text{risk}}, w_{\text{sharpe}}, w_{\text{div}} \in \{0, 0.001, 0.01, 0.1, 1.0\}$$

    排除全零組合後共 624 組,每組 30-epoch quick evaluation。評估指標包括:

  • Validation Sharpe ratio(主指標)
  • Gradient norm variance(收斂穩定性)
  • Train/Val loss gap(泛化能力)
  • 輸出 JSON 報告至 output/ablation_report.json,含 Top-10 組合及與默認權重的對比。


    8. 工程落地考量

    8.1 計算成本分析

    操作頻率相對成本
    ----------------------
    前向傳播 + 一階 backward每個 batch1×(baseline)
    高階敏感度計算(對角)每 5 epoch,第一個 batch~5×(單次)
    高階敏感度計算(完整 Hessian)可選開關~25×(單次)
    Error logging每個 epoch< 0.01×

    8.2 已知限制

    1. 對角近似:在資產高度相關的情境下,忽略 cross-derivative 可能低估真實風險

    2. Softmax 相依性BayesianSmoothing 假設輸入經 softmax 歸一化(和為 1),直接使用需注意

    3. 計算圖深度:四階 autograd 需要 create_graph=True 遞推,記憶體消耗為 $O(n \cdot \text{layers})$

    4. Clip threshold 校準:$c=1.0$ 的默認值對神經網路梯度可能過於保守,建議使用自適應校準(M2)

    8.3 未來工作

  • **完整 Hessian 模式**:利用 `functorch.hessian` 計算完整 Hessian,分析 cross-derivative 對 diversification 的影響(W1)
  • **Natural Gradient**:將 Hessian 資訊整合進 Fisher Information Matrix 近似,實現 Natural Gradient Descent(W2)
  • **自適應 clip threshold**:追蹤 gradient norm 的 running statistics,動態調整 $c$(M2)
  • **多市場回測**:US + HK 雙市場完整回測,對比 SPY/HSI benchmark(W3)

  • 9. 結論

    本文提出的 SAGE(Smooth Adaptive Gradient Estimator)框架,結合貝氏平滑歸一化與多層極限保護,從根本上解決了投資策略高階敏感度計算中的數值不穩定性。主要結論如下:

    1. 數值穩定性:Dirichlet 平滑保證機率下界,tanh 軟截斷保證梯度有界,20/20 測試全部通過

    2. 工程可行性:對角近似將計算複雜度從 $O(n^4)$ 降至 $O(n^2)$,使四階敏感度在實際交易系統中可行

    3. 與 Adam 的無縫整合:軟截斷在 backward 中自動施加,不干擾優化器邏輯

    4. 可擴展性:模組化設計(BayesianSmoothing / FourthOrderSensitivityEstimator / HigherOrderRegularization)可獨立替換或升級

    所附程式碼(model.py, trade.py)可直接嵌入現有量化系統,作為穩健梯度估計模組。單元測試與 ablation study 框架確保了程式碼品質與超參數選擇的系統性。


    附錄 A:高階導數通用公式(Faà di Bruno)

    對於複合函數 $f(g(\theta))$,$n$ 階導數可透過 Faà di Bruno 公式計算:

    $$(f \circ g)^{(n)}(\theta) = \sum_{\pi \in \Pi_n} f^{(|\pi|)}(g(\theta)) \prod_{B \in \pi} g^{(|B|)}(\theta)$$

    其中 $\Pi_n$ 為 $\{1, \dots, n\}$ 的所有劃分。實務上,利用自動微分框架(torch.autograd.grad 重複呼叫)更為簡便,本文方法即建基於此。


    附錄 B:Score Function Estimator 推導

    $$\begin{aligned}

    \nabla_\theta \mathcal{L}(\theta) &= \nabla_\theta \int U(x) p(x;\theta) dx \\

    &= \int U(x) \nabla_\theta p(x;\theta) dx \\

    &= \int U(x) p(x;\theta) \frac{\nabla_\theta p(x;\theta)}{p(x;\theta)} dx \\

    &= \int U(x) p(x;\theta) \nabla_\theta \log p(x;\theta) dx \\

    &= \mathbb{E}_{p(x;\theta)}[U(x) \nabla_\theta \log p(x;\theta)]

    \end{aligned}$$

    此推導依賴於 $U(x)$ 不依賴 $\theta$ 的假設。高階導數可透過對 $\nabla_\theta \log p$ 的乘積與更高階對數導數的組合獲得。


    附錄 C:測試案例設計

    CaseLogitsReturns測試重點
    ---------------------------------
    1: 正常`[0.5, -0.3, 0.8]``[0.05, -0.02, 0.10]`Baseline
    2: Uniform`[0.0, 0.0, 0.0]``[0.05, -0.02, 0.10]`對稱性
    3: probs→0`[2.0, -10.0, 2.0]``[0.05, -0.02, 0.10]`尾部穩定性
    4: probs→1`[-2.0, 10.0, -2.0]``[0.05, -0.02, 0.10]`確定性極限
    5: 高波動`[1.0, 0.0, 2.0]``[0.50, -0.30, 0.80]`大幅回報

    參考文獻

    1. Kingma, D. P., & Ba, J. (2015). Adam: A Method for Stochastic Optimization. ICLR.

    2. Martens, J., & Grosse, R. (2015). Optimizing Neural Networks with Kronecker-factored Approximate Curvature. ICML.

    3. Williams, R. J. (1992). Simple Statistical Gradient-Following Algorithms for Connectionist Reinforcement Learning. Machine Learning, 8(3-4), 229-256.

    4. Mohamed, S., et al. (2020). Monte Carlo Gradient Estimation in Machine Learning. JMLR, 21(132), 1-62.

    5. Botev, Z. I., et al. (2013). The Cross-Entropy Method for Optimization. Handbook of Statistics, 31, 35-59.