AI học từ dữ liệu như thế nào?
Từ ví dụ có nhãn đến mô hình: hiểu học, suy luận và khả năng tổng quát hóa.
Một mô hình không được viết sẵn mọi quy tắc. Nó điều chỉnh các tham số từ những ví dụ, rồi được kiểm tra trên dữ liệu chưa dùng để học. Bài này nối các khái niệm đó thành một quy trình bạn có thể thử.
Mục tiêu học tập
- Phân biệt dữ liệu, tham số học được và dự đoán.
- Giải thích vì sao training loss thấp chưa chứng minh mô hình dùng được.
- Thiết kế một ví dụ kiểm tra trên dữ liệu chưa dùng để học.
Bắt đầu từ một câu hỏi cụ thể
Hãy tưởng tượng bạn muốn phân loại hoa. Bạn cho máy xem các ví dụ có số đo và tên loài. Máy học mối liên hệ giữa số đo và nhãn để dự đoán cho một bông hoa khác.
Trong supervised learning, mỗi mẫu gồm đặc trưng và nhãn . Ta học một hàm dự đoán từ tập ví dụ. Trước khi chọn mô hình, cần xác định đầu vào, đầu ra và tiêu chí sai số phù hợp với bài toán.
Với tập , ta tìm tham số để giảm empirical risk trung bình của loss . Việc tối ưu trên chưa chứng minh mô hình tổng quát hóa ngoài phân phối dữ liệu đã quan sát.
Học khác với ghi nhớ
Làm tốt bài tập đã xem chưa đủ. Nếu chỉ nhớ câu trả lời, mô hình sẽ dễ sai khi gặp ví dụ mới. Vì vậy cần dành riêng một phần dữ liệu để kiểm tra.
Chia dữ liệu thành train, validation và test theo bối cảnh sử dụng. Train dùng để học, validation hỗ trợ lựa chọn cấu hình, test phục vụ đánh giá cuối. Không fit bộ chuẩn hóa trên toàn bộ dữ liệu trước khi chia.
Data leakage có thể xuất hiện qua preprocessing, chọn đặc trưng hoặc các bản ghi gần trùng nhau. Với dữ liệu theo người dùng hoặc thời gian, random split có thể không đại diện cho triển khai; hãy cân nhắc group split hoặc temporal split.
Đọc kết quả trong ngữ cảnh
Tỷ lệ đúng là một dấu hiệu, không phải toàn bộ câu chuyện. Hãy nhìn cả những ví dụ máy đoán sai và xem lỗi nào đáng quan tâm nhất.
Chọn metric theo chi phí lỗi. Accuracy phù hợp với một số bài phân loại, nhưng dữ liệu mất cân bằng cần xem thêm precision, recall hoặc confusion matrix. So sánh với baseline đơn giản trước khi tăng độ phức tạp.
Ước lượng biến thiên qua nhiều seed hoặc cross-validation khi phù hợp. Cố định protocol trước khi so sánh và tránh chọn mô hình bằng test set. Metric tổng hợp nên đi kèm phân tích lỗi theo các nhóm dữ liệu liên quan.
Ví dụ: dự đoán thời gian giao hàng
Giả sử cửa hàng lưu khoảng cách và thời gian của những đơn đã hoàn thành. Mô hình học một quy tắc gần đúng từ các đơn cũ, rồi ước lượng cho đơn mới. Nó không biết tương lai; một cơn mưa hoặc tuyến đường chưa từng gặp vẫn có thể làm dự đoán sai.
So sánh với cách đơn giản: luôn đoán thời gian trung bình của các đơn trong tập học. Nếu mô hình phức tạp không cải thiện trên các đơn mới, độ phức tạp chưa tạo ra lợi ích cần thiết.
Đặt đầu vào là khoảng cách, nhãn là thời gian thực tế. Tách đơn theo thời điểm trước khi tính thống kê hoặc chọn đặc trưng. Dùng MAE để diễn giải sai số theo phút, rồi kiểm tra riêng các đơn xa và giờ cao điểm.
Dữ liệu mẫu trong bài là tình huống minh họa, không phải log vận hành EyeCode. Một giá trị MAE duy nhất không cho biết đơn nào bị trễ nghiêm trọng; cần xem phân bố sai số và yêu cầu sử dụng.
Với hồi quy tuyến tính , có thể fit bằng MSE nhưng đánh giá bằng MAE: . Loss huấn luyện và metric nghiệp vụ có thể khác, miễn protocol được định nghĩa trước.
Nếu đơn hàng tương lai có phân bố khác lịch sử, đánh giá holdout chỉ đại diện cho điều kiện đã đo. Kiểm tra tính sẵn có của feature tại thời điểm dự đoán; không đưa thời gian giao thực tế hay thông tin cập nhật sau giao hàng vào input.
Workflow & kiến trúc
Ứng dụng & giới hạn
- Phân loại hình ảnh hoặc văn bản có nhãn.
- Dự báo từ dữ liệu lịch sử với cách chia theo thời gian.
Điểm mạnh
Học quy luật từ ví dụ và cung cấp một cách đánh giá có thể lặp lại.
Giới hạn cần nhớ
Kết quả phụ thuộc dữ liệu, nhãn và giả định về môi trường sử dụng; không bảo đảm đúng cho mọi đầu vào.
Thử trong một project nhỏ
Chạy baseline Iris bên dưới. Thay random_state, ghi lại thay đổi và giải thích vì sao một lần chạy không đủ để kết luận.
from statistics import mean
# Synthetic distance/time pairs, not delivery records.
x, y = [1.0, 2.0, 3.0], [5.0, 7.0, 9.0]
x_mean, y_mean = mean(x), mean(y)
variance = sum((v-x_mean)**2 for v in x)
if variance == 0:
raise ValueError("Input distances must vary")
w = sum((a-x_mean)*(b-y_mean) for a,b in zip(x,y)) / variance
bias = y_mean - w*x_mean
prediction = w*4.0 + bias
assert prediction == 11.0
print({"slope": w, "bias": bias, "toy_prediction": prediction})Fit đường thẳng trên ba cặp khoảng cách/thời gian tự tạo; phép tính minh họa, không phải dữ liệu giao hàng hoặc kết quả đánh giá tổng quát hóa.
