7 Aralık'ta düzenlenecek Makine Öğreniminde Kadın Sempozyumu'na katılın Şimdi kaydolun

Birleşik Öğrenim

genel bakış

Bu belge, TensorFlow'da uygulanan mevcut makine öğrenimi modelleriyle birleşik eğitim veya değerlendirme gibi birleşik öğrenme görevlerini kolaylaştıran arabirimleri tanıtır. Bu arayüzleri tasarlarken birincil hedefimiz, başlık altında nasıl çalıştığına dair bilgi gerektirmeden birleşik öğrenme ile deney yapmayı mümkün kılmak ve uygulanan birleşik öğrenme algoritmalarını çeşitli mevcut modeller ve veriler üzerinde değerlendirmekti. Sizi platforma katkıda bulunmaya teşvik ediyoruz. TFF, genişletilebilirlik ve birleştirilebilirlik göz önünde bulundurularak tasarlanmıştır ve katkıları memnuniyetle karşılıyoruz; ne ile geldiğini görmek için heyecanlıyız!

Bu katman tarafından sunulan arayüzler aşağıdaki üç ana bölümden oluşur:

  • Modeller Mevcut modellerinizi TFF ile kullanmak üzere sarmanıza olanak tanıyan sınıflar ve yardımcı işlevler. Bir modeli sarmak, tek bir sarma işlevini çağırmak (örneğin, tff.learning.from_keras_model ) veya tam özelleştirilebilirlik için tff.learning.Model arabiriminin bir alt sınıfını tanımlamak kadar basit olabilir.

  • Birleşik Hesap Oluşturucular . Mevcut modellerinizi kullanarak eğitim veya değerlendirme için birleşik hesaplamalar oluşturan yardımcı işlevler.

  • Veri kümeleri . Birleştirilmiş öğrenme senaryolarının simülasyonunda kullanmak için Python'da indirebileceğiniz ve erişebileceğiniz hazır veri koleksiyonları. Birleştirilmiş öğrenme, merkezi bir konumdan kolayca indirilemeyen merkezi olmayan verilerle kullanılmak üzere tasarlanmış olsa da, araştırma ve geliştirme aşamalarında, yerel olarak indirilebilen ve manipüle edilebilen verileri kullanarak ilk deneyler yapmak, özellikle de geliştiriciler için genellikle uygundur. yaklaşımda yeni.

Bu arabirimler, tff.simulation içinde gruplandırılmış araştırma veri kümeleri ve simülasyonla ilgili diğer yetenekler dışında, öncelikle tff.learning ad alanında tanımlanır. Bu katman, aynı zamanda bir çalışma zamanı ortamı sağlayan Federated Core (FC) tarafından sunulan daha düşük seviyeli arayüzler kullanılarak uygulanır.

Devam etmeden önce, somut örnekler kullanarak burada açıklanan kavramların çoğunu tanıttıkları için, ilk olarak görüntü sınıflandırma ve metin oluşturma ile ilgili öğreticileri incelemenizi öneririz. TFF'nin nasıl çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız, birleşik hesaplamaların mantığını ifade etmek için kullandığımız alt düzey arayüzlere bir giriş olarak özel algoritmalar eğitimine göz atmak ve mevcut uygulamayı incelemek isteyebilirsiniz. tff.learning arayüzleri.

Modeller

Mimari varsayımlar

seri hale getirme

TFF, yazdığınız makine öğrenimi modeli kodunun farklı yeteneklere sahip çok sayıda heterojen istemci üzerinde yürütülüyor olabileceği çeşitli dağıtılmış öğrenme senaryolarını desteklemeyi amaçlar. Spektrumun bir ucunda, bazı uygulamalarda bu istemciler güçlü veritabanı sunucuları olsa da, platformumuzun desteklemeyi amaçladığı birçok önemli kullanım, sınırlı kaynaklara sahip mobil ve gömülü cihazları içerir. Bu cihazların Python çalışma zamanlarını barındırabileceğini varsayamayız; Bu noktada varsayabileceğimiz tek şey, yerel bir TensorFlow çalışma zamanına ev sahipliği yapabilecek olmalarıdır. Bu nedenle, TFF'de yaptığımız temel bir mimari varsayım, model kodunuzun bir TensorFlow grafiği olarak serileştirilebilir olması gerektiğidir.

