Xin chúc mừng! Bạn đã triển khai mô hình kỳ lân. Mô hình của bạn phải chạy 24/7 mà không gặp vấn đề gì. Để đảm bảo điều đó, bạn phải theo dõi quy trình học máy (ML).
Viết giản đồ dữ liệu để xác thực dữ liệu thô
Để theo dõi dữ liệu, bạn nên liên tục kiểm tra dữ liệu đó với các giá trị thống kê dự kiến bằng cách viết các quy tắc mà dữ liệu phải đáp ứng. Tập hợp các quy tắc này được gọi là giản đồ dữ liệu. Xác định giản đồ dữ liệu bằng cách làm theo các bước sau:
Tìm hiểu phạm vi và mức phân phối của các tính năng. Đối với các tính năng phân loại, hãy tìm hiểu tập hợp các giá trị có thể có.
Mã hoá kiến thức của bạn vào giản đồ dữ liệu. Sau đây là ví dụ về quy tắc:
- Đảm bảo điểm xếp hạng do người dùng gửi luôn nằm trong khoảng từ 1 đến 5.
- Kiểm tra để đảm bảo từ the xuất hiện thường xuyên nhất (đối với tính năng văn bản tiếng Anh).
- Kiểm tra để đảm bảo rằng mỗi đặc điểm phân loại được đặt thành một giá trị trong một tập hợp cố định các giá trị có thể có.
Kiểm tra dữ liệu của bạn theo giản đồ dữ liệu. Giản đồ của bạn phải phát hiện các lỗi dữ liệu như:
- Sự cố bất thường
- Giá trị không mong muốn của biến phân loại
- Phân phối dữ liệu không mong muốn
Viết mã kiểm thử đơn vị để xác thực kỹ thuật tạo tính năng
Mặc dù dữ liệu thô có thể vượt qua giản đồ dữ liệu, nhưng mô hình của bạn không huấn luyện dựa trên dữ liệu thô. Thay vào đó, mô hình của bạn sẽ huấn luyện dựa trên dữ liệu đã được kỹ thuật hoá tính năng. Ví dụ: mô hình của bạn huấn luyện dựa trên các đặc điểm số đã chuẩn hoá thay vì dữ liệu số thô. Vì dữ liệu được tạo tính năng có thể rất khác với dữ liệu đầu vào thô, nên bạn phải kiểm tra dữ liệu được tạo tính năng riêng biệt với dữ liệu đầu vào thô.
Viết mã kiểm thử đơn vị dựa trên kiến thức của bạn về dữ liệu được tạo tính năng. Ví dụ: bạn có thể viết mã kiểm thử đơn vị để kiểm tra các điều kiện như sau:
- Tất cả các đặc điểm dạng số đều được điều chỉnh theo tỷ lệ, ví dụ: từ 0 đến 1.
- Các vectơ được mã hoá một nóng chỉ chứa một số 1 và N-1 số 0.
- Phân phối dữ liệu sau khi biến đổi tuân theo dự kiến. Ví dụ: nếu bạn đã chuẩn hoá bằng cách sử dụng điểm Z, thì giá trị trung bình của điểm Z phải là 0.
- Các giá trị ngoại lai được xử lý, chẳng hạn như bằng cách điều chỉnh theo tỷ lệ hoặc cắt bớt.
Kiểm tra các chỉ số cho các lát cắt dữ liệu quan trọng
Một tổng thể thành công đôi khi che khuất một tập hợp con không thành công. Nói cách khác, một mô hình có chỉ số tổng thể rất tốt vẫn có thể đưa ra dự đoán tệ hại trong một số trường hợp nhất định. Ví dụ:
Mô hình kỳ lân của bạn hoạt động tốt về tổng thể, nhưng hoạt động kém khi dự đoán cho sa mạc Sahara.
Nếu là kiểu kỹ sư hài lòng với AUC tổng thể cao, thì bạn có thể không nhận thấy vấn đề của mô hình ở sa mạc Sahara. Nếu việc đưa ra dự đoán chính xác cho mọi khu vực là quan trọng, thì bạn cần theo dõi hiệu suất cho mọi khu vực. Các tập hợp con dữ liệu, chẳng hạn như tập hợp con tương ứng với sa mạc Sahara, được gọi là lát cắt dữ liệu.
Xác định các lát cắt dữ liệu mà bạn quan tâm. Sau đó, hãy so sánh các chỉ số của mô hình cho các lát cắt dữ liệu này với các chỉ số cho toàn bộ tập dữ liệu. Việc kiểm tra để đảm bảo rằng mô hình của bạn hoạt động tốt trên tất cả các lát cắt dữ liệu sẽ giúp loại bỏ thiên vị. Hãy xem bài viết Tính công bằng: Đánh giá độ thiên vị để biết thêm thông tin.
Sử dụng các chỉ số thực tế
Các chỉ số mô hình không nhất thiết phải đo lường tác động thực tế của mô hình. Ví dụ: việc thay đổi một tham số siêu dữ liệu có thể làm tăng AUC của mô hình, nhưng sự thay đổi đó ảnh hưởng như thế nào đến trải nghiệm người dùng? Để đo lường tác động thực tế, bạn cần xác định các chỉ số riêng biệt. Ví dụ: bạn có thể khảo sát người dùng mô hình của mình để xác nhận rằng họ thực sự đã nhìn thấy kỳ lân khi mô hình dự đoán họ sẽ nhìn thấy.
Kiểm tra độ lệch trong việc phân phát dữ liệu huấn luyện
Độ lệch trong quá trình huấn luyện và phân phát nghĩa là dữ liệu đầu vào trong quá trình huấn luyện khác với dữ liệu đầu vào trong quá trình phân phát. Bảng sau đây mô tả hai loại độ lệch quan trọng:
Loại | Định nghĩa | Ví dụ: | Giải pháp |
---|---|---|---|
Mô hình chênh lệch | Dữ liệu đầu vào để huấn luyện và phân phát không tuân theo cùng một giản đồ. | Định dạng hoặc phân phối của dữ liệu phân phát sẽ thay đổi trong khi mô hình của bạn tiếp tục huấn luyện trên dữ liệu cũ. | Sử dụng cùng một giản đồ để xác thực dữ liệu huấn luyện và phân phát. Hãy nhớ kiểm tra riêng các số liệu thống kê mà giản đồ của bạn không kiểm tra, chẳng hạn như tỷ lệ phần trăm giá trị bị thiếu |
Độ lệch của tính năng | Dữ liệu được tạo khác với dữ liệu huấn luyện và phân phát. | Mã kỹ thuật tính năng khác nhau giữa quá trình huấn luyện và phân phát, tạo ra nhiều dữ liệu kỹ thuật khác nhau. | Tương tự như độ lệch giản đồ, hãy áp dụng cùng một quy tắc thống kê cho việc huấn luyện và phân phát dữ liệu được thiết kế. Theo dõi số lượng các đặc điểm bị lệch được phát hiện và tỷ lệ ví dụ bị lệch trên mỗi đặc điểm. |
Nguyên nhân gây ra sự chênh lệch trong quá trình phân phát dữ liệu huấn luyện có thể rất khó phát hiện. Luôn cân nhắc dữ liệu nào có sẵn cho mô hình của bạn tại thời điểm dự đoán. Trong quá trình huấn luyện, chỉ sử dụng các tính năng mà bạn có thể sử dụng khi phân phát.
Bài tập: Kiểm tra mức độ hiểu bài
Giả sử bạn có một cửa hàng trực tuyến và muốn dự đoán số tiền bạn sẽ kiếm được vào một ngày nhất định. Mục tiêu của bạn về công nghệ học máy là dự đoán doanh thu hằng ngày bằng cách sử dụng số lượng khách hàng làm một đặc điểm.
Đáp án: Vấn đề là bạn không biết số lượng khách hàng tại thời điểm dự đoán, trước khi hoàn tất doanh số bán hàng trong ngày. Vì vậy, tính năng này không hữu ích, ngay cả khi tính năng này dự đoán chính xác doanh thu hằng ngày của bạn. Tương tự, khi bạn đào tạo một mô hình và nhận được các chỉ số đánh giá tuyệt vời (chẳng hạn như 0,99 AUC), hãy tìm những loại tính năng này có thể ảnh hưởng đến nhãn của bạn.
Kiểm tra tình trạng rò rỉ nhãn
Rò rỉ nhãn có nghĩa là các nhãn đúng thực tế mà bạn đang cố gắng dự đoán đã vô tình đi vào các tính năng huấn luyện. Đôi khi, rất khó phát hiện rò rỉ nhãn.
Bài tập: Kiểm tra mức độ hiểu bài
Giả sử bạn xây dựng một mô hình phân loại nhị phân để dự đoán liệu một bệnh nhân mới nhập viện có bị ung thư hay không. Mô hình của bạn sử dụng các tính năng như sau:
- Tuổi của bệnh nhân
- Giới tính của bệnh nhân
- Tình trạng bệnh trước đây
- Tên bệnh viện
- Dấu hiệu sinh tồn
- Kết quả kiểm tra
- Tính di truyền
Nhãn có dạng như sau:
- Boolean: Bệnh nhân có bị ung thư không?
Bạn phân vùng dữ liệu một cách cẩn thận, đảm bảo rằng tập huấn luyện được tách biệt với tập xác thực và tập kiểm thử. Mô hình hoạt động cực kỳ tốt trên tập hợp dữ liệu xác thực và tập hợp dữ liệu kiểm thử; các chỉ số rất tuyệt vời. Rất tiếc, mô hình này hoạt động rất tệ đối với các bệnh nhân mới trong thực tế.
Đáp án: Một trong các đặc điểm của mô hình là tên bệnh viện. Một số bệnh viện chuyên điều trị ung thư. Trong quá trình huấn luyện, mô hình nhanh chóng nhận ra rằng những bệnh nhân được chỉ định đến một số bệnh viện nhất định rất có thể mắc bệnh ung thư. Vì vậy, tên bệnh viện trở thành một đặc điểm có trọng số cao.
Tại thời điểm dự đoán, hầu hết bệnh nhân chưa được chỉ định đến một bệnh viện. Xét cho cùng, mục đích của mô hình này là chẩn đoán xem bệnh nhân có ung thư hay không, sau đó sử dụng kết quả chẩn đoán đó để chuyển bệnh nhân đến một bệnh viện phù hợp. Do đó, trong quá trình suy luận, tính năng tên bệnh viện chưa có sẵn và mô hình buộc phải dựa vào các tính năng khác.
Theo dõi tuổi của mô hình trong suốt quy trình
Nếu dữ liệu phân phát phát triển theo thời gian nhưng mô hình của bạn không được huấn luyện lại thường xuyên, thì bạn sẽ thấy chất lượng mô hình giảm. Theo dõi thời gian kể từ khi mô hình được đào tạo lại trên dữ liệu mới và đặt ngưỡng thời gian cho cảnh báo. Ngoài việc theo dõi độ tuổi của mô hình tại thời điểm phân phát, bạn nên theo dõi độ tuổi của mô hình trong suốt quy trình để phát hiện tình trạng tắc nghẽn quy trình.
Kiểm thử để đảm bảo rằng trọng số và đầu ra của mô hình ổn định về mặt số học
Trong quá trình huấn luyện mô hình, trọng số và đầu ra của lớp không được là NaN (không phải số) hoặc Inf (vô hạn). Viết mã kiểm thử để kiểm tra các giá trị NaN và Inf của trọng số và đầu ra của lớp. Ngoài ra, hãy kiểm tra để đảm bảo rằng hơn một nửa đầu ra của một lớp không bằng 0.
Theo dõi hiệu suất của mô hình
Công cụ dự đoán thời điểm xuất hiện kỳ lân của bạn đã trở nên phổ biến hơn dự kiến! Bạn nhận được nhiều yêu cầu dự đoán và thậm chí là nhiều dữ liệu huấn luyện hơn. Bạn nghĩ rằng điều đó thật tuyệt vời cho đến khi nhận ra rằng mô hình của bạn đang ngày càng tốn nhiều bộ nhớ và thời gian để huấn luyện. Bạn quyết định theo dõi hiệu suất của mô hình bằng cách làm theo các bước sau:
- Theo dõi hiệu suất của mô hình theo phiên bản mã, mô hình và dữ liệu. Tính năng theo dõi này cho phép bạn xác định chính xác nguyên nhân gây ra sự suy giảm hiệu suất.
- Kiểm thử số bước huấn luyện mỗi giây cho phiên bản mô hình mới so với phiên bản trước và so với ngưỡng cố định.
- Phát hiện lỗi rò rỉ bộ nhớ bằng cách đặt ngưỡng sử dụng bộ nhớ.
- Theo dõi thời gian phản hồi API và theo dõi các phân vị của thời gian phản hồi. Mặc dù thời gian phản hồi API có thể nằm ngoài tầm kiểm soát của bạn, nhưng các phản hồi chậm có thể gây ra các chỉ số thực tế kém.
- Theo dõi số lượng truy vấn được trả lời mỗi giây.
Kiểm thử chất lượng của mô hình trực tiếp trên dữ liệu đã phân phát
Bạn đã xác thực mô hình của mình. Nhưng nếu các tình huống thực tế, chẳng hạn như hành vi của kỳ lân, thay đổi sau khi bạn ghi lại dữ liệu xác thực thì sao? Khi đó, chất lượng của mô hình được phân phát sẽ giảm. Tuy nhiên, việc kiểm thử chất lượng trong quá trình phân phát là rất khó vì dữ liệu thực tế không phải lúc nào cũng được gắn nhãn. Nếu dữ liệu phân phát của bạn chưa được gắn nhãn, hãy cân nhắc các thử nghiệm sau:
Điều tra các mô hình cho thấy độ lệch thống kê đáng kể trong dự đoán. Xem bài viết Phân loại: Sự thiên lệch dự đoán.
Theo dõi các chỉ số thực tế cho mô hình của bạn. Ví dụ: nếu bạn đang phân loại nội dung rác, hãy so sánh kết quả dự đoán của bạn với nội dung rác do người dùng báo cáo.
Giảm thiểu sự khác biệt tiềm ẩn giữa dữ liệu huấn luyện và phân phát bằng cách phân phát phiên bản mô hình mới trên một phần các truy vấn của bạn. Khi bạn xác thực mô hình phân phát mới, hãy dần chuyển tất cả truy vấn sang phiên bản mới.
Khi sử dụng các bài kiểm thử này, hãy nhớ theo dõi cả chất lượng dự đoán giảm đột ngột và chậm.
Sắp xếp ngẫu nhiên
Tạo quy trình tạo dữ liệu có thể tái tạo. Giả sử bạn muốn thêm một tính năng để xem tính năng đó ảnh hưởng như thế nào đến chất lượng mô hình. Để thử nghiệm công bằng, các tập dữ liệu của bạn phải giống nhau ngoại trừ tính năng mới này. Theo đó, hãy đảm bảo rằng mọi hoạt động tạo dữ liệu ngẫu nhiên đều có thể được xác định trước:
- Tạo giá trị khởi tạo cho trình tạo số ngẫu nhiên (RNG). Việc tạo hạt giống đảm bảo rằng RNG sẽ xuất ra các giá trị giống nhau theo cùng một thứ tự mỗi khi bạn chạy, tạo lại tập dữ liệu.
- Sử dụng khoá băm không đổi. Hàm băm là một cách phổ biến để phân tách hoặc lấy mẫu dữ liệu. Bạn có thể băm từng ví dụ và sử dụng số nguyên thu được để quyết định đặt ví dụ vào phần phân tách nào. Dữ liệu đầu vào cho hàm băm không được thay đổi mỗi khi bạn chạy chương trình tạo dữ liệu. Đừng sử dụng thời gian hiện tại hoặc số ngẫu nhiên trong hàm băm, ví dụ: nếu bạn muốn tạo lại hàm băm theo yêu cầu.
Các phương pháp trước đây áp dụng cho cả việc lấy mẫu và tách dữ liệu.
Những điều cần cân nhắc khi băm
Hãy tưởng tượng lại việc bạn đang thu thập cụm từ tìm kiếm và sử dụng hàm băm để đưa vào hoặc loại trừ cụm từ tìm kiếm. Nếu khoá băm chỉ sử dụng truy vấn, thì trên nhiều ngày dữ liệu, bạn sẽ luôn đưa truy vấn đó vào hoặc luôn loại trừ truy vấn đó. Việc luôn đưa vào hoặc luôn loại trừ một cụm từ tìm kiếm là không tốt vì:
- Bộ dữ liệu huấn luyện của bạn sẽ thấy một tập hợp truy vấn ít đa dạng hơn.
- Các tập hợp đánh giá của bạn sẽ khó khăn một cách giả tạo vì chúng sẽ không trùng lặp với dữ liệu huấn luyện. Trong thực tế, tại thời điểm phân phát, bạn sẽ thấy một số lưu lượng truy cập trực tiếp trong dữ liệu huấn luyện, vì vậy, kết quả đánh giá của bạn phải phản ánh điều đó.
Thay vào đó, bạn có thể băm theo cụm từ tìm kiếm + ngày. Điều này sẽ dẫn đến việc băm khác nhau mỗi ngày.