Dữ liệu trong học sâu
Trong quá trình phát triển mô hình học sâu, dữ liệu đóng vai trò trung tâm trong ba giai đoạn chính: huấn luyện, xác thực và kiểm tra. Ba loại dữ liệu này là tập huấn luyện (training set), tập xác thực (validation set) và tập kiểm tra (test set).
Sự khác biệt giữa tập xác thực và tập kiểm tra
Quy trình hoàn chỉnh trong huấn luyện mô hình bao gồm ba bước: huấn luyện - xác thực - kiểm tra. Tuy nhiên, nhiều người thường chỉ thực hiện hai bước đầu tiên. Tập xác thực được sử dụng để đánh giá hiệu suất mô hình trong quá trình huấn luyện, giúp điều chỉnh các siêu tham số.
Tập kiểm tra có mục đích gì khác biệt so với tập xác thực? Tại sao không thể sử dụng tập xác thực để đánh giá cuối cùng?
Khi mô hình học từ tập huấn luyện, nó liên tục điều chỉnh các tham số để phù hợp với đặc điểm của dữ liệu huấn luyện. Khi mô hình hoạt động tốt trên tập huấn luyện (thường là sai số thấp, độ chính xác cao), điều đó cho thấy các tham số đã phù hợp với các đặc điểm này.
Tiếp theo, mô hình được kiểm tra trên tập xác thực để xem các tham số đã được điều chỉnh có hoạt động tốt với dữ liệu ngoài tập huấn luyện hay không. Nếu mô hình hoạt động kém trên tập xác thực, điều này cho thấy mô hình có thể đã học quá mức các đặc điểm không cần thiết từ tập huấn luyện (ví dụ như nhiễu trong ảnh). Người huấn luyện có thể điều chỉnh siêu tham số hoặc áp dụng các biện pháp khác như thay đổi tốc độ học, sau đó kiểm tra lại mô hình mới trên cùng tập xác thực đó.
Quá trình điều chỉnh và kiểm tra lặp đi lặp lại giúp mô hình hoạt động tốt không chỉ trên tập huấn luyện mà cả trên tập xác thực. Tuy nhiên, điều này cũng đồng nghĩa với việc mô hình đang dần phù hợp với các đặc điểm của tập xác thực. Liệu mô hình có thực sự có khả năng tổng quát tốt với dữ liệu hoàn toàn mới?
Để trả lời câu hỏi này, cần một tập kiểm tra riêng biệt để đánh giá hiệu suất thực sự của mô hình, tức là khả năng tổng quát hóa với dữ liệu chưa từng thấy. Nếu mô hình hoạt động kém trên tập kiểm tra, điều đó chứng tỏ mô hình đã bị overfit ngay cả với tập xác thực.
Sau khi điều chỉnh mô hình, cần sử dụng một tập kiểm tra mới để đánh giá hiệu suất. Tại sao không thể tái sử dụng tập kiểm tra giống như tập xác thực? Vì nếu tái sử dụng, mô hình sẽ dần phù hợp với tập kiểm tra cụ thể đó, dẫn đến overfit ngay cả với dữ liệu kiểm tra.
| Mục đích | Tập xác thực | Tập kiểm tra |
| Chức năng | Giúp điều chỉnh siêu tham số thông qua đánh giá hiệu suất mô hình | Đánh giá khả năng tổng quát của mô hình |
| Số lần sử dụng | Có thể sử dụng lại trong mỗi lần huấn luyện | Chỉ sử dụng một lần |
Kích thước batch (batch size)
Theo nghiên cứu về thuật toán Stochastic Gradient Descent (SGD), công thức cập nhật trọng số bao gồm:
Trong đó n là kích thước batch, η là tốc độ học. Ngoài gradient, hai yếu tố này trực tiếp quyết định cách cập nhật trọng số mô hình, từ góc độ tối ưu hóa, chúng là các tham số quan trọng nhất ảnh hưởng đến hiệu suất hội tụ của mô hình.
Kích thước batch lớn giúp tăng tốc độ huấn luyện và làm cho tính toán gradient ổn định hơn, dẫn đến đường cong học mượt hơn. Tuy nhiên, khi batch size quá lớn, mô hình dẫn đến hội tụ tại cực tiểu hẹp (sharp minimum), trong khi batch size nhỏ dẫn đến cực tiểu phẳng (flat minimum) với khả năng tổng quát tốt hơn.
Hiện tượng này chủ yếu xảy ra vì batch size lớn làm giảm thời gian huấn luyện hiệu quả, trong khi nhiễu từ batch size nhỏ giúp thoát khỏi các cực tiểu hẹp. Do đó, việc tăng batch size có một ngưỡng giới hạn.
Bộ tối ưu hóa
Bộ tối ưu hóa là công cụ tính toán gradient và cập nhật các tham số cấu trúc mô hình để tiến gần hoặc đạt đến giá trị tối ưu, nơi hàm mất mát đạt giá trị nhỏ nhất.
Khái niệm gradient
Gradient biểu thị hướng đạo hàm của một hàm tại điểm đó đạt giá trị lớn nhất, tức là hướng mà hàm biến đổi nhanh nhất tại điểm đó. Về cơ bản, đó là đạo hàm riêng của hàm mất mát theo tham số. Mục tiêu của bộ tối ưu là tìm điểm cực tiểu của hàm mất mát, nơi đạo hàm riêng theo tham số bằng 0 hoặc gần bằng 0.
Trên đồ thị, L là hàm mất mát, w là tham số, w0 là giá trị cụ thể của tham số. Đường nét đứt màu xanh biểu thị đạo hàm riêng của hàm mất mát theo w0. Bộ tối ưu cần cập nhật tham số theo hướng đạo hàm để đạt được tỷ lệ thay đổi lớn nhất.
Hướng thay đổi của bộ tối ưu là hướng làm giảm giá trị hàm mất mát, gọi là gradient descent. Do đó, bộ tối ưu cần cập nhật tham số w0 theo hướng từ trái sang phải.
Động lượng (Momentum)
Động lượng có thể hiểu là "quán tính". Trên đường cong mất mát, nếu coi như một quả cầu lăn xuống dốc, do quán tính, ngay cả khi đến điểm cực tiểu, quả cầu vẫn có thể tiếp tục di chuyển vượt qua điểm đó nếu quán tính đủ lớn.
Trong tối ưu hóa, "quán tính" trở thành "động lượng". Giả sử gradient tại điểm θ0 là g0 (mũi tên đỏ). Vì chưa di chuyển nên động lượng m0 bằng 0.
Theo nguyên tắc gradient descent, hướng thay đổi của hàm mục tiêu nên ngược với hướng gradient, tức là theo hướng đường nét liền màu xanh, dẫn đến điểm θ1, tạo ra động lượng m1.
Tại θ1, gradient là g1. Nếu chỉ xét gradient descent, tham số nên thay đổi sang phải theo hướng đường nét đứt đỏ.
Nhưng do tồn tại động lượng m1, cần xét cả ảnh hưởng của động lượng theo hướng đường nét đứt xanh.
Vì vậy, dưới ảnh hưởng kép của gradient descent và động lượng, hướng thay đổi thực tế là đường nét liền xanh mới, tạo ra động lượng m2 và đến điểm θ2.
Công thức động lượng có thể viết là:
λ là hệ số động lượng, η là tốc độ học. Khi mở rộng công thức m2, ta thấy hành vi hiện tại của hàm mục tiêu và tham số chịu ảnh hưởng không chỉ bởi gradient hiện tại mà còn bởi các gradient trước đó.
SGD (Stochastic Gradient Descent)
Trong PyTorch, sử dụng SGD bằng cách gọi trực tiếp phương thức đã được đóng gói. Trong đó, parameters là tham số mô hình, lr là tốc độ học ban đầu, momentum là giá trị động lượng. Thông thường giá trị động lượng gần 1, ví dụ 0.8, 0.9, nhưng vẫn nên điều chỉnh tùy nhiệm vụ. Giá trị động lượng càng gần 1, ảnh hưởng của gradient trước càng lớn.
import torch.optim as optimizer
# Bộ tối ưu SGD
optimizer_instance = optimizer.SGD(model_parameters, learning_rate, momentum_value)
SGDR (SGD + Cosine Annealing)
Một số tập huấn luyện quy mô lớn không sử dụng Adam mà vẫn dùng SGD cổ điển, kết hợp với chiến lược giảm tốc độ học theo tỷ lệ cố định. Tuy nhiên, bài báo "STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS" đề xuất SGD có khởi động lại nóng, có thể giảm số lần huấn luyện, tăng tốc độ và cải thiện độ chính xác.
SGDR sử dụng chiến lược thay đổi tốc độ học cosine annealing và bộ tối ưu SGD.
from torch import optim_module
from torch.optim import lr_scheduler_module
network_model, params = build_network(config)
# Bộ tối ưu
optimizer = optim_module.SGD(params, lr, mom_val)
# Chiến lược tốc độ học
scheduler = lr_scheduler_module.CosineAnnealingWarmRestarts(optimizer, period_initial, period_multiplier, min_lr, last_epoch_num)