- Giới thiệu khái niệm kiểu
Uncertain<T>, một lớp trừu tượng mới để xử lý tính không chắc chắn ở cấp độ mã nguồn
- Kiểu này áp dụng phương pháp lập trình xác suất, mô hình hóa độ tin cậy hoặc khả năng của giá trị thay cho logic boolean truyền thống
- Cung cấp khả năng xử lý dữ liệu thực tế nhiều nhiễu như GPS, dữ liệu cảm biến dưới dạng các phân phối xác suất toán học
- Hỗ trợ cân bằng giữa hiệu quả tính toán và độ tin cậy của kết quả bằng các kỹ thuật lấy mẫu như SPRT và Monte Carlo
- Có thể tích hợp dần với mã hiện có, nên rất thực tiễn để áp dụng trong công việc
Mã hóa tính không chắc chắn: khoảng cách giữa sự tự tin và dữ liệu thực tế
- Đề cập đến hiện tượng nhiều người phụ thuộc quá mức vào sự xác quyết
- Chỉ ra rằng khi kinh nghiệm phát triển phần mềm tăng lên, tần suất nói “còn tùy tình huống” cũng tăng theo
- Trong mã nguồn, các mẫu chỉ dựa vào phán đoán đúng/sai vẫn tiếp tục lặp lại
- Đặc biệt phê phán thực tế xử lý dữ liệu không chắc chắn như GPS nhưng vẫn chỉ dùng giá trị boolean
- Mô hình lập trình nhị phân hóa quá nhanh tính ‘không chắc chắn’ của thế giới thực, từ đó che giấu sự phức tạp
Lựa chọn lớp trừu tượng phù hợp
- Năm 2014, University of Washington và Microsoft Research đã đề xuất khái niệm phản ánh trực tiếp tính không chắc chắn vào hệ kiểu
- Thông qua bài báo "Uncertain<T>: A First-Order Type for Uncertain Data", họ chứng minh rằng cách tiếp cận lập trình xác suất là thực tiễn
- Mã đã được port ý tưởng sang Swift được đăng trên kho GitHub
- Khi dùng
Uncertain<T>, kết quả so sánh cũng được biểu diễn bằng xác suất tương đối, và trả về dưới dạng Uncertain<Bool> thay vì đúng/sai
- Sai số vị trí GPS được mô hình hóa theo đặc tính dữ liệu thực tế như phân phối Rayleigh
Thực tế của các phép toán bất định đa dạng
- Hỗ trợ nhiều toán tử và mô hình phân phối xác suất, xây dựng đồ thị tính toán và chỉ thực hiện lấy mẫu khi cần
- Điều chỉnh số lượng mẫu hiệu quả bằng SPRT(Sequential Probability Ratio Testing)
- Mã ví dụ giải thích sự khác biệt về số lượng mẫu cần thiết giữa so sánh đơn giản và so sánh phức hợp
- Với lớp trừu tượng này, có thể không bỏ qua tính không chắc chắn mà tận dụng nó một cách tự nhiên trong quá trình tính toán, từ đó hiện thực hóa mã “thông minh” hơn
Ứng dụng phương pháp Monte Carlo
- Đưa vào lấy mẫu Monte Carlo để phân tích phân phối xác suất và ước tính kỳ vọng
- Có thể dễ dàng rút ra giá trị kỳ vọng bằng cách mô phỏng lặp lại kết quả của máy đánh bạc
- Ngay cả không cần tính toán giải tích phức tạp, vẫn có thể tạo ra kết quả thực tế chỉ bằng lấy mẫu lặp trên máy tính
Mô hình hóa phân phối xác suất phong phú
Uncertain<T> tích hợp sẵn nhiều hàm tạo phân phối xác suất, cho phép mô hình hóa tinh vi dữ liệu thế giới thực như nhiễu cảm biến, hành vi người dùng, độ trễ mạng
- Hỗ trợ tham số hóa cho nhiều tình huống như mixture distribution, Bernoulli, exponential, normal
- Để giúp hiểu trực quan về từng phân phối, còn có riêng dự án trực quan hóa tương tác
Cung cấp các phép toán thống kê và phân tích
- Cung cấp nhiều hàm thống kê như kỳ vọng, độ lệch chuẩn, khoảng tin cậy, độ lệch (skewness), độ nhọn (kurtosis), entropy
- Kết quả tính toán cũng có thể điều chỉnh số lượng mẫu, cho phép đánh đổi giữa độ chính xác và hiệu quả
- Có thể dễ dàng tính cả xác suất nhỏ hơn hoặc bằng một giá trị nhất định bằng cách dùng hàm phân phối tích lũy (CDF)
Hướng dẫn áp dụng vào thực tế
- Giải thích các vấn đề có thể phát sinh trong ứng dụng thực tế khi bỏ qua tính không chắc chắn (ví dụ: hiển thị tốc độ GPS vô lý)
- Nhấn mạnh chuyển đổi dần dần: khuyến nghị tích hợp
Uncertain<T> từng phần, bắt đầu từ các luồng cốt lõi như đo khoảng cách
- Có thể điều chỉnh cân bằng giữa độ chính xác và hiệu năng bằng cấu hình chi phí tính toán như số lượng mẫu
- Trong thực tế, khuyến nghị tích cực sử dụng các công cụ profiling như Instruments.app
- Mục tiêu không phải là loại bỏ tính không chắc chắn, mà là xây dựng mẫu phát triển biết thừa nhận và xử lý nó đúng cách
Kết luận và triển vọng
- Nhà phát triển có thể bắt đầu từ những phạm vi nhỏ để đưa xử lý bất định vào, kỳ vọng cải thiện khả năng sử dụng và giảm lỗi
- Chấp nhận rằng không tồn tại sự chắc chắn tuyệt đối, và nâng chất lượng phần mềm thêm một bậc bằng công cụ cùng lớp trừu tượng phù hợp
- Về bản chất, xử lý đúng chính sự không chắc chắn đang tồn tại mới là một cải tiến thực tiễn đích thực
1 bình luận
Ý kiến trên Hacker News