Ngày Tôi Đảo Một Dấu Và Gọi Đó Là Sự Thấu Hiểu
Một lần nọ, một bài kiểm thử ngược trả về tỷ lệ thắng gần như chính xác là ngược lại với những gì tôi đã hy vọng. Ở chỗ tôi muốn mô hình phần lớn đúng, thì nó lại phần lớn sai — và không phải sai một cách ngẫu nhiên, mà sai một cách gọn gàng, đối xứng, như thể nó đã cố gắng để thua.
Thay vì hỏi tại sao, tôi đã làm một việc mà trong khoảng một giờ đồng hồ cảm thấy thật tài tình. Tôi đảo logic lại cho khớp. Tôi lý luận rằng nếu mô hình sai một cách đáng tin cậy, thì làm ngược lại những gì nó nói ắt hẳn sẽ đúng một cách đáng tin cậy. Một thay đổi nhỏ, và một quy tắc thua lỗ, trên giấy tờ, trở thành một quy tắc thắng lợi. Tôi tự chúc mừng mình vì một khám phá.
Đó không phải là một khám phá. Đó là khoảnh khắc tôi bắt đầu tự dối lừa bản thân bằng một chỉnh sửa một ký tự.
Con số sai một cách chính xác
Điều đáng ngờ chưa bao giờ là kết quả tồi. Kết quả tồi là chuyện bình thường; đó là phần lớn của công việc. Điều đáng ngờ là nó tồi theo một cách gọn gàng, soi gương như vậy — kiểu đối xứng mà, nhìn lại, có thể cho thấy rằng có thứ gì đó tầm thường hơn đang hỏng ở bên dưới, chứ không phải một chiến lược thực sự “ngược chiều”.
Nhưng sự đối xứng đầy quyến rũ khi nó chỉ về một chiến thắng dễ dàng. Một kết quả tồi lộn xộn khiến bạn phải gỡ lỗi. Một kết quả bị đảo ngược gọn gàng thì thì thầm một lối tắt: bạn gần hơn bạn nghĩ — chỉ cần xoay nó lại.
Bản sửa lỗi một ký tự
Thế là tôi xoay nó lại. Tôi đảo ngược điều kiện — lật một bất đẳng thức — và cùng một logic vốn đang thua lỗ thì giờ đây, trong bài kiểm thử ngược, lại thắng. Tôi commit thay đổi, cảm thấy như mình đã khôn hơn vấn đề. Toàn bộ sự chỉnh sửa còn nhỏ hơn câu này.
Sự nhỏ bé đó lẽ ra phải là một lời cảnh báo. Lợi thế thực sự khó tìm và còn khó giữ hơn. Khi một ký tự bị lật duy nhất dường như biến thất bại thành thành công, giả định trung thực không phải là bạn đã tìm ra một sự thật ẩn giấu. Mà là bạn đã tìm ra một lỗi ẩn giấu, và chỉ đơn thuần đổi sang phía bên kia của nó để đứng.
Vì sao việc đảo dấu lại cảm thấy như thiên tài
Logic gần như không thể cưỡng lại: nếu một biến dự báo sai một cách nhất quán, thì đảo ngược nó sẽ khiến nó đúng một cách nhất quán. Một thiên tài ngược. Một mỏ vàng nghịch dòng. Ai mà chẳng nhận lấy một mô hình sai một cách đáng tin cậy và đơn giản là đọc nó lộn ngược lên?
Khiếm khuyết trong lý luận đó nằm ở từ nhất quán. Nó giả định rằng mô hình thực sự đang dự báo một điều gì đó — chỉ là sai hướng. Và giả định đó chính là điều duy nhất mà tôi không bao giờ kiểm tra.
Thứ thực sự đã hỏng
Mô hình không hề ngược chiều. Nó hầu như chẳng dự báo gì cả. Đầu ra của nó đã suy biến — bị nén vào một dải hẹp, vô ích, nói gần như cùng một điều bất kể nó được cho xem cái gì. Nó không học được một tín hiệu rồi chỉ sai hướng. Nó đã thất bại trong việc học một tín hiệu, và đang tạo ra thứ gì đó gần với nhiễu với một độ nghiêng nhẹ, vô nghĩa.
Một chuỗi ngắn phần lớn là mặt sấp không chứng minh một thiên kiến ổn định, có thể khai thác — nó cũng dễ dàng chỉ là một đồng xu hỏng hoặc không đáng tin. Việc lật cách bạn đọc một tín hiệu nhiễu không làm cho tín hiệu trở nên hữu ích. Nó chỉ dán nhãn lại cho nhiễu.
Việc đảo ngược khiến nó tệ hơn
Đây là phần mà bài kiểm thử ngược cuối cùng buộc tôi phải thừa nhận. Sau khi lật logic, hiệu suất không soi gương đi lên thành thứ gì đó tốt đẹp. Nó vẫn tệ — và theo một số thước đo còn tệ hơn. Chẳng có gì để đảo ngược cả. Tôi đã lấy nhiễu, lật nó lại, và lại nhận được nhiễu, giờ đây khoác lên một bộ trang phục của sự có chủ đích.
Kết quả ngắn ngủi, đẹp đẽ từng khiến tôi cảm thấy mình thông minh chính là cùng một loại ảo ảnh mà tôi đã từng viết về trước đây: một con số tâng bốc bạn vừa đủ lâu để ngăn bạn hỏi câu hỏi duy nhất quan trọng — liệu mô hình có học được điều gì hay không?
Lỗi thực sự nằm ở trong tôi
Cú lật một ký tự chưa bao giờ thực sự là một thay đổi mã. Đó là một lỗi phân loại. Tôi đã đối xử với một triệu chứng — một tỷ lệ thắng tồi — như thể nó là một chiến lược mà tôi có thể tinh chỉnh, trong khi thực ra nó là một chẩn đoán mà tôi đã từ chối đưa ra. Thay vì hỏi tại sao đầu ra của mô hình trông như vậy, tôi đã tối ưu một bất đẳng thức so với bài kiểm thử ngược cho đến khi con số chuyển sang màu xanh.
Đó là overfitting ở dạng thuần khiết nhất, mang tính con người nhất của nó. Bạn không cần một nghìn tham số để overfit. Bạn có thể làm điều đó chỉ với một dấu duy nhất, nếu bạn sẵn lòng chọn nó dựa trên kết quả bạn muốn thay vì nguyên nhân bạn hiểu.
Một kết quả bất ngờ là một câu hỏi, không phải một câu trả lời
Kỷ luật mà tôi rút ra từ chuyện này thì dễ nói nhưng thực sự khó thực hành: khi một kết quả hóa ra ngược lại với những gì bạn mong đợi, đó là một câu hỏi, không phải một câu trả lời. Sự cám dỗ là vươn tới thay đổi nhỏ nhất khiến con số trông có vẻ đúng — lật một dấu, đảo một quy tắc, hoán đổi một phép so sánh. Thay đổi nhỏ nhất đó thường là thay đổi nguy hiểm nhất, bởi vì nó sửa cái vẻ ngoài trong khi để nguyên hoàn toàn nguyên nhân.
Giờ đây, khi có thứ gì đó bị đảo ngược với tôi, tôi cố gắng cưỡng lại sự đảo ngược thanh lịch và thay vào đó hỏi câu hỏi xấu xí: không phải “làm thế nào để tôi khiến con số này chỉ đúng hướng?” mà là “ở đây có tín hiệu thực sự nào không, chỉ về bất kỳ hướng nào?” Thường thì chưa có tín hiệu nào. Và một dấu bị lật không thể chế tạo ra một tín hiệu.
Một mô hình thua lỗ được đọc lộn ngược lên vẫn là một mô hình thua lỗ. Điều duy nhất mà sự đảo ngược thay đổi là bạn mất bao lâu để nhận ra điều đó.
— Không tín hiệu, không lợi nhuận, không phải lời khuyên đầu tư.