Bỏ qua tới nội dung chính
Quay lại tin tức

Các công cụ gỡ lỗi trực quan cho quy trình làm việc học máy

KDnuggets· Nate Rosidi· 26/5/2026general

Trong bài viết này, chúng tôi đề cập ba chủ đề: những gì cần trực quan hóa trong quá trình huấn luyện, các công cụ cung cấp những hình ảnh trực quan đó và các phương pháp để ghi lại trực tiếp các phép tính của mô hình bằng cách sử dụng hooks và breakpoints.

Công cụ gỡ lỗi trực quan cho quy trình làm việc học máy - KDnuggets # Giới thiệu Việc huấn luyện một mô hình học máy và quan sát sự giảm thiểu của hàm mất mát (loss) mang lại cảm giác tiến bộ, cho đến khi độ chính xác trên tập kiểm định (validation accuracy) đạt đến mức ổn định hoặc hàm mất mát bắt đầu tăng đột biến mà không rõ nguyên nhân. Tại thời điểm đó, hầu hết mọi người sẽ thêm các bản ghi (logging) hoặc bắt đầu điều chỉnh siêu tham số (hyperparameters), với hy vọng có sự thay đổi. Điều mà hầu hết các nhà phân tích bỏ qua ở giai đoạn này là khả năng hiển thị thực tế những gì đang diễn ra bên trong mô hình trong quá trình huấn luyện. Các công cụ gỡ lỗi trực quan có thể cung cấp những hiểu biết hữu ích ở giai đoạn này. Trong bài viết này, chúng tôi đề cập đến ba chủ đề: những gì cần trực quan hóa trong quá trình huấn luyện (đạo hàm, hàm mất mát và các phép nhúng), các công cụ cung cấp những hình ảnh trực quan đó (TensorBoard và các lựa chọn thay thế chính của nó), và các phương pháp để thu thập trực tiếp các phép tính của mô hình bằng cách sử dụng hooks và breakpoints. # Trực quan hóa đạo hàm, hàm mất mát và các phép nhúng // Đường cong hàm mất mát Khi huấn luyện một mô hình, đường cong hàm mất mát thường là điều đầu tiên cần kiểm tra. Khi cả hàm mất mát huấn luyện (training loss) và hàm mất mát kiểm định (validation loss) đều giảm và duy trì gần nhau, điều đó cho thấy quá trình huấn luyện đang diễn ra tốt đẹp. Khi hàm mất mát kiểm định bắt đầu tăng trong khi hàm mất mát huấn luyện tiếp tục giảm, mô hình đang bị quá khớp (overfitting). Khi cả hai đường cong đều ổn định sớm, mô hình không học được, điều này thường cho thấy vấn đề với dữ liệu hoặc tốc độ học (learning rate). Ngoài ra, luồng đạo hàm (gradient flow) cũng quan trọng. Vấn đề đạo hàm biến mất (vanishing gradient problem) có thể biểu hiện trong thực tế nếu các đường cong hàm mất mát giảm đều nhưng quá chậm, cho thấy rằng các đạo hàm quá nhỏ khi chúng đến các lớp đầu tiên. Biểu đồ dưới đây mô phỏng một mô hình quá khớp điển hình. Cả hai hàm mất mát đều giảm cùng nhau trong mười epoch đầu tiên, sau đó hàm mất mát kiểm định bắt đầu tăng trong khi hàm mất mát huấn luyện tiếp tục giảm. Đường chấm đỏ đánh dấu nơi sự phân kỳ bắt đầu: trong một lần chạy thực tế, đó là điểm để bắt đầu xem xét việc điều chuẩn (regularization) hoặc dừng sớm (early stopping). ```python import torch import torch.nn as nn import matplotlib.pyplot as plt model = nn.Sequential(nn.Linear(16, 16), nn.Tanh(), nn.Linear(16, 16), nn.Tanh(), nn.Linear(16, 1)) grad_magnitudes = {} def grad_hook(name): def hook(module, grad_input, grad_output): grad_magnitudes[name] = grad_output[0].abs().mean().item() return hook for i, layer in enumerate(model): layer.register_backward_hook(grad_hook(f"Layer {i}")) output = model(torch.randn(32, 16)) output.mean().backward() plt.bar(grad_magnitudes.keys(), grad_magnitudes.values()) plt.title("Mean Gradient Magnitude per Layer") plt.ylabel("Mean |gradient|") plt.xticks(rotation=15) plt.tight_layout() plt.show() ``` Kết quả xuất ra: // Độ lớn Gradient thô Layer 4 (Linear): 0,031250 Layer 3 (Tanh): 0,004646 Layer 2 (Linear): 0,004241 Layer 1 (Tanh): 0,002126 Layer 0 (Linear): 0,001631 Biểu đồ được đọc từ phải sang trái: Layer 4 đại diện cho lớp đầu ra, và Layer 0 là lớp đầu tiên. Lớp đầu ra nhận gradient là 0,031, nhưng khi đến Layer 0, con số đó đã giảm xuống còn 0,0016 — nhỏ hơn khoảng 20 lần. Thanh màu đỏ xuất hiện trên ba lớp đầu tiên cho thấy gradient đã nằm trong vùng rủi ro trước khi chúng đến được đầu mạng. Trong một quá trình huấn luyện thực tế trên một mô hình sâu hơn, các lớp ban đầu này sẽ điều chỉnh trọng số của chúng rất chậm, đến mức chúng hầu như không học được gì. Đây là một ví dụ thực tế về vấn đề vanishing gradient (gradient biến mất): các lớp đầu tiên đang âm thầm huấn luyện kém hiệu quả, điều này không thể nhìn thấy nếu không có loại biểu đồ này. // Trực quan hóa Gradient Việc vẽ biểu đồ độ lớn gradient theo từng lớp trong quá trình huấn luyện cung cấp một cái nhìn trực tiếp về việc liệu gradient có đến được các phần đầu của mạng với các giá trị đáng kể hay không. Trong các mô hình sâu, gradient có thể biến mất khi chúng di chuyển ngược qua các lớp. Biểu đồ phân bố giá trị gradient cho mỗi lớp, được ghi lại trong quá trình huấn luyện, có thể tiết lộ mô hình này và giúp chúng ta xác định vấn đề sớm. Hàm `register_backward_hook` của PyTorch cho phép chúng ta thu được các tensor gradient từ bất kỳ lớp nào mà không cần sửa đổi vòng lặp huấn luyện. Chúng ta kết nối một hook với một module, hook này sẽ kích hoạt trong mỗi lần truyền ngược, gửi các tensor gradient đến một hàm callback được chỉ định. Biểu đồ dưới đây cho thấy phân bố đầy đủ các giá trị gradient cho mỗi lớp sau một lần truyền ngược. Mỗi biểu đồ con đại diện cho một lớp duy nhất, được sắp xếp từ lớp ban đầu đến lớp cuối cùng. Mã nguồn cho điều này có thể được tìm thấy tại đây. Điều chúng ta tìm kiếm trong một mạng khỏe mạnh là các biểu đồ phân bố trên các lớp có độ trải rộng tương tự nhau. Nếu các lớp đầu tiên cho thấy một phân bố rất hẹp, giống như một đỉnh nhọn, tập trung chặt chẽ vào số 0, đó có thể là một dấu hiệu cảnh báo về vanishing gradient. Các gradient vẫn tồn tại, nhưng chúng quá nhỏ nên hầu như không mang thông tin học tập nào. Việc trực quan hóa này có thể giúp chúng ta phát hiện mô hình này sau vài lô đầu tiên, thay vì sau một quá trình huấn luyện đầy đủ. // Embeddings Khi một mô hình ánh xạ đầu vào đến một biểu diễn đã học, việc trực quan hóa biểu diễn đó cho chúng ta biết liệu mô hình có đang tách dữ liệu như chúng ta mong đợi hay không. Cách tiếp cận phổ biến nhất là lấy

Nguồn tin: KDnuggets — Tác giả: Nate Rosidi. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.