Bạn tải mã của một bài báo về, chạy đúng như hướng dẫn, và ra kết quả thấp hơn công bố khá nhiều. Đây là trải nghiệm rất phổ biến, và các nguyên nhân của nó thì cụ thể và phần lớn khắc phục được.
Vì sao khó tái lập
Chi tiết không nằm trong bài báo. Giá trị tham số cụ thể, thứ tự các bước tiền xử lý, mẹo ổn định huấn luyện. Những thứ tác giả coi là hiển nhiên nhưng quyết định kết quả.
Phần cứng khác nhau. Ngay cả cùng model robot, hai máy khác nhau về ma sát, độ rơ, hiệu chỉnh. Với thao tác thì khác biệt này đủ để đổi kết quả.
Môi trường khác nhau. Ánh sáng, nền, độ cao bàn, vật thể cụ thể. Không ai mô tả đủ chi tiết để dựng lại y hệt.
Phụ thuộc phần mềm. Phiên bản thư viện, phiên bản trình điều khiển, hệ điều hành. Mã viết hai năm trước thường không chạy được với thư viện hiện tại.
Ngẫu nhiên. Khởi tạo mạng, thứ tự dữ liệu, lấy mẫu trong lập kế hoạch. Chạy lại cùng mã cũng ra số khác nhau.
Chọn lọc kết quả. Không nhất thiết cố ý. Nhưng khi chạy nhiều lần và báo cáo lần tốt, con số công bố là giá trị tốt nhất chứ không phải giá trị kỳ vọng.
Ngẫu nhiên và cách xử lý
Nguồn khác biệt dễ khắc phục nhất và hay bị bỏ qua.
Mức độ ảnh hưởng lớn hơn tưởng tượng. Với nhiều phương pháp học máy, chạy lại cùng cấu hình chỉ đổi hạt giống ngẫu nhiên có thể cho chênh lệch vài phần trăm. Nếu cải tiến được công bố cũng chỉ vài phần trăm thì không phân biệt được với nhiễu.
Cách làm đúng — chạy nhiều lần. Ít nhất năm hạt giống khác nhau, báo cáo trung bình và độ lệch.
Ghi cố định hạt giống để tái lập chính xác. Nhưng đừng chỉ báo cáo kết quả với một hạt giống được chọn.
Nguồn ngẫu nhiên ẩn. Tính toán song song trên card đồ hoạ có thể cho kết quả khác nhau giữa các lần do thứ tự cộng dồn. Cố định hạt giống không loại bỏ hết được.
Ngẫu nhiên trong lập kế hoạch. Các phương pháp lấy mẫu vốn ngẫu nhiên. Thời gian tìm ra lời giải biến thiên rất lớn giữa các lần và phải báo cáo phân bố chứ không phải một giá trị.
Nguyên tắc đơn giản. Nếu chênh lệch giữa hai phương pháp nhỏ hơn độ lệch giữa các lần chạy của cùng một phương pháp, thì chưa chứng minh được gì.
Làm nghiên cứu tái lập được
Cụ thể, cho người đang viết bài.
Công bố mã kèm hướng dẫn chạy được. Không chỉ đăng kho mã mà kiểm tra rằng người khác chạy được từ đầu. Nhờ đồng nghiệp chưa từng dùng thử là cách kiểm tốt nhất.
Ghim phiên bản mọi phụ thuộc. Danh sách thư viện kèm phiên bản chính xác. Tốt hơn nữa là đóng gói môi trường.
Công bố cấu hình đầy đủ. Mọi tham số, kể cả những cái tưởng như không quan trọng.
Mô tả phần cứng chi tiết. Model robot, cảm biến, cách bố trí, khoảng cách, độ cao. Kèm ảnh hiện trường.
Công bố dữ liệu thô, không chỉ số tổng hợp. Cho phép người khác tính lại theo cách khác.
Ghi rõ số lần chạy và cách tổng hợp. Trung bình hay tốt nhất — hai cách cho hai câu chuyện khác nhau.
Báo cáo cả những gì không hoạt động. Phần này giúp người sau tiết kiệm nhiều tháng, và nó gần như không bao giờ được viết ra.
Khi tái lập không thành công
Quy trình xử lý thay vì kết luận vội.
Kiểm phiên bản phụ thuộc trước. Nguyên nhân phổ biến nhất và dễ sửa nhất.
Kiểm dữ liệu. Đúng bộ dữ liệu chưa, đúng cách chia chưa, có tiền xử lý nào bị bỏ sót không.
Kiểm cấu hình. So từng tham số với bài báo. Thường có một cái khác.
Chạy nhiều hạt giống. Có thể chỉ là biến thiên ngẫu nhiên.
Liên hệ tác giả. Phần lớn sẵn sàng giúp. Câu hỏi cụ thể kèm mô tả những gì đã thử sẽ nhận được câu trả lời hữu ích hơn nhiều so với thông báo rằng mã không chạy.
Ghi lại và chia sẻ. Nếu sau tất cả vẫn không tái lập được, ghi lại chi tiết những gì đã thử. Thông tin này có giá trị cho cộng đồng.
Và giữ thái độ đúng. Không tái lập được không đồng nghĩa với kết quả sai. Phần lớn trường hợp là chi tiết bị thiếu chứ không phải gian dối, và cách phản ứng nên phản ánh điều đó.
Vì sao điều này đáng quan tâm
Không chỉ là chuẩn mực học thuật.
Tiến bộ tích luỹ cần nền tảng vững. Nếu không biết kết quả nào đúng thì không biết nên xây tiếp trên cái gì. Ngành tiến chậm lại theo cách khó nhìn thấy.
Lãng phí công sức. Nhiều nhóm mất hàng tháng cố tái lập một kết quả rồi bỏ cuộc mà không ai biết.
Ảnh hưởng tới ứng dụng thực tế. Doanh nghiệp đọc bài báo, kỳ vọng theo con số công bố, đầu tư, rồi thất vọng. Điều này làm giảm lòng tin vào cả lĩnh vực.
Ảnh hưởng tới người mới. Sinh viên bắt đầu bằng cách tái lập một kết quả. Thất bại lặp lại làm nản chí một cách không cần thiết.
Tin tốt. Chuẩn mực đang cải thiện. Công bố mã ngày càng phổ biến, nhiều hội nghị đã có quy trình kiểm tra tính tái lập.
Điều mỗi người làm được. Công bố mã chạy được, ghi rõ điều kiện, chạy nhiều lần và báo cáo độ biến thiên. Không tốn nhiều công và tác động tích luỹ lớn hơn nhiều so với một bài báo thêm.
Câu hỏi thường gặp
Nguyên nhân phổ biến nhất khiến không tái lập được?
Chi tiết không nằm trong bài báo — tham số cụ thể, thứ tự tiền xử lý, mẹo ổn định huấn luyện — và phiên bản thư viện phụ thuộc khác nhau.
Ngẫu nhiên ảnh hưởng tới kết quả nhiều thế nào?
Chạy lại cùng cấu hình chỉ đổi hạt giống có thể chênh vài phần trăm. Nếu chênh lệch giữa hai phương pháp nhỏ hơn độ lệch giữa các lần chạy thì chưa chứng minh được gì.
Nên làm gì khi tái lập không thành công?
Kiểm phiên bản phụ thuộc, kiểm dữ liệu và cách chia, so từng tham số cấu hình, chạy nhiều hạt giống, rồi liên hệ tác giả với câu hỏi cụ thể kèm những gì đã thử.
Vì sao tái lập quan trọng ngoài chuẩn mực học thuật?
Vì tiến bộ tích luỹ cần nền tảng vững — không biết kết quả nào đúng thì không biết xây tiếp trên cái gì, và doanh nghiệp đầu tư theo con số công bố rồi thất vọng.
Đọc thêm trong Lập kế hoạch chuyển động và Phòng lab & nhóm nghiên cứu.