Grokking
Grokking là hiện tượng khái quát hóa muộn: mạng khớp với tập huấn luyện từ sớm, nhưng sau nhiều bước, độ chính xác trên tập validation tăng vọt từ mức ngẫu nhiên lên gần như hoàn hảo.
Grokking là hiện tượng khái quát hóa chậm: một mạng nơ-ron sớm đạt độ chính xác hoàn hảo trên dữ liệu huấn luyện, duy trì mức ngẫu nhiên trên dữ liệu validation trong một thời gian dài, rồi bất ngờ khái quát hóa sau khi có vẻ đã overfit từ lâu. Power và cộng sự (2022) tại OpenAI đặt tên cho hiện tượng này sau khi huấn luyện các Transformer nhỏ trên những tác vụ thuật toán như số học modulo; độ chính xác validation tăng từ mức ngẫu nhiên lên hoàn hảo rất lâu sau khi độ chính xác huấn luyện đã bão hòa. Từ này bắt nguồn từ tiểu thuyết Stranger in a Strange Land của Robert Heinlein, trong đó "grok" có nghĩa là thấu hiểu hoàn toàn một điều gì đó.
Diễn biến của hiện tượng grokking#
Phép cộng modulo là tác vụ grokking kinh điển: model nhận các cặp (a, b) và phải xuất ra (a + b) mod p, trong đó chỉ một phần nhỏ của toàn bộ các cặp được dùng để huấn luyện. Lệnh chạy dưới đây huấn luyện một perceptron đa lớp nhỏ bằng optimizer AdamW của PyTorch trên 30% trong số 9,409 cặp với p = 97; quá trình hoàn tất trong chưa đầy một phút trên CPU:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
p = 97 # task: predict (a + b) mod 97 from one-hot encodings of a and b
a, b = torch.cartesian_prod(torch.arange(p), torch.arange(p)).T
x, y = torch.cat([F.one_hot(a, p), F.one_hot(b, p)], dim=1).float(), (a + b) % p
idx = torch.randperm(p * p)
train, val = idx[: p * p * 3 // 10], idx[p * p * 3 // 10 :] # train on 30% of all pairs
model = torch.nn.Sequential(torch.nn.Linear(2 * p, 256), torch.nn.ReLU(), torch.nn.Linear(256, p))
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1.0) # strong weight decay
for step in range(1, 20001):
loss = F.cross_entropy(model(x[train]), y[train])
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step % 4000 == 0:
train_acc, val_acc = [(model(x[i]).argmax(1) == y[i]).float().mean().item() for i in (train, val)]
print(f"step {step:5d}: train accuracy {train_acc:.2f}, validation accuracy {val_acc:.2f}")Ở bước 4,000, độ chính xác huấn luyện đã đạt 1.00 trong khi độ chính xác validation là 0.00. Độ chính xác validation sau đó tăng lên 0.16 ở bước 8,000, 0.54 ở bước 12,000, 0.84 ở bước 16,000 và 0.97 ở bước 20,000. Với weight_decay=0.0, cùng lần chạy đó duy trì độ chính xác validation ở mức 0.00 trong toàn bộ 20,000 bước.
Nanda và cộng sự (2023) giải thích giai đoạn chững bằng cách phân tích ngược một Transformer một lớp được huấn luyện trên phép cộng modulo. Model học cách chuyển phép cộng thành phép quay quanh một đường tròn bằng cách sử dụng đặc trưng Fourier rời rạc và các đồng nhất thức lượng giác. Quá trình huấn luyện chia thành ba giai đoạn liên tục: ghi nhớ, hình thành mạch và tinh chỉnh; mạch khái quát hóa phát triển dần trong khi độ chính xác validation đứng yên, rồi mức tăng đột ngột xuất hiện khi weight decay loại bỏ lời giải ghi nhớ vẫn chi phối đầu ra.
Điều gì khiến grokking xảy ra#
- Chính quy hóa: Weight decay là biện pháp can thiệp hiệu quả nhất trong các thử nghiệm ban đầu; lần chạy phía trên hoàn toàn không khái quát hóa nếu thiếu biện pháp này.
- Kích thước dataset: Tỷ lệ dữ liệu huấn luyện nhỏ hơn đòi hỏi quá trình tối ưu hóa lâu hơn nhiều trước khi khái quát hóa; dưới một ngưỡng nhất định, model không bao giờ khái quát hóa trong giới hạn tài nguyên thực tế.
- Chuẩn của trọng số: Omnigrok liên hệ grokking với độ lớn của các trọng số, vì lời giải có khả năng khái quát hóa có chuẩn trọng số nhỏ hơn lời giải ghi nhớ. Bắt đầu từ trọng số khởi tạo lớn, các tác giả tạo ra grokking trên tác vụ hình ảnh, ngôn ngữ và phân tử, đồng thời loại bỏ hiện tượng này khỏi các tác vụ thuật toán bằng cách giới hạn chuẩn trọng số.
- Độ ổn định số: Prieto và cộng sự (2025) phát hiện rằng nếu không có chính quy hóa, quá trình huấn luyện cross-entropy liên tục tăng tỷ lệ logits cho đến khi lỗi số thực dấu phẩy động trong softmax khiến quá trình học dừng lại; họ gọi hiện tượng này là Softmax Collapse. Hàm kích hoạt StableMax và optimizer ⊥Grad của họ tạo ra grokking mà không cần weight decay.
Grokking và các khái niệm liên quan#
- Overfitting: Khoảng cách giữa hiệu suất trên tập huấn luyện và tập validation vẫn duy trì hoặc ngày càng lớn. Với grokking, khoảng cách này tự khép lại khi tiếp tục huấn luyện.
- Hiện tượng giảm kép: Lỗi kiểm tra giảm, tăng rồi lại giảm khi kích thước model hoặc thời gian huấn luyện tăng. Hiện tượng giảm kép theo epoch là một dạng cải thiện chậm khác, trong đó lỗi kiểm tra tăng một thời gian trong quá trình huấn luyện rồi mới giảm trở lại.
- Khả năng diễn giải cơ chế: Nghiên cứu các thuật toán bên trong mạng đã huấn luyện. Grokking trên phép toán modulo trở thành một trong những trường hợp nghiên cứu chính vì có thể trích xuất đầy đủ thuật toán đã học.
Ứng dụng grokking trong thực tế#
Grokking thể hiện rõ nhất trên các dataset thuật toán nhỏ được chi phối bởi một quy tắc chính xác. Hiện tượng này vẫn quan trọng đối với thiết kế thí nghiệm, vì dừng sớm kết thúc lần chạy khi metric validation ngừng cải thiện, khiến quá trình huấn luyện grokking bị cắt ngang trong giai đoạn chững. Quá trình huấn luyện Ultralytics YOLO dừng sau patience epoch không có cải thiện về độ phù hợp trên validation, mặc định là 100, và chạy hết mọi epoch khi patience=0.