İstekli modu kullanmak gibi en son en iyi uygulamaları izleyerek TF kodunuzu hala geliştirebilirsiniz (ve yapmalısınız). Ancak, son kod serileştirilebilir olmalıdır (örneğin, istekli mod kodu için bir tf.function olarak sarılabilir). Bu, yürütme zamanında gerekli olan herhangi bir Python durumunun veya kontrol akışının serileştirilebilmesini sağlar (muhtemelen Autograph yardımıyla).

Şu anda TensorFlow, istekli mod TensorFlow'un serileştirilmesini ve seri durumdan çıkarılmasını tam olarak desteklememektedir. Bu nedenle, TFF'deki serileştirme şu anda tüm kodun TFF'nin kontrol ettiği bir tf.Graph içinde oluşturulması gereken TF 1.0 modelini takip etmektedir. Bu, şu anda TFF'nin halihazırda oluşturulmuş bir modeli tüketemeyeceği anlamına geliyor; bunun yerine, model tanımlama mantığı, bir tff.learning.Model döndüren bağımsız değişken olmayan bir işlevde paketlenir. Bu fonksiyon daha sonra modelin tüm bileşenlerinin serileştirilmesini sağlamak için TFF tarafından çağrılır. Ek olarak, güçlü bir şekilde yazılmış bir ortam olduğundan, TFF, modelinizin giriş türünün belirtimi gibi biraz ek meta veri gerektirecektir.

Toplama

Çoğu kullanıcının Keras kullanarak modeller oluşturmasını şiddetle tavsiye ederiz, aşağıdaki Keras için Dönüştürücüler bölümüne bakın. Bu sarmalayıcılar, model güncellemelerinin toplanmasını ve ayrıca model için tanımlanan tüm ölçümleri otomatik olarak işler. Ancak, genel bir tff.learning.Model için toplamanın nasıl işlendiğini anlamak yine de faydalı olabilir.

Birleşik öğrenmede her zaman en az iki toplama katmanı vardır: yerel cihaz üzerinde toplama ve cihazlar arası (veya birleşik) toplama:

  • Yerel toplama . Bu toplama düzeyi, tek bir istemcinin sahip olduğu birden çok örnek grubu arasında toplama anlamına gelir. Hem model yerel olarak eğitildikçe sırayla gelişmeye devam eden model parametreleri (değişkenler) hem de modelinizin yerel olarak yeniden güncelleyeceği hesapladığınız istatistikler (ortalama kayıp, doğruluk ve diğer ölçümler gibi) için geçerlidir. her bir müşterinin yerel veri akışı üzerinde yinelendiğinden.

    Bu düzeyde toplama gerçekleştirmek, model kodunuzun sorumluluğundadır ve standart TensorFlow yapıları kullanılarak gerçekleştirilir.

    İşlemenin genel yapısı aşağıdaki gibidir:

    • Model ilk olarak, parti sayısı veya işlenen örneklerin sayısı, parti başına veya örnek başına kayıpların toplamı, vb. gibi kümeleri tutmak için tf.Variable oluşturur.

    • TFF, Model forward_pass yöntemini, sonraki müşteri verileri toplu işlerinde sırayla, birden çok kez çağırır; bu, bir yan etki olarak çeşitli kümeleri tutan değişkenleri güncellemenize olanak tanır.

    • Son olarak, TFF, modelinizin topladığı tüm özet istatistikleri istemci tarafından dışa aktarılacak kompakt bir metrikler kümesinde derlemesine izin vermek için Modelinizde report_local_unfinalized_metrics yöntemini çağırır. Model kodunuzun, örneğin, kayıpların toplamını, ortalama kaybı vb. dışa aktarmak için işlenen örnek sayısına bölebileceği yer burasıdır.

  • Federe toplama . Bu toplama düzeyi, sistemdeki birden çok istemci (cihaz) arasında toplamayı ifade eder. Yine, hem istemciler arasında ortalaması alınan model parametreleri (değişkenler) hem de yerel toplamanın bir sonucu olarak modelinizin dışa aktardığı metrikler için geçerlidir.

    Bu düzeyde toplama yapmak TFF'nin sorumluluğundadır. Ancak bir model yaratıcısı olarak bu süreci kontrol edebilirsiniz (daha fazlası aşağıdadır).

    İşlemenin genel yapısı aşağıdaki gibidir:

    • Başlangıç ​​modeli ve eğitim için gerekli tüm parametreler, bir sunucu tarafından bir dizi eğitim veya değerlendirmeye katılacak olan bir istemci alt kümesine dağıtılır.

    • Her istemcide, bağımsız ve paralel olarak, model kodunuz, yeni bir model parametreleri seti (eğitim sırasında) ve yukarıda açıklandığı gibi yeni bir yerel ölçüm seti (bu yereldir) üretmek için bir yerel veri yığınları akışında tekrar tekrar çağrılır. toplama).

    • TFF, model parametrelerini ve sistem genelinde yerel olarak dışa aktarılan metrikleri toplamak ve toplamak için dağıtılmış bir toplama protokolü çalıştırır. Bu mantık, TFF'nin kendi birleşik hesaplama dili (TensorFlow'da değil) kullanılarak bildirimsel bir şekilde ifade edilir. Toplama API'si hakkında daha fazla bilgi için özel algoritmalar eğiticisine bakın.

Soyut arayüzler

Bu temel yapıcı + meta veri arabirimi, tff.learning.Model arabirimiyle aşağıdaki gibi temsil edilir:

  • yapıcı, forward_pass ve report_local_unfinalized_metrics yöntemleri, model değişkenlerini, iletmeyi ve raporlamak istediğiniz istatistikleri uygun şekilde oluşturmalıdır. Bu yöntemlerle oluşturulan TensorFlow, yukarıda tartışıldığı gibi serileştirilebilir olmalıdır.

  • input_spec özelliğinin yanı sıra eğitilebilir, eğitilemez ve yerel değişkenlerinizin alt kümelerini döndüren 3 özellik meta verileri temsil eder. TFF bu bilgiyi, modelinizin parçalarını birleşik optimizasyon algoritmalarına nasıl bağlayacağınızı belirlemek ve oluşturulan sistemin doğruluğunu doğrulamaya yardımcı olmak için dahili tip imzaları tanımlamak için kullanır (böylece modeliniz, modelinizin neyle eşleşmeyen veriler üzerinden somutlaştırılamaz? model tüketmek için tasarlanmıştır).

Ek olarak, soyut arabirim tff.learning.Model , bir metriğin sonlandırılmamış değerlerini alan ( report_local_unfinalized_metrics() tarafından döndürülen) ve kesinleştirilmiş metrik değerlerini döndüren bir metric_finalizers özelliğini ortaya çıkarır. metric_finalizers ve report_local_unfinalized_metrics() yöntemi, birleşik eğitim süreçleri veya değerlendirme hesaplamaları tanımlanırken istemciler arası bir ölçüm toplayıcı oluşturmak için birlikte kullanılacaktır. Örneğin, basit bir tff.learning.metrics.sum_then_finalize toplayıcısı önce istemcilerden gelen sonlandırılmamış metrik değerleri toplar ve ardından sunucudaki sonlandırıcı işlevlerini çağırır.

Kendi özel tff.learning.Model nasıl tanımlayacağınıza ilişkin örnekleri, görüntü sınıflandırma eğitimimizin ikinci bölümünde ve model_examples.py test için kullandığımız örnek modellerde bulabilirsiniz.

Keras için Dönüştürücüler

TFF tarafından gereken neredeyse tüm bilgiler tf.keras arabirimleri çağrılarak elde edilebilir, bu nedenle bir Keras modeliniz varsa, bir tff.learning.from_keras_model oluşturmak için tff.learning.Model .

TFF'nin hala bir kurucu - aşağıdaki gibi argümansız bir model işlevi - sağlamanızı istediğini unutmayın:

def model_fn():
  keras_model = ...
  return tff.learning.from_keras_model(keras_model, sample_batch, loss=...)

Modelin kendisine ek olarak, TFF'nin modelinizin girdisinin türünü ve şeklini belirlemek için kullandığı örnek bir veri grubu sağlarsınız. Bu, TFF'nin istemci cihazlarda gerçekten mevcut olacak veriler için modeli düzgün bir şekilde somutlaştırabilmesini sağlar (çünkü bu verilerin, seri hale getirilecek TensorFlow'u oluştururken genel olarak mevcut olmadığını varsayıyoruz).

Keras sarmalayıcıların kullanımı, görüntü sınıflandırma ve metin oluşturma eğitimlerimizde gösterilmektedir.

Birleşik Hesap Oluşturucular

tff.learning paketi, öğrenme ile ilgili görevleri gerçekleştiren tff.Computation s için birkaç oluşturucu sağlar; Bu tür hesaplamaların gelecekte genişlemesini bekliyoruz.

Mimari varsayımlar

Uygulamak

Birleşik bir hesaplamayı çalıştırmanın iki farklı aşaması vardır.

  • Derleme : TFF önce birleşik öğrenme algoritmalarını, dağıtılmış hesaplamanın tamamının soyut bir serileştirilmiş temsilinde derler . Bu, TensorFlow serileştirmesinin gerçekleştiği zamandır, ancak daha verimli yürütmeyi desteklemek için başka dönüşümler de gerçekleşebilir. Derleyici tarafından yayınlanan serileştirilmiş gösterime birleşik hesaplama olarak atıfta bulunuyoruz.

  • Execute TFF, bu hesaplamaları yürütmenin yollarını sağlar. Şimdilik, yürütme yalnızca yerel bir simülasyon aracılığıyla desteklenmektedir (örneğin, simüle edilmiş merkezi olmayan verileri kullanan bir not defterinde).

Birleştirilmiş model ortalamasını kullanan bir eğitim algoritması veya birleştirilmiş değerlendirme gibi, TFF'nin Federated Learning API'si tarafından oluşturulan birleştirilmiş bir hesaplama, bir dizi öğeyi içerir, özellikle de:

  • Modelinizin eğitim/değerlendirme döngüsünü yönlendirmek için Federated Learning çerçevesi tarafından oluşturulan ek TensorFlow kodunun yanı sıra model kodunuzun serileştirilmiş bir biçimi (optimizer oluşturma, model güncellemelerini uygulama, tf.data.Dataset s üzerinde yineleme ve hesaplama ölçümleri gibi), ve toplu güncellemeyi sunucuya uygulamak, birkaç isim).

  • İstemciler ve bir sunucu arasındaki iletişimin (tipik olarak istemci aygıtları arasında çeşitli toplama biçimleri ve sunucudan tüm istemcilere yayın yapma) ve bu dağıtılmış iletişimin istemci-yerel veya sunucu-yerel yürütme ile nasıl karıştırıldığına ilişkin bildirimsel bir belirtim TensorFlow kodu.

Bu serileştirilmiş formda temsil edilen birleşik hesaplamalar , Python'dan farklı, platformdan bağımsız bir dahili dilde ifade edilir, ancak Federated Learning API'yi kullanmak için bu gösterimin ayrıntılarıyla ilgilenmeniz gerekmez. Hesaplamalar, Python kodunuzda tff.Computation türünde nesneler olarak temsil edilir; bunları çoğunlukla opak Python callable s olarak değerlendirebilirsiniz.

Öğreticilerde, yerel olarak yürütülmek üzere bu birleşik hesaplamaları normal Python işlevleriymiş gibi çağıracaksınız. Bununla birlikte, TFF, federe hesaplamaları yürütme ortamının çoğu yönünden bağımsız bir şekilde ifade etmek üzere tasarlanmıştır, böylece bunlar potansiyel olarak örneğin Android çalıştıran cihaz gruplarına veya bir veri merkezindeki kümelere konuşlandırılabilir. Yine, bunun ana sonucu, serileştirmeyle ilgili güçlü varsayımlardır. Özellikle, aşağıda açıklanan build_... yöntemlerinden birini çağırdığınızda, hesaplama tamamen seri hale getirilir.

modelleme durumu

TFF işlevsel bir programlama ortamıdır, ancak birleşik öğrenmeyle ilgili birçok süreç durum bilgisidir. Örneğin, birden çok federe model ortalama alma turunu içeren bir eğitim döngüsü, durum bilgisi olan bir süreç olarak sınıflandırabileceğimize bir örnektir. Bu süreçte, turdan tura gelişen durum, eğitilmekte olan model parametreleri kümesini ve muhtemelen optimize edici ile ilişkili ek durumu (örneğin, bir momentum vektörü) içerir.

TFF işlevsel olduğundan, durum bilgisi olan süreçler, TFF'de mevcut durumu girdi olarak kabul eden ve ardından güncel durumu çıktı olarak sağlayan hesaplamalar olarak modellenir. Durum bilgisi olan bir süreci tam olarak tanımlamak için, ilk durumun nereden geldiğini de belirtmek gerekir (aksi takdirde süreci ön yükleme yapamayız). Bu, tff.templates.IterativeProcess yardımcı sınıfının tanımında, sırasıyla başlatma ve yinelemeye karşılık gelen 2 özellik initialize ve next ile yakalanır.

Mevcut inşaatçılar

Şu anda TFF, birleşik eğitim ve değerlendirme için birleşik hesaplamalar oluşturan çeşitli oluşturucu işlevleri sağlar. İki dikkate değer örnek şunları içerir:

veri kümeleri

Mimari varsayımlar

Müşteri seçimi

Tipik birleştirilmiş öğrenme senaryosunda, potansiyel olarak yüz milyonlarca istemci cihazından oluşan büyük bir popülasyona sahibiz ve bunların yalnızca küçük bir kısmı herhangi bir anda aktif ve eğitim için kullanılabilir olabilir (örneğin, bu, aşağıdaki istemcilerle sınırlı olabilir). bir güç kaynağına takılı, ölçülü bir ağda değil ve başka türlü boşta). Genel olarak, eğitime veya değerlendirmeye katılmak için mevcut olan müşteri grubu, geliştiricinin kontrolü dışındadır. Ayrıca, milyonlarca müşteriyi koordine etmek pratik olmadığı için, tipik bir eğitim veya değerlendirme turu , rastgele örneklenebilecek mevcut müşterilerin yalnızca bir kısmını içerecektir.

Bunun kilit sonucu, tasarım gereği birleşik hesaplamaların kesin katılımcı kümesinden habersiz bir şekilde ifade edilmesidir; tüm işlemler, soyut bir anonim istemci grubu üzerinde toplu işlemler olarak ifade edilir ve bu grup bir eğitim turundan diğerine değişebilir. Hesaplamanın somut katılımcılara ve dolayısıyla hesaplamaya besledikleri somut verilere fiili olarak bağlanması, böylece hesaplamanın kendisinin dışında modellenir.

Birleştirilmiş öğrenme kodunuzun gerçekçi bir dağıtımını simüle etmek için genellikle şuna benzeyen bir eğitim döngüsü yazacaksınız:

trainer = tff.learning.algorithms.build_weighted_fed_avg(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

while True:
  data_for_this_round = sample(federated_training_data)
  result = trainer.next(state, data_for_this_round)
  state = result.state

Bunu kolaylaştırmak için, simülasyonlarda TFF kullanılırken, katılan istemci cihaz başına bir öğenin o cihazın yerel tf.data.Dataset temsil etmesi için birleştirilmiş veriler Python list olarak kabul edilir.

Soyut arayüzler

tf.data.Dataset edilmiş birleşik veri kümeleriyle uğraşmayı standart hale getirmek için, tff.simulation.datasets.ClientData , istemci kümesinin numaralandırılmasına ve belirli bir müşteri. Bu tf.data.Dataset ler, istekli modda oluşturulan birleşik hesaplamalara girdi olarak doğrudan beslenebilir.

Müşteri kimliklerine erişim yeteneğinin, yalnızca simülasyonlarda kullanım için veri kümeleri tarafından sağlanan bir özellik olduğu ve belirli müşteri alt kümelerinden gelen veriler üzerinde eğitim alma yeteneğinin gerekli olabileceği (örneğin, farklı verilerin günlük kullanılabilirliğini simüle etmek için) not edilmelidir. müşteri türleri). Derlenmiş hesaplamalar ve temel alınan çalışma zamanı, herhangi bir müşteri kimliği kavramını içermez . Müşterilerin belirli bir alt kümesinden gelen veriler, örneğin bir tff.templates.IterativeProcess.next çağrısında girdi olarak seçildikten sonra, müşteri kimlikleri artık içinde görünmez.

Kullanılabilir veri kümeleri

tff.simulation.datasets ad alanını simülasyonlarda kullanım için tff.simulation.datasets.ClientData arabirimini uygulayan veri kümeleri için ayırdık ve görüntü sınıflandırma ve metin oluşturma eğitimlerini desteklemek için veri kümeleriyle tohumladık. Sizi platforma kendi veri kümelerinize katkıda bulunmaya teşvik etmek istiyoruz.