Split Learning
Split learning chia mạng neural tại một layer phân tách để client giữ dữ liệu thô và các layer đầu, trong khi server huấn luyện phần còn lại dựa trên activation từ client.
Học phân tách là phương pháp huấn luyện phân tán cộng tác, chia mạng nơ-ron tại một layer cắt được chọn giữa chủ sở hữu dữ liệu (client) và server. Client chạy các layer trước điểm cắt trên dữ liệu riêng tư của mình rồi chỉ gửi các activation thu được, đôi khi được gọi là dữ liệu bị xáo trộn; server chạy các layer còn lại, tính loss và gửi lại gradient tại điểm cắt để client cập nhật các layer của mình. Dữ liệu huấn luyện thô không bao giờ rời khỏi client, và không bên nào nắm giữ toàn bộ model. Otkrist Gupta và Ramesh Raskar thuộc MIT Media Lab giới thiệu phương pháp này vào tháng 10 năm 2018 trong bài Học phân tán mạng nơ-ron sâu trên nhiều tác nhân; bài tiếp theo của nhóm vào tháng 12 năm 2018, Split Learning for Health, đề xuất các cấu hình cho phép bệnh viện nắm giữ nhiều loại dữ liệu bệnh nhân khác nhau, chẳng hạn ảnh quét dùng trong phân tích ảnh y tế, cùng huấn luyện model mà không chia sẻ hồ sơ thô.
Cách thức hoạt động của học phân tách#
Mỗi bước huấn luyện đi qua điểm cắt hai lần: activation được gửi từ client đến server trong lượt truyền xuôi, còn gradient của loss theo các activation đó được gửi ngược lại trong quá trình lan truyền ngược. Vì quy tắc dây chuyền chỉ cần một gradient đó để tiếp tục, các cập nhật của client giống hệt khi huấn luyện model không bị phân tách. Một mô phỏng trong cùng một tiến trình bằng PyTorch minh họa quá trình trao đổi:
import torch
from torch import nn
torch.manual_seed(0)
client = nn.Sequential(nn.Linear(784, 256), nn.ReLU()) # các layer trước điểm cắt, nằm cạnh dữ liệu riêng tư
server = nn.Sequential(nn.Linear(256, 10)) # các layer sau điểm cắt
images, labels = torch.randn(32, 784), torch.randint(0, 10, (32,))
# Client: truyền xuôi đến layer cắt, sau đó chỉ gửi các activation
activations = client(images)
received = activations.detach().requires_grad_()
# Server: hoàn tất lượt truyền xuôi và lan truyền ngược đến điểm cắt, sau đó gửi lại gradient đó
nn.functional.cross_entropy(server(received), labels).backward()
# Client: tiếp tục lan truyền ngược từ gradient nhận được
activations.backward(received.grad)
split_grad = client[0].weight.grad.clone()
# Cùng bước này trên model không bị phân tách sẽ tạo ra các gradient giống hệt cho client
client.zero_grad()
nn.functional.cross_entropy(server(client(images)), labels).backward()
print("Same client gradients as unsplit training:", torch.equal(split_grad, client[0].weight.grad))Đoạn mã in ra Same client gradients as unsplit training: True. Sau đó, mỗi bên cập nhật optimizer của mình. Với nhiều client, giao thức ban đầu huấn luyện lần lượt từng client; mỗi client nhận các trọng số mới nhất phía client từ client trước đó.
Cấu hình thay đổi tùy theo dữ liệu cần được giữ riêng tư. Thiết lập cơ bản ở trên gửi nhãn cho server; thiết lập hình chữ U cũng giữ các layer cuối cùng và nhãn ở client; còn thiết lập dọc phục vụ các tổ chức nắm giữ những đặc trưng khác nhau của cùng một bản ghi:
Học phân tách và học liên kết#
Học liên kết cũng giữ dữ liệu trên máy của chủ sở hữu, nhưng mỗi client huấn luyện một bản sao model hoàn chỉnh rồi gửi các bản cập nhật trọng số để lấy trung bình. Học phân tách thay vào đó gửi activation và gradient, nên client cần ít năng lực tính toán hơn nhiều và không bao giờ giữ toàn bộ model; lượng giao tiếp tăng theo khối lượng dữ liệu thay vì kích thước model, còn client huấn luyện lần lượt thay vì song song. SplitFed learning do Chandra Thapa và cộng sự đề xuất năm 2020 kết hợp hai phương pháp bằng cách chạy song song các layer phía client và lấy trung bình theo kiểu học liên kết.
Học phân tách dọc cũng được áp dụng trong lĩnh vực tài chính, nơi một ngân hàng và một đối tác nắm giữ các đặc trưng khác nhau của cùng khách hàng cùng huấn luyện một model, như trong hướng dẫn tiếp thị ngân hàng của SecretFlow, mà không trao đổi dữ liệu riêng tư. Xử lý song song theo pipeline cũng chia mạng theo chiều sâu tương tự, nhưng thực hiện trên các GPU trong cùng một cụm đáng tin cậy để đưa model lớn vào bộ nhớ.
Rủi ro về quyền riêng tư#
Activation và gradient vẫn chứa thông tin về dữ liệu. Activation ở các layer đầu có thể bị đảo ngược để khôi phục ảnh dễ nhận biết; khi server nắm giữ nhãn, gradient server gửi lại có thể tiết lộ nhãn cho client. Tại ACM CCS 2021, Dario Pasquini, Giuseppe Ateniese và Massimo Bernaschi cho thấy server độc hại có thể chiếm quyền kiểm soát quá trình huấn luyện thông qua gradient được gửi lại, điều hướng các layer phía client theo cách cho phép server tái tạo đầu vào riêng tư. Biện pháp phòng vệ thêm nhiễu bằng quyền riêng tư vi sai, phạt mức độ thông tin đầu vào mà activation tiết lộ hoặc phát hiện gradient bất thường; mỗi biện pháp đều có thể làm giảm độ chính xác ở một mức nhất định. Các hệ thống triển khai kết hợp học phân tách với biện pháp kiểm soát bảo mật dữ liệu như xác thực và truyền tải được mã hóa, vì bản thân giao thức chỉ quy định những gì đi qua điểm cắt.
Chọn layer cắt#
Điểm cắt xác định mức cân bằng giữa năng lực tính toán phía client, lưu lượng truyền tải và mức độ lộ thông tin: điểm cắt sớm cần ít năng lực tính toán phía client nhất nhưng gửi các activation lớn vẫn giống đầu vào; điểm cắt muộn gửi feature map trừu tượng hơn nhưng đòi hỏi phần cứng phía client mạnh hơn, một yếu tố quan trọng đối với thiết bị AI biên. Skip connection làm phức tạp việc lựa chọn vì phải gửi mọi tensor đi qua điểm cắt. Cắt Ultralytics YOLO26 sau backbone đồng nghĩa với việc gửi ba feature map, bởi cấu hình model đưa đầu ra của các layer 4, 6 và 10 vào neck: với YOLO26n tại imgsz=640, chúng chứa 1,126,400 giá trị, gần bằng 1,228,800 giá trị trong ảnh đầu vào.










