Function Approximation Using MLP # 1. 問題描述 本作業目標是從一個 noisy dataset 學習未知函數,去除資料中的噪聲,並對測試資料進行預測。Kaggle 會以均方誤差 (MSE) 評估模型表現。 資料集包括: train.csv:包含輸入 x1, x2 與目標 y test.csv:僅包含輸入 x1, x2,需要對應生成 submission.csv 的預測值 sample_submission.csv:官方提供的 submission 範例,用於對齊格式和 id # 2. 模型設計 1. 網路結構 使用多層感知器 (MLP): 輸入層:2 個節點(對應 x1, x2) 隱藏層: 第一層 128 節點 + ReLU 第二層 128 節點 + ReLU 第三層 64 節點 + ReLU 輸出層:1 節點(對應 y) 2. 標準化 對輸入特徵和目標值同時進行標準化(StandardScaler),提升訓練穩定性與收斂速度。 3. 損失函數與優化器 損失函數:均方誤差 MSE 優化器:Adam (learning rate = 0.001, weight_decay = 1e-4) 訓練 epochs = 2000 4. 創新設計 本研究雖然使用標準 MLP 架構,但在模型設計上做了特別調整以提升預測效能: 對輸入 x1、x2 及目標 y 同時標準化,使訓練收斂更穩定並抑制資料噪聲 隱藏層採用 128-128-64 結構,搭配 ReLU 激活函數,在精度與訓練效率間取得良好平衡 這些設計在課程作業層級可視為針對 noisy regression 問題的合理創新。 # 3. 訓練過程與結果 訓練初期 MSE 約 1.0 經過 2000 epochs 後 MSE 收斂至 0.03468 訓練過程穩定,無明顯過擬合現象 1. 效能結論 在 Kaggle 測試集上,最終模型取得 MSE = 0.03468。 訓練過程中 loss 下降迅速且平穩,表明模型成功學習底層函數的非線性關係,並有效去除資料中的噪聲。 這也證明標準化輸入與目標值以及合理隱藏層設計對模型效能的正面影響。 2. Method Comparison(不同方法比較) 在實驗過程中也嘗試過不同隱藏層大小和 epochs 設定: 較小網路(如 64-64-32)容易 underfitting,對 noisy 資料無法有效擬合 過深網路(如 256-256-128)雖精度稍高,但收斂速度較慢且訓練不穩定 綜合考量,最終選擇 128-128-64 的結構,在收斂速度、準確性與穩定性間取得良好平衡 # 4. Submission 格式處理 使用官方 sample_submission.csv 的 id,確保 ID 與測資對齊 格式範例: | id | y | | ---- | ----- | | 1 | 0.123 | | 2 | 0.456 | | ... | ... | | 2000 | 0.789 | # 5. 遇到的困難 1. ID 對齊問題:原本使用 test_df.index 生成 ID,導致 ID 從 0 開始或少一筆。 2. 資料噪聲與模型收斂:noisy dataset 導致初期 MSE 波動較大 解決方案:標準化輸入與目標值,訓練更穩定,MSE 收斂速度加快 # 6. 學習心得 1.熟悉 MLP 網路結構設計與 PyTorch 訓練流程 2.瞭解標準化對收斂速度與穩定性的影響 3.學會處理 Kaggle submission 格式問題 4.體會 noisy dataset 對模型訓練的影響,並學會透過標準化與網路設計減緩噪聲影響 # 7. 模型重點 1.MSE 收斂至 0.03468,表現穩定 2.網路結構簡單,訓練速度快 3.標準化與合理隱藏層設計為模型效能提供關鍵幫助
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up