實戰:從零訓練線性回歸

Vibe Prompt

「使用 Adam Optimizer 從零訓練線性回歸,比較自實作的 Adam 與 sklearn 的結果。」

import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression

# 產生資料
X, y = make_regression(n_samples=1000, n_features=10, noise=10, random_state=42)
y = y.reshape(-1, 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 標準化
mean, std = X_train.mean(axis=0), X_train.std(axis=0)
X_train = (X_train - mean) / std
X_test = (X_test - mean) / std

# 自實作 Adam 訓練
def train_adam(X, y, lr=0.01, epochs=200):
    m, n = X.shape
    w = np.zeros((n, 1))
    b = 0.0
    m_w, v_w = np.zeros((n, 1)), np.zeros((n, 1))
    m_b, v_b = 0.0, 0.0
    beta1, beta2 = 0.9, 0.999
    eps = 1e-8
    losses = []
    
    for t in range(1, epochs+1):
        pred = X @ w + b
        loss = np.mean((pred - y)**2)
        losses.append(loss)
        
        dw = (2/m) * X.T @ (pred - y)
        db = (2/m) * np.sum(pred - y)
        
        m_w = beta1*m_w + (1-beta1)*dw
        v_w = beta2*v_w + (1-beta2)*dw*dw
        m_b = beta1*m_b + (1-beta1)*db
        v_b = beta2*v_b + (1-beta2)*db*db
        
        m_w_hat = m_w / (1-beta1**t)
        v_w_hat = v_w / (1-beta2**t)
        m_b_hat = m_b / (1-beta1**t)
        v_b_hat = v_b / (1-beta2**t)
        
        w -= lr * m_w_hat / (np.sqrt(v_w_hat) + eps)
        b -= lr * m_b_hat / (np.sqrt(v_b_hat) + eps)
    
    return w, b, losses

w, b, losses = train_adam(X_train, y_train)
pred = X_test @ w + b
print(f"自實作 Adam R²: {r2_score(y_test, pred):.4f}")

# sklearn 比較
lr = LinearRegression()
lr.fit(X_train, y_train)
print(f"sklearn R²: {r2_score(y_test, lr.predict(X_test)):.4f}")
print(f"權重差異: {np.mean(np.abs(w.flatten() - lr.coef_)):.6f}")

本日總結

  • ✅ 梯度下降原理
  • ✅ Momentum / RMSProp / Adam
  • ✅ SGD / Mini-Batch
  • ✅ 自動微分引擎
  • ✅ 從零訓練線性回歸

本章總結

  • 理解核心概念與原理
  • 掌握實作方法與技巧
  • 熟悉常見問題與解決方案
  • 能夠應用於實際專案

延伸閱讀

  • 官方文件與 API 參考
  • GitHub 開源專案範例
  • 相關技術書籍與課程
  • 社群討論與技術部落格

實作範例

基礎範例

# 本節提供一個完整的實作範例
# 讓你能夠將所學應用到實際專案中

步驟說明

  1. 初始化:設定開發環境與必要工具
  2. 資料準備:收集與整理所需資料
  3. 核心實作:實作主要功能與邏輯
  4. 測試驗證:確保功能正確運作
  5. 最佳化:調整效能與使用者體驗

常見錯誤

| 錯誤類型 | 可能原因 | 解決方法 | |---------|---------|---------| | 編譯錯誤 | 語法問題 | 檢查程式碼語法 | | 執行錯誤 | 環境問題 | 確認相依套件已安裝 | | 邏輯錯誤 | 演算法問題 | 逐步除錯與測試 | | 效能問題 | 效率問題 | 使用效能分析工具 |

程式碼範例

# 範例程式碼
import sys

def main():
    # 主程式邏輯
    print("Hello, World!")

if __name__ == "__main__":
    main()

相關資源

  • 官方文件
  • API 參考手冊
  • 開源專案範例
  • 技術社群討論

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!