Hệ thống học máy sản xuất: Giám sát quy trình

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 giám sát quy trình học máy (ML).

Viết một giản đồ dữ liệu để xác thực dữ liệu thô

Để theo dõi dữ liệu, bạn phải liên tục kiểm tra dữ liệu dựa trên 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à sơ đồ dữ liệu. Xác định giản đồ dữ liệu bằng cách làm theo các bước sau:

  1. 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 đặc điểm phân loại, hãy tìm hiểu tập hợp các giá trị có thể có.

  2. Mã hoá kiến thức của bạn vào giản đồ dữ liệu. Sau đây là ví dụ về các quy tắc:

    • Đảm bảo rằng đ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 một 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 gồm các giá trị có thể.
  3. Kiểm thử dữ liệu dựa trên giản đồ dữ liệu. Giản đồ của bạn phải phát hiện được các lỗi dữ liệu, chẳng hạn như:

    • Sự cố bất thường
    • Giá trị không mong muốn của các biến phân loại
    • Phân phối dữ liệu không mong muốn

Viết kiểm thử đơn vị để xác thực kỹ thuật trích xuất đặc điểm

Mặc dù dữ liệu thô của bạn có thể vượt qua giản đồ dữ liệu, nhưng mô hình của bạn không được huấn luyện 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 thiết kế tính năng. Ví dụ: mô hình của bạn sẽ huấn luyện dựa trên các đặc điểm số được chuẩn hoá thay vì dữ liệu số thô. Vì dữ liệu được thiết kế theo tính năng có thể rất khác so với dữ liệu đầu vào thô, nên bạn phải kiểm tra dữ liệu được thiết kế theo tính năng riêng biệt với các bước kiểm tra dữ liệu đầu vào thô.

Viết mã kiểm thử đơn vị dựa trên hiểu biết của bạn về dữ liệu được thiết kế theo tính năng. Ví dụ: bạn có thể viết các kiểm thử đơn vị để kiểm tra các điều kiện như sau:

  • Tất cả các đặc điểm bằng số đều được điều chỉnh theo tỷ lệ, ví dụ: từ 0 đến 1.
  • Mã hoá one-hot: vectơ chỉ chứa một số 1 và N-1 số 0.
  • Phân phối dữ liệu sau khi chuyển đổi phù hợp với kỳ vọng. Ví dụ: nếu bạn đã chuẩn hoá bằng điểm Z, thì giá trị trung bình của điểm Z phải là 0.
  • Giá trị ngoại lệ được xử lý, chẳng hạn như bằng cách điều chỉnh tỷ lệ hoặc cắt bớt.

Kiểm tra các chỉ số cho những 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ể tuyệt vời 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 đưa ra dự đoán cho sa mạc Sahara.

Nếu bạn là kiểu kỹ sư hài lòng với AUC tổng thể tuyệt vời, thì có thể bạn sẽ không nhận thấy các 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à điều quan trọng, thì bạn cần theo dõi hiệu suất cho từng khu vực. Các tập hợp con của 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à phân đoạn dữ liệu.

Xác định các lát dữ liệu mà bạn quan tâm. Sau đó, hãy so sánh các chỉ số mô hình cho những lát dữ liệu này với các chỉ số cho toàn bộ tập dữ liệu của bạn. Việc kiểm tra để đảm bảo mô hình của bạn hoạt động hiệu quả trên tất cả các phân đoạn dữ liệu sẽ giúp loại bỏ thiên kiến. Hãy xem phần 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ố trong thế giới thực

Các chỉ số mô hình không nhất thiết đo lường tác động thực tế của mô hình. Ví dụ: việc thay đổi một siêu tham số có thể làm tăng AUC của mô hình, nhưng 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 một con kỳ lân khi mô hình dự đoán họ sẽ nhìn thấy.

Kiểm tra độ lệch giữa huấn luyện và phân phát

Độ lệch giữa huấn luyện và phân phát có nghĩa là dữ liệu đầu vào của bạn trong quá trình huấn luyện khác với dữ liệu đầu vào của bạn trong quá trình phân phát. Bảng sau đây mô tả 2 loại độ lệch quan trọng:

Loại Định nghĩa Ví dụ: Giải pháp
Độ lệch giản đồ 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 cách phân phối dữ liệu phân phát 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 lược đồ để xác thực dữ liệu huấn luyện và phân phát. Đảm bảo bạn 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ệ giá trị bị thiếu
Độ lệch của đối tượng Dữ liệu được thiết kế khác nhau giữa quá trình 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 dữ liệu được thiết kế khác nhau. Tương tự như độ lệch giản đồ, hãy áp dụng các quy tắc thống kê giống nhau trên dữ liệu được thiết kế để huấn luyện và phân phát. 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ự sai lệch giữa quá trình huấn luyện và phân phát có thể không rõ ràng. Luôn cân nhắc những dữ liệu 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 những tính năng mà bạn sẽ có khi phục vụ.

Bài tập: Kiểm tra kiến thức

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 cụ thể. Mục tiêu của bạn khi sử dụng ML 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.

Bạn có thể gặp phải vấn đề gì?
Nhấp vào đây để xem câu trả lời

Kiểm tra tình trạng rò rỉ nhãn

Rò rỉ nhãn có nghĩa là các nhãn chân thực mà bạn đang cố gắng dự đoán đã vô tình xuất hiện trong các đặc điểm huấn luyện của bạn. Đôi khi, rất khó phát hiện rò rỉ nhãn.

Bài tập: Kiểm tra kiến thức

Giả sử bạn tạo 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 lý 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 này 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 hoàn toàn với tập xác thực và tập kiểm thử. Mô hình hoạt động rất tốt trên tập hợp xác thực và tập hợp kiểm thử; các chỉ số đều rất tốt. Rất tiếc, mô hình này hoạt động rất kém trên những bệnh nhân mới ngoài đời thực.

Tại sao mô hình này hoạt động rất tốt trên bộ kiểm thử nhưng lại thất bại thảm hại trong thực tế?
Nhấp vào đây để xem câu trả lời

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 thay đổi 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 sút. Theo dõi thời gian kể từ khi mô hình được huấn luyện lại trên dữ liệu mới và đặt ngưỡng tuổi 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 các trường hợp tắc nghẽn quy trình.

Kiểm thử để đảm bảo 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, các trọng số và đầu ra của lớp không được là NaN (không phải là số) hoặc Inf (vô hạn). Viết các kiểm thử để kiểm tra các giá trị NaN và Inf của trọng số và đầu ra lớp. Ngoài ra, hãy kiểm tra để đảm bảo hơn một nửa số đầu ra của một lớp không phải là 0.

Theo dõi hiệu suất của mô hình

Công cụ dự đoán sự xuất hiện của kỳ lân của bạn phổ biến hơn dự kiến! Bạn đang nhận được nhiều yêu cầu dự đoán và thậm chí còn 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 chiếm ngày càng 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 mô hình theo các phiên bản mã, mô hình và dữ liệu. Việc theo dõi như vậy giúp bạn xác định chính xác nguyên nhân gây ra bất kỳ sự suy giảm hiệu suất nào.
  • Kiểm thử số bước huấn luyện mỗi giây cho một phiên bản mô hình mới so với phiên bản trước và so với một 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 của API và theo dõi các phân vị của API. Mặc dù thời gian phản hồi của 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ố kém trong thế giới thực.
  • 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 được phân phát

Bạn đã xác thực mô hình của mình. Nhưng điều gì sẽ xảy ra nếu các tình huống trong thế giới thực, 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? Sau đó, 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 không được gắn nhãn, hãy cân nhắc các thử nghiệm sau:

  • Tạo nhãn bằng người đánh giá.

  • Điều tra các mô hình cho thấy độ lệch thống kê đáng kể trong các dự đoán. Xem phần Phân loại: Độ thiên lệch của dự đoán.

  • Theo dõi các chỉ số trong thế giới thực cho mô hình của bạn. Ví dụ: nếu bạn đang phân loại thư rác, hãy so sánh các dự đoán của bạn với thư 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à dữ liệu 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 nhỏ 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ả các truy vấn sang phiên bản mới.

Khi sử dụng các kiểm thử này, hãy nhớ theo dõi cả sự suy giảm đột ngột và từ từ về chất lượng dự đoán.

Sắp xếp ngẫu nhiên

Đảm bảo quy trình tạo dữ liệu của bạn 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. Để có một thử nghiệm công bằng, các tập dữ liệu của bạn phải giống hệt nhau, ngoại trừ tính năng mới này. Theo tinh thần đó, hãy đảm bảo rằng mọi hoạt động ngẫu nhiên hoá trong quá trình tạo dữ liệu đều có thể xác định được:

  • Nạp giá trị khởi tạo cho trình tạo số ngẫu nhiên (RNG). Gieo hạt đảm bảo rằng RNG 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 của bạn.
  • Sử dụng khoá băm bất biến. Băm là một cách phổ biến để chia nhỏ hoặc lấy mẫu dữ liệu. Bạn có thể băm từng ví dụ và dùng số nguyên thu được để quyết định đặt ví dụ đó vào phần chia tách nào. Đầ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 một 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 nêu trên áp dụng cho cả việc lấy mẫu và phân chia dữ liệu.

Những điều cần cân nhắc khi băm

Hãy tưởng tượng rằng bạn đang thu thập các cụm từ tìm kiếm và sử dụng hàm băm để đưa vào hoặc loại trừ các cụm từ tìm kiếm. Nếu khoá băm chỉ sử dụng truy vấn, thì trong nhiều ngày dữ liệu, bạn sẽ luôn thêm truy vấn đó hoặc luôn loại trừ truy vấn đó. Việc luôn thêm hoặc luôn loại trừ một cụm từ tìm kiếm là không nên vì:

  • Tập 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ó 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. Trên 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, quá trình đá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 tìm kiếm. Điều này sẽ dẫn đến một hàm băm khác cho mỗi ngày.

Hình 7. Hình ảnh trực quan dạng động cho thấy cách băm chỉ trên cụm từ tìm kiếm khiến dữ liệu đi vào cùng một nhóm mỗi ngày, nhưng băm trên cụm từ tìm kiếm cộng với thời gian tìm kiếm khiến dữ liệu đi vào các nhóm khác nhau mỗi ngày. Ba nhóm này là Đào tạo, Đánh giá và Bị bỏ qua.
Hình 7. Băm trên truy vấn so với băm trên truy vấn + ngày truy vấn.