金融量化紅白大對抗 P-Quant v.s. Q-Quant

P-Quant & Q-Quant 金融量化中的“紅軍”和“白軍” 很多人不知道有這對名詞,但我相信大家都會有一個疑惑,對衍生品定價算不算量化? 那麼對沖基金裡面用模型找到的交易策略算不算量化?如果都是量化的範疇,那麼這兩個方面看起來差別特別大。我...

2024年12月15日 星期日

總結神經網路激活函數的公式與特性(帶公式說明)

神經網路激活函數的公式與特性(帶公式說明)

1. 分段線性激活函數

  • ReLU
    公式:

    \[ f(x) = \max(0, x) \]

    說明:只保留正值,負值直接變為 0,實現簡單高效的計算,廣泛用於深度學習模型中。
    # Python 實現 ReLU
    import numpy as np
    
    def relu(x):
        return np.maximum(0, x)
    
    x = np.array([-2, -1, 0, 1, 2])
    print(relu(x))
                
  • PReLU
    公式:

    \[ f(x) = \max(0, x) + \alpha \cdot \min(0, x) \]

    說明:對於負值區域引入可訓練參數 \(\alpha\),讓負值不會完全變為 0,避免 ReLU 的死區問題。
    # Python 實現 PReLU
    import numpy as np
    
    def prelu(x, alpha=0.1):
        return np.maximum(0, x) + alpha * np.minimum(0, x)
    
    x = np.array([-2, -1, 0, 1, 2])
    print(prelu(x))
                
  • RReLU
    公式:

    \[ f(x) = \begin{cases} x, & \text{if } x \geq 0 \\ a \cdot x, & \text{if } x < 0, \text{ where } a \sim U(l, u) \end{cases} \]

    說明:引入隨機負斜率 \(a\),提升模型的隨機性和正則化效果。
    # Python 實現 RReLU
    import numpy as np
    
    def rrelu(x, l=0.1, u=0.3):
        a = np.random.uniform(l, u)
        return np.where(x >= 0, x, a * x)
    
    x = np.array([-2, -1, 0, 1, 2])
    print(rrelu(x))
                

2. 平滑非線性激活函數

  • GELU
    公式:

    \[ f(x) = \frac{x}{2} \left(1 + \tanh\left(\sqrt{\frac{2}{\pi}} (x + 0.044715x^3)\right)\right) \]

    說明:結合高斯分布的啟用函數,提供數學上更精確的平滑激活,計算複雜但效果優秀。
    # Python 實現 GELU
    import numpy as np
    
    def gelu(x):
        return 0.5 * x * (1 + np.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * x**3)))
    
    x = np.array([-2, -1, 0, 1, 2])
    print(gelu(x))
                
  • Swish
    公式:

    \[ f(x) = \frac{x}{1 + e^{-x}} \]

    說明:平滑且具有非單調性,適合深層網路,能提升模型性能。
    # Python 實現 Swish
    import numpy as np
    
    def swish(x):
        return x / (1 + np.exp(-x))
    
    x = np.array([-2, -1, 0, 1, 2])
    print(swish(x))
                
  • Mish
    公式:

    \[ f(x) = x \cdot \tanh(\ln(1 + e^x)) \]

    說明:平滑性優於 Swish,並保留了更多輸入信息,適用於高效的特徵學習。
    # Python 實現 Mish
    import numpy as np
    
    def mish(x):
        return x * np.tanh(np.log(1 + np.exp(x)))
    
    x = np.array([-2, -1, 0, 1, 2])
    print(mish(x))
                

應用建議

  • 基礎應用:ReLU 簡單高效,適合大多數場景。
  • 深層模型:Swish、Mish、GELU 等能提高深層網路性能。
  • 正則化需求:SELU 和 RReLU 可提供更好的穩定性。
  • 數據分佈:Tanh 適合零中心化,SoftPlus 適合平滑輸出場景。

沒有留言:

張貼留言