Lesson 04 — Lũy thừa, căn, logarit
Mini-app tương tác đi kèm README. Gồm 4 phần: máy tính power/root/log, kiểm chứng quy luật, demo log scale, và logSumExp playground.
1. Máy tính: power, root, log
Lũy thừa: ab
Tính a^b với a, b bất kỳ (kể cả b âm hoặc phân số).
Nhấn "Tính" để xem kết quả.
Thử: a=2, b=10 → 1024. a=5, b=-2 → 0.04. a=16, b=0.75 → 8.
Căn bậc n: √[n]{x}
Tính căn bậc n của x. Tương đương x^(1/n).
Nhấn "Tính" để xem kết quả.
Thử: x=8, n=3 → 2 (cube root). x=16, n=4 → 2. x=-8, n=3 → -2 (n lẻ cho phép x âm).
Logarit: logb(x)
Hỏi "b lũy thừa bao nhiêu thì ra x?"
Nhấn "Tính" để xem kết quả.
Thử: b=2, x=1024 → 10. b=10, x=0.001 → -3. b=5, x=125 → 3.
2. Kiểm chứng quy luật
Chọn quy luật → nhập số → check 2 vế
Chọn 1 quy luật, app sẽ tính cả vế trái và vế phải, đối chiếu xem có khớp không.
Chọn quy luật ở trên.
3. Log scale: vì sao "vẽ log" giúp nhìn được dữ liệu trải nhiều bậc
Bảng: 1, 10, 100, ..., 10⁹
Cùng một dãy số, vẽ trên hai trục khác nhau. Linear scale: số nhỏ "biến mất"; log scale: các số cách đều nhau.
📏 Linear scale (1 đơn vị pixel = 1 đơn vị số)
📐 Log scale (1 đơn vị pixel = 1 order of magnitude)
Nhận xét: trên linear scale, các số nhỏ (1, 10, 100, ...) gần như invisible vì
chúng nhỏ hơn 10⁹ tới 9 bậc. Trên log scale, chúng cách đều — vì
log₁₀(1)=0, log₁₀(10)=1, log₁₀(100)=2, ...
4. logSumExp playground — ổn định số trong ML
So sánh: naive vs stable
Nhập một danh sách số (phân cách bằng dấu phẩy hoặc khoảng trắng).
Tính log(Σ exp(x_i)) theo 2 cách. Với x lớn (vd 1000),
cách naive overflow → +Inf.
Nhấn "Tính" để so sánh.
Thử:
Thử nhỏ:
Thử cực lớn:
1000, 1001, 999 → naive: +Inf, stable: ≈1001.41.Thử nhỏ:
1, 2, 3 → cả hai khớp (≈3.41).Thử cực lớn:
800, 900, 1000 — naive cũng overflow.
Công thức ổn định:
log(Σ exp(xᵢ)) = M + log(Σ exp(xᵢ − M))
với M = max(xs). Sau khi trừ M, mọi exp(...) ∈ (0, 1] → không overflow.