Hypernetworks
Hypernetwork là mạng nơ-ron tạo ra trọng số của một mạng khác từ đầu vào như embedding tác vụ. Nội dung bao gồm ứng dụng và ví dụ PyTorch.
Hypernetwork là một mạng neural có đầu ra là trọng số của một mạng khác, gọi là mạng đích hoặc mạng chính. Thay vì học một tập trọng số model cố định, mạng đích nhận trọng số do hypernetwork tính toán từ đầu vào điều kiện hóa, chẳng hạn như mã định danh task, hồ sơ người dùng, mô tả văn bản hoặc ảnh ví dụ; nhờ đó, chỉ với một lượt forward pass, một hypernetwork đã huấn luyện có thể tạo ra một model chuyên biệt khác nhau cho mỗi đầu vào. Trong bài báo HyperNetworks của Google Brain năm 2016, David Ha, Andrew Dai và Quoc Le dùng các hypernetwork nhỏ để tạo trọng số cho mạng tích chập sâu và mạng hồi quy; ngày nay, ý tưởng này xuất hiện trong học liên tục, cá nhân hóa model khuếch tán và tìm kiếm kiến trúc neural.
Cách hypernetwork hoạt động#
Trong quá trình huấn luyện, chỉ các tham số của chính hypernetwork được học. Đầu vào điều kiện hóa, thường là một embedding được học cho mỗi task hoặc layer, đi qua hypernetwork để tạo trọng số của mạng đích; mạng đích xử lý dữ liệu thực tế bằng các trọng số đó, còn lan truyền ngược truyền gradient của loss qua các trọng số được tạo trở lại hypernetwork:
Ha và cộng sự phân biệt hypernetwork tĩnh, tạo trọng số cho mỗi layer một lần từ embedding của layer, với hypernetwork động, tính toán lại trọng số cho từng đầu vào hoặc bước thời gian, như HyperLSTM của họ thực hiện ở mỗi bước của một chuỗi. Khi chạy, các trọng số được tạo là tensor thông thường, nên mạng đích có thể dùng bất kỳ kiến trúc nào, bao gồm cả layer Transformer có các phép chiếu attention được tạo từ hypernetwork. Thách thức kỹ thuật chính là kích thước đầu ra: một layer có hàng triệu trọng số sẽ cần hypernetwork tạo ra hàng triệu đầu ra cho mỗi layer. Các thiết kế thực tế tạo trọng số theo từng khối, mỗi khối dùng embedding riêng; chỉ tạo các hệ số hạng thấp nhỏ cho từng bản cập nhật trọng số; hoặc chỉ tạo hệ số scale và dịch chuyển theo từng kênh, như trong điều biến tuyến tính theo đặc trưng (FiLM).
Ví dụ Hypernetwork trong PyTorch#
Ví dụ PyTorch này huấn luyện một hypernetwork trên một họ task gồm các sóng sin có biên độ và pha khác nhau. Với mỗi task, hypernetwork tạo toàn bộ 97 trọng số của một mạng đích nhỏ; chỉ hypernetwork được huấn luyện:
import math
import torch
from torch import nn
torch.manual_seed(0)
x = torch.linspace(-math.pi, math.pi, 64)
# Hypernetwork: maps a task (amplitude, phase) to all 97 weights of a 1-32-1 target network
hyper = nn.Sequential(nn.Linear(2, 128), nn.ReLU(), nn.Linear(128, 97))
optimizer = torch.optim.Adam(hyper.parameters(), lr=1e-3)
def target(x, w):
"""Run the target network with weights w produced by the hypernetwork."""
return torch.relu(x[:, None] * w[:32] + w[32:64]) @ w[64:96] + w[96]
# Train only the hypernetwork, on a new random sine task at every step
for step in range(5000):
task = torch.rand(2) * torch.tensor([2.0, math.pi])
loss = ((target(x, hyper(task)) - task[0] * torch.sin(x + task[1])) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Unseen task: one forward pass of the hypernetwork produces the target network's weights
y = 1.5 * torch.sin(x + 1.0)
with torch.no_grad():
mse = ((target(x, hyper(torch.tensor([1.5, 1.0]))) - y) ** 2).mean()
print(f"Unseen task MSE: {mse:.3f} with generated weights, {(y**2).mean():.3f} predicting zero")Đoạn mã in ra Unseen task MSE: 0.010 with generated weights, 1.132 predicting zero. Mạng đích có biên độ 1.5 và pha 1.0 chưa từng được huấn luyện; trọng số của mạng được tạo bằng một lần gọi hypernetwork, vốn đã học được cách các trọng số phù hợp thay đổi trên toàn bộ họ task.
Ứng dụng#
- Học liên tục: Hypernetwork có điều kiện theo task lưu một embedding nhỏ cho mỗi task và tạo lại trọng số của task đó khi cần. Khi huấn luyện trên task mới, một penalty giữ cho đầu ra của hypernetwork ứng với embedding của các task trước không đổi, qua đó hạn chế hiện tượng catastrophic forgetting.
- Cá nhân hóa model tạo sinh: HyperDreamBooth dự đoán một tập trọng số cá nhân hóa nhỏ cho model khuếch tán văn bản thành ảnh từ một ảnh chân dung duy nhất, sau đó tinh chỉnh nhanh các trọng số đó; quá trình cá nhân hóa model mất khoảng 20 giây, nhanh hơn DreamBooth 25 lần, với trọng số cá nhân hóa nhỏ hơn model DreamBooth 10.000 lần.
- Tìm kiếm kiến trúc neural: Hypernetwork đồ thị đọc kiến trúc ứng viên dưới dạng đồ thị rồi dự đoán trọng số của kiến trúc đó, nhờ vậy có thể xếp hạng ứng viên theo độ chính xác trên tập validation bằng trọng số dự đoán, thay vì huấn luyện từng ứng viên một.
- Phân loại zero-shot: Các tác giả CLIP mô tả text encoder của CLIP như một hypernetwork tạo trọng số cho bộ phân loại tuyến tính từ tên lớp, cho phép CLIP phân loại ảnh vào các danh mục chưa từng xuất hiện dưới dạng nhãn huấn luyện.
Các detector có open vocabulary áp dụng cùng ý tưởng vào bài toán detection. YOLOE-26 của Ultralytics, xây dựng trên YOLO26, mã hóa mỗi tên lớp được truyền vào set_classes() một lần bằng MobileCLIP2, một text encoder gọn nhẹ theo phong cách CLIP, rồi dùng các embedding thu được làm trọng số để chấm điểm từng vùng ứng viên theo từng lớp. Khi export, các embedding này được gộp vào một convolution 1x1 thông thường trong detection head.
Hypernetwork và các thuật ngữ liên quan#
- Fine-tuning: Điều chỉnh một tập trọng số cố định cho task mới bằng các bước gradient trên dữ liệu của task đó. Hypernetwork đã huấn luyện tạo trọng số cho task mới chỉ bằng một lượt forward pass, với đầu vào duy nhất là dữ liệu điều kiện hóa của task.
- Meta-learning: Mục tiêu rộng hơn là học cách thích nghi nhanh với task mới. Hypernetwork là một cách triển khai mục tiêu này, ánh xạ mô tả task hoặc một vài ví dụ trực tiếp thành trọng số.
- Mixture of experts (MoE): Định tuyến mỗi đầu vào đến một vài mạng con chuyên gia cố định trong số nhiều mạng. Hypernetwork tính toán trọng số mới cho từng đầu vào hoặc task thay vì chọn trong số các trọng số đã lưu.
- Fast weight programmer: Các mạng ghi trọng số ngắn hạn cho một mạng khác trong quá trình xử lý một chuỗi, một ý tưởng xuất hiện từ đầu những năm 1990. Self-attention tuyến tính trong Transformer tương đương về mặt hình thức với một fast weight programmer như vậy.










