Birleşik Öğrenme

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 federe öğrenmeyi denemeyi mümkün kılmak ve uygulanan federe öğrenme algoritmalarını çeşitli mevcut model 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:

  • Modelleri. Mevcut modellerinizi TFF ile kullanmak üzere sarmanıza olanak tanıyan sınıflar ve yardımcı işlevler. Bir model Ambalaj tek sarma fonksiyonu (örneğin, çağrı gibi basit olabilir tff.learning.from_keras_model ) ya da bir alt sınıfı tanımlayan tff.learning.Model tam customizability için arayüz.

  • Federe Hesaplama Üreticileri. Mevcut modellerinizi kullanarak eğitim veya değerlendirme için birleşik hesaplamalar oluşturan yardımcı işlevler.

  • Veri Setleri. Birleştirilmiş öğrenme senaryolarını simüle etmede 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, özellikle yerel olarak indirilebilen ve manipüle edilebilen verileri kullanarak ilk deneyler yapmak, özellikle geliştiriciler için uygundur. yaklaşımda yeni.

Bu arayüzler, öncelikle tanımlanan tff.learning araştırma veri kümeleri ve içinde gruplandırılan diğer simülasyon ilgili işlemler dışında, ad tff.simulation . Bu katman tarafından sunulan daha düşük seviyeli arayüz kullanılarak uygulanır Federal Çekirdek (FC) , aynı zamanda bir yürütme ortamı sağlar.

Devam etmeden önce, öncelikle ilgili öğreticiler incelemenizi öneririz görüntü sınıflandırma ve metin nesil onlar kavramların en somut örneklerle burada tarif tanıtmak gibi. Daha TFF nasıl çalıştığını öğrenmeye ilgilenen ediyorsanız, üzerinde gözden geçirmek isteyebilirsiniz özel algoritmalar biz federe hesaplamaların mantığı ifade etmede kullandığı alt düzey arayüzleri bir giriş olarak öğretici ve mevcut uygulanmasını incelemek için 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). Bununla birlikte, son kodu (örneğin, bir şekilde sarılabilir seri olmalıdır tf.function istekli mod kodu için). Herhangi bir Python durum veya kontrol yürütme zamanda gerekli akmasını Bu olmasını sağlar (muhtemelen yardımıyla serileştirilebilir Autograph'ın ).

Şu anda TensorFlow, istekli mod TensorFlow'un serileştirilmesini ve seri durumdan çıkarılmasını tam olarak desteklememektedir. Bu nedenle, TFF içinde seri şu anda tüm kod içinde inşa edilmelidir TF 1.0 hareket etmesi tf.Graph TFF kontrol. Bu, şu anda TFF'nin halihazırda oluşturulmuş bir modeli tüketemeyeceği anlamına geliyor; Bunun yerine, model tanımlama mantık no-arg fonksiyonu döndürdüğü bir olarak paketlenmiş tff.learning.Model . Bu fonksiyon daha sonra modelin tüm bileşenlerinin serileştirilmesini sağlamak için TFF tarafından çağrılır. Buna ek olarak, özellikle yazılan bir ortamda olmanın, TFF böyle modelinizin giriş türünde bir şartname olarak ek meta veriler, biraz gerektirecektir.

Toplama

Önemle keras kullanarak çoğu kullanıcı yapı modellerini tavsiye bkz Keras için Dönüştürücüler aşağıdaki bölümde. 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, yine de toplama bir general için işlendiğini anlamak yararlı olabilir tff.learning.Model .

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 inşa tf.Variable vb gruplar sayısı veya işlenmiş örneklerin sayısı, seri-başına veya örneğin kayıpların toplamı olarak, tutma agrega s

    • TFF çağırır forward_pass senin üzerinde yöntemini Model Eğer bir yan etki gibi çeşitli agrega tutan değişkenleri güncellemesini sağlayan birden çok kez, müşteri verilerinin sırayla üzerinde ilerleyen proseslerinde.

    • Son olarak, TFF çağırır report_local_outputs modeliniz bu istemci tarafından ihraç edilecek ölçütlerinin kompakt kümesi içine toplanan tüm özet istatistikler derlemek için izin vermek için Modeli yöntemi. 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.

  • Birleştirilmiş agregasyon. Bu toplama düzeyi, sistemdeki birden çok istemci (cihaz) arasında toplama anlamına gelir. Yine, hem istemciler arasında ortalaması alınan model parametreleri (değişkenler) hem de yerel toplama sonucunda 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ğıda).

    İş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 eğitim veya değerlendirme turuna 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 parametresi seti (eğitim sırasında) ve yukarıda açıklandığı gibi (bu yereldir) yeni bir yerel ölçüm seti üretmek için bir yerel veri grupları 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 Model'in içinde, TFF'nin kendi federe hesaplama dili (değil TensorFlow olarak) kullanarak bildirge şekilde ifade edilir federated_output_computation. Bkz algoritmaları özel toplama API hakkında daha fazla bilgi için öğretici.

Soyut arayüzler

Bu bazik yapıcı + meta arayüzü arayüzü ile temsil edilir tff.learning.Model , aşağıdaki gibi:

  • Yapıcı, forward_pass ve report_local_outputs yöntemler modeli değişkenleri, ileri pas oluşturmalıdır ve istatistikler buna, rapora diliyorum. Bu yöntemlerle oluşturulan TensorFlow, yukarıda tartışıldığı gibi serileştirilebilir olmalıdır.

  • input_spec özelliği yanı sıra 3 özellikleri sizin eğitilebilir olmayan eğitilebilir ve yerel değişkenlerin dönüş alt kümeleri meta temsil ettiğini. TFF, bu bilgileri, 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, model tüketmek için tasarlanmıştır).

Buna ek olarak, soyut arayüzü tff.learning.Model bir özellik ortaya federated_output_computation , birlikte report_local_outputs mülkiyet önce de belirttiğimiz, sen özet istatistikleri toplayarak sürecini kontrol etmenizi sağlar.

Kendi özel tanımlamak için nasıl örnekler bulabilirsiniz tff.learning.Model bizim ikinci bölümünde görüntünün sınıflandırma yanı sıra biz test etmek için kullanmak örnek modellerinde, öğretici model_examples.py .

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

Neredeyse TFF tarafından gerekli oluyor tüm bilgiler arayarak elde edilebilir tf.keras bir Keras modele sahip eğer öyleyse, güvenebileceğiniz, arayüzler tff.learning.from_keras_model bir inşa etmek tff.learning.Model .

TFF yine bir kurucu sağlamak istediği Not - Aşağıdaki gibi bir no-argüman modeli işlevi:

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

Modelin kendisine ek olarak, modelinizin girdisinin türünü ve şeklini belirlemek için TFF'nin 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ın kullanımı bizim gösterilmektedir görüntü sınıflandırma ve metin oluşturma öğreticiler.

Birleşik Hesap Oluşturucular

tff.learning paket için çeşitli kurucu içerir tff.Computation s öğrenme ile ilgili görevleri yerine getirmek; 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 Birinci tamamı dağıtılmış hesaplama soyut bir tefrika temsiline içine federe öğrenme algoritmaları 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. Biz federe hesaplama olarak derleyici tarafından yayılan tefrika temsil bakın.

  • TFF bu işlemleri bile yollar sağlar yürütün. Ş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).

Bu gibi kullanımlar için bir eğitim algoritması olarak TFF Federal Öğrenme API tarafından oluşturulan bir birleşik hesaplama birleşik modeli ortalamasından veya birleşik değerlendirme, özellikle elemanların, bir dizi içerir:

  • Federe Öğrenme çerçevesi tarafından inşa modeliniz kodu yanı sıra ek TensorFlow kodunun bir tefrika formu modelin eğitim / değerlendirme devresini çalıştırmak için (örneğin, optimize inşa modeli güncelleştirmeleri uygulayarak, yineleme olarak tf.data.Dataset ler ve ölçümlerini bilgi işlem, ve toplu güncellemeyi sunucuya uygulamak, birkaç isim).

  • Müşteriler ve bir sunucu (tipik olarak çeşitli istemci cihazlarda agregasyon formları ve tüm istemciler için sunucudan yayın) ve arasındaki iletişimin bir bildirime özellikleri bu dağıtılan iletişim istemci yerel veya sunucu lokal uygulama ile içiçe nasıl TensorFlow kodu.

Bu tefrika şeklinde temsil federe hesaplamalar Python ayrı bir platformdan bağımsız iç dille ifade edilir, fakat Federe Öğrenme API kullanmayı, bu temsilin detayları ile endişe kendinizi gerekmez. Hesaplamalar tip nesneler olarak Python kodunu temsil edilir tff.Computation çoğunlukla Eğer opak Python olarak davranabilirsiniz, callable s.

Öğreticilerde, yerel olarak yürütülmek üzere bu birleşik hesaplamaları normal Python işlevleriymiş gibi çağıracaksınız. Bununla birlikte, TFF potansiyel olarak, örneğin, çalışan cihazlar grupları için konuşlandırılabilir, böylece bu, uygulama ortamında çok yönden bir şekilde Agnostik içinde birleşik hesaplamaları ifade etmek için tasarlanmıştır Android ya da bir veri merkezlerinde kümelere. Yine, bu ana sonucu hakkında kuvvetli varsayımlar şunlardır serileştirme . Özellikle, ne zaman birini çağırmak build_... tam seri hale hesaplama aşağıda açıklanan yöntemlerden.

Modelleme durumu

TFF, işlevsel bir programlama ortamıdır, ancak birleşik öğrenmeyle ilgili birçok süreç durum bilgisidir. Örneğin, federe modeli ortalama alınmasının birçok raund içeren bir eğitim döngü bir durum bilgisi süreç olarak sınıflandırmak ne olabileceğini gösteren 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 işlemler, 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 önyükleyemeyiz). Bu yardımcı sınıfı tanımında yakalanır tff.templates.IterativeProcess 2 özellikleri olan, initialize ve next iterasyon başlatma tekabül eden ve sırasıyla.

Mevcut inşaatçılar

Şu anda TFF, birleşik eğitim ve değerlendirme için birleşik hesaplamaları oluşturan iki oluşturucu işlevi sağlar:

veri kümeleri

Mimari varsayımlar

Müşteri seçimi

Tipik federe öğrenme senaryoda, sadece küçük bir kısmı her an eğitim için aktif ve mevcut olabilir hangi istemci cihazlar milyonlarca potansiyel yüzlerce büyük nüfusa sahip (örneğin, bu olan müşteriler ile 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. İstemciler milyonlarca koordine etmek pratik olduğu gibi başka, eğitim ve değerlendirme tipik yuvarlak olabilir mevcut müşteriler, sadece küçük bir kısmını içerir rastgele örneklenmiş .

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 anonim müşterilerin soyut grup agrega operasyonlar olarak ifade edilir ve bu grup diğerine eğitim bir tur dan 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.build_federated_averaging_process(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

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

Simulasyonlarda TFF kullanılarak bu kolaylaştırmak amacıyla, federe veri Python olarak kabul edilir list bu aygıtın yerel temsil etmek istemci aygıtı katılan başına bir eleman ile, s tf.data.Dataset .

Soyut arayüzler

Simüle birleşik veri setleri ile ilgili standartlaştırmak amacıyla TFF, soyut bir arayüz sağlar tff.simulation.datasets.ClientData bir müşteriler kümesini numaralandırmak ve kurulmasına olanak verir, tf.data.Dataset belirli bir veri içerir müşteri. Bu tf.data.Dataset s, doğrudan istekli modunda üretilen birleşik hesaplamalarda girdi olarak 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 altta yatan çalışma zamanı istemci kimliği herhangi bir kavramı yer almamaktadır. Müşterilerin belirli alt kümesinden veri edilmesi için haber, mesela bir girdi olarak seçildikten sonra tff.templates.IterativeProcess.next , müşteri kimlikleri artık ona görünür.

Kullanılabilir veri kümeleri

Biz ad adamış tff.simulation.datasets uygulamak veri kümeleri için tff.simulation.datasets.ClientData simülasyonları kullanılmak üzere arayüz ve desteklemek için 2 veri setleri ile ekildi görüntü sınıflandırma ve metin oluşturma öğreticiler. Platforma kendi veri kümelerinize katkıda bulunmanızı teşvik etmek istiyoruz.