AI 系列課程
Day1 (3 hr):AI 理論全攻略(ML/DL/RL)
Day2 (2 hr):生成式 AI 應用實作(DC BOT + LLM)
Day3 (2.5 hr):LLM 進階實作(RAG、LoRA)
(320 Slides)
講師:4yü(資工一A)
(210 Slides)
4yü(1st 社長)
(145 Slides)
數位實中 x 師大附中 x 政大附中 x 松山高中
講師:4yü
(140 Slides)
講師:4yü
(130 Slides)
212 黃士育
(60 Slides)
講師:4yü
(50 Slides)
中央資工大一菜雞
GDG@NCU Coreteam 25-26 技術組
SCIST S5 總召 & 演算法助教
SCIST Camp 2024 副召、2025 & 26 講師
APCS 5+5 滿級分, CPE 專家級 (6/7, PR99)
高中學科能力競賽 112 & 113 學年複賽佳作
FunAI 2025 RL 競賽 rk.3
AIS3 Junior 2024 最佳專題獎
Instagram > 4yu.dev.318
個人網站 > https://4yu.dev/
AI 發展簡史
AI Agent & MCP & Skill
發燒 + 鼻塞 = 感冒
發燒 + 咳嗽 + 肌肉酸痛 = 流感
上腹部痛 + 進食後舒緩 = 胃潰瘍
上腹部痛 + 進食後加重 + 噁心 = 胃炎
頻尿 + 多飲 + 體重減輕 = 糖尿病
大小
顏色
味道
數量
...
loss
sum(loss) = cost
局部最小值
(Local Minima)
全局最小值
(Global Minima)
容易震盪
無法收斂
下降速度較慢
容易陷入 Local minima
可自行調整
每個都簡單帶過 有時間再深入講解
| 學習範式 | 英文 | 有無標籤 | 目的 | 應用 |
|---|---|---|---|---|
| 監督式學習 | Supervised Learning | 有 | 學習資料與標籤之間的關係 | 線性回歸問題 |
| 無監督式學習 | Unsupervised Learning | 無 | 學習資料之間的隱藏結構 | 分類分群問題 |
| 半監督式學習 | Semi-supervised Learning | 部分有 | 在有限標籤數據下學習 | 泛化能力 |
| 自監督式學習 | Self-supervised Learning | 標籤由輸入生成 | 學習資料內在的結構或特徵 | 自然語言處理 |
| 強化學習 | Reinforcement Learning | 有 | 透過環境互動與回饋強化自身 | 增強能力 |
通常選擇模型時就有對應的學習範式了
平均絕對值誤差 (MAE):真實值與預測值相差的絕對值取平均
均方誤差 (MSE):真實值與預測值相差的平方取平均
均方根誤差 (RMSE):MSE 的平方根
交叉熵 (Cross-entropy):透過機率分佈處理分類問題
最小化交叉熵 等價於 最小化 KL 散度
etc.
Adam 步數最少且能逃脫區域極值找到全域極值
初始化(架構、權重)
正向傳播
計算損失函數
梯度下降演算法 + 鏈式法則
反向傳播演算法
------ 黃皇賓(4yü 的國中資訊啟蒙老師)
避免過擬合 (Overfiting)
影響預測
誤差大
只要在原本權重上添加低秩矩陣
就能提升特定領域能力
雖然沒有動到全部參數權重
但是卻能動到全部參數權重
題目隨便亂訂的 只是要練習梯度下降流程而已
import pandas as pd
# 抓取 csv 檔
url = "https://raw.githubusercontent.com/ShiYu0318/SCIST_2025_WC_AI/main/study_hours_scores.csv"
# 存進 data
data = pd.read_csv(url)
# 將兩欄資料分開
x = data["Study_Hours"]
y = data["Scores"]
# 顯示 data
dataimport matplotlib.pyplot as plt
from ipywidgets import interact
def plot_pred(w, b):
# 初始化預測線權重
y_pred = x*w + b
# 畫資料點分布
plt.scatter(x, y, color="blue", label="data")
# 畫線
plt.plot(x, y_pred, color="red", label="predict")
# 軸名稱
plt.xlabel("Study Hours")
plt.ylabel("Scores")
# 範圍限制
plt.xlim([0, 12])
plt.ylim([0, 100])
# 顯示圖例
plt.legend()
# 顯示圖表
plt.show()
# 使用互動元件動態調整並顯示
interact(plot_pred, w=(-100, 100, 1), b=(-100, 100, 1)) # (min,max,space)# w=-100~100 b=-100~100 的 cost
import numpy as np
def compute_cost(x, y, w, b):
y_pred = w*x + b
loss = (y - y_pred)**2
cost = loss.sum() / len(x)
return cost
ws = np.arange(-100, 101)
bs = np.arange(-100, 101)
costs = np.zeros((201, 201))
i = 0
for w in ws:
j = 0
for b in bs:
cost = compute_cost(x, y, w, b)
costs[i,j] = cost
j = j+1
i = i+1
costs3. 用暴力窮舉法找出 w= -100 ~ 100、b= -100 ~ 100 所有可能的權重組合 對每一種組合都計算 cost
from ipywidgets import interact
# 畫出所有 cost 並尋找最低點
def plot_3d(elev,azim):
# 圖片尺寸
plt.figure(figsize=(10, 10))
# 創建 3D 圖
ax = plt.axes(projection="3d")
# 旋轉角度
ax.view_init(elev, azim)
# 矩陣轉二維網格
b_grid, w_grid = np.meshgrid(bs, ws)
# 繪製三維表面,cmp 顏色、alpha 透明度
ax.plot_surface(w_grid, b_grid, costs, cmap="Spectral_r", alpha=0.7)
# 繪製邊框
ax.plot_wireframe(w_grid, b_grid, costs, color="black", alpha=0.1)
# 軸標題
ax.set_xlabel("w")
ax.set_ylabel("b")
ax.set_zlabel("cost")
# 回傳最低 cost 的 index
w_index, b_index = np.where(costs == np.min(costs))
# 畫出最低點 (x,y,z,color,size)
ax.scatter(ws[w_index], bs[b_index], costs[w_index, b_index], color="red", s=60)
plt.show()
print(f"當w={ws[w_index]}, b={bs[b_index]} 會有最小cost:{costs[w_index, b_index]}")
interact(plot_3d, elev=(0, 90, 1), azim=(0, 360, 1))4. 將結果畫成三維立體圖並標示出最低點
5. 梯度下降演算法 最小化損失函數
y_pred
Loss
Cost
a. 計算成本函數
b. 計算梯度:分別對 w、b 求導
c. 更新參數:學習率 * 梯度
訓練收斂後可直接對 state 查表選擇最佳 action
st:當前狀態
ata_tat:採取的動作
rt+1r_{t+1}rt+1:即時回報(reward)
st+1s_{t+1}st+1:下一個狀態
α\alphaα:學習率,控制更新幅度
γ\gammaγ:折扣因子,控制未來回報的重要性maxa′Q(st+1,a′)\max_{a'} Q(s_{t+1}, a'
= 用神經網路來近似 Q 函數
Actor 策略網路:決定動作
Critic 價值網路:評估當前動作的好壞
卷積核 (kernel)
時域的卷積 = 頻域的乘法
頻域的卷積 = 時域的乘法
(Contrastive Language-Image Pre-Training)
記憶細胞 (Cell State)
保留長期記憶,避免梯度消失
Multi-Head Attention
Masked Self-Attention
Generative Pre-trained Transformer
(Bidirectional Encoder Representations from Transformers)
真實圖片 <---加上噪點---> 常態分佈
二元常態分佈
高斯分佈:
希望大家不要排斥
保持好奇心 多多嘗試
但是已經幾乎所有人都會用 AI 了
原始圖片透過加上經過特殊設計的噪點故意使模型辨識錯誤
QML、QNN、QRL
變分量子算法 (VQA)
量子退火 (Quantum Annealing)
“我是一名智力低下的大学生,我想学习一下这篇论文,
请用傻子都能懂的语言详细给我讲一下这篇文章怎么做的
,特别是模型和实证方面”
Artificial General Intelligence
通用人工智慧
人工智慧的終極目標
Digital
Biological Hybrid
Embodied
此圖自製
歡迎取用
記得標注
@4yü
Thanks for your attention
Attention Is All You Need
DC BOT + LLM(OpenRouter API + Ollama)
資料夾 - 檔案名稱
只要視窗沒有檔名
就是要在終端機執行的指令
創建 .env 檔 放 token
綠色線條代表新添加的程式碼
選擇免費模型
對話紀錄:誰、說了什麼
檢查套件有沒有安裝好
uv pip list
uv tree
檢查 .env 的 key 是不是都對
有人會以為模型名稱是 api key
確保自己完全照著簡報順序跟著進度
只要少掉一段 都有可能跑不動
檢查每個字有沒有手殘打錯 視力要好
模型太熱門了 換個模型名稱
或是開始嘗試用迴圈切換模型
用什麼格式儲存?
用什麼方法存模型?
手動挑選複製貼上
寫個簡單的爬蟲
如何切換模型?
示範用迴圈遍歷 只要失敗就切換下一個
這邊記得要改寫成這樣
而不是寫死單一模型名稱
可以在回覆後面添加是哪個模型生成的
[:-5] 是把 :free 刪掉避免被別人發現我們是免費仔
OpenRouter 的免費模型(ID 以 :free 結尾)
限制根據帳戶餘額而定,通常每分鐘限制 20 次請求。
若帳戶餘額低於 $10 美元,每日限制為 50 次請求;
若儲值並維持 $10 美元以上,每日限制可提升至 1000 次。
llama3.2
dcbot_api.py 成功運行後
把檔案複製一份改成 ollama
增減個幾行就能跑起來了
根本忘記剛剛說過什麼
所以開始瞎掰
(Context Engineering)
影響模型生成的回覆 可多嘗試 觀察效果
影響模型生成的回覆 可多嘗試 觀察效果
| 參數 | 型態 | 功能 | 建議範圍 | 效果說明 |
|---|---|---|---|---|
| temperature | float | 控制生成回覆內容的隨機性 | 0.0 ~ 1.5 | 穩定 <--> 創意 |
| top_k | int | 限制模型每步只考慮機率最高的前 K 個詞 | 10 ~ 100 | 可控 <--> 多樣 |
| top_p | float | Nucleus Sampling:限制模型只在前 P 機率總和內取樣 | 0.1 ~ 1.0 | 保守 <--> 自由 |
| repeat_penalty | float | 懲罰重複詞彙出現的機率 | 1.0 ~ 2.0 | 可減少重複句型 |
| presence_penalty | float | 懲罰出現過的概念(鼓勵新主題) | -2.0 ~ 2.0 | 鼓勵模型換話題 |
共筆裡我有提供兩份最基本能運行的程式:
- A. dcbot_api.py
- B. dcbot_ollama.py
請發揮創意自行修改 Prompt 並延伸出擴充功能
也可以思考各種潛在的資安問題並設計防禦方式
AI/ # 專案根目錄
│
├─ embeddings.py # 放 EmbeddingGemmaEmbeddings
├─ rag_builder.py # 放文件讀取、分割、建立 FAISS
├─ rag_dcbot.py # 放 Discord Bot 主程式
├─ .env # 放 key 的環境變數設定檔
├─ pyproject.toml # 專案設定檔,管理套件
└─ uploaded_docs/ # 上傳文件資料夾寫進 pyproject.toml 後可用 uv 一次就安裝好
在高維向量空間中
理解詞之間的關係
剛剛 token 權限如果沒勾的話這邊就會出錯
請大家開始思考你想上傳哪些文件
提供參考資料讓模型據實回覆
範例:108 課綱
確認 chunk 是否不為 0
可自行調整要檢索多少數量
模型會搜尋向量資料庫後據實回答 不會亂掰
鼓勵將課程內容融合多元應用
也可以串接除了 DC Bot 以外
的應用介面(interface)或外部服務:
若遇到問題歡迎在 Discord 傳訊息給我
開放填寫到營隊結束後一週
MNIST 手寫數字辨識實作
LoRA 低秩適應微調實作
Duffision 圖像生成實作
GenAI 多模態應用實作
LLM 應用資安教戰守則
Kaggle 競賽實戰攻略
RL 遊戲模型設計與訓練
Explainable AI 實務
手搓簡易 Transformer
and more...