Skip to content

markl-a/My-AI-Learning-Notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

我的 AI 學習相關筆記

台灣地區繁體中文版本 | 完整的 AI 工程師學習路徑指南 從基礎數學到 LLM 應用開發的系統化學習筆記

GitHub stars License Last Update

📋 相關的框架以及演算法學習

本專案涵蓋從基礎到進階的 AI 技術學習筆記,包含完整的實作範例與專案演練。

核心學習模組

  1. 使用 Python 進行 ETL 的流程

    • 資料抽取(Extract)、轉換(Transform)、載入(Load)完整流程
    • 實作範例:使用 Pandas 處理 CSV、JSON、SQL 資料源
    • 進階技巧:資料清洗、異常值處理、資料驗證
  2. Python 快速入門

    • Python 基礎語法:變數、資料型別、控制流程
    • 物件導向程式設計:類別、繼承、多型
    • 實用套件:collections、itertools、functools
  3. NumPy、Pandas 學習記錄

    • NumPy 陣列操作:索引、切片、廣播機制
    • Pandas DataFrame 進階技巧:merge、groupby、pivot_table
    • 效能優化:向量化運算、記憶體管理
  4. TensorFlow 學習記錄

    • TensorFlow 2.x 完整教學:Eager Execution、tf.function
    • Keras API 整合:Sequential、Functional、Subclassing 模型
    • 模型部署:TensorFlow Serving、TensorFlow Lite
  5. Keras 學習記錄

    • Keras 3.0 多後端支援:TensorFlow、PyTorch、JAX
    • 自訂層(Custom Layers)與模型
    • Callback 機制:EarlyStopping、ModelCheckpoint、TensorBoard
  6. PyTorch 學習記錄

    • PyTorch 基礎:Tensor 操作、自動微分
    • Dataset 與 DataLoader 設計模式
    • torch.compile() 加速推論(PyTorch 2.x)
    • 分散式訓練:DDP、FSDP
  7. YOLO 使用

    • YOLOv8、YOLOv9、YOLOv10 完整比較
    • 物件偵測、實例分割、姿態估計
    • 自訂資料集訓練:標註工具使用(Roboflow、CVAT)
  8. GaLore 的嘗試以及 Medical Chat

    • GaLore 記憶體高效訓練技術
    • 醫療對話系統實作
    • 與 LoRA、QLoRA 的比較分析
  9. LangChain 相關的學習記錄

    • LangChain 核心概念:Chains、Agents、Memory
    • LangGraph 工作流程編排
    • LangSmith 可觀測性與除錯
  10. MLflow 入門介紹

    • 實驗追蹤、模型註冊、模型部署
    • MLflow Projects 可重現性
    • MLflow Models 多框架支援
  11. 視訊品質評估相關論文閱讀與復現

    • DOVER、FAST-VQA 等論文實作
    • 視訊品質評估指標與方法
  12. Segment Anything 2 論文解讀與範例使用

    • SAM2 架構分析:記憶體注意力機制
    • 影片物件追蹤實作
    • 醫學影像分割應用
  13. LangChain 多模態 RAG 的範例修改

    • 圖文混合檢索增強生成
    • CLIP、BLIP 視覺編碼器整合
    • PDF、圖片、表格混合處理

📑 目錄

cover

簡介

這個 Notes 主要是我自己對於 AI 工程師相關的知識以及技能的了解與整理,主要的目錄是根據 llm-course 進行延伸以及擴展,並加上一些 AI、ML、DL 以及一些資料分析相關的必備知識與技能整理。

不過目前會是以 LLM 為主,除了我之前就弄過的相關內容之外,其他的內容會是必須的才會被添加。

💡 本專案特色

  • 台灣地區繁體中文:使用台灣慣用的專業術語與表達方式
  • 完整實作範例:每個章節都包含可執行的 Jupyter Notebook 和程式碼
  • 專案導向學習:從實際專案中學習技術應用,而非單純理論
  • 持續更新:追蹤 2024-2025 最新技術發展與產業趨勢
  • 開源社群:歡迎提供建議、回報錯誤、貢獻內容

🎯 適合對象

身分 學習重點 預期成果
📚 AI 初學者 從數學基礎開始系統化學習 8-12 個月掌握 AI/ML 基礎
💻 軟體工程師 快速掌握 LLM 應用開發 2-3 個月可開發 RAG 系統
🔬 資料科學家 深入學習深度學習與 LLM 4-6 個月精通模型訓練與優化
🏢 企業開發者 學習將 AI 整合到產品中 3-4 個月可部署生產級應用
🎓 研究人員 深入模型架構與前沿技術 持續學習最新論文與實作

🚀 快速開始

新手?不知道從哪裡開始? 我們為您準備了完整的學習導航系統!

📖 核心導航文檔

文檔 說明 適合對象
📘 QUICKSTART.md 5分鐘快速入門指南 所有人 - 快速了解如何使用本專案
🗺️ LEARNING_PATHS.md 完整學習路徑規劃 想要系統化學習的人
📚 RESOURCES.md 全面資源索引 需要工具、API、數據集等資源
🤝 CONTRIBUTING.md 貢獻指南 想要參與專案建設的人

⚡ 10分鐘實戰場景

根據你的目標,選擇對應的快速實戰:

  1. LLM對話應用 - 快速搭建一個聊天機器人
  2. RAG系統 - 構建知識庫問答系統
  3. Agent工作流 - 創建自主決策的AI助手
  4. 圖像生成 - 使用Stable Diffusion生成圖片

🎯 推薦學習路徑


📊 學習成果展示

完成本課程後,您將能夠:

  1. 建立完整的 ML/DL Pipeline

    • 資料收集 → 預處理 → 模型訓練 → 評估 → 部署
    • 實作專案:手寫數字辨識、情感分析系統
  2. 開發 LLM 應用

    • RAG 系統:結合外部知識庫的問答機器人
    • Agent 系統:多步驟推理的自主 AI
    • 實作專案:台灣繁中客服機器人、文件分析助手
  3. 微調與部署模型

    • 使用 LoRA/QLoRA 微調開源 LLM
    • 量化與優化:GGUF、GPTQ、AWQ
    • 部署:vLLM、Ollama、TensorRT-LLM
  4. 掌握 MLOps 流程

    • 實驗追蹤:MLflow、Weights & Biases
    • 模型監控:LangSmith、Arize Phoenix
    • CI/CD:GitHub Actions、Docker

2024-2025 最新技術追蹤

2024 年之後 LLM 與多模態技術的演進速度更快,以下整理近期值得追蹤的重點,並對應到本筆記中可以延伸閱讀或實作的章節:

🔑 大型基礎模型與推理模型

  • OpenAI GPT-4o / GPT-4o mini(2024.05):多模態(文字、影像、音訊)一次性整合,延伸出的 Responses API 已在 LLM 應用工程 中加入可直接執行的範例程式。
  • OpenAI o1 reasoning 系列(2024.09):針對長鏈推理與程式問題提供多步驟思考結果,建議搭配 model=gpt-4omodel=o1-mini 進行對照測試。
  • Meta Llama 3(2024.04):提供 8B / 70B 開源權重,指令調優版支援 8K+ context,可在 1.LLM 部署6.推論優化 章節套用。
  • Google Gemini 1.5 Pro / Flash(2024.02):原生支援百萬 token 長上下文與多模態輸入,適合整合至多媒體 RAG 或 Agent 任務。
  • Mistral Large 2(2024.07)Microsoft Phi-3.5 / Phi-4(2024 Q3-Q4):在雲端與邊緣端提供更輕量的模型選擇,便於在 8.邊緣與端側 所述場景中部署。

🧠 Agentic 生態與工具鏈

  • LangGraph 0.2+:官方提供耐久執行、檢查點、LangSmith 追蹤與 LangGraph Studio 可視化的整合,在 Agent 工作流筆記 中新增了更新摘要與範例程式。
  • Model Context Protocol(MCP):成為 OpenAI、Anthropic 等工具調用的共同標準,使用 Python SDK 就能快速建立 MCP 伺服器,相關說明新增於 Agent 工具整合章節。
  • CrewAI、AutoGen、LlamaIndex 2025 系列更新:針對多 Agent 協作、任務排程、觀測性加強,對應資料更新於 3.Agent5.進階 RAG 章節。

🚀 推論與部署生態

  • vLLM 0.4.x、SGLang、TensorRT-LLM 0.10:提供多路併發、分塊 KV Cache 與 Streaming 的高效率推論,筆記在 6.推論優化 節補充了差異與部署建議。
  • Ollama 0.3、LM Studio 0.3:本地模型管理器支援動態量化、OpenAI-Compatible API,可以與 RAG/Agent 範例直接接軌。
  • OpenTelemetry GenAI、LangSmith / Arize Phoenix 2024:建立評測與追蹤基礎建設,在 產品級評測 章節加入了新的指引。

🧪 實作與練習建議

  • 先閱讀 LLM 應用工程 的更新章節,裡面整理了最新模型、推論框架與安全清單。
  • 嘗試執行「Responses API × LangGraph Agent」的組合範例:
    1. README 指引安裝 openai, langgraph 套件。
    2. 設定 OPENAI_API_KEY 後,先測試 responses_quickstart.py 範例,確定多模態輸入正常。
    3. 進一步執行 langgraph_agent_demo.py,觀察耐久執行與工具調用紀錄如何在 LangSmith 中被追蹤。

以上整理會持續更新,若有新的模型或工具,也會在對應章節補充評測與實作紀錄。

算法與資料結構

這邊主要會是我算法練習的記錄以及閱讀的心得。雖然我不是大學教授或專家等級的,所以目前難免會有些錯誤,歡迎大家指正。

我的算法題練習倉庫LeetcodePractice

🎯 為什麼 AI 工程師需要學演算法?

在深度學習時代,許多人質疑是否還需要學習傳統演算法。答案是:絕對需要!

  1. 優化模型效能:理解時間/空間複雜度,選擇合適的資料結構

    • 範例:選擇 HashTable 而非 List 進行查找,從 O(n) 優化到 O(1)
  2. 設計高效 Pipeline:資料處理、特徵工程需要高效演算法

    • 範例:使用堆積(Heap)處理 Top-K 問題,比排序更高效
  3. 理解深度學習:許多 DL 演算法本質是圖論、動態規劃的應用

    • 範例:Transformer 的自注意力機制本質是圖的全連接
    • 範例:Beam Search 是基於優先佇列的貪心演算法
  4. 技術面試必備:FAANG 等大廠 AI 職位仍重視演算法能力

    • Google Brain、Meta AI、OpenAI 等團隊的面試都包含演算法題

📚 學習重點

必備資料結構

以下是 AI 工程師最常用的資料結構及其在 AI 中的應用:

資料結構 AI 應用場景 複雜度優勢
陣列與字串 資料預處理、Tokenization O(1) 存取
雜湊表 詞彙表(Vocabulary)、去重 O(1) 查找
樹與圖 Transformer 注意力、知識圖譜 結構化資料表達
堆疊與佇列 BFS/DFS、任務排程 O(1) 插入刪除
優先佇列(Heap) Top-K 問題、Beam Search O(log n) 插入
前綴樹(Trie) 自動補全、分詞 O(m) 查找(m=字串長度)

核心演算法

1. 排序與搜尋

  • 快速排序、合併排序:O(n log n) 時間複雜度
    • 應用:模型評估時的排序、超參數網格搜尋
  • 二分搜尋:O(log n) 查找
    • 應用:模型超參數調整、閾值選擇

2. 動態規劃

  • 背包問題:資源分配(記憶體、GPU)
    • 應用:模型壓縮、神經架構搜尋(NAS)
  • 最長公共子序列(LCS):文字相似度
    • 應用:文字差異比對、序列對齊

3. 圖論

  • BFS/DFS:知識圖譜遍歷
    • 應用:多跳推理、社群偵測
  • 最短路徑(Dijkstra):推薦系統
    • 應用:社群網路分析、路徑規劃
  • 拓樸排序:任務依賴管理
    • 應用:計算圖優化、DAG 調度

4. 貪心演算法

  • Huffman 編碼:資料壓縮
    • 應用:模型量化、資料傳輸
  • 區間排程:GPU 任務排程
    • 應用:多任務訓練、批次處理優化

💻 實戰練習

LeetCode 推薦題單(AI 工程師特化版)

基礎題(30 題) - 建立扎實基礎

陣列:
- LeetCode 1: Two Sum(雜湊表基礎)
- LeetCode 26: Remove Duplicates from Sorted Array
- LeetCode 283: Move Zeroes
- LeetCode 88: Merge Sorted Array

字串:
- LeetCode 125: Valid Palindrome
- LeetCode 344: Reverse String
- LeetCode 242: Valid Anagram
- LeetCode 49: Group Anagrams(適合 Tokenization)

雜湊表:
- LeetCode 1: Two Sum
- LeetCode 217: Contains Duplicate
- LeetCode 383: Ransom Note
- LeetCode 454: 4Sum II

鏈結串列:
- LeetCode 21: Merge Two Sorted Lists
- LeetCode 141: Linked List Cycle
- LeetCode 206: Reverse Linked List

中階題(50 題) - 深入理解

樹:
- LeetCode 94: Binary Tree Inorder Traversal
- LeetCode 102: Binary Tree Level Order Traversal(BFS 基礎)
- LeetCode 226: Invert Binary Tree
- LeetCode 543: Diameter of Binary Tree

圖論:
- LeetCode 133: Clone Graph
- LeetCode 200: Number of Islands(DFS/BFS)
- LeetCode 207: Course Schedule(拓樸排序)
- LeetCode 785: Is Graph Bipartite?

動態規劃:
- LeetCode 70: Climbing Stairs
- LeetCode 121: Best Time to Buy and Sell Stock
- LeetCode 300: Longest Increasing Subsequence
- LeetCode 1143: Longest Common Subsequence(文字相似度)

回溯:
- LeetCode 46: Permutations
- LeetCode 78: Subsets
- LeetCode 39: Combination Sum

進階題(20 題,AI 相關) - 模擬實際場景

Beam Search 相關:
- LeetCode 218: The Skyline Problem
- LeetCode 239: Sliding Window Maximum
- LeetCode 347: Top K Frequent Elements

圖論(知識圖譜):
- LeetCode 787: Cheapest Flights Within K Stops(多跳推理)
- LeetCode 1514: Path with Maximum Probability
- LeetCode 399: Evaluate Division(圖中的關係推理)

動態規劃(序列問題):
- LeetCode 72: Edit Distance(文字相似度核心)
- LeetCode 1143: Longest Common Subsequence
- LeetCode 10: Regular Expression Matching

貪心(資源分配):
- LeetCode 435: Non-overlapping Intervals(GPU 排程模擬)
- LeetCode 621: Task Scheduler

📖 推薦學習資源

書籍

  1. 《算法圖解》(Grokking Algorithms)

    • 適合對象:初學者
    • 特色:視覺化圖解,淺顯易懂
    • 台灣購買:天瓏書局有繁中版
  2. 《劍指 Offer》

    • 適合對象:準備技術面試
    • 特色:涵蓋台灣工程師常見面試題
  3. 《Elements of Programming Interviews》

    • 適合對象:進階面試準備
    • 特色:FAANG 級別的面試題

線上資源

  1. NeetCode:分類刷題路線,有影片解說
  2. 代碼隨想錄:詳細的中文解析(簡中)
  3. VisuAlgo:演算法視覺化動畫

🏆 學習計畫建議

第 1-2 週:基礎資料結構

  • 每天 2 題 LeetCode Easy
  • 實作基本資料結構(不使用內建庫)

第 3-4 週:常用演算法

  • 每天 1-2 題 Medium
  • 每週總結一種演算法類型

第 5-6 週:AI 相關應用

  • 實作 Beam Search、Viterbi 等 AI 演算法
  • 閱讀 Transformer 原始碼

第 7-8 週:系統設計與優化

  • 分析開源專案的演算法實作
  • 優化自己的專案程式碼

記住:演算法不是為了刷題而刷題,而是培養解決問題的思維方式。每道題都要思考:

  1. 這個問題的本質是什麼?
  2. 有沒有更高效的解法?
  3. 這個技巧能否應用在我的 AI 專案中?

從AI到LLM基礎

這邊主要是根據 LLM course 上面的目錄為基礎的加深以及補強。

主要內容為數學基礎、資料分析跟處理、機器學習、深度學習中的 NLP 以及 CV 和 MLOps

(為原內容再加深之外再加上CV 跟 MLOps等工作上可能會用到的內容)

📁 詳細內容請參閱:1.從AI到LLM基礎/README.md - 包含完整的學習路徑、實作項目建議和最新技術更新

🎯 學習目標

本章節涵蓋從傳統機器學習到深度學習的完整知識體系:

  • 數學基礎:線性代數、微積分、機率統計、優化理論
  • Python 與資料科學:NumPy、Pandas、Matplotlib、Scikit-learn
  • 機器學習:傳統 ML 演算法、特徵工程、模型評估
  • 深度學習:TensorFlow、PyTorch、Keras 三大框架
  • 電腦視覺:CNN、物件檢測、圖像分割
  • 自然語言處理:Transformer、BERT、GPT 系列
  • MLOps 基礎:模型部署、版本控制、實驗追蹤

📚 目錄結構

1.從AI到LLM基礎/
├── 1.Math_4_ML/              # 機器學習數學基礎
├── 2.AI_Intro/               # AI 簡介與發展歷史
├── 3.ML_&_Data_Analysis/     # 機器學習與資料分析
└── 4.DL/                     # 深度學習(包含CV和NLP)

🚀 快速開始指南

根據您的背景和目標,選擇適合的學習路徑:

路徑 1:完全新手(0 → AI 工程師)

預計時間:8-13 週 學習順序

  1. Week 1-2:數學基礎複習(線性代數、微積分、機率統計)
  2. Week 3-4:Python 程式設計基礎 + NumPy/Pandas
  3. Week 5-7:機器學習演算法(Scikit-learn)
  4. Week 8-10:深度學習入門(PyTorch 或 TensorFlow 擇一)
  5. Week 11-13:實作專案(選擇 CV 或 NLP 方向)

推薦起手式

# 第一個 ML 專案:鳶尾花分類
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 載入資料
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

# 訓練模型
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)

# 評估
y_pred = clf.predict(X_test)
print(f"準確率:{accuracy_score(y_test, y_pred):.2%}")
# 輸出:準確率:100.00%

路徑 2:有程式基礎(開發者 → AI 開發者)

預計時間:10-14 週 學習順序

  1. Week 1-2:快速複習數學(重點:矩陣運算、梯度下降)
  2. Week 3-5:ML 演算法理論與實作
  3. Week 6-9:深度學習框架精通(建議 PyTorch)
  4. Week 10-12:專案實戰(Kaggle 競賽)
  5. Week 13-14:MLOps 入門(MLflow、Docker)

關鍵差異點

  • ✅ 可跳過基礎 Python 教學
  • ✅ 直接從 NumPy 進階操作開始
  • ✅ 重點放在演算法原理與優化
  • ✅ 提早接觸生產環境部署

實戰範例:建立一個完整的 ML Pipeline

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC

# 建立完整的 Pipeline
pipeline = Pipeline([
    ('scaler', StandardScaler()),        # 標準化
    ('pca', PCA(n_components=2)),        # 降維
    ('classifier', SVC(kernel='rbf'))     # 分類器
])

# 一行搞定訓練
pipeline.fit(X_train, y_train)

# 一行搞定預測
y_pred = pipeline.predict(X_test)

# Pipeline 的優點:自動處理資料轉換流程

路徑 3:準備學 LLM(快速上手 LLM 應用)

預計時間:4-5 週 學習順序

  1. Week 1:Transformer 架構深入理解
  2. Week 2:Hugging Face Transformers 套件實戰
  3. Week 3:模型微調技術(LoRA、QLoRA)
  4. Week 4:RAG 系統開發
  5. Week 5:Agent 與 LangChain

必學技能清單

  • ✅ Transformer 注意力機制原理
  • ✅ Tokenization 與 Embedding
  • ✅ Prompt Engineering 技巧
  • ✅ 向量資料庫(FAISS、Chroma)
  • ✅ LangChain/LlamaIndex 框架

第一個 LLM 應用

from transformers import pipeline

# 使用 Hugging Face Pipeline(超簡單!)
classifier = pipeline("sentiment-analysis")

# 分析情感
result = classifier("這家餐廳的牛肉麵真的超好吃!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]

# 文本生成
generator = pipeline("text-generation", model="gpt2")
output = generator("台灣最美的地方是", max_length=50)
print(output[0]['generated_text'])

💰 台灣學習資源與社群

🎓 實體課程與訓練營

  1. 台大資工 ML 課程(免費旁聽)

  2. 資策會 AI 人才培訓(付費,政府補助)

    • 針對轉職需求設計
    • 提供就業媒合服務
  3. 各大學推廣教育

    • 政大、台大、成大等開設 AI 學分班
    • 適合在職進修

👥 台灣 AI 社群

  1. ML/DL 讀書會

  2. 線上社群

    • PTT AI_ML 板
    • Facebook 社團:「台灣人工智慧學校校友會」
    • Discord:「台灣 AI 工程師交流」
  3. 競賽平台

📚 台灣繁體中文教材

  1. 書籍

    • 《深度學習入門教室》(碁峰出版)
    • 《Python 機器學習實作》(旗標出版)
    • 《TensorFlow 2.0 深度學習快速入門》(博碩出版)
  2. YouTube 頻道

  3. 部落格與技術文章


🛠️ 實用工具與環境設定

本地開發環境

# 1. 安裝 Anaconda(推薦新手)
# 下載:https://www.anaconda.com/download

# 2. 建立專用環境
conda create -n ai-env python=3.10
conda activate ai-env

# 3. 安裝常用套件
conda install numpy pandas matplotlib scikit-learn jupyter
pip install torch torchvision torchaudio  # PyTorch
pip install transformers datasets          # Hugging Face

# 4. 驗證安裝
python -c "import torch; print(torch.__version__)"

雲端開發環境(免費 GPU)

  1. Google Colab(最推薦新手)

  2. Kaggle Notebooks

    • 免費 GPU(P100 或 T4)
    • 每週 30 小時 GPU 時數
    • 內建資料集
  3. Paperspace Gradient

    • 免費層級提供基本 GPU
    • 適合長時間訓練

台灣 GPU 雲端服務

  • 台智雲(TWCC):台灣本地機房,低延遲
  • 中華電信 HiCloud:企業級服務

之後再新增 ChatGPT for Data Analytics : Full Course 的學習紀錄跟內容。

點擊以打開詳細內容

從AI到LLM基礎

1. 機器學習數學基礎

在掌握機器學習之前,了解支撐了這些演算法的基本數學概念非常重要。不過其實大概看這三個影片課程大概就可以了,這一系列的影片教學有教學跟實作,其他的就有興趣再看。

1.線性代數:Linear Algebra for Machine Learning

這對於理解許多演算法至關重要,尤其是深度學習中使用的演算法。關鍵概念包括向量、矩陣、行列式、特徵值和特徵向量、向量空間和線性變換。

2.微積分:Calculus for Machine Learning

許多機器學習演算法涉及連續函數的最佳化,這需要了解導數、積分、極限和級數。另外多變量微積分和梯度的概念也很重要。

3.機率與統計:Probability for Machine Learning

這些對於理解模型如何從數據中學習並做出預測至關重要。 關鍵概念包括機率論、隨機變數、機率分佈、期望、變異數、協方差、相關性、假設檢定、信賴區間、最大似然估計和貝葉斯推理。

點擊以打開可延伸的閱讀以及參考連結:
可延伸的閱讀以及參考:

電子書:

其他相關連結:


2. AI簡介

3. 機器學習與 Python

Python 是一種強大而靈活的程式語言,由於其可讀性、一致性和強大的資料科學庫生態系統,特別適合機器學習。

3.1 Python 基礎

核心概念

  • 基本語法:變數、資料型別、控制流程(if/else、for/while)
  • 資料結構:List、Tuple、Dictionary、Set
  • 函數與模組:自訂函數、Lambda 函數、模組匯入
  • 物件導向:類別、繼承、多型、封裝

推薦資源

實用技巧

# 1. List Comprehension(列表推導式)- 超實用!
squares = [x**2 for x in range(10)]
even_squares = [x**2 for x in range(10) if x % 2 == 0]

# 2. Dictionary Comprehension
word_lengths = {word: len(word) for word in ['apple', 'banana', 'cherry']}

# 3. Lambda 函數與 map/filter
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
evens = list(filter(lambda x: x % 2 == 0, numbers))

# 4. *args 和 **kwargs(可變參數)
def flexible_function(*args, **kwargs):
    print(f"位置參數: {args}")
    print(f"關鍵字參數: {kwargs}")

flexible_function(1, 2, 3, name="Alice", age=30)

3.2 資料科學函式庫

NumPy - 數值運算基礎

import numpy as np

# 陣列建立
arr = np.array([1, 2, 3, 4, 5])
matrix = np.array([[1, 2], [3, 4]])

# 廣播機制(Broadcasting)- NumPy 的殺手級特性
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
result = a + b  # (3,) + (3,1) → (3,3)

# 向量化運算(比迴圈快 100 倍!)
# 錯誤寫法(慢)
result = []
for i in range(len(arr)):
    result.append(arr[i] ** 2)

# 正確寫法(快)
result = arr ** 2

# 實用函數
np.mean(arr)      # 平均值
np.std(arr)       # 標準差
np.dot(a, b)      # 矩陣乘法
np.linalg.inv(A)  # 矩陣反矩陣

Pandas - 資料處理神器

import pandas as pd

# 讀取資料(支援多種格式)
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx')
df = pd.read_json('data.json')

# 資料探索
df.head()          # 前 5 筆
df.info()          # 資料概況
df.describe()      # 統計摘要
df.isnull().sum()  # 缺失值統計

# 資料清洗
df = df.dropna()                    # 刪除缺失值
df['age'].fillna(df['age'].mean())  # 填補缺失值

# 資料篩選
df[df['age'] > 30]                  # 條件篩選
df.query('age > 30 and city == "Taipei"')  # SQL 風格查詢

# 分組聚合
df.groupby('city')['price'].mean()  # 各城市平均價格
df.pivot_table(values='sales', index='month', columns='product')

# 資料合併
pd.merge(df1, df2, on='id', how='left')  # SQL JOIN
pd.concat([df1, df2], axis=0)            # 垂直合併

Matplotlib & Seaborn - 資料視覺化

import matplotlib.pyplot as plt
import seaborn as sns

# Matplotlib 基礎
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='線圖')
plt.scatter(x, y, label='散點圖')
plt.xlabel('X 軸')
plt.ylabel('Y 軸')
plt.title('標題')
plt.legend()
plt.show()

# Seaborn 進階(更美觀)
sns.set_style("whitegrid")
sns.scatterplot(data=df, x='age', y='salary', hue='gender')
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')

推薦課程

3.3 資料預處理

資料預處理占據機器學習專案 70-80% 的時間,是最重要的環節!

處理缺失值

from sklearn.impute import SimpleImputer

# 策略 1:刪除
df_cleaned = df.dropna()  # 刪除有缺失值的列

# 策略 2:填補
# 數值型:用平均值、中位數、眾數
imputer = SimpleImputer(strategy='mean')
df['age'] = imputer.fit_transform(df[['age']])

# 類別型:用眾數或特殊標記
df['city'].fillna('Unknown', inplace=True)

# 策略 3:預測填補(進階)
from sklearn.ensemble import RandomForestRegressor
# 用其他特徵預測缺失值

處理異常值

# 方法 1:IQR(四分位距)法
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 移除異常值
df = df[(df['price'] >= lower_bound) & (df['price'] <= upper_bound)]

# 方法 2:Z-Score 法
from scipy import stats
z_scores = np.abs(stats.zscore(df['price']))
df = df[z_scores < 3]  # 保留 Z-score < 3 的資料

特徵編碼

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 標籤編碼(有序類別)
le = LabelEncoder()
df['education'] = le.fit_transform(df['education'])
# 'High School' → 0, 'Bachelor' → 1, 'Master' → 2

# One-Hot 編碼(無序類別)
df_encoded = pd.get_dummies(df, columns=['city'], drop_first=True)
# city: Taipei, Kaohsiung, Taichung
# → city_Kaohsiung, city_Taichung(兩個二進位欄位)

# 使用 Scikit-learn(更靈活)
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False, drop='first')
encoded_features = encoder.fit_transform(df[['city']])

特徵縮放

from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 標準化(Z-score normalization)- 常用於 SVM、神經網路
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df[['age', 'salary']])
# 結果:mean=0, std=1

# 正規化(Min-Max scaling)- 常用於距離相關演算法
scaler = MinMaxScaler()
df_normalized = scaler.fit_transform(df[['age', 'salary']])
# 結果:範圍 [0, 1]

資料分割

from sklearn.model_selection import train_test_split

# 基本分割
X_train, X_test, y_train, y_test = train_test_split(
    X, y,
    test_size=0.2,    # 20% 測試集
    random_state=42,  # 固定隨機種子(可重現結果)
    stratify=y        # 保持類別比例(分類問題)
)

# 三分割(訓練/驗證/測試)
X_temp, X_test, y_temp, y_test = train_test_split(X, y, test_size=0.2)
X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.25)
# 最終比例:60% 訓練、20% 驗證、20% 測試

推薦資源

3.4 機器學習演算法實戰

推薦課程

監督式學習(Supervised Learning)

1. 線性迴歸(Linear Regression)

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 訓練
model = LinearRegression()
model.fit(X_train, y_train)

# 預測
y_pred = model.predict(X_test)

# 評估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MSE: {mse:.2f}, R²: {r2:.2f}")

# 查看係數
print(f"係數: {model.coef_}")
print(f"截距: {model.intercept_}")

2. 邏輯迴歸(Logistic Regression)

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

# 評估
print(f"準確率: {accuracy_score(y_test, y_pred):.2%}")
print("分類報告:\n", classification_report(y_test, y_pred))
print("混淆矩陣:\n", confusion_matrix(y_test, y_pred))

# 機率預測
y_proba = model.predict_proba(X_test)[:, 1]  # 正類別機率

3. 決策樹(Decision Tree)

from sklearn.tree import DecisionTreeClassifier, plot_tree

model = DecisionTreeClassifier(
    max_depth=5,           # 限制深度防止過擬合
    min_samples_split=20,  # 分裂所需最小樣本數
    min_samples_leaf=10    # 葉節點最小樣本數
)
model.fit(X_train, y_train)

# 視覺化決策樹
plt.figure(figsize=(20, 10))
plot_tree(model, feature_names=feature_names, filled=True)
plt.show()

# 特徵重要性
importances = pd.DataFrame({
    'feature': feature_names,
    'importance': model.feature_importances_
}).sort_values('importance', ascending=False)

4. 隨機森林(Random Forest)

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(
    n_estimators=100,    # 樹的數量
    max_depth=10,
    random_state=42,
    n_jobs=-1            # 使用所有 CPU 核心
)
model.fit(X_train, y_train)

# 特徵重要性(更穩定)
importances = model.feature_importances_

5. 支援向量機(SVM)

from sklearn.svm import SVC

model = SVC(
    kernel='rbf',     # 徑向基函數核
    C=1.0,            # 正則化參數
    gamma='scale'
)
model.fit(X_train, y_train)

6. K 近鄰(K-NN)

from sklearn.neighbors import KNeighborsClassifier

model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)

# 找最佳 K 值
for k in range(1, 21):
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    print(f"K={k}, Accuracy={knn.score(X_test, y_test):.2%}")
非監督式學習(Unsupervised Learning)

1. K-Means 聚類

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# 找最佳 K(Elbow Method)
inertias = []
for k in range(2, 11):
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(X)
    inertias.append(kmeans.inertia_)

# 視覺化 Elbow
plt.plot(range(2, 11), inertias, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()

# 訓練最終模型
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)

# 評估(Silhouette Score:-1 到 1,越高越好)
score = silhouette_score(X, clusters)
print(f"Silhouette Score: {score:.2f}")

2. 主成分分析(PCA)

from sklearn.decomposition import PCA

# 降維
pca = PCA(n_components=2)  # 降至 2 維
X_reduced = pca.fit_transform(X)

# 解釋變異量
print(f"解釋變異量: {pca.explained_variance_ratio_}")
# 例如:[0.45, 0.35] 表示前兩個主成分解釋 80% 變異

# 視覺化
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()

推薦資源

3.5 模型評估與優化

交叉驗證(Cross-Validation)

from sklearn.model_selection import cross_val_score, KFold

# K-Fold 交叉驗證
kfold = KFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(model, X, y, cv=kfold, scoring='accuracy')
print(f"平均準確率: {scores.mean():.2%} (+/- {scores.std():.2%})")

# 分層交叉驗證(保持類別比例)
from sklearn.model_selection import StratifiedKFold
skfold = StratifiedKFold(n_splits=5)
scores = cross_val_score(model, X, y, cv=skfold)

超參數調整

from sklearn.model_selection import GridSearchCV

# 網格搜尋
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [5, 10, 15],
    'min_samples_split': [2, 5, 10]
}

grid_search = GridSearchCV(
    RandomForestClassifier(),
    param_grid,
    cv=5,
    scoring='accuracy',
    n_jobs=-1,
    verbose=1
)

grid_search.fit(X_train, y_train)
print(f"最佳參數: {grid_search.best_params_}")
print(f"最佳分數: {grid_search.best_score_:.2%}")

# 隨機搜尋(更快)
from sklearn.model_selection import RandomizedSearchCV
random_search = RandomizedSearchCV(
    model, param_distributions=param_grid, n_iter=20, cv=5
)

常見陷阱與解決方案

  1. 過擬合(Overfitting)

    • 症狀:訓練準確率 95%,測試準確率 70%
    • 解法:增加資料、正則化、減少模型複雜度、資料增強
  2. 欠擬合(Underfitting)

    • 症狀:訓練和測試準確率都很低
    • 解法:增加模型複雜度、增加特徵、減少正則化
  3. 資料洩漏(Data Leakage)

    • 錯誤:在分割資料前做標準化
    • 正確:
      # ❌ 錯誤
      X = scaler.fit_transform(X)  # 全部資料一起標準化
      X_train, X_test = train_test_split(X, y)
      
      # ✅ 正確
      X_train, X_test = train_test_split(X, y)
      scaler.fit(X_train)  # 只用訓練集 fit
      X_train = scaler.transform(X_train)
      X_test = scaler.transform(X_test)

📚 資源:


4. 神經網絡,深度學習與自然語言處理(NLP)和電腦視覺(CV)

  • 基礎知識: 這包括理解神經網路的結構,例如層、權重、偏差和激活函數(sigmoid、tanh、ReLU 等)
  • 深度學習框架: 目前是在深度學習框架方面還是 Pytorch 最熱門,但是有些老應用跟某些 Google 相關的應用仍還是使用 Tensorflow 。假如要入門的話建議下面四個連結找一個入門並實作一個應用即可。
  • 訓練與最佳化: 熟悉反向傳播和不同類型的損失函數,例如均方誤差 (MSE) 和交叉熵。了解各種最佳化演算法,例如梯度下降、隨機梯度下降、RMSprop 和 Adam。 神經網路是許多機器學習模型的基本組成部分,特別是在深度學習領域。為了有效地利用它們,全面了解它們的設計和機制至關重要。
  • 過度擬合: 了解過度擬合的概念(模型在訓練資料上表現良好,但在未見過的資料上表現不佳)並學習各種正則化技術(dropout、L1/L2 正則化、提前停止、資料增強)來防止過度擬合。
  • 實作多層感知器 (MLP): 使用 PyTorch 建構 MLP,也稱為全連接網路。

📚 其他資源:


4.1 電腦視覺(CV)

電腦視覺 (Computer Vision):電腦視覺是人工智慧的一個分支,它使電腦能夠從數位圖像和影片中提取、分析和理解有意義的資訊。電腦視覺的應用範圍廣泛,從自動駕駛汽車到醫學影像分析,再到增強現實。

深度學習在計算機視覺中的應用涉及到使用深度神經網絡(如卷積神經網絡)來進行圖像識別、分類、分割等任務。這些技術已廣泛應用於自動駕駛、醫療影像分析、監控系統等領域。

1. 卷積神經網絡 (CNN) 基礎

2. 圖像分類與識別

  • 圖像分類: 使用深度學習模型進行圖像分類任務,包括單標籤和多標籤分類。

  • 物體檢測: 了解區域提議網絡(RPN)及其在Faster R-CNN中的應用,以及其他物體檢測方法如YOLO和SSD。

3. 圖像分割

  • 語義分割: 使用全卷積網絡(FCN)、U-Net等模型對圖像進行像素級的分類。

  • 實例分割: 了解Mask R-CNN等模型,實現對圖像中不同物體實例的區分。

4. 生成對抗網絡 (GAN)

  • GAN基礎: 學習生成對抗網絡的基本原理,包括生成器和判別器的設計。

  • 應用: 探索GAN在圖像生成、圖像風格轉換、超分辨率等方面的應用。

5. 基於Transformer的模型

  • Vision Transformer (ViT): 了解Transformer架構在計算機視覺中的應用,特別是在圖像分類等任務中的表現。

6. 資源與實踐

  • 實踐平台: 使用Kaggle等平台進行實踐,參與計算機視覺比賽和項目。

  • 學習工具: 使用TensorFlow、PyTorch等框架進行模型設計和訓練。

這些內容涵蓋了深度學習在計算機視覺中的核心技術和應用,幫助學習者全面掌握從基礎到進階的知識與技能。


4.2 自然語言處理(NLP)

NLP 是人工智慧的一個令人著迷的分支,它彌合了人類語言和機器理解之間的差距。從簡單的文字處理到理解語言的細微差別,NLP 在翻譯、情緒分析、聊天機器人等許多應用中發揮著至關重要的作用。

  • 文字預處理: 學習各種文字預處理步驟,例如分詞(將文字分割成單字或句子)、詞幹擷取(將單字還原為其詞根形式)、詞形還原(與詞幹擷取類似,但考慮上下文)、停用詞刪除等。
  • 特徵提取技術: 熟悉將文字資料轉換為機器學習演算法可以理解的格式的技術。主要方法包括詞袋 (BoW)、詞頻-逆文檔頻率 (TF-IDF) 和 n-gram。
  • 詞嵌入: 詞嵌入是一種詞表示形式,允許具有相似意義的詞具有相似的表示形式。主要方法包括 Word2Vec、GloVe 和 FastText。
  • 遞歸神經網路 (RNN): 了解 RNN 的工作原理,RNN 是一種設計用於處理序列資料的神經網路。探索 LSTM 和 GRU,這兩種能夠學習長期依賴關係的 RNN 變體。
  • 基於 Transformer 跟預訓練模型的 NLP: 由於基於類 Transformer 的模型能處理之前其他 經典 NLP 模型處理的任務,並且大部分任務能做得更好,所以我覺得這是必學的一部分。

📚 Resources:


💡 實作項目建議

初級項目(適合剛入門者)

  1. 鳶尾花分類:使用 Scikit-learn 實作經典分類問題
  2. 房價預測:線性回歸與特徵工程實戰
  3. 手寫數字辨識:使用 CNN 實作 MNIST

中級項目(有一定基礎)

  1. Kaggle 競賽參與:選擇入門競賽(如 Titanic)完整實作
  2. 圖像分類器:使用遷移學習(ResNet、VGG)建立應用
  3. 情感分析系統:使用 LSTM 或 Transformer 分析文本情感

進階項目(準備進入 LLM 領域)

  1. 物件檢測系統:使用 YOLOv8 建立實時檢測應用
  2. 圖像分割應用:使用 SAM2 進行精確分割
  3. 文本生成系統:使用 GPT-2 或小型 LLM 進行微調

更多實作建議請參閱1.從AI到LLM基礎/README.md#實作項目建議


📅 2024-2025 最新技術補充(針對基礎學習)

深度學習框架最新發展

  • PyTorch 2.x:引入 torch.compile() 大幅提升推論效能,成為學術界和工業界首選
  • Keras 3:多後端支援(TensorFlow、PyTorch、JAX),提供統一 API
  • TensorFlow 2.16+:改進的分散式訓練支援,更好的 TPU 整合

電腦視覺最新里程碑

  • Segment Anything Model 2 (SAM2):Meta 開源的通用影像與視訊分割模型
  • YOLOv10:最新的實時物件檢測模型,效能與準確度大幅提升
  • Vision Transformer (ViT) 變體:DeiT、Swin Transformer 等,將 Transformer 成功應用於視覺任務

NLP 到 LLM 的橋樑

  • Transformer 架構持續演進:為理解現代 LLM 打下堅實基礎
  • 多模態模型:CLIP、BLIP 等視覺-語言模型,融合 CV 和 NLP
  • 高效微調技術:LoRA、QLoRA 等參數高效方法,降低微調成本

實用工具與平台

  • Hugging Face Transformers:已成為 NLP 和多模態模型的標準工具庫
  • Kaggle 與 Colab:免費 GPU 資源,適合學習和實驗
  • MLflow:實驗追蹤與模型管理,學習 MLOps 的最佳起點

⚡ 學習建議與注意事項

  1. 循序漸進很重要:不要跳過數學基礎,它們是理解演算法的關鍵
  2. 實作比理論更重要:每學一個概念都要自己寫程式碼驗證
  3. 選擇一個框架深入:PyTorch、TensorFlow 或 Keras 選一個先精通
  4. 參與社群與競賽:Kaggle 是最好的實戰平台,可以從他人方案中學習
  5. 建立自己的作品集:將學習成果整理成 GitHub 專案,對求職很有幫助
  6. 關注最新發展但不盲從:基礎扎實比追逐新技術更重要

🔗 相關章節連結

完成本章節的學習後,建議接續學習:


深入LLM模型工程與LLM運維

這邊是從模型本身的架構到模型運作整個流程的必備知識跟技能。

大致如下:

1.模型了解與選擇

2.資料集收集,準備

3.模型預訓練,持續預訓練,微調(lora,Qlora ..),對齊(RLHF,DPO..)

4.模型優化和壓縮

5.模型部署以及系統整體流程維護

點擊以打開詳細內容

roadmap_scientist

LLM 簡介與架構

1. 簡介

大型語言模型(LLM)在自然語言處理(NLP)領域取得了顯著的進步。這些模型大多基於Transformer架構,特別是解碼器部分,如GPT模型系列。理解LLM的基本輸入(tokens 令牌)和輸出(logits)以及注意力機制對於掌握LLM的工作原理至關重要。

詳細的LLM簡介可參照我翻譯的:

  1. Stanford CS25-Apr 2024: V4 I Overview of Transformers - Transformers and LLMs: An Introduction(上)

  2. Stanford CS25-Apr 2024: V4 I Overview of Transformers - Transformers and LLMs: An Introduction(下)

看完上面的連結對目前大模型的狀況變可以了解一二。

延伸閱讀與觀看

2. LLM 整體架構 - Transformer整體架構

LLM通常基於Transformer架構,其中特別採用了僅使用解碼器的設計(例如GPT系列)。這些模型使用自注意力機制來處理輸入並生成輸出。其他的架構則之後會陸續介紹。

具體請參照:

  1. Let's build GPT: from scratch, in code, spelled out. 學習紀錄

  2. 最原始的 transformer 版本圖文詳細敘述:Transformer 運作原理圖解 by Jay Alammar

  3. Let's reproduce GPT-2 (124M):跑完這個流程大概對程式碼跟模型的理解絕對會更深的多。

  4. nanoGPT 流程圖像化 by Brendan Bycroft: 3D視覺化展示LLM內部運作。

延伸閱讀與觀看

3. 標記化 Tokenization

將原始文本資料轉換為模型可以理解的格式,即token。這過程包括將文本拆分為標記(通常是單字或子單字)。

具體請參考:

中文方面兩者擇一了解即可,找了很久沒找到繁中的,感覺可惜。

4. 注意力機制

注意力機制是LLM的核心技術,它使得模型能夠在生成輸出時關注輸入的不同部分。這包括自注意力和縮放點積注意力機制,相關的介紹其實在前面架構介紹的內容裡也有提到。

延伸閱讀與觀看

5. 文字生成

模型使用不同的策略生成文本輸出。常見策略包括貪婪解碼、波束搜尋、top-k 採樣和核採樣。

延伸閱讀與觀看

6. 參考的流程跑通專案

下面的都是對岸的,沒辦法,因為流程跟繁中是最類似的,假如有繁中的話拜託讓我知道,萬分感謝。

  1. GPT2-Chinese
  2. ChatLM-mini-Chinese

7. 其他的模型架構或方法

7.1 新的位置嵌入 Positional embeddings相關方法:

在了解原始 transformer 的 Positional embeddings方法後,就可看下不同的方法,像是RoPE 這樣的相對位置編碼方案。或實現 YaRN (通過溫度因子乘以注意力矩陣) 跟 ALiBi (基於token距離的注意力獎懲) 來擴展上下文長度。

7.2 Mamba ,RWKV , TTT等新模型:

說是新模型其實提出也有一段時間了,我感覺我問了Chat-gpt, Gemini, Claude 有哪些2024或2023新提出的大模型架構還比我自己找的文章速度要快,所以有興趣的自己去問問就好。

7.3 模型融合 Model merging:

另外將以訓練的模型合併也是一個提升表先的方法,具體的可參考這個 mergekit 庫,這個課實現了許多融合的方法,如 SLERP, DARE, 和 TIES

模型融合通常指的是將多個已訓練的模型合併成一個單一模型的過程。這不僅僅是用參數平均或投票決定輸出,而是在模型的權重和結構層面上進行合併。這個過程不需要再次訓練,可以通過數學操作(如球面線性內插(SLERP)或其他融合技術)將不同模型的知識整合起來。模型融合可用於創建一個表現更佳、更強大的模型,通常是將多個模型在特定任務上的優勢結合起來。

7.4 專家混合 Mixture of Experts:

Mixtral 因其卓越的性能而重新使MoE架構流行起來。 與此同時,開源社區出現了一種frankenMoE,通過融合像 Phixtral這樣的模型,這是一個更經濟且性能良好的選項。MoE是一種結構,它包含多個子模型或“專家”,每個專家專門處理不同的任務或數據子集。在MoE架構中,一個“gate”或調度器決定對於給定的輸入,哪個專家被使用。這是一種稀疏啟動方法,可以大幅提升模型的容量和效率,因為不是所有的專家都會對每個輸入進行響應。

7.5 多模態模型 Multimodal models:

這類模型像是( CLIP, Stable Diffusion, 或 LLaVA) 能處理多種類型的輸入(文本、圖像、音頻等)以及具備了統一的嵌入空間,從而具備了強大的應用能力,如文本到圖像。


其實大致流程應該是: 1. 確定需求 2. 預訓練模型選擇 3. 構建或選擇資料集 4. 微調,對齊 5. 壓縮 6. 評估

只是我因為想把訓練方式根據資料量的差異由大排到小,

所以我就把 ( 預訓練與預訓練模型選擇 ) 放到第三個講。

另外,內容有誤的地方請立刻通知我!!

2. 構建或選擇資料集

雖然從維基百科和其他網站找到原始資料很容易,

但在許多環境中收集成對的問答、範例和答案卻很困難。

與傳統的機器學習一樣,資料集的品質直接影響模型的成效,因此可說是微調過程中最重要的環節。

要用到的資料集又被稱為指令資料集(Instruction Dataset),可以簡單理解為問答的資料集。

可參考的整體流程:

  1. 使用現有的資料集:資料集可以在Kaggle、Huggingface、GitHub和GitLab上尋找。

    比較有名的包括TMMLU+ Dataset。此外,Huggingface上還有一些繁體中文訓練集可供使用。

    • 如果沒有你需要的資料集,可以將英文或簡中翻譯成繁體中文,參考這個方法
  2. 使用工具收集資料並製作成資料集

  3. 使用類 Alpaca的方法產生資料集:使用OpenAI API(GPT)從頭開始產生合成資料。可以指定種子和系統提示來建立多樣化的資料集。

  4. 進階技巧:了解如何使用Evol-Instruct改進現有資料集,如何產生和Orcaphi-1論文中類似的高品質合成資料。

  5. 資料過濾:傳統技巧包括使用正規表示式、刪除近似重複項、關注具有大量標記的答案等。

  6. 提示詞模板:目前還沒有真正的標準方法來格式化說明範本和答案,因此了解不同的聊天範本很重要,如ChatMLAlpaca等。

    • Chat Template by Matthew Carrigan: 關於提示模板的Hugging Face頁面。

3. 預訓練以及預訓練模型選擇

預訓練模型選擇

目前我查詢並經過粗略的使用後覺得應該可使用的繁體中文大模型如下:

  1. 國研院-Llama3-TAIDE
  2. MediaTek Research -Breeze
  3. 繁體中文專家模型開源專案TAiwan Mixture of Experts」(Project TAME) yentinglin's Collections
  4. 群創光電-白龍(這個我不確定)

最新開源模型 (2024~2025)

國外可用於微調的開放大模型(可在其他家雲端或本地運作)基本是 LLAMA, GEMMA, BLOOM, Mistral。

只能在遠端微調的大概就很多了(Gemini , GPT系列 等等)。

建議要練習的話先從LLAMA 模型開始就可以了,之後再根據情況挑選符合自己需求的就可。

繁體中文的微調可先試試前面三個。

預訓練

快速入門:Pretraining LLMs-Deeplearning.ai 短課程

預訓練是一個非常漫長且成本高昂的過程,這就是為什麼這不是一般人在工作中的重點。

但是對預訓練期間發生的情況有一定程度的了解是很好的。

簡單來說,了解可以,類似玩具級的 GPT2 預訓練在 vast.ai 租個 4 GPU 的機器或在colab用a100(不過這個時間一定會超過24小時,需要寫checkpoint存儲模型跟腳本定時重新 load 一遍) 應該是可以實現的。

但是目前商業等級的實現沒四千萬別做,目前已知花最少錢訓練的是10萬美元,另外,我從新聞得知通常的訓練成本是120萬美元左右

不過我想隨著時間的推進,之後應該會有更加高效以及更快速的方法出現。

📚 參考資料:

  • BLOOM by BigScience: 描述如何建立 BLOOM 模型的 Notion 頁面,其中包含大量有關工程部分和遇到問題的有用資訊。
  • OPT-175 Logbook by Meta: 研究日誌顯示出了什麼錯的以及什麼是正確的。如果您計劃預先訓練非常大的語言模型(在本例中為 175B 參數),則非常有用。

4. 監督微調 (Supervised Fine-Tuning)

預訓練模型僅針對下一個標記(next-token)預測任務進行訓練,這就是為什麼它們不是有用的助手。

SFT 允許您調整它們以回應指令。此外,它允許您根據任何資料(私人資料、GPT-4 無法看到的資料等)微調您的模型並使用它,而無需支付 OpenAI 等 API 的費用。

Decoder Only ,Encoder Only 跟 原始 Transformer 在進行訓練時的差異:

  • Decoder Only ,Encoder Only 在訓練或微調時,問與答通常都是放在同一個地方(Decoder 或 Encoder),並在問與答使用 EOS,其他終止符號或模板區分問與答。
  • 只是 Decoder only 的視為生成任務,而Encoder Only的則視為填空,原始 Transformer則是依照原本設定的方式進行訓練。
  • 簡介跟教學:
  • 全微調: 全微調是指訓練模型中的所有參數 ( 就是模型訓練,只是資料量不多,並且資料通常是特定任務或子領域上的 )。這不是一種有效的技術,但它會產生稍微好一點的結果.
  • LoRA: 一種基於低階適配器(low-rank adapters)的高效參數微調技術(PEFT)。我們不訓練所有參數,而是只訓練這些適配器(adapters)。
  • QLoRA: 另一個基於 LoRA 的 PEFT,它還將模型的權重量化為 4 bits,並引入分頁優化器來管理記憶體峰值。將其與Unsloth結合使用,可以在免費的 Colab 筆記本上運行。
  • Axolotl: 一種用戶友好且功能強大的微調工具,用於許多最先進的開源模型。
  • DeepSpeed: 針對多 GPU 和多節點設定的 LLM 的高效預訓練和微調(在 Axolotl 中實現)。

📚 參考資料:


5. 偏好對齊

經過監督微調後,RLHF 是用來使 LLM 的答案與人類期望保持一致的一個步驟。這個想法是從人類(或人工)回饋中學習偏好,這可用於減少偏見、審查模型或使它們以更有用的方式行事。它比 SFT 更複雜,並且通常被視為可選項之一。

📚 參考資料:


6. 評估 Evaluation

評估大型語言模型(LLMs)是流程中一個被低估的部分,因為評估這一個過程耗時且相對可靠性較低。你的下游任務應該指明你想要評估的內容,但記得古德哈特定律(Goodhart's law)提到的:“當一個衡量指標變成了目標,它就不再是一個好的衡量指標。”

  • 簡介與入門:

  • 傳統指標 Traditional metrics: 像困惑度(perplexity)和BLEU分數這樣的指標不再像以前那樣受歡迎,因為在大多數情況下它們是有缺陷的。但了解它們以及它們適用的情境仍然很重要。

  • 通用基準 General benchmarks: 基於語言模型評估工具箱 Language Model Evaluation Harness,Open LLM排行榜 Open LLM Leaderboard 是用於通用大型語言模型(如ChatGPT)的主要基準。還有其他受歡迎的基準,如BigBench, MT-Bench等。

  • 任務特定基準 Task-specific benchmarks: 如摘要、翻譯和問答等任務有專門的基準、指標甚至子領域(醫療、金融等),例如用於生物醫學問答 PubMedQA

  • 人類評估 Human evaluation: 最可靠的評估是用戶的接受度或由人類所做的比較。如果你想知道一個模型表現得如何,最簡單但最確定的方式就是自己使用它。

📚 參考文獻:


7. 壓縮

量化或壓縮是將模型的權重(和啟動值)轉換成更低精度表示的過程。例如,原本使用16位元儲存的權重可以轉換成4位元表示。這種技術愈來愈重要,用來減少與大型語言模型(LLMs)相關的計算與記憶體成本。

📚 參考文獻:


LLM應用工程

這邊主要就是 LLM 部署, Agent, RAG,這類的知識與內容。

這邊主要新增的內容是 LLM 結合自動化以及把 LLM 當作 API 結合到實際的應用中。

例如:在解析完程式碼之後,把輸出的程式碼插入到編輯器中。或者將LLm融合到類似UIpath的運作中。

點擊以打開詳細內容

roadmap_engineer

1. 運行 LLMs

運行 LLMs 的教學指南

運行大型語言模型(LLMs)可能會因為硬體要求高而變得困難。根據您的使用案例,您可以選擇通過API(如GPT-4)使用模型,或者在本地運行它。以下是一步一步的指南,幫助您開始運行LLMs。

相關的 deeplearning.ai短課程:

  1. 使用LLM APIs 或 Agent 套件:
  2. 運行開源 LLMs
  3. 提示工程(Prompt Engineering)

步驟 1:使用 LLM APIs

APIs 是部署 LLMs 的便捷方式。以下是如何使用一些常見的私有和開源 LLM APIs。

  1. 選擇 LLM API 提供商

  2. 註冊並獲取 API Key

    • 訪問所選提供商的網站,註冊一個帳戶並獲取 API Key。
    • 例如,註冊 OpenAI 的 API Key 可以訪問 OpenAI 平台
  3. 使用 API 進行請求

    • 使用所獲取的 API Key,在您的應用程序中集成 API。
    • 例如,使用 OpenAI 的 API,可以參考以下 Python 代碼:
      import openai
      
      openai.api_key = 'your-api-key-here'
      
      response = openai.Completion.create(
          engine="text-davinci-003",
          prompt="Hello, world!",
          max_tokens=50
      )
      
      print(response.choices[0].text.strip())

步驟 2:運行開源 LLMs

如果您希望在本地運行開源 LLMs,可以按照以下步驟進行。

  1. 選擇開源 LLM

  2. 使用 LM Studio 和同類型應用在本地運行模型

  3. 使用 Hugging Face 的 Transformer

    • 安裝 transformers 庫:
      pip install transformers
    • 使用以下代碼加載並運行模型:
      from transformers import pipeline
      
      generator = pipeline('text-generation', model='gpt2')
      response = generator("Hello, world!", max_length=50)
      
      print(response[0]['generated_text'])

步驟 3:提示工程(Prompt Engineering)

優化提示可以大大改善 LLM 的輸出效果。以下是一些常見的提示工程技術。

  1. 零提示詞(Zero-shot)

    • 直接向模型提出問題或指令,無需示例。
    • 例如:
      prompt = "What is the capital of France?"
  2. 少量提示詞(Few-shot)

    • 提供一些示例,以幫助模型理解您的需求。
    • 例如:
      prompt = "Translate the following English sentences to French:\n\n1. Hello, how are you? -> Bonjour, comment ça va?\n2. What is your name? -> Comment tu t'appelles?\n3. Where is the nearest restaurant? -> Où est le restaurant le plus proche?\n4. How much does this cost? -> Combien ça coûte?"
  3. 思維鏈(Chain of Thought)與 ReAct

    • 使用逐步思考的方式,引導模型逐步解決問題。
    • 例如:
      prompt = "First, let's consider the problem step by step. What is 5 plus 3? Then, what is the result multiplied by 2?"
  4. 相關學習資源

步驟 4:結構化輸出(Structuring Outputs)

許多任務需要結構化的輸出,如嚴格的模板或JSON格式。以下是一些工具和方法。

  1. 使用 LMQL 指導生成

    • 安裝並使用 LMQL 庫來指導生成符合結構的輸出。
    • 參考 LMQL - Overview 的介紹。
  2. 使用 Outlines 庫

    • 安裝並使用 Outlines 庫來生成結構化輸出。
    • 參考 Outlines - Quickstart 的快速入門指南。
  3. 相關學習資源


2. 建立向量儲存

創建向量儲存是建立檢索增強生成(Retrieval Augmented Generation,簡稱RAG)流程的第一步。文件被加載、拆分,並使用相關的片段來產生向量表示(嵌入),這些向量表示將被存儲以便在推理過程中使用。


相關的 deeplearning.ai短課程:


  • 文檔導入 Ingesting documents: 文檔加載器是方便的包裝器,可以處理多種格式: PDF, JSON, HTML, Markdown, 等。 它們還可以直接從一些數據庫和API(GitHub, Reddit, Google Drive, 等)檢索數據。
  • 文檔拆分 Splitting documents: 文本拆分器將文檔拆分成較小的、語義上有意義的片段。通常最好不要在n個字符後拆分文本,而是按照標題或遞迴地拆分,並附帶一些額外的元數據。
  • 嵌入模型 Embedding models: 嵌入模型將文本轉換為向量表示。這允許對語言進行更深入、更細膩的理解,這對於進行語義搜索至關重要。
  • 向量數據庫 Vector databases: 向量數據庫(如 Chroma, Pinecone, Milvus, FAISS, Annoy, 等)專為儲存嵌入向量而設計。它們支援基於向量相似性有效檢索與查詢最相似的數據。

3. Retrieval Augmented Generation 檢索增強生成

借助 RAG,LLMs 可以從資料庫中檢索上下文文檔,以提高答案的準確性。RAG 是一種無需任何微調即可增強模型知識的流行方法。

  • Orchestrators 協作器: Orchestrators 協作器 (如 LangChain, LlamaIndex, FastRAG, 等)是流行的框架,用於將您的 LLM 與工具、資料庫、記憶體等連接起來並增強他們的能力。
  • Retrievers 檢索器: 使用者指令未針對檢索進行最佳化。可以應用不同的技術(例如,多查詢檢索器、 HyDE, 等)來重新表述/擴展它們並提高效能。
  • 記憶: 為了記住先前的說明和答案,LLM 和 ChatGPT 等聊天機器人會將此歷史記錄添加到其上下文視窗中。此緩衝區可以透過匯總(例如,使用較小的 LLM)、向量儲存 + RAG 等來改進。
  • 評估: 我們需要評估文件檢索(上下文精確度和召回率)和生成階段(可信度和答案相關性)。可以使用 RagasDeepEval工具進行簡化。

4. 進階 RAG

現實應用程式可能需要複雜的管道,包括 SQL 或圖形資料庫,以及自動選擇相關工具和 API。這些先進技術可以改進基準解決方案並提供附加功能。

相關的 deeplearning.ai短課程: - Advanced Retrieval for AI with Chroma:這門課程專注於高級信息檢索技術,尤其是在使用大語言模型(LLM)和向量數據庫時的應用。課程涵蓋的主題包括查詢擴展、交叉編碼重排序,以及通過嵌入適配器來改進檢索結果。 - Multi AI Agent Systems with crewAI:這門課程專注於多AI代理系統(Multi-AI Agent Systems),使用CREW AI工具進行開發和協作。課程內容涵蓋如何設計和管理多個AI代理之間的交互,並通過協同工作來完成複雜任務。

  • 查詢建構: 儲存在傳統數據庫中的結構化數據需要特定的查詢語言,如SQL、Cypher、元數據等。我們可以直接將用戶指令翻譯成查詢,通過查詢建構來存取數據。
  • 代理與工具: 代理透過自動選擇最相關的工具來增強LLMs的回答能力。這些工具可以像使用Google或Wikipedia那麼簡單,或者像Python解釋器或Jira這樣複雜。
  • 後處理: 處理輸入到LLM的最後一步。它通過重新排序、RAG融合和分類來增強檢索文檔的相關性和多樣性。

5. Inference optimization 推理優化

文本生成是一個成本高昂的過程,需要昂貴的硬體設備。除了量化之外,還有各種技術被提出以最大化吞吐量並降低推論成本。

  • 主要內容:
    • GPU Inference by Hugging Face: 解釋如何在GPU上優化推論.
    • LLM Inference by Databricks: 實際運作中優化LLM推論的最佳實踐。
  • Flash Attention 閃存注意力: 優化注意力機制,將其複雜性從二次方變成線性以加快訓練和推論速度。
  • Key-value cache 鍵值快取: 請多了解鍵值快取以及多查詢注意力(Multi-Query Attention (MQA))和(分組查詢注意力Grouped-Query Attention (GQA))帶來的改進。
  • Speculative decoding 投機解碼: 使用小型模型產生草稿,然後由更大的模型審核,以加快文本生成速度。
    • Assisted Generation by Hugging Face: HF版本的投機解碼,這是一篇有趣的博客文章,介紹了它的工作原理及其實現代碼。

6. Deploying LLMs 部署大型語言模型

在大規模部署大型語言模型(LLMs)是一項工程壯舉,可能需要多個GPU集群。在其他情景下,演示和本地應用可以更簡單的實現運作。


相關的 deeplearning.ai短課程: - Serverless LLM apps with Amazon Bedrock:主要內容是使用AWS部署一個LLM app - Building Generative AI Applications with Gradio:這門課程教授如何使用Gradio平台來構建生成式AI應用。課程內容包括如何設計和構建交互式的AI界面,讓用戶能夠輕鬆地與生成式AI模型進行互動。


  • Local deployment 本地部署: 隱私是開源LLMs相對於私有LLMs的一個重要優勢。 本地LLM服務器 (LM Studio, Ollama, oobabooga, kobold.cpp, 等)利用這一優勢為本地應用提供動力。
  • Demo deployment 演示部署:像 GradioStreamlit 這樣的框架有助於原型應用的開發和演示的分享。您也可以輕鬆地在線上部署,例如使用 Hugging Face Spaces
  • Server deployment 服務器部署: 大規模部署LLMs需要雲端 (詳見 SkyPilot) 或內部部署的基礎設施,並經常利用優化的文本生成框架,如 TGI, vLLM等。
  • Edge deployment 邊緣(中低算力)部署: 在受限環境中,高性能框架如 MLC LLMmnn-llm 可以在網頁瀏覽器、Android和iOS中部署LLM。

7. Securing LLMs

除了與軟體相關的傳統安全問題外,由於訓練和提示的方式,大型語言模型(LLMs)還有特定的弱點。


相關的 deeplearning.ai短課程: - Red Teaming LLM Applications:這門課程教授如何進行紅隊測試(Red Teaming),以評估和改進大型語言模型(LLM)應用的安全性和可靠性。


  • Prompt hacking 提示詞攻擊: 與提示工程相關的技術略有不同,提示詞注入(使用額外指令以劫持模型的答案)、數據/提示洩漏(檢索其原始數據/提示)和越獄(製作提示詞以繞過安全特性)都算在此範圍內。
  • Backdoors 後門: 攻擊向量可以針對訓練數據本身,通過污染訓練數據(例如,使用錯誤信息)或創建後門(觸發器在推論期間秘密的改變模型行為)。
  • Defensive measures 防禦措施: 保護您的LLM應用程序的最佳方式是對這些漏洞進行測試 (e.g., 例如,使用紅隊測試和像garak這樣的檢查 ) 並在實際的環境中觀察它們(使用像langfuse這樣的框架)。

📚 References:


8. 多模態生成 ⭐ 新增!

🎨 圖片 | 影片 | 音樂 - 完整的AI內容創作工具鏈

多模態生成是當前AI最熱門的應用方向之一。本模塊涵蓋圖片、影片、音樂三大內容生成領域的核心技術與實戰項目。

📚 學習內容

完整教學文檔 →

模塊 核心技術 學習時間 實戰項目
圖片生成 Stable Diffusion, FLUX.1, ControlNet, LoRA 1-2週 AI設計師助手
影片生成 Stable Video Diffusion, AnimateDiff 1-2週 自動短視頻生成器
音樂生成 MusicGen, AudioLDM, Bark 1週 AI音樂製作平台

🚀 10分鐘快速體驗

# 圖片生成示例
from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
)
pipe = pipe.to("cuda")

image = pipe(
    prompt="a professional portrait photo, natural lighting",
    negative_prompt="low quality, blurry",
    num_inference_steps=50
).images[0]

image.save("output.png")

🎯 實戰項目

  1. AI內容創作平台

    • FastAPI後端 + React前端
    • 支持圖片、影片、音樂生成
    • Docker一鍵部署
  2. 自動短視頻生成器

    • 劇本→圖片→影片→配音→音樂全自動化
    • 適合營銷、教育、娛樂場景
  3. 產品營銷素材生成器

    • 批量生成產品圖
    • 多平台尺寸適配(IG、FB、Twitter)

📖 推薦學習路徑

初學者 (4-6週)

  1. 第1週:圖片生成基礎(Stable Diffusion)
  2. 第2週:進階控制(ControlNet, LoRA)
  3. 第3-4週:影片生成(SVD, AnimateDiff)
  4. 第5-6週:音樂生成與綜合項目

進階開發者 (2-3週)

  1. 直接學習各模態的API整合
  2. 完成3個實戰項目
  3. 優化性能與部署

相關資源:



AI研究前沿 2024-2025

📊 50篇關鍵論文 | 84%開源代碼 | 5大核心領域

這個模塊整理了2024-2025年AI領域最重要的技術突破與論文,每篇論文都包含完整的代碼實現和實戰指南。

🎯 五大核心領域

領域 論文數 代碼可用 主要突破
大型語言模型 10篇 90% Llama 3.1 405B, GPT-4o, Claude 3.5, Gemini 1.5 Pro
多模態模型 10篇 70% Sora, FLUX.1, GPT-4V, Stable Video Diffusion
Agent系統 10篇 100% LangGraph, CrewAI, AutoGen, MCP
RAG與檢索 10篇 90% GraphRAG, HyDE, Self-RAG, RAPTOR
訓練與優化 10篇 80% FlashAttention 3, vLLM, QLoRA, DeepSpeed ZeRO++

🚀 2024-2025 技術演進時間軸

2024 Q1
├─ GPT-4o 多模態統一 (OpenAI)
├─ Llama 3 開源 (Meta)
└─ Gemini 1.5 Pro 200萬token上下文 (Google)

2024 Q2
├─ Sora 視頻生成 (OpenAI)
├─ FLUX.1 圖像生成超越SD3 (Black Forest Labs)
└─ Claude 3.5 Sonnet 編程能力突破 (Anthropic)

2024 Q3
├─ Llama 3.1 405B 開源最大模型 (Meta)
├─ GPT-4o mini 高性價比 (OpenAI)
└─ Qwen2.5 中文優化 (Alibaba)

2024 Q4
├─ Model Context Protocol 標準化 (Anthropic)
├─ o1 推理模型 (OpenAI)
└─ Phi-4 小模型大能力 (Microsoft)

📊 技術影響力分析

突破性技術 (⭐⭐⭐⭐⭐)

  • GraphRAG: 知識圖譜+RAG,複雜推理準確率提升40%
  • FlashAttention 3: 訓練速度提升2.8x,記憶體減少50%
  • vLLM: 推理吞吐量提升24x,成本降低80%
  • LangGraph: 可控Agent工作流,生產級應用必備

重要進展 (⭐⭐⭐⭐)

  • Self-RAG: 自我反思機制,準確率提升15-20%
  • QLoRA: 4-bit量化+LoRA,單卡可微調70B模型
  • CrewAI: 多Agent協作,自動化工作流
  • RAPTOR: 層次化檢索,長文檔理解提升30%

🔬 快速開始

  1. 瀏覽概覽: 查看 5.AI研究前沿_2024-2025/README.md
  2. 選擇領域: 根據興趣選擇5個子領域之一
  3. 實戰代碼: 每篇論文都包含完整的Python實現
  4. 環境設置:
    # 克隆倉庫
    git clone https://github.com/markl-a/My-AI-Learning-Notes.git
    cd My-AI-Learning-Notes
    
    # 安裝依賴
    pip install -r requirements-full.txt
    
    # 運行示例(以GraphRAG為例)
    cd 5.AI研究前沿_2024-2025/4.RAG與檢索
    python examples/graphrag_example.py

📚 學習路徑建議

初學者路徑 (2-3個月)

  1. 先學習 大型語言模型 基礎
  2. 實踐 RAG與檢索 應用
  3. 嘗試 Agent系統 構建

研究者路徑 (持續學習)

  1. 深入閱讀所有50篇論文
  2. 復現論文中的實驗結果
  3. 嘗試改進和創新

工程師路徑 (1-2個月)

  1. 重點學習 訓練與優化
  2. 掌握 多模態模型 部署
  3. 實現生產級RAG+Agent系統

相關的更新Blog

主要是鐵人賽的備份跟之後每次更新的具體內容

DeepLearningAI短課程學習紀錄

這邊就是每個Deeplearning.ai 的短課程,我今年應該會把短課程以及相關的生成式AI課程補上。

About

我的AI 學習路線,筆記,練習

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published