Hàm số là “máy biến đổi” nhận một giá trị đầu vào x và tạo ra một đầu ra y theo quy tắc:
y = f(x)
1. Ví dụ hàm số quen thuộc
f(x) = x²
f(x) = 2x + 3
f(x) = sin(x)
f(x) = 3x³ − 2x + 1
2. Ý nghĩa của hàm số trong lập trình & AI
- Mọi chương trình đều có input → xử lý → output → đây chính là “hàm”.
- Trong AI, thuật toán “học” chính là tìm ra một hàm f(x) mô tả đúng dữ liệu.
Ghi nhớ: Hiểu hàm số là bước nền tảng để hiểu đạo hàm, cực trị, tối ưu – và từ đó là Machine Learning.
II. ĐẠO HÀM LÀ GÌ?
1. Ý nghĩa trực giác
Đạo hàm đo tốc độ thay đổi của hàm số.
Nếu f(x) là độ cao của người đang đi trên đồi:
f’(x) > 0 → đường dốc lên
f’(x) < 0 → đường dốc xuống
f’(x) = 0 → điểm bằng phẳng → ứng cử viên cực trị
2. Định nghĩa bằng giới hạn
f'(x) = lim (h → 0) [ f(x+h) - f(x) ] / h
Nhưng máy tính không dùng giới hạn – nó dùng sai phân (numerical derivative):
f'(x) ≈ (f(x+h) - f(x)) / h
3. Bảng đạo hàm cơ bản
(xⁿ)' = n·xⁿ⁻¹
(ax + b)' = a
(sin x)' = cos x
(cos x)' = -sin x
(eˣ)' = eˣ
III. CỰC TRỊ HÀM SỐ
Một hàm f(x) có cực trị khi đạo hàm bằng 0:
f'(x) = 0
1. Phân loại cực trị
f''(x) > 0 → cực tiểu (thung lũng)
f''(x) < 0 → cực đại (đỉnh núi)
2. Ví dụ
f(x) = x² - 4x + 5
Đạo hàm:
f'(x) = 2x - 4
Giải:
2x - 4 = 0 → x = 2
Giá trị cực tiểu:
f(2) = 1
IV. CODE PYTHON THỰC HÀNH – CÓ HIỆN TỪNG BƯỚC
1. Tính đạo hàm bằng số
def derivative(f, x, h=1e-6):
"""
Tính đạo hàm bằng công thức sai phân:
f'(x) ≈ (f(x+h) - f(x)) / h
"""
return (f(x+h) - f(x)) / h
def f(x):
return x**2
print("Tính đạo hàm f(x) = x^2:")
for x in [0, 1, 2, 5]:
approx = derivative(f, x)
exact = 2*x
print(f"x={x:2d} | f'(x)≈{approx:.4f} | chính xác={exact}")
2. Tìm cực tiểu bằng Gradient Descent (theo từng bước)
def derivative(f, x, h=1e-6):
return (f(x+h) - f(x)) / h
def gradient_descent_min(f, x0, lr=0.2, epochs=20):
x = x0
print("BẮT ĐẦU GRADIENT DESCENT\n")
for i in range(1, epochs+1):
grad = derivative(f, x)
x_new = x - lr * grad
print(f"Bước {i:2d}: f'(x)≈{grad:.4f} -> x mới={x_new:.4f}, f(x)={f(x_new):.4f}")
x = x_new
print("\nKẾT THÚC.")
print(f"Cực tiểu x ≈ {x:.4f}, f(x) ≈ {f(x):.4f}")
return x
f = lambda x: x**2 - 4*x + 5
gradient_descent_min(f, x0=0.0)