### **1. 传统激活函数**
#### **(1) Sigmoid**
• **公式**：  
  $$\
  \sigma(x) = \frac{1}{1 + e^{-x}}
  \ $$ 
• **输出范围**：`(0, 1)`  
• **特点**：  
  • 将输入压缩到概率区间，常用于二分类输出层。  
  • **缺点**：  
    ◦ 梯度消失问题（输入绝对值较大时，导数趋近于0）。  
    ◦ 计算复杂，不适合深层网络。  
• **代码示例**：  
  ```python
  layers.Dense(64, activation='sigmoid')
  ```

#### **(2) Tanh（双曲正切函数）**
• **公式**：  
  $$\
  \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} = \frac{e^{2x}}{e^{2x} + 1} - 1
  \ $$ 
• **输出范围**：`(-1, 1)`  
• **特点**：  
  • 输出对称分布，中心化数据更易训练。  
  • 梯度消失问题仍存在，但比 Sigmoid 好。  
• **适用场景**：  
  • 循环神经网络（RNN）、双向 LSTM。  
• **代码示例**：  
  ```python
  layers.LSTM(128, activation='tanh')
  ```

---

### **2. 改进型 ReLU 系列**
#### **(1) Leaky ReLU**
• **公式**：  
  $$\
  f(x) = \begin{cases} 
  x & \text{if } x > 0 \\
  \alpha x & \text{if } x \leq 0 
  \end{cases}
  \ $$ 
  • \( \alpha \)：泄漏系数（通常取 `0.1`）。  
• **特点**：  
  • 解决 ReLU 的“死亡神经元”问题，允许负值区域有微小梯度。  
• **代码示例**：  
  ```python
  class LeakyReLU(tf.keras.layers.Layer):
      def __init__(self, alpha=0.1, **kwargs):
          super().__init__(**kwargs)
          self.alpha = alpha
      def call(self, inputs):
          return tf.maximum(inputs, self.alpha * inputs)
  
  model.add(LeakyReLU(alpha=0.2))
  ```

#### **(2) Parametric ReLU（PReLU）**
• **公式**：  
  $$\
  f(x) = \max(0, x + a \cdot x)
  \ $$ 
  • \( a \)：可学习的参数（而非固定系数）。  
• **特点**：  
  • 自动调整负区间的斜率，增强模型表达能力。  
• **代码示例**：  
  ```python
  from tensorflow.keras.layers import PReLU
  model.add(PReLU())
  ```

#### **(3) ELU（指数线性单元）**
• **公式**：  
  $$\
  f(x) = \begin{cases} 
  x & \text{if } x > 0 \\
  \alpha (e^{x} - 1) & \text{if } x \leq 0 
  \end{cases}
  \ $$ 
  • \( \alpha \)：平滑系数（通常取 `1`）。  
• **特点**：  
  • 在负区间输出平滑曲线，减少梯度噪声。  
• **代码示例**：  
  ```python
  layers.ELU(alpha=1.0)
  ```

#### **(4) Swish**
• **公式**：  
  $$\
  f(x) = x \cdot \sigma(x) = \frac{x}{1 + e^{-x}}
  \ $$ 
• **特点**：  
  • 自动归一化输出，类似于 Sigmoid，但梯度更平滑。  
  • 在 Google 的多项任务中表现优异。  
• **代码示例**：  
  ```python
  layers.Swish()
  ```

---

### **3. 平滑型激活函数**
#### **(1) Softmax**
• **公式**：  
  $$\
  \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}
  \ $$ 
• **输出范围**：`(0, 1)`（概率分布）。  
• **特点**：  
  • 常用于多分类输出层，强制输出为概率形式。  
• **代码示例**：  
  ```python
  layers.Dense(10, activation='softmax')
  ```

#### **(2) Softsign**
• **公式**：  
  $$\
  f(x) = \frac{x}{1 + |x|}
  \ $$ 
• **输出范围**：`(-1, 1)`。  
• **特点**：  
  • 输出对称且平滑，比 Sigmoid 计算更快。  
• **代码示例**：  
  ```python
  layers.Softsign()
  ```

---

### **4. 循环网络专用激活函数**
#### **(1) Tanh（已介绍）**
• **适用场景**：  
  • RNN、LSTM、GRU 的隐藏层，输出范围 `(-1, 1)` 有助于稳定训练。  

#### **(2) Hard Sigmoid**
• **公式**：  
  $$\
  f(x) = \max(0, \min(1, \frac{x + 1}{2}))
  \ $$ 
• **特点**：  
  • 计算高效，近似 Sigmoid，常用于嵌入式设备。  

---

### **5. 其他特殊激活函数**
#### **(1) Softmax Cross-Entropy with Logits**
• **公式**：  
  $$\
  H(y, \hat{y}) = -\sum_{i} y_i \log(\hat{y}_i)
  \ $$ 
• **特点**：  
  • 结合 Softmax 和交叉熵，数值稳定且高效。  
• **代码示例**：  
  ```python
  model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')
  ```

#### **(2) SiLU（Sigmoid Linear Unit）**
• **公式**：  
  $$\
  f(x) = x \cdot \sigma(x)
  \ $$ 
• **特点**：  
  • 线性和非线性的平滑结合，类似 Swish。  

---

### **6. 激活函数选择指南**
| **任务类型**       | **推荐激活函数**                     | **理由**                               |
|--------------------|--------------------------------------|----------------------------------------|
| **二分类输出层**    | Sigmoid、Softmax                   | 输出概率形式。                         |
| **多分类输出层**    | Softmax                              | 强制归一化为概率分布。                 |
| **隐藏层（通用）**  | ReLU、Leaky ReLU、Swish              | 平衡性能与计算效率。                   |
| **RNN/序列模型**    | Tanh、ELU                            | 稳定梯度传播，缓解长程依赖问题。       |
| **需要平滑输出**    | Softsign、Softmax                    | 输出连续且可解释。                     |
| **嵌入式设备**      | Hard Sigmoid、ReLU6                   | 计算快速，硬件友好。                   |

---

### **7. 高级技巧**
#### **(1) 自定义激活函数**
```python
class CustomActivation(tf.keras.layers.Layer):
    def __init__(self, name='custom_act', **kwargs):
        super().__init__(name=name, **kwargs)
    
    def call(self, inputs):
        return tf.nn.relu(inputs) * 0.5 + 0.5  # 示例：缩放 ReLU

model.add(CustomActivation())
```

#### **(2) 混合激活函数**
在复杂模型中，不同层使用不同激活函数（如 CNN 使用 ReLU，RNN 使用 Tanh）。

---

### **总结**
• **ReLU 及其变种**（如 Leaky ReLU、Swish）是大多数深层网络的首选。  
• **Sigmoid/Tanh** 适用于特定场景（如分类输出层、循环网络）。  
• **平滑函数**（如 Softmax）在需要概率输出时必不可少。  