臺南女中 x 臺南二中 x 嘉義高中 x 嘉義女中 x 大灣高中
(? Slides)
Part 1 (04/01):AI/ML 初探與 MNIST 實作
Part 2 (04/22):RL 遊戲與模型設計(暫訂)
Part 3 (05/13):RL 進階實作與競賽(暫訂)
2 hr / Part
(92 + ? + ? Slides)
AI 系列課程
Day1 (3 hr):AI 理論全攻略(ML/DL/RL)
Day2 (3 2 hr):生成式 AI 應用實作(LLM + DC BOT)
Day3 (2.5 hr):LLM 進階實作(RAG、LoRA)
(320 Slides)
(210 Slides)
4yü(1st 社長)
(145 Slides)
數位實中 x 師大附中 x 政大附中 x 松山高中
(140 Slides)
(130 Slides)
(60 Slides)
(50 Slides)
中央資工大一菜雞
GDG@NCU Coreteam 25-26 技術組 AI PM
SCIST S5 總召 & 演算法助教
SCIST Camp 2024 副召、2025 & 26 講師
APCS 5+5 滿級分, CPE 專家級 (6/7, PR99)
高中學科能力競賽 112 & 113 學年複賽佳作
FunAI 2025 RL 競賽 Rk#3
AIS3 Junior 2024 最佳專題獎
特選同時錄取中央、中山、中興
、台師 等國立大學資工系
中央資工大一菜雞
GDG@NCU Coreteam 25-26 技術組 AI PM
SCIST S5 總召 & 演算法助教
SCIST Camp 2024 副召、2025 & 26 講師
APCS 5+5 滿級分, CPE 專家級 (6/7, PR99)
高中學科能力競賽 112 & 113 學年複賽佳作
FunAI 2025 RL 競賽 Rk#3
AIS3 Junior 2024 最佳專題獎
特選同時錄取中央、中山、中興
、台師 等國立大學資工系
Vibe Coding(在沒有基礎軟體工程能力下 Vibe 出一坨)
養龍蝦(燒 Token、裝 Skill 然後被 Prompt Injection)
單純學會使用各種 AI 工具(每個人都能自行學會不需要教)
AI 投資、AI 工作術、AI 技巧、AI 思維、AI 大道理 .......
理解 AI 相關的上百個名詞定義與原理
ML 基礎原理與梯度下降演算法實作
DL 架構技術解析(一張圖 = 一篇論文)
LLM 底層原理與實務應用開發
AI 與各領域的結合、延伸與多元應用
(Modified National Institute of Standards and Technology)
正向傳播
計算損失函數
反向傳播(梯度下降演算法)
loss
sum(loss) = cost
局部最小值
(Local Minima)
全局最小值
(Global Minima)
平均絕對值誤差 (MAE):真實值與預測值相差的絕對值取平均
均方誤差 (MSE):真實值與預測值相差的平方取平均
均方根誤差 (RMSE):MSE 的平方根
交叉熵 (Cross-entropy):透過機率分佈處理分類問題
最小化交叉熵 等價於 最小化 KL 散度
容易震盪
無法收斂
下降速度較慢
容易陷入 Local minima
可自行調整
影響預測
誤差大
卷積核 (kernel)
時域的卷積 = 頻域的乘法
頻域的卷積 = 時域的乘法
(Contrastive Language-Image Pre-Training)
此圖自製 歡迎取用 自由轉發
記得標注來源 @4yü
Thanks for your attention
Attention Is All You Need
今天將帶你理解定義與原理
AI 發展簡史
AI Agent & MCP & Skill
發燒 + 鼻塞 = 感冒
發燒 + 咳嗽 + 肌肉酸痛 = 流感
上腹部痛 + 進食後舒緩 = 胃潰瘍
上腹部痛 + 進食後加重 + 噁心 = 胃炎
頻尿 + 多飲 + 體重減輕 = 糖尿病
大小
顏色
味道
數量
...
loss
sum(loss) = cost
局部最小值
(Local Minima)
全局最小值
(Global Minima)
容易震盪
無法收斂
下降速度較慢
容易陷入 Local minima
可自行調整
題目隨便亂訂的 只是要練習梯度下降流程而已
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. 更新參數:學習率 * 梯度
| 學習範式 | 英文 | 有無標籤 | 目的 | 應用 |
|---|---|---|---|---|
| 監督式學習 | Supervised Learning | 有 | 學習資料與標籤之間的關係 | 線性回歸問題 |
| 無監督式學習 | Unsupervised Learning | 無 | 學習資料之間的隱藏結構 | 分類分群問題 |
| 半監督式學習 | Semi-supervised Learning | 部分有 | 在有限標籤數據下學習 | 泛化能力 |
| 自監督式學習 | Self-supervised Learning | 標籤由輸入生成 | 學習資料內在的結構或特徵 | 自然語言處理 |
| 強化學習 | Reinforcement Learning | 有 | 透過環境互動與回饋強化自身 | 增強能力 |
通常選擇模型時就有對應的學習範式了
平均絕對值誤差 (MAE):真實值與預測值相差的絕對值取平均
均方誤差 (MSE):真實值與預測值相差的平方取平均
均方根誤差 (RMSE):MSE 的平方根
交叉熵 (Cross-entropy):透過機率分佈處理分類問題
最小化交叉熵 等價於 最小化 KL 散度
Adam 步數最少且能逃脫區域極值找到全域極值
初始化(架構、權重)
正向傳播
計算損失函數
梯度下降演算法 + 鏈式法則
反向傳播演算法
------ 黃皇賓(4yü 的程式啟蒙老師)
避免過擬合 (Overfiting)
影響預測
誤差大
只要在原本權重上添加低秩矩陣
就能提升特定領域能力
雖然沒有動到全部參數權重
但是卻能動到全部參數權重
訓練收斂後可直接對 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
上完這堂課若對 AI 有興趣想繼續學習下去
你會發現學起來很輕鬆因為大部分內容的基礎原理都在這堂課聽過了
此圖自製 歡迎取用 自由轉發
記得標注來源 @4yü
Thanks for your attention
Attention Is All You Need
DC Bot + LLM(OpenRouter API + Ollama)
資料夾 - 檔案名稱
只要視窗沒有檔名
就是要在終端機執行的指令
創建 .env 檔 放 token
若有用 Git 請在 .gitignore 加入 .env 避免 push 到 GitHub 上!
綠色線條代表新添加的程式碼
選擇免費模型
對話紀錄:誰、說了什麼
檢查套件有沒有安裝好
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 傳訊息給我
開放填寫到營隊結束後一週
[X] MNIST 手寫數字辨識實作
[ ] LoRA 低秩自適應微調實作
[ ] Duffision 圖像生成實作
[ ] GenAI 多模態應用實作
[ ] LLM 應用資安教戰守則
[ ] Kaggle 競賽實戰攻略
[ ] RL 遊戲模型設計與訓練
[ ] Explainable AI 實務
[ ] 手搓簡易 Transformer
[ ] AI Agent & MCP & Skills
and more...
有任何授課需求歡迎聯絡:shiyu@scist.org(可指定內容)