Split Learning
Bölünmüş öğrenme, sinir ağını bir kesim katmanında ayırır; böylece istemciler ham verileriyle ilk katmanları korurken sunucu, istemcilerin aktivasyonlarından kalan kısmı eğitir.
Bölünmüş öğrenme, bir sinir ağını seçilen bir kesme katmanında veri sahibi olan istemci ile sunucu arasında bölen bir ortak dağıtık eğitim yöntemidir. İstemci, özel verisi üzerinde kesme noktasından önceki katmanları çalıştırır ve yalnızca sonuçtaki aktivasyonları (bazen parçalanmış veri olarak adlandırılır) gönderir. Sunucu kalan katmanları çalıştırır, kaybı hesaplar ve istemcinin kendi katmanlarını güncelleyebilmesi için kesme noktasındaki gradyanı geri gönderir. Ham eğitim verileri istemciden hiç ayrılmaz ve taraflardan hiçbiri modelin tamamını elinde bulundurmaz. MIT Media Lab'den Otkrist Gupta ve Ramesh Raskar, yöntemi Ekim 2018'de Birden Çok Ajan Üzerinde Derin Sinir Ağlarının Dağıtık Öğrenimi başlıklı çalışmada tanıttı. Grubun Aralık 2018'de yayımladığı Split Learning for Health başlıklı devam çalışması, tıbbi görüntü analizi için taramalar gibi farklı türlerde hasta verilerine sahip hastanelerin ham kayıtları paylaşmadan birlikte model eğitmesini sağlayan yapılandırmalar önerdi.
Bölünmüş Öğrenme Nasıl Çalışır?#
Her eğitim adımında kesme noktasından iki kez geçilir: ileri geçişte aktivasyonlar istemciden sunucuya gider, geri yayılım sırasında ise bu aktivasyonlara göre kaybın gradyanı geri döner. Zincir kuralı, eğitime devam etmek için yalnızca bu gradyana ihtiyaç duyduğundan istemcinin güncellemeleri, bölünmemiş modeli eğitmekle aynıdır. PyTorch ile tek süreçte yapılan bir simülasyon bu alışverişi gösterir:
import torch
from torch import nn
torch.manual_seed(0)
client = nn.Sequential(nn.Linear(784, 256), nn.ReLU()) # kesme noktasından önceki katmanlar, özel verinin yanında
server = nn.Sequential(nn.Linear(256, 10)) # kesme noktasından sonraki katmanlar
images, labels = torch.randn(32, 784), torch.randint(0, 10, (32,))
# İstemci: kesme katmanına kadar ileri geçiş yap, sonra yalnızca aktivasyonları gönder
activations = client(images)
received = activations.detach().requires_grad_()
# Sunucu: ileri geçişi tamamla ve kesme noktasına kadar geri yayılım yap, sonra bu gradyanı geri gönder
nn.functional.cross_entropy(server(received), labels).backward()
# İstemci: dönen gradyandan başlayarak geri yayılıma devam et
activations.backward(received.grad)
split_grad = client[0].weight.grad.clone()
# Bölünmemiş modelde yapılan aynı adım, istemciye aynı gradyanları verir
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))Same client gradients as unsplit training: True yazdırılır. Ardından her taraf kendi iyileştiricisini bir adım ilerletir. Birden fazla istemci olduğunda özgün protokol, her istemcinin sırayla eğitilmesini sağlar; her istemci, kendisinden önceki istemcinin en güncel istemci tarafı ağırlıklarını devralır.
Düzenleme, neyin gizli tutulması gerektiğine göre değişir. Yukarıdaki standart kurulumda etiketler sunucuya gönderilir; U biçimli bir kurulumda son katmanlar ve etiketler de istemcide kalır; dikey kurulum ise aynı kayıtlara ilişkin farklı özelliklere sahip kuruluşlara hizmet eder:
Bölünmüş Öğrenme ve Federatif Öğrenme#
Federatif öğrenme de verileri sahiplerinin makinelerinde tutar; ancak her istemci modelin eksiksiz bir kopyasını eğitir ve ortalaması alınmak üzere ağırlık güncellemelerini gönderir. Bölünmüş öğrenme bunun yerine aktivasyonları ve gradyanları gönderir; böylece istemcilerin çok daha az hesaplama gücüne ihtiyacı olur ve modelin tamamını hiçbir zaman ellerinde bulundurmazlar. İletişim miktarı model boyutuna değil veri miktarına göre artar ve istemciler paralel yerine sırayla eğitilir. Chandra Thapa ve çalışma arkadaşlarının 2020'de önerdiği SplitFed öğrenme, istemci tarafı katmanlarını paralel çalıştırıp federatif öğrenme tarzında ortalamasını alarak bu iki yöntemi birleştirir.
Dikey bölünmüş öğrenme, farklı özelliklere sahip aynı müşteri kayıtlarını elinde bulunduran bir banka ile iş ortağının tek bir modeli eğittiği finans alanında da kullanılır. SecretFlow'un banka pazarlaması öğreticisi bu yöntemi, özel verileri birbirleriyle paylaşmadan gösterir. İş hattı paralelliği de aynı şekilde ağı derinliğine göre böler; ancak bu kez büyük bir modeli belleğe sığdırmak için tek bir güvenilir kümedeki GPU'lar arasında böler.
Gizlilik Riskleri#
Aktivasyonlar ve gradyanlar hâlâ veriler hakkında bilgi taşır. Erken katmanlardaki aktivasyonlar, tanınabilir görüntülere geri dönüştürülebilir; sunucu etiketleri elinde tuttuğunda gönderdiği gradyanlar bunları istemciye ifşa edebilir. Dario Pasquini, Giuseppe Ateniese ve Massimo Bernaschi, ACM CCS 2021'de kötü niyetli bir sunucunun gönderdiği gradyanlarla eğitimi ele geçirip istemcinin katmanlarını, sunucunun özel girdileri yeniden oluşturmasına olanak tanıyan bir biçime yönlendirebileceğini gösterdi. Savunma yöntemleri diferansiyel gizlilik ile gürültü ekler, aktivasyonların girdi hakkında ne kadar bilgi açığa çıkardığını cezalandırır veya alışılmadık gradyanları saptar; bunların her biri doğruluktan ödün verilmesine yol açabilir. Protokol yalnızca kesme noktasından nelerin geçtiğini düzenlediğinden, dağıtımlar bölünmüş öğrenmeyi kimlik doğrulama ve şifreli aktarım gibi veri güvenliği denetimleriyle birlikte kullanır.
Kesme Katmanını Seçme#
Kesme noktası; istemci hesaplama gücü, trafik ve veri açığa çıkma riski arasındaki dengeyi belirler: erken bir kesme, istemciden en az hesaplama gücünü ister ama girdiye hâlâ benzeyen büyük aktivasyonlar gönderir; daha geç bir kesme ise daha soyut özellik haritaları gönderir, ancak özellikle uç AI cihazlarında istemci donanımından daha fazlasını ister. Atlamalı bağlantılar seçimi zorlaştırır; çünkü kesme noktasından geçen her tensörün gönderilmesi gerekir. Ultralytics YOLO26 modelini omurgasından sonra kesmek, üç özellik haritasının gönderilmesini gerektirir; çünkü model yapılandırması, 4, 6 ve 10. katmanların çıktılarını boyun bölümüne aktarır: imgsz=640 boyutundaki YOLO26n için bu haritalar 1.126.400 değer içerir; bu sayı, giriş görüntüsündeki 1.228.800 değere yakındır.










