• Yeni bir teori, sinir ağlarının nasıl çalıştığının sırrını ortaya koyuyor. Karmaşık hakkında basit bir deyişle: sinir ağları nelerdir

    Günümüzde bir grafik, bir makine öğrenimi sisteminde oluşturulan modelleri tanımlamanın en kabul edilebilir yollarından biridir. Bu hesaplama grafikleri, köşeler arasındaki bağlantıları tanımlayan sinaps kenarlarıyla birbirine bağlanan nöron köşelerinden oluşur.

    Bir skaler CPU veya vektör GPU'dan farklı olarak, bir IPU yeni tip makine öğrenimi için tasarlanmış işlemciler, bu tür grafikleri oluşturmanıza olanak tanır. Grafikleri yönetmek için tasarlanmış bir bilgisayar, makine öğreniminin bir parçası olarak oluşturulan hesaplamalı grafik modelleri için ideal bir makinedir.

    Makine zekasının nasıl çalıştığını açıklamanın en kolay yollarından biri onu görselleştirmektir. Graphcore geliştirme ekibi, IPU'da görüntülenmek üzere bu tür görüntülerden oluşan bir koleksiyon oluşturdu. Çalışmayı görselleştiren Kavak yazılımına dayalıdır yapay zeka. Bu şirketin araştırmacıları, derin ağların neden bu kadar çok belleğe ihtiyaç duyduğunu ve sorunu çözmek için hangi çözümlerin bulunduğunu da öğrendi.

    Poplar, genel makine öğrenimi işlemlerini yüksek düzeyde optimize edilmiş IPU uygulama koduna çevirmek için sıfırdan oluşturulmuş bir grafik derleyici içerir. Bu grafikleri, POPNN'lerin bir araya getirildiği şekilde bir araya getirmenize olanak tanır. Kitaplık bir küme içerir çeşitli tipler genel ilkeller için köşeler.

    Grafikler, tüm yazılımların dayandığı paradigmadır. Poplar'da grafikler, köşelerin işlemleri gerçekleştirdiği ve kenarların aralarındaki ilişkiyi tanımladığı bir hesaplama işlemi tanımlamanıza olanak tanır. Örneğin, iki sayıyı birbirine eklemek isterseniz, iki girdi (eklemek istediğiniz sayılar), bazı hesaplamalar (iki sayı toplama işlevi) ve bir çıktı (sonuç) içeren bir tepe noktası tanımlayabilirsiniz.

    Genellikle köşe işlemleri yukarıdaki örnekte olduğundan çok daha karmaşıktır. Genellikle tanımlanırlar küçük programlar kodletler (kod adları) denir. Grafiksel soyutlama çekicidir çünkü hesaplamanın yapısı hakkında hiçbir varsayımda bulunmaz ve hesaplamayı IPU'nun çalışmak için kullanabileceği bileşenlere ayırır.

    Poplar, bir görüntü olarak temsil edilen çok büyük grafikler oluşturmak için bu basit soyutlamayı kullanır. Grafiği programlı olarak oluşturmak, onu IPU kaynaklarının en verimli şekilde kullanılmasını sağlamak için gereken belirli hesaplamalara uyarlayabileceğimiz anlamına gelir.

    derleyici çevirileri standart işlemler makine öğrenme sistemlerinde yüksek düzeyde optimize edilmiş IPU uygulama kodunda kullanılır. Grafik derleyici, bir veya daha fazla IPU'ya dağıtılan bir hesaplama grafiğinin ara görüntüsünü oluşturur. Derleyici bu hesaplama grafiğini görüntüleyebilir, böylece sinir ağı yapısı düzeyinde yazılan bir uygulama, IPU üzerinde çalışan hesaplama grafiğinin bir görüntüsünü görüntüler.


    İleri ve geri yönde AlexNet tam döngü eğitim grafiği

    Poplar grafik derleyicisi, AlexNet'in açıklamasını 18,7 milyon köşe ve 115,8 milyon kenardan oluşan bir hesaplama grafiğine dönüştürdü. Açıkça görülebilen kümeleme, ağın her katmanındaki süreçler arasındaki güçlü iletişimin ve katmanlar arasında daha kolay iletişimin sonucudur.

    Başka bir örnek, basit bir veri kümesi olan MNIST üzerinde eğitilmiş basit, tamamen bağlı bir ağdır. Bilgisayar görüşü, makine öğreniminde bir tür "Merhaba dünya". Bu veri kümesini keşfetmek için basit bir ağ, Poplar uygulamalarının yönlendirdiği grafiklerin anlaşılmasına yardımcı olur. Şirket, grafik kitaplıklarını TensorFlow gibi çerçevelerle entegre ederek makine öğrenimi uygulamalarında IPU'ları kullanmanın kolay bir yolunu sunuyor.

    Grafik, derleyici kullanılarak oluşturulduktan sonra çalıştırılmalıdır. Bu, Grafik Motoru ile mümkündür. ResNet-50 örneği, işleyişini göstermektedir.


    Grafik ResNet-50

    ResNet-50 mimarisi, tekrarlanan bölümlerden derin ağlar oluşturmanıza olanak tanır. Geriye sadece işlemcinin bu bölümleri bir kez tanımlaması ve yeniden çağırması kalıyor. Örneğin, bir conv4 seviye kümesi altı kez yürütülür, ancak grafikte yalnızca bir kez çizilir. Görüntü aynı zamanda evrişimli katmanların şekillerinin çeşitliliğini de göstermektedir, çünkü bunların her biri, hesaplamanın doğal biçimine göre oluşturulmuş bir grafiğe sahiptir.

    Motor, derleyici tarafından oluşturulan bir grafiği kullanarak bir makine öğrenimi modelinin yürütülmesini oluşturur ve yönetir. Devreye alındıktan sonra Grafik Motoru, uygulamalar tarafından kullanılan IPU'ları veya cihazları izler ve bunlara yanıt verir.

    ResNet-50 görüntüsü tüm modeli gösterir. Bu seviyede, bireysel köşeler arasındaki bağlantıları ayırt etmek zordur, bu nedenle büyütülmüş görüntülere bakmaya değer. Aşağıda, bir sinir ağının katmanları içindeki bazı bölüm örnekleri verilmiştir.

    Derin ağlar neden bu kadar çok belleğe ihtiyaç duyar?

    Büyük miktarda bellek, derin sinir ağlarının en büyük sorunlarından biridir. Araştırmacılar sınırlı olanla savaşmaya çalışıyor verim Kullanılacak DRAM cihazları modern sistemler derin bir sinir ağında çok sayıda ağırlık ve aktivasyon depolamak.

    Mimariler, tasarlanmış işlemci yongaları kullanılarak tasarlanmıştır. sıralı işlem ve yüksek yoğunluklu bellek için DRAM optimizasyonları. Bu iki cihaz arasındaki arabirim, bant genişliği sınırlamaları getiren ve güç tüketiminde önemli bir ek yük oluşturan bir darboğazdır.

    Henüz insan beynini ve nasıl çalıştığını tam olarak anlamamış olsak da, genel olarak ayrı bir hafıza deposu olmadığı anlaşılmaktadır. Uzun vadeli işlevi olduğuna inanılmaktadır ve kısa süreli hafıza insan beyninde nöronlar + sinapsların yapısı yerleşiktir. 300'den biraz fazla nörondan oluşan bir beyin yapısına sahip solucanlar gibi basit organizmalar bile bir dereceye kadar hafıza işlevine sahiptir.

    Bellek oluşturma geleneksel işlemcilerçok daha az güçle büyük miktarda bant genişliği açarak bellek darboğazlarını aşmanın bir yoludur. Bununla birlikte, çip üzerinde bellek pahalı bir şeydir ve şu anda derin sinir ağlarını eğitmek ve dağıtmak için kullanılan CPU'lara ve GPU'lara bağlı gerçekten büyük miktarda bellek için tasarlanmamıştır.

    Bu nedenle, GPU tabanlı CPU'larda ve derin öğrenme sistemlerinde belleğin günümüzde nasıl kullanıldığına bakmak ve kendinize şu soruyu sormakta fayda var: insan beyni onlar olmadan gayet iyi çalışırken, neden bu kadar büyük bellek depolama aygıtlarına ihtiyaç duyuyorlar?

    Sinir ağları, girdi ağ boyunca yayılırken girdi verilerini, ağırlık parametrelerini ve aktivasyon fonksiyonlarını depolamak için belleğe ihtiyaç duyar. Eğitimde, girişteki aktivasyon, çıkıştaki gradyanlardaki hataları hesaplamak için kullanılana kadar korunmalıdır.

    Örneğin, 50 katmanlı bir ResNet yaklaşık 26 milyon ağırlığa sahiptir ve 16 milyon ileri aktivasyon hesaplar. Her ağırlığı ve aktivasyonu saklamak için 32 bitlik bir kayan noktalı sayı kullanırsanız, bu durumda yaklaşık 168 MB alan gerekir. Bu ağırlıkları ve aktivasyonları depolamak için daha düşük bir kesinlik değeri kullanarak, bu depolama gereksinimini yarıya, hatta dört katına çıkarabiliriz.

    Ciddi bir bellek sorunu, GPU'ların yoğun vektörler olarak temsil edilen verilere dayanmasından kaynaklanır. Bu nedenle, yüksek hesaplama yoğunluğu elde etmek için tek bir talimat akışı (SIMD) kullanabilirler. CPU, yüksek performanslı bilgi işlem için benzer vektör blokları kullanır.

    GPU'lar 1024 bitlik bir sinaps genişliğine sahiptir, bu nedenle 32-bit kayan noktalı veriler kullanırlar, bu nedenle 1024-bit veri vektörleri oluşturmak için genellikle 32 örneğe paralel çalışan mini toplu işlere bölerler. Vektör paralelliğini düzenlemeye yönelik bu yaklaşım, aktivasyon sayısını 32 kat artırır ve yerel depolama 2 GB'ın üzerinde.

    Matris cebiri için tasarlanmış GPU'lar ve diğer makineler de ağırlıklardan veya sinir ağı aktivasyonlarından kaynaklanan bellek stresine tabidir. GPU'lar, derin sinir ağlarında kullanılan küçük evrişimleri verimli bir şekilde gerçekleştiremez. Bu nedenle, bu evrişimleri grafik hızlandırıcıların verimli bir şekilde işleyebileceği matris-matris çarpımlarına (GEMM'ler) dönüştürmek için "düşürme" adı verilen bir dönüşüm kullanılır.

    Giriş verilerini, geçici değerleri ve program talimatlarını depolamak için ek bellek de gereklidir. ResNet-50'yi üst düzey bir GPU üzerinde eğitirken bellek kullanımını ölçmek, bunun 7,5 GB'tan fazla yerel DRAM gerektirdiğini gösterdi.

    Daha düşük hesaplama hassasiyetinin gerekli bellek miktarını azaltabileceği düşünülebilir, ancak durum bu değildir. Ağırlıklar ve aktivasyonlar için veri değerlerini yarı kesinliğe çevirerek, mevcut bilgi işlem kaynaklarının yarısını kullanarak SIMD vektör genişliğinin yalnızca yarısını doldurursunuz. Bunu telafi etmek için, GPU'da tam kesinlikten yarı kesinliğe geçtiğinizde, mevcut tüm hesaplamayı kullanmaya yetecek kadar veri paralelliğini zorlamak için mini toplu işin boyutunu iki katına çıkarmanız gerekir. Bu nedenle, GPU'da daha düşük hassasiyet ağırlıklarına ve aktivasyonlara geçmek için hala 7,5 GB'ın üzerinde alan gerekiyor dinamik bellekücretsiz erişim ile.

    Böyle olan büyük miktar saklanması gereken veriler, tüm bunları GPU'ya sığdırmak imkansızdır. Evrişimli bir sinir ağının her katmanında, harici DRAM'in durumunu kaydetmek, ağın bir sonraki katmanını yüklemek ve ardından verileri sisteme yüklemek gerekir. Sonuç olarak, zaten bant genişliği sınırlı arayüz harici bellek ek bir yüke maruz kalır kalıcı yeniden başlatma ağırlıkların yanı sıra aktivasyon fonksiyonlarını kaydetme ve alma. Bu, eğitim süresini önemli ölçüde yavaşlatır ve enerji tüketimini büyük ölçüde artırır.

    Bu sorunu çözmenin birkaç yolu var. İlk olarak, etkinleştirme işlevleri gibi işlemler yerinde gerçekleştirilebilir ve bu da girdinin üzerine doğrudan çıktının üzerine yazılmasına olanak tanır. Böylece mevcut bellek yeniden kullanılabilir. İkincisi, belleği yeniden kullanma yeteneği, ağ üzerindeki işlemler arasındaki veri bağımlılığı ve aynı belleğin o anda onu kullanmayan işlemler için tahsisi analiz edilerek elde edilebilir.

    İkinci yaklaşım, bellek yönetimi ek yükü neredeyse sıfıra düşürüldüğünden, sabit bir ayrılmış bellek oluşturmak için derleme zamanında tüm sinir ağı ayrıştırılabildiğinde özellikle etkilidir. Bu yöntemlerin bir kombinasyonunun, bir sinir ağı tarafından bellek kullanımını iki ila üç kat azaltabileceği ortaya çıktı.
    Üçüncü bir önemli yaklaşım, yakın zamanda Baidu Deep Speech ekibi tarafından keşfedildi. Aktivasyon fonksiyonlarının hafıza tüketiminde 16 kat azalma elde etmek için çeşitli hafıza tasarrufu teknikleri uyguladılar, bu da onların 100 katmanlı ağları eğitmelerine olanak sağladı. Önceden, aynı miktarda bellekle, dokuz katmanlı ağları eğitebiliyorlardı.

    Bellek ve işleme kaynaklarını tek bir cihazda birleştirmek, evrişimli sinir ağlarının yanı sıra diğer makine öğrenimi biçimlerinin performansını ve verimliliğini artırmak için önemli bir potansiyele sahiptir. Sistemde bir yetenek ve performans dengesi elde etmek için bellek ve bilgi işlem kaynakları arasında bir değiş tokuş yapılabilir.

    Diğer makine öğrenimi yöntemlerindeki sinir ağları ve bilgi modelleri, matematiksel grafikler olarak düşünülebilir. Bu grafiklerde büyük miktarda paralellik var. Grafik paralelliğinden yararlanmak için tasarlanmış bir paralel işlemci, mini partiye dayanmaz ve gereken yerel depolama miktarını büyük ölçüde azaltabilir.

    Modern araştırma sonuçları, tüm bu yöntemlerin sinir ağlarının performansını önemli ölçüde iyileştirebileceğini göstermiştir. Modern GPU'lar ve CPU'lar, toplamda yalnızca birkaç megabayt olmak üzere çok sınırlı yerleşik belleğe sahiptir. Makine öğrenimi için özel olarak tasarlanmış yeni işlemci mimarileri, bellek ve çip üzerinde bilgi işlem arasında bir denge kurarak günümüzün CPU'ları ve GPU'larına göre önemli performans ve verimlilik iyileştirmeleri sağlıyor.

    (Manning Yayınları).

    Makale, halihazırda derin öğrenme konusunda önemli deneyime sahip kişiler için hazırlanmıştır (örneğin, bu kitabın 1-8 bölümlerini zaten okumuş olanlar). varsayar Büyük bir sayı bilgi.

    Derin Öğrenme: Geometrik Görünüm

    Derin öğrenmeyle ilgili en şaşırtıcı şey, ne kadar basit olduğudur. On yıl önce hiç kimse, gradyan iniş ile eğitilmiş basit parametrik modelleri kullanarak makine algılama problemlerinde ne kadar harika sonuçlar elde edeceğimizi hayal edemezdi. Şimdi ihtiyacın olan tek şeyin olduğu ortaya çıktı yeterince büyüküzerinde eğitilen parametrik modeller yeterince büyükörnek sayısı. Feynman'ın bir keresinde evren hakkında söylediği gibi: Karmaşık değil, sadece çok şey var».

    Derin öğrenmede her şey bir vektördür, yani nokta v geometrik boşluk. Modelin girdi verileri (bu metin, resimler vb. olabilir) ve hedefleri önce "vektörleştirilir", yani girdi olarak bir başlangıç ​​vektör uzayına ve çıktı olarak bir hedef vektör uzayına çevrilir. Modeldeki her katman derin öğrenme içinden geçen veriler üzerinde basit bir geometrik dönüşüm gerçekleştirir. Birlikte, model katmanları zinciri, bir dizi basit olana bölünmüş çok karmaşık bir geometrik dönüşüm oluşturur. Bu karmaşık dönüşüm, girdi veri alanını her nokta için hedef alana dönüştürmeye çalışır. Dönüşüm parametreleri, modelin şu anda ne kadar iyi performans gösterdiğine bağlı olarak sürekli güncellenen katman ağırlıkları tarafından belirlenir. Anahtar özellik geometrik dönüşüm - ne olması gerektiği türevlenebilir, yani, parametrelerini şu şekilde bulabilmeliyiz: dereceli alçalma. Sezgisel olarak bu, geometrik geçişin pürüzsüz ve sürekli olması gerektiği anlamına gelir - önemli bir kısıtlama.

    Girdi verilerine bu karmaşık geometrik dönüşümü uygulama sürecinin tamamı, bir kağıt topu açmaya çalışan bir kişiyi tasvir ederek 3 boyutlu olarak görselleştirilebilir: buruşuk bir kağıt top, modelin çalışmaya başladığı çeşitli girdi verileridir. Bir kişinin kağıt topla yaptığı her hareket, bir katmanın gerçekleştirdiği basit bir geometrik dönüşüm gibidir. Açılma hareketlerinin tam sırası, tüm modelin karmaşık bir dönüşümüdür. Derin öğrenme modelleri, karmaşık bir yüksek boyutlu veri dizisini ortaya çıkarmak için kullanılan matematiksel makinelerdir.

    Derin öğrenmenin büyüsü budur: değeri vektörlere, geometrik boşluklara dönüştürün ve ardından yavaş yavaş bir alanı diğerine dönüştüren karmaşık geometrik dönüşümleri öğrenin. Gereken tek şey, orijinal verilerde bulunan tüm ilişkileri iletmek için yeterince büyük boyutlu boşluklardır.

    Derin öğrenmenin sınırlamaları

    Bu basit strateji ile çözülebilecek sorunların sayısı neredeyse sonsuzdur. Yine de birçoğu, büyük miktarda manuel olarak açıklamalı veriyle bile mevcut derin öğrenme tekniklerinin erişiminin ötesindedir. Örneğin, ürün yöneticileri tarafından yazılan yazılım özelliklerinin İngilizce olarak yüzbinlerce hatta milyonlarca açıklamasından oluşan bir veri setinin yanı sıra bu gereksinimleri karşılamak için mühendislik ekipleri tarafından geliştirilen karşılık gelen bir temel yılı toplayabildiğinizi varsayalım. Bu verilerle bile, yalnızca ürün açıklamasını okuyarak ve uygun kod tabanını oluşturarak bir derin öğrenme modeli eğitemezsiniz. Bu birçok örnekten sadece biri. Genel olarak, bilimsel yöntemi programlama veya uygulama, uzun vadeli planlama, algoritmik stilde veri işleme gibi argümantasyon, muhakeme gerektiren her şey, onlara ne kadar veri atarsanız atın, derin öğrenme modellerinin yeteneklerinin ötesindedir. Bir sinir ağını bir sıralama algoritması için eğitmek bile inanılmaz derecede zor bir iştir.

    Bunun nedeni, derin öğrenme modelinin “sadece” olmasıdır. basit, sürekli geometrik dönüşümler zinciri, bir vektör uzayını diğerine dönüştürür. Yapabileceği tek şey, öğrenilebilecek X'ten Y'ye olası bir sürekli dönüşüm olduğu ve kullanılabilirlik olduğu sürece, bir X veri kümesini başka bir Y kümesine dönüştürmektir. yoğun örnek kümesi Eğitim verileri olarak X:Y dönüşümleri. Dolayısıyla, derin öğrenme modeli bir tür program olarak kabul edilebilse de, çoğu program derin öğrenme modelleri olarak ifade edilemez- çoğu problem için, ya sorunu çözen pratik olarak uygun boyutta bir derin sinir ağı yoktur ya da varsa, olabilir eğitilemez yani karşılık gelen geometrik dönüşüm çok karmaşık olabilir veya onu eğitmek için uygun veri olmayabilir.

    Mevcut derin öğrenme tekniklerini ölçeklendirmek (daha fazla katman eklemek ve daha fazla eğitim verisi kullanmak) bu sorunların bazılarını yalnızca yüzeysel olarak azaltabilir. Derin öğrenme modellerinin temsil edebilecekleri şeylerin çok sınırlı olması ve çoğu programın çeşitli verilerin sürekli geometrik dönüşümü olarak ifade edilememesi gibi daha temel bir sorunu çözmeyecektir.

    Makine Öğrenimi Modellerini Antropomorfize Etme Riski

    Modern yapay zekanın en gerçek risklerinden biri, derin öğrenme modellerinin nasıl çalıştığını yanlış yorumlamak ve yeteneklerini abartmaktır. İnsan zihninin temel bir özelliği, "insan ruhunun modeli", çevremizdeki şeylere hedefler, inançlar ve bilgiler yansıtma eğilimimizdir. Bir taşın üzerine gülen bir yüz çizmek bizi birdenbire zihinsel olarak "mutlu" eder. Bir derin öğrenme uygulamasında bu, örneğin, bir modeli resimlerin metinsel açıklamalarını oluşturmak için az çok başarılı bir şekilde eğitebilirsek, o zaman modelin görüntülerin içeriğini "anladığını" düşünme eğiliminde olduğumuz anlamına gelir. oluşturulan açıklamalar. Daha sonra, eğitim verilerinde sunulan görüntü setinden küçük bir sapma nedeniyle, model tamamen saçma açıklamalar üretmeye başladığında çok şaşırdık.

    Özellikle, bu en çok "düşmanca örneklerde", yani yanlış sınıflandırılmak üzere özel olarak seçilen derin öğrenme ağı girdi verisi örneklerinde belirgindir. Örneğin, belirli bir evrişimli sinir ağı filtresinin aktivasyonunu en üst düzeye çıkaran örnekler oluşturmak için giriş alanında gradyan yükselişi yapabileceğinizi zaten biliyorsunuz - bu, 5. bölümde ele aldığımız görselleştirme tekniğinin temelidir (not: Derin Python kitaplarıyla öğrenme), tıpkı Bölüm 8'deki Deep Dream algoritması gibi. Benzer bir yolla, belirli bir sınıf için sınıf tahminini en üst düzeye çıkarmak için gradyan yükselişi yoluyla görüntü biraz değiştirilebilir. Bir pandanın fotoğrafını çeker ve bir "şebek" gradyanı eklersek, sinir ağının bu pandayı bir jibon olarak sınıflandırmasını sağlayabiliriz. Bu, hem bu modellerin kırılganlığına hem de yol gösterdiği girdiden çıktıya dönüşüm ile kendi insan algımız arasındaki derin farka tanıklık ediyor.

    Genel olarak, derin öğrenme modellerinde, en azından insani anlamda, girdi anlayışı yoktur. Görüntüler, sesler ve dil hakkındaki kendi anlayışımız, insanlar olarak - maddi dünyasal varlıklar olarak - duyu-motor deneyimimize dayanmaktadır. Makine öğrenimi modellerinin bu tür deneyimlere erişimi yoktur ve bu nedenle girdilerimizi herhangi bir insan benzeri şekilde "anlayamaz". Modellerimiz için çok sayıda eğitim örneğine açıklama ekleyerek, bu belirli örnek grubu için verileri insan kavramlarına getiren bir geometrik dönüşümü öğrenmelerini sağlıyoruz, ancak bu dönüşüm, zihnimizin orijinal modelinin yalnızca basitleştirilmiş bir taslağıdır. bedensel failler olarak deneyimlerimizden geliştirildi - aynadaki zayıf bir yansıma gibi.

    Bir makine öğrenimi uygulayıcısı olarak, bunu daima aklınızda tutun ve sinir ağlarının gerçekleştirdikleri görevi anladığına inanma tuzağına asla düşmeyin - en azından bizim için anlamlı olan şekilde anlamazlar. Onlara öğretmek istediğimizden farklı, çok daha dar bir görev için eğitildiler: basitçe girdi eğitimi örneklerini hedef eğitim örneklerine, noktadan noktaya dönüştürmek. Onlara eğitim verilerinden farklı bir şey gösterin, en saçma şekilde kırılacaklar.

    Yerel Genelleme ve Sınır Genelleme

    Derin öğrenme modellerinin yaptığı doğrudan girdiden çıktıya geometrik dönüşüm ile insanların düşünme ve öğrenme biçimleri arasında temel farklılıklar var gibi görünüyor. İnsanların kendilerini bir dizi eğitim örneğinin işlenmesi yoluyla değil, yalnızca bedensel deneyimlerinden öğrenmeleri değil. Öğrenme süreçlerindeki farklılığın yanı sıra, altta yatan temsillerin doğasında da temel farklılıklar vardır.

    İnsanlar, bir sinir ağı veya belki bir böcek gibi, ani bir uyaranı ani bir tepkiye dönüştürmekten çok daha fazlasını yapabilir. İnsanlar zihinlerinde mevcut durumun, kendilerinin ve diğer insanların karmaşık, soyut modellerini tutarlar ve bu modelleri çeşitli tahminlerde bulunmak için kullanabilirler. seçenekler gelecek ve uzun vadeli planlama. Daha önce hiç bilmedikleri bir şeyi temsil etmek için iyi bilinen kavramları bir araya getirme yeteneğine sahiptirler - örneğin kot pantolonla bir at çizmek veya piyangoyu kazanırlarsa ne yapacaklarının bir resmi gibi. Varsayımsal düşünme, zihinsel alan modelimizi doğrudan deneyimlediklerimizin çok ötesine genişletme, yani yapma yeteneği soyutlamalar Ve muhakeme belki de insan bilişinin belirleyici özelliği. Ben buna "aşırı genelleme" diyorum: çok az veriyle veya hiç veri olmadan yeni, daha önce hiç yaşanmamış durumlara uyum sağlama yeteneği.

    Bu, derin öğrenme ağlarının yaptığı, benim "yerel genelleme" olarak adlandırdığım şeyin tam tersidir: yeni girdiler eğitim sırasında karşılaştıklarından biraz farklıysa, girdileri çıktılara dönüştürmek hızla anlamsız hale gelir. Örneğin, bir roketin Ay'a inmesi için uygun fırlatma parametrelerini öğrenme problemini ele alalım. Bu görev için bir sinir ağı kullanacaksanız, onu bir öğretmenle veya takviye ile eğitecekseniz, ona binlerce veya milyonlarca uçuş yolu vermeniz gerekir, yani yayınlamanız gerekir. yoğun örnekler gelen değerler alanından giden değerler alanına güvenilir bir şekilde nasıl dönüştürüleceğini öğrenmek için gelen değerler alanında. Buna karşılık, insanlar soyutlamanın gücünü fiziksel modeller oluşturmak için kullanabilirler - roket bilimi - ve bir roketi sadece birkaç denemede aya ulaştıracak kesin çözümü bulabilirler. Aynı şekilde, insan vücudunu kontrol etmek için bir sinir ağı tasarladıysanız ve onun şehirden araba çarpmadan güvenli bir şekilde nasıl geçeceğini öğrenmesini istiyorsanız, ağın sona ermeden önce çeşitli durumlarda binlerce kez ölmesi gerekir. arabaların tehlikeli olduğunu ve başarısız olduğunu, onlardan kaçınmak için uygun davranışı. Yeni bir şehre taşınırsa, ağ bildiklerinin çoğunu yeniden öğrenmek zorunda kalacaktır. Öte yandan, varsayımsal durumların soyut modellemesinin gücü sayesinde insanlar bir daha ölmeden güvenli davranışları öğrenebiliyorlar.

    Dolayısıyla, makine bilişindeki ilerlememize rağmen, hâlâ insan düzeyindeki yapay zekadan çok uzağız: modellerimiz yalnızca yerel genelleme, geçmiş verilere çok yakın olması gereken yeni durumlara uyum sağlarken, insan zihni nihai genelleme tamamen yeni durumlara hızla uyum sağlamak veya çok uzak bir geleceği planlamak.

    sonuçlar

    İşte hatırlamanız gerekenler: Derin öğrenmenin şu ana kadarki tek gerçek başarısı, çok sayıda açıklamalı insan verisi olduğunda sürekli bir geometrik dönüşüm kullanarak X uzayını Y uzayına çevirme yeteneğidir. Bunu iyi yapmak, tüm endüstri için oyunun kurallarını değiştirir, ancak insan düzeyinde yapay zeka hala çok uzaktadır.

    Bu sınırlamalardan bazılarını ortadan kaldırmak ve insan beyniyle rekabet edebilmek için doğrudan girdiden çıktıya dönüştürmeden uzaklaşıp muhakeme Ve soyutlamalar. Belki de çeşitli durumların ve kavramların soyut modellemesi için uygun bir temel bilgisayar programları olabilir. Daha önce (not: Python ile Derin Öğrenme'de) makine öğrenimi modellerinin "eğitilebilir programlar" olarak tanımlanabileceğini söylemiştik; şu anda tüm olası programların yalnızca dar ve spesifik bir alt kümesini eğitebiliyoruz. Peki ya her programı modüler ve tekrarlı olarak eğitebilseydik? Oraya nasıl gidebileceğimize bakalım.

    Derin Öğrenmenin Geleceği

    Derin öğrenme ağlarının nasıl çalıştığı, sınırlamaları ve mevcut durumu hakkında bildiklerimiz göz önüne alındığında, bilimsel araştırma, orta vadede ne olacağını tahmin edebilir miyiz? İşte konuyla ilgili bazı kişisel düşüncelerim. Tahminler için bir kristal kürem olmadığını unutmayın, beklediğim pek çok şey gerçekleşmeyebilir. Bu mutlak spekülasyon. Bu öngörüleri gelecekte tam olarak gerçekleşmesini beklediğim için değil, ilgi çekici ve günümüzde uygulanabilir oldukları için paylaşıyorum.

    Üst düzeyde, umut verici olarak gördüğüm ana alanlar şunlardır:

    • Modeller, şu anki türevlenebilir katmanlarımızdan çok daha zengin ilkel öğeler üzerine inşa edilmiş genel amaçlı bilgisayar programlarına yaklaşacaktır; muhakeme Ve soyutlamalar, yokluğu mevcut modellerin temel bir zayıflığıdır.
    • Bunu mümkün kılacak ve modellerin basitçe türevlenebilir dönüşümlerden uzaklaşmasına izin verecek yeni öğrenme biçimleri ortaya çıkacaktır.
    • Modeller daha az geliştirici girdisi gerektirecektir - düğmeleri sürekli olarak değiştirmek sizin işiniz olmamalı.
    • Öğrenilen özelliklerin ve mimarilerin sistematik olarak yeniden kullanımı daha fazla olacak; yeniden kullanılabilir ve modüler rutinlere dayalı meta-öğrenme sistemleri.
    Ek olarak, bu hususların özel olarak makine öğreniminin temeli olan denetimli öğrenim için geçerli olmadığını unutmayın; denetimsiz öğrenim, kendi kendine denetimli öğrenim ve pekiştirmeli öğrenim dahil her tür makine öğrenimi için de geçerlidir. Etiketlerinizin nereden geldiği veya öğrenme döngünüzün nasıl olduğu temelde önemli değildir; makine öğreniminin bu farklı dalları, aynı yapının farklı yönleridir.

    O zaman devam et.

    Program olarak modeller

    Daha önce de belirttiğimiz gibi, makine öğrenimi alanında beklenebilecek gerekli bir dönüşümsel gelişme, yalnızca performans gösteren modellerden uzaklaşıyor. desen tanıma ve sadece yetenekli yerel genelleme yapabilen modellere soyutlamalar Ve muhakeme bu ulaşabilir nihai genelleme. Temel bir muhakeme düzeyine sahip mevcut tüm yapay zeka programları, insan programcılar tarafından sabit kodlanmıştır: örneğin, arama algoritmalarına, grafik işlemeye, biçimsel mantığa dayanan programlar. Örneğin, DeepMind AlphaGo programında, ekrandaki "zekanın" çoğu, uzman programcılar tarafından tasarlanır ve kodlanır (örneğin, Monte Carlo yöntemi kullanılarak ağaç arama); yeni veriler üzerinde öğrenme yalnızca uzmanlaşmış alt modüllerde gerçekleşir - değer ağları ve politika ağları. Ancak gelecekte, bu tür AI sistemleri, insan müdahalesi olmadan tamamen eğitilebilir.

    Bu nasıl elde edilir? İyi bilinen bir ağ türünü ele alalım: RNN. Daha da önemlisi, RNN'lerin ileri beslemeli sinir ağlarından biraz daha az sınırlaması vardır. Bunun nedeni, RNN'lerin basit geometrik dönüşümlerden biraz daha fazlası olmalarıdır: onlar, sürekli bir for döngüsü içinde yürütülür. Döngü için zamanlama geliştirici tarafından belirlenir: yerleşik bir ağ varsayımıdır. Doğal olarak, RNN'ler, temel olarak adımlarının her biri hala türevlenebilir bir geometrik dönüşüm olduğundan ve sürekli bir geometrik uzayda (durum vektörleri) noktalardan adım adım bilgi aktarma yollarından dolayı, temsil edebilecekleri konusunda hala sınırlıdır. Şimdi, ilkelleri aynı şekilde programlayarak "artırılmış" sinir ağlarını hayal edin. döngüler için- ancak yalnızca geometrik belleğe sahip tek bir sabit kodlu for-loop değil, aynı zamanda if dalları, while deyimleri, değişken oluşturma, disk depolama gibi işleme yeteneklerini genişletmek için modelin serbestçe erişebileceği büyük bir programlama ilkelleri kümesi uzun süreli hafıza, sıralama operatörleri, listeler, grafikler, karma tablolar gibi gelişmiş veri yapıları ve daha fazlası. Böyle bir ağın temsil edebileceği program alanı, olduğundan çok daha geniş olacaktır. mevcut ağlar derin öğrenme ve bu programlardan bazıları mükemmel genelleme gücüne ulaşabilir.

    Kısacası bir yanda “hard-coded algoritmik zeka” (elle yazılmış yazılım), diğer yanda “eğitimli geometrik zeka” (derin öğrenme) olduğu gerçeğinden uzaklaşacağız. Bunun yerine, yetenek sağlayan resmi algoritmik modüllerin bir karışımını elde ederiz. muhakeme Ve soyutlamalar ve fırsatlar sağlayan geometrik modüller resmi olmayan sezgi ve örüntü tanıma. Tüm sistem, çok az veya hiç insan müdahalesi olmadan eğitilecektir.

    Yakın gelecekte büyük bir fark yaratabileceğini düşündüğüm AI ile ilgili bir alan yazılım senteziözellikle sinirsel yazılım sentezi. Yazılım sentezi otomatik üretimden oluşur basit programlar, olası programların geniş bir alanını keşfetmek için bir arama algoritması (belki de genetik programlamada olduğu gibi bir genetik arama) kullanarak. Arama, genellikle bir dizi girdi-çıktı çifti olarak sağlanan, gerekli özellikleri karşılayan bir program bulunduğunda durur. Gördüğünüz gibi, bu makine öğrenimine çok benzer: "eğitim verileri" girdi-çıktı çiftleri olarak sağlanır, girdilerin çıktılara dönüştürülmesiyle eşleşen ve yeni girdilere genelleme yapabilen bir "program" buluruz. Aradaki fark, sabit kodlanmış bir programda (sinir ağı) parametre değerlerini öğrenmek yerine, kaynak ayrı bir arama süreci aracılığıyla.

    Önümüzdeki birkaç yıl içinde bu alana ilginin tekrar artacağını kesinlikle umuyorum. Özellikle, sadece dillerde programlar üretmeyeceğimiz ilgili derin öğrenme ve program sentezi alanlarının iç içe geçmesini bekliyorum. genel amaçlı ve sinir ağlarını (geometrik veri işleme akışları) oluşturacağımız yer, artırılmış for döngüleri ve diğerleri gibi zengin bir algoritmik ilkel kümesi. Bu, doğrudan üretimden çok daha uygun ve kullanışlı olmalıdır. kaynak kodu ve makine öğrenimi kullanılarak çözülebilecek sorunların sınırlarını önemli ölçüde genişletecek - uygun eğitim verilerini alarak otomatik olarak oluşturabileceğimiz programların alanı. Sembolik yapay zeka ile geometrik yapay zekanın karışımı. Modern RNN'ler, bu tür hibrit algoritmik-geometrik modellerin tarihsel atası olarak kabul edilebilir.


    Çizim: Eğitilmiş bir program aynı anda geometrik ilkellere (örüntü tanıma, sezgi) ve algoritmik ilkellere (argümantasyon, arama, hafıza) dayanır.

    Geri yayılımın ve farklılaştırılabilir katmanların ötesinde

    Makine öğrenimi modelleri programlara daha çok benziyorsa, o zaman artık neredeyse hiç ayırt edilemezler - kesinlikle, bu programlar alt programlar olarak sürekli geometri katmanlarını kullanmaya devam edecek ve bu da türevlenebilir olmaya devam edecek, ancak tüm model böyle olmayacak. Sonuç olarak, sabit, sabit kodlanmış bir ağda ağırlık değerlerini ayarlamak için geri yayılımın kullanılması, gelecekte eğitim modelleri için tercih edilen yöntem olmaya devam etmeyebilir - en azından tek başına bu yöntemle sınırlı kalmayabilir. Türevlenemeyen sistemleri en etkili şekilde nasıl eğiteceğimizi bulmamız gerekiyor. Mevcut yaklaşımlar arasında genetik algoritmalar, "evrimsel stratejiler", belirli pekiştirmeli öğrenme yöntemleri, ADMM (değişken yönlü Lagrange çarpanı yöntemi) yer alır. Doğal olarak, gradyan iniş artık hiçbir yere gitmiyor - gradyan bilgisi, türevlenebilir parametrik fonksiyonları optimize etmek için her zaman yararlı olacaktır. Ancak modellerimiz kesinlikle türevlenebilir parametrik işlevlerden daha iddialı hale gelecek ve bu nedenle otomatik geliştirmeleri ("makine öğreniminde eğitim"), geriye yayılımdan daha fazlasını gerektirecektir.

    Buna ek olarak, geri yayılım, iyi zincirlenmiş dönüşümleri öğrenmek için uygun olan, ancak derin ağların modülerliğinden tam olarak yararlanmadığı için hesaplama açısından oldukça verimsiz olan uçtan uca bir çerçeveye sahiptir. Herhangi bir şeyin verimliliğini artırmak için tek bir evrensel tarif vardır: modülerliği ve hiyerarşiyi tanıtın. Böylece, hiyerarşik bir şekilde organize edilmiş, aralarında bir tür senkronizasyon mekanizması olan ayrıştırılmış öğrenme modüllerini tanıtarak geri yayılımın kendisini daha verimli hale getirebiliriz. Bu strateji kısmen DeepMind'in "sentetik gradyanlar" üzerine yaptığı son çalışmasına yansıtılmıştır. Yakın gelecekte bu yönde çok ama çok daha fazla çalışma bekliyorum.

    Küresel olarak türevlenemeyen modellerin (ancak türevlenebilir parçalara sahip) gradyanları uygulamayan etkili bir arama sürecini kullanarak öğreneceği - büyüyeceği - diğer yandan türevlenebilir parçaların gradyanları kullanarak daha hızlı öğreneceği bir gelecek hayal edilebilir. etkili sürüm geri yayılım

    Otomatik Makine Öğrenimi

    Mimarilerin geleceğinde, modeller mühendisler tarafından elle yazılmak yerine eğitimle oluşturulacak. Eğitimle elde edilen modeller, otomatik olarak daha zengin bir ilkel kümesi ve program benzeri makine öğrenimi modelleri ile birlikte çalışır.

    Şimdi, çoğu zaman bir derin öğrenme geliştiricisi, Python betikleriyle verileri durmaksızın değiştiriyor, ardından çalışan bir model elde etmek için derin öğrenme ağının mimarisini ve hiperparametrelerini ince ayar yapıyor - hatta geliştirici bu kadar hırslıysa olağanüstü bir model. Söylemeye gerek yok, bu en iyi durum değil. Ancak AI burada da yardımcı olabilir. Ne yazık ki, veri işleme ve hazırlama bölümünün otomatikleştirilmesi zordur, çünkü genellikle alan bilgisinin yanı sıra geliştiricinin neyi başarmak istediğine dair net bir üst düzey anlayış gerektirir. Bununla birlikte, hiperparametre ayarı basit bir arama prosedürüdür ve bu durum geliştiricinin neyi başarmak istediğini zaten biliyoruz: bu, ayarlanması gereken sinir ağının kayıp işlevi tarafından belirlenir. Model ayarlarının çoğuyla ilgilenen temel AutoML sistemlerini kurmak artık yaygın bir uygulama haline geldi. Kaggle yarışmalarını kazanmak için kendim kurdum.

    En temel düzeyde, böyle bir sistem, yığındaki katman sayısını, sıralarını ve her katmandaki öğe veya filtre sayısını kolayca ayarlar. Bu genellikle Bölüm 7'de tartıştığımız Hyperopt gibi kitaplıklar kullanılarak yapılır (not: Python kitaplarıyla Derin Öğrenme). Ancak çok daha ileri gidebilir ve uygun mimariyi sıfırdan öğrenmeye çalışabilirsiniz. asgari set kısıtlamalar. Bu, örneğin takviyeli öğrenme ile veya genetik algoritmaların yardımıyla mümkündür.

    AutoML'deki bir diğer önemli gelişme, modelin ağırlıkları ile aynı zamanda modelin mimarisini de eğitmektir. Modeli her seferinde sıfırdan eğiterek biraz farklı mimariler deneriz ki bu son derece verimsizdir, bu nedenle gerçekten güçlü AutoML sistemi mimarilerin gelişimini yönlendirirken, model özellikleri eğitim verilerinde geri yayılım yoluyla ayarlanır ve böylece tüm fazlalıkları ortadan kaldırır hesaplamaların. Ben bu satırları yazarken benzer yaklaşımlar uygulanmaya başlandı bile.

    Tüm bunlar olmaya başladığında, makine öğrenimi geliştiricileri işsiz kalmayacak - daha fazlasına geçecekler yüksek seviye değer zincirinde. İş hedeflerini gerçekten yansıtan karmaşık kayıp fonksiyonları oluşturmak için çok daha fazla çaba sarf etmeye başlayacaklar ve modellerinin içinde faaliyet gösterdikleri dijital ekosistemleri nasıl etkilediğine dair derin bir anlayışa sahip olacaklar (örneğin, model tahminlerini kullanan ve kendisi için veri üreten müşteriler). eğitim) artık yalnızca en büyük şirketlerin dikkate alabileceği sorunlardır.

    Ömür boyu öğrenme ve modüler rutinlerin yeniden kullanımı

    Modeller daha karmaşık hale gelir ve daha zengin algoritmik temeller üzerine inşa edilirse, bu artan karmaşıklık, her yeni görevimiz veya yeni veri kümemiz olduğunda modeli sıfırdan eğitmek yerine görevler arasında daha yoğun yeniden kullanım gerektirecektir. Sonunda, birçok veri seti sıfırdan karmaşık yeni bir model geliştirmek için yeterli bilgiyi içermez ve sadece önceki veri setlerinden gelen bilgileri kullanmak gerekli olacaktır. yeniden öğrenemezsin ingilizce dili her açtığında yeni kitap- bu imkansız olurdu. Ek olarak, her yeni görevde sıfırdan eğitim modelleri, mevcut görevler ile daha önce karşılaşılan görevler arasındaki önemli örtüşme nedeniyle çok verimsizdir.

    Ek olarak, son yıllarda, aynı modeli birkaç gevşek bağlı görevi yapmak üzere eğitmenin sonuçları iyileştirdiğine dair dikkate değer gözlem defalarca yapılmıştır. bu görevlerin her birinde. Örneğin, aynı sinir ağını İngilizceden Almancaya ve Fransızcadan İtalyancaya çevirmek üzere eğitmek, bu dil çiftlerinin her birinde daha iyi performans gösteren bir modelle sonuçlanacaktır. Bir görüntü sınıflandırma modelini, tek evrişim tabanlı bir görüntü segmentasyon modeliyle aynı anda eğitmek, her iki görevde de daha iyi performans gösteren bir modelle sonuçlanacaktır. Ve benzeri. Bu oldukça sezgiseldir: her zaman bazı görünüşte farklı olan bu iki görev arasında örtüşen bilgi ve dolayısıyla genel model her bir görev hakkında, yalnızca belirli bir görev için eğitilmiş bir modelden daha fazla bilgiye erişebilir.

    Modeli farklı görevlere yeniden uyguladığımızda aslında yaptığımız şey, performans gösteren modeller için önceden eğitilmiş ağırlıklar kullanmaktır. genel fonksiyonlar görsel özellikleri çıkarmak gibi. Bunu 5. Bölümde uygulamalı olarak gördünüz. Gelecekte bu tekniğin daha genel bir versiyonunun her yerde kullanılacağını umuyorum: sadece önceden öğrenilen özellikleri (alt model ağırlıkları) değil, aynı zamanda model mimarilerini ve eğitim prosedürlerini de kullanacağız. Modeller daha çok programlara benzedikçe, yeniden kullanmaya başlayacağız. rutinler, tıpkı normal programlama dillerindeki işlevler ve sınıflar gibi.

    Bugün yazılım geliştirme sürecinin nasıl göründüğünü bir düşünün: Bir mühendis belirli bir sorunu çözdükten sonra (örneğin, Python'da HTTP istekleri), onu yeniden kullanım için soyut bir kitaplık olarak paketler. İleride benzer bir sorunla karşılaşan mühendisler sadece mevcut kütüphaneleri arar, indirir ve kendi projelerinde kullanır. Aynı şekilde, gelecekte, meta-öğrenme sistemleri, yüksek düzeyde yeniden kullanılabilir bloklardan oluşan küresel bir kitaplığı inceleyerek yeni programlar oluşturabilecektir. Sistem birkaç farklı görev için benzer rutinler geliştirmeye başlarsa, rutinin "soyut" yeniden kullanılabilir bir sürümünü yayınlayacak ve onu genel kütüphanede saklayacaktır. Bu süreç, soyutlamalar, "nihai genelleme" elde etmek için gerekli bir bileşen: birçok görev ve alan için faydalı olacak bir alt programın, karar vermenin bazı yönlerini "soyutladığı" söylenebilir. Bu "soyutlama" tanımı, yazılım geliştirmede soyutlama kavramı gibi görünmüyor. Bu rutinler geometrik (önceden eğitilmiş temsillere sahip derin öğrenme modülleri) veya algoritmik (modern programcıların birlikte çalıştığı kitaplıklara daha yakın) olabilir.

    Çizim: Yeniden kullanılabilir ilkelleri (algoritmik ve geometrik) kullanarak göreve özgü modelleri hızlı bir şekilde geliştirebilen ve böylece "nihai genelleme" elde edebilen bir meta-öğrenme sistemi.

    Alt satır: uzun vadeli vizyon

    Kısacası, makine öğrenimi için uzun vadeli vizyonum:
    • Modeller daha çok programlara benzeyecek ve şu anda üzerinde çalıştığımız orijinal verilerin sürekli geometrik dönüşümlerinin çok ötesine geçen yeteneklere sahip olacak. Belki de bu programlar, insanların çevreleri ve kendileri hakkında kurdukları soyut zihinsel modellere çok daha yakın olacak ve algoritmik yapıları nedeniyle daha güçlü genelleme yapabilecekler.
    • Özellikle, modeller karışacak algoritmik modüller biçimsel muhakeme, araştırma, soyutlama yeteneği ile - ve geometrik modüller Gayri resmi sezgi ve örüntü tanıma ile. AlphaGo (yoğun manuel programlama ve mimari gerektiren bir sistem), sembolik ve geometrik yapay zekanın birleşiminin neye benzeyebileceğinin erken bir örneğidir.
    • yapacaklar büyümek otomatik olarak (ve insan programcılar tarafından elle yazılmamış), yeniden kullanılabilir alt programlardan oluşan küresel bir kitaplıktan modüler parçalar kullanarak - binlerce önceki görev ve veri kümesinden yüksek performanslı modelleri alarak gelişen bir kitaplık. Meta-öğrenme sistemi ortak problem çözme modellerini tanımladıktan sonra, bunlar yeniden kullanılabilir alt programlara dönüştürülür - modern programlamadaki işlevlere ve sınıflara çok benzer - ve küresel kitaplığa eklenir. yetenek böyle olur soyutlamalar.
    • Küresel kitaplık ve buna karşılık gelen model büyütme sistemi, bir tür insansı "nihai genelleme" elde edebilecektir: yeni mücadele, yeni bir durumda, sistem çok az veri kullanarak bu problem için yeni bir çalışma modeli oluşturabilecektir, bunun sayesinde: 1) iyi genelleme yapan zengin program benzeri ilkel öğeler ve 2) benzer problemleri çözmede kapsamlı deneyim. Aynı şekilde, insanlar yeni bir karmaşık video oyununu hızlı bir şekilde öğrenebiliyorlar çünkü daha önce başka birçok oyun deneyimine sahipler ve önceki deneyime dayanan modeller soyut ve program benzeri, uyaranı eyleme dönüştürmekten çok.
    • Esasen bu sürekli öğrenen model yetiştirme sistemi Güçlü Yapay Zeka olarak yorumlanabilir. Ancak tekil bir robo-kıyametin gelmesini beklemeyin: Bu, zeka ve teknoloji anlayışındaki derin yanlış anlamaların uzun bir listesinden doğan saf bir fantezidir. Ancak bu eleştiri buraya ait değil.

    Günümüzde bir grafik, bir makine öğrenimi sisteminde oluşturulan modelleri tanımlamanın en kabul edilebilir yollarından biridir. Bu hesaplama grafikleri, köşeler arasındaki bağlantıları tanımlayan sinaps kenarlarıyla birbirine bağlanan nöron köşelerinden oluşur.

    Bir skaler CPU veya vektör GPU'nun aksine, makine öğrenimi için tasarlanmış yeni bir işlemci türü olan IPU, bu tür grafikler oluşturmanıza olanak tanır. Grafikleri yönetmek için tasarlanmış bir bilgisayar, makine öğreniminin bir parçası olarak oluşturulan hesaplamalı grafik modelleri için ideal bir makinedir.

    Makine zekasının nasıl çalıştığını açıklamanın en kolay yollarından biri onu görselleştirmektir. Graphcore geliştirme ekibi, IPU'da görüntülenmek üzere bu tür görüntülerden oluşan bir koleksiyon oluşturdu. Yapay zekanın çalışmalarını görselleştiren Poplar yazılımına dayanıyordu. Bu şirketin araştırmacıları, derin ağların neden bu kadar çok belleğe ihtiyaç duyduğunu ve sorunu çözmek için hangi çözümlerin bulunduğunu da öğrendi.

    Poplar, genel makine öğrenimi işlemlerini yüksek düzeyde optimize edilmiş IPU uygulama koduna çevirmek için sıfırdan oluşturulmuş bir grafik derleyici içerir. Bu grafikleri, POPNN'lerin bir araya getirildiği şekilde bir araya getirmenize olanak tanır. Kitaplık, genel ilkel öğeler için bir dizi farklı köşe noktası içerir.

    Grafikler, tüm yazılımların dayandığı paradigmadır. Poplar'da grafikler, köşelerin işlemleri gerçekleştirdiği ve kenarların aralarındaki ilişkiyi tanımladığı bir hesaplama işlemi tanımlamanıza olanak tanır. Örneğin, iki sayıyı birbirine eklemek isterseniz, iki girdi (eklemek istediğiniz sayılar), bazı hesaplamalar (iki sayı toplama işlevi) ve bir çıktı (sonuç) içeren bir tepe noktası tanımlayabilirsiniz.

    Genellikle köşe işlemleri yukarıdaki örnekte olduğundan çok daha karmaşıktır. Genellikle codelet (kod adları) adı verilen küçük programlarla tanımlanırlar. Grafiksel soyutlama çekicidir çünkü hesaplamanın yapısı hakkında hiçbir varsayımda bulunmaz ve hesaplamayı IPU'nun çalışmak için kullanabileceği bileşenlere ayırır.

    Poplar, bir görüntü olarak temsil edilen çok büyük grafikler oluşturmak için bu basit soyutlamayı kullanır. Grafiği programlı olarak oluşturmak, onu IPU kaynaklarının en verimli şekilde kullanılmasını sağlamak için gereken belirli hesaplamalara uyarlayabileceğimiz anlamına gelir.

    Derleyici, makine öğrenimi sistemlerinde kullanılan standart işlemleri yüksek düzeyde optimize edilmiş IPU uygulama koduna çevirir. Grafik derleyici, bir veya daha fazla IPU'ya dağıtılan bir hesaplama grafiğinin ara görüntüsünü oluşturur. Derleyici bu hesaplama grafiğini görüntüleyebilir, böylece sinir ağı yapısı düzeyinde yazılan bir uygulama, IPU üzerinde çalışan hesaplama grafiğinin bir görüntüsünü görüntüler.


    İleri ve geri yönde AlexNet tam döngü eğitim grafiği

    Poplar grafik derleyicisi, AlexNet'in açıklamasını 18,7 milyon köşe ve 115,8 milyon kenardan oluşan bir hesaplama grafiğine dönüştürdü. Açıkça görülebilen kümeleme, ağın her katmanındaki süreçler arasındaki güçlü iletişimin ve katmanlar arasında daha kolay iletişimin sonucudur.

    Başka bir örnek, makine öğreniminde bir tür "Merhaba, dünya" olan basit bir bilgisayarla görme veri kümesi olan MNIST üzerinde eğitilmiş basit, tamamen bağlı bir ağdır. Bu veri kümesini keşfetmek için basit bir ağ, Poplar uygulamalarının yönlendirdiği grafiklerin anlaşılmasına yardımcı olur. Şirket, grafik kitaplıklarını TensorFlow gibi çerçevelerle entegre ederek makine öğrenimi uygulamalarında IPU'ları kullanmanın kolay bir yolunu sunuyor.

    Grafik, derleyici kullanılarak oluşturulduktan sonra çalıştırılmalıdır. Bu, Grafik Motoru ile mümkündür. ResNet-50 örneği, işleyişini göstermektedir.


    Grafik ResNet-50

    ResNet-50 mimarisi, tekrarlanan bölümlerden derin ağlar oluşturmanıza olanak tanır. Geriye sadece işlemcinin bu bölümleri bir kez tanımlaması ve yeniden çağırması kalıyor. Örneğin, bir conv4 seviye kümesi altı kez yürütülür, ancak grafikte yalnızca bir kez çizilir. Görüntü aynı zamanda evrişimli katmanların şekillerinin çeşitliliğini de göstermektedir, çünkü bunların her biri, hesaplamanın doğal biçimine göre oluşturulmuş bir grafiğe sahiptir.

    Motor, derleyici tarafından oluşturulan bir grafiği kullanarak bir makine öğrenimi modelinin yürütülmesini oluşturur ve yönetir. Devreye alındıktan sonra Grafik Motoru, uygulamalar tarafından kullanılan IPU'ları veya cihazları izler ve bunlara yanıt verir.

    ResNet-50 görüntüsü tüm modeli gösterir. Bu seviyede, bireysel köşeler arasındaki bağlantıları ayırt etmek zordur, bu nedenle büyütülmüş görüntülere bakmaya değer. Aşağıda, bir sinir ağının katmanları içindeki bazı bölüm örnekleri verilmiştir.

    Derin ağlar neden bu kadar çok belleğe ihtiyaç duyar?

    Büyük miktarda bellek, derin sinir ağlarının en büyük sorunlarından biridir. Araştırmacılar, derin bir sinir ağında büyük miktarda ağırlık ve aktivasyon depolamak için modern sistemler tarafından kullanılması gereken DRAM cihazlarının sınırlı bant genişliği ile mücadele etmeye çalışıyorlar.

    Mimariler, yüksek yoğunluklu bellek için DRAM'i seri hale getirmek ve optimize etmek üzere tasarlanmış işlemci yongaları kullanılarak tasarlanmıştır. Bu iki cihaz arasındaki arabirim, bant genişliği sınırlamaları getiren ve güç tüketiminde önemli bir ek yük oluşturan bir darboğazdır.

    Henüz insan beynini ve nasıl çalıştığını tam olarak anlamamış olsak da, genel olarak ayrı bir hafıza deposu olmadığı anlaşılmaktadır. İnsan beynindeki uzun süreli ve kısa süreli hafıza işlevinin, nöronların + sinapsların yapısında yerleşik olduğuna inanılmaktadır. Beynin 300'den fazla nörondan oluşan nöral yapısına sahip solucanlar gibi basit organizmalar bile bir dereceye kadar hafızanın bir işlevidir.

    Geleneksel işlemcilerde bellek oluşturmak, çok daha az güçle çok büyük bir bant genişliği açarak bellek darboğazlarını aşmanın bir yoludur. Bununla birlikte, çip üzerinde bellek pahalı bir şeydir ve şu anda derin sinir ağlarını eğitmek ve dağıtmak için kullanılan CPU'lara ve GPU'lara bağlı gerçekten büyük miktarda bellek için tasarlanmamıştır.

    Bu nedenle, GPU tabanlı CPU'larda ve derin öğrenme sistemlerinde belleğin günümüzde nasıl kullanıldığına bakmak ve kendinize şu soruyu sormakta fayda var: insan beyni onlar olmadan gayet iyi çalışırken, neden bu kadar büyük bellek depolama aygıtlarına ihtiyaç duyuyorlar?

    Sinir ağları, girdi ağ boyunca yayılırken girdi verilerini, ağırlık parametrelerini ve aktivasyon fonksiyonlarını depolamak için belleğe ihtiyaç duyar. Eğitimde, girişteki aktivasyon, çıkıştaki gradyanlardaki hataları hesaplamak için kullanılana kadar korunmalıdır.

    Örneğin, 50 katmanlı bir ResNet yaklaşık 26 milyon ağırlığa sahiptir ve 16 milyon ileri aktivasyon hesaplar. Her ağırlığı ve aktivasyonu saklamak için 32 bitlik bir kayan noktalı sayı kullanırsanız, bu durumda yaklaşık 168 MB alan gerekir. Bu ağırlıkları ve aktivasyonları depolamak için daha düşük bir kesinlik değeri kullanarak, bu depolama gereksinimini yarıya, hatta dört katına çıkarabiliriz.

    Ciddi bir bellek sorunu, GPU'ların yoğun vektörler olarak temsil edilen verilere dayanmasından kaynaklanır. Bu nedenle, yüksek hesaplama yoğunluğu elde etmek için tek bir talimat akışı (SIMD) kullanabilirler. CPU, yüksek performanslı bilgi işlem için benzer vektör blokları kullanır.

    GPU'lar 1024 bitlik bir sinaps genişliğine sahiptir, bu nedenle 32-bit kayan noktalı veriler kullanırlar, bu nedenle 1024-bit veri vektörleri oluşturmak için genellikle 32 örneğe paralel çalışan mini toplu işlere bölerler. Vektör paralelliğine yönelik bu yaklaşım, aktivasyon sayısını 32 kat ve 2 GB'tan fazla yerel depolama ihtiyacını artırır.

    Matris cebiri için tasarlanmış GPU'lar ve diğer makineler de ağırlıklardan veya sinir ağı aktivasyonlarından kaynaklanan bellek stresine tabidir. GPU'lar, derin sinir ağlarında kullanılan küçük evrişimleri verimli bir şekilde gerçekleştiremez. Bu nedenle, bu evrişimleri grafik hızlandırıcıların verimli bir şekilde işleyebileceği matris-matris çarpımlarına (GEMM'ler) dönüştürmek için "düşürme" adı verilen bir dönüşüm kullanılır.

    Giriş verilerini, geçici değerleri ve program talimatlarını depolamak için ek bellek de gereklidir. ResNet-50'yi üst düzey bir GPU üzerinde eğitirken bellek kullanımını ölçmek, bunun 7,5 GB'tan fazla yerel DRAM gerektirdiğini gösterdi.

    Daha düşük hesaplama hassasiyetinin gerekli bellek miktarını azaltabileceği düşünülebilir, ancak durum bu değildir. Ağırlıklar ve aktivasyonlar için veri değerlerini yarı kesinliğe çevirerek, mevcut bilgi işlem kaynaklarının yarısını kullanarak SIMD vektör genişliğinin yalnızca yarısını doldurursunuz. Bunu telafi etmek için, GPU'da tam kesinlikten yarı kesinliğe geçtiğinizde, mevcut tüm hesaplamayı kullanmaya yetecek kadar veri paralelliğini zorlamak için mini toplu işin boyutunu iki katına çıkarmanız gerekir. Bu nedenle, GPU'daki daha düşük hassasiyet ağırlıklarına ve aktivasyonlara geçiş, yine de 7,5 GB'tan fazla boş dinamik bellek gerektirir.

    Depolanacak çok fazla veri varken hepsini bir GPU'ya sığdırmak imkansızdır. Evrişimli bir sinir ağının her katmanında, harici DRAM'in durumunu kaydetmek, ağın bir sonraki katmanını yüklemek ve ardından verileri sisteme yüklemek gerekir. Sonuç olarak, zaten bant genişliği sınırlı olan bellek gecikmesi arabirimi, dengeyi sürekli olarak yeniden yükleme ve aktivasyon işlevlerini kaydetme ve alma ek yükünden muzdariptir. Bu, eğitim süresini önemli ölçüde yavaşlatır ve enerji tüketimini büyük ölçüde artırır.

    Bu sorunu çözmenin birkaç yolu var. İlk olarak, etkinleştirme işlevleri gibi işlemler yerinde gerçekleştirilebilir ve bu da girdinin üzerine doğrudan çıktının üzerine yazılmasına olanak tanır. Böylece mevcut bellek yeniden kullanılabilir. İkincisi, belleği yeniden kullanma yeteneği, ağ üzerindeki işlemler arasındaki veri bağımlılığı ve aynı belleğin o anda onu kullanmayan işlemler için tahsisi analiz edilerek elde edilebilir.

    İkinci yaklaşım, bellek yönetimi ek yükü neredeyse sıfıra düşürüldüğünden, sabit bir ayrılmış bellek oluşturmak için derleme zamanında tüm sinir ağı ayrıştırılabildiğinde özellikle etkilidir. Bu yöntemlerin bir kombinasyonunun, bir sinir ağı tarafından bellek kullanımını iki ila üç kat azaltabileceği ortaya çıktı.
    Üçüncü bir önemli yaklaşım, yakın zamanda Baidu Deep Speech ekibi tarafından keşfedildi. Aktivasyon fonksiyonlarının hafıza tüketiminde 16 kat azalma elde etmek için çeşitli hafıza tasarrufu teknikleri uyguladılar, bu da onların 100 katmanlı ağları eğitmelerine olanak sağladı. Önceden, aynı miktarda bellekle, dokuz katmanlı ağları eğitebiliyorlardı.

    Bellek ve işleme kaynaklarını tek bir cihazda birleştirmek, evrişimli sinir ağlarının yanı sıra diğer makine öğrenimi biçimlerinin performansını ve verimliliğini artırmak için önemli bir potansiyele sahiptir. Sistemde bir yetenek ve performans dengesi elde etmek için bellek ve bilgi işlem kaynakları arasında bir değiş tokuş yapılabilir.

    Diğer makine öğrenimi yöntemlerindeki sinir ağları ve bilgi modelleri, matematiksel grafikler olarak düşünülebilir. Bu grafiklerde büyük miktarda paralellik var. Grafik paralelliğinden yararlanmak için tasarlanmış bir paralel işlemci, mini partiye dayanmaz ve gereken yerel depolama miktarını büyük ölçüde azaltabilir.

    Modern araştırma sonuçları, tüm bu yöntemlerin sinir ağlarının performansını önemli ölçüde iyileştirebileceğini göstermiştir. Modern GPU'lar ve CPU'lar, toplamda yalnızca birkaç megabayt olmak üzere çok sınırlı yerleşik belleğe sahiptir. Makine öğrenimi için özel olarak tasarlanmış yeni işlemci mimarileri, bellek ve çip üzerinde bilgi işlem arasında bir denge kurarak günümüzün CPU'ları ve GPU'larına göre önemli performans ve verimlilik iyileştirmeleri sağlıyor.

    Ne kadar yapay olduğunu anlattı. nöral ağlar Gelenekselden nasıl farklıdırlar? bilgisayar programları ve bu trendin neden uzun süre bizimle kalacağını.

    Derin öğrenme nedir?

    Derin öğrenmenin (derin öğrenme) başarısı ilk kez 2012'de duyuldu ve üç yıl sonra herkes bundan bahsediyor. Yatırım balonunun şişirildiği dönemde İnternet için de durum aynıydı. Ve artık sinir ağlarına büyük yatırımlar yapıldığından, yeni bir balondan güvenle bahsedebiliriz.

    İnterneti sergilemek kolaydı: önce hızlı (kağıt yerine) e-posta, ardından Web'e bağlı herhangi bir bilgisayarda kullanılabilen renkli web siteleri. Derin öğrenmede her şey farklıdır: buna dikkat edilir, ancak belirli bir şeyi göstermek imkansızdır. Gerçekten de, konuşma tanıma programlarını ve programlarını birbirine bağlayan şey otomatik çeviri, petrol ve gaz ekipmanı için sorun giderme yazılımı ve fotoğrafları açıklayan metinleri sentezlemek için yazılım?



    Bu çeşitlilik tesadüfi değildir: İnternet sadece bir iletişim biçimiyse, o zaman derin sinir ağları (DNN'ler) aslında geleneksel bilgisayar programları kadar çok yönlü yeni bir program türüdür. Bu evrensellik teorik olarak kanıtlanmıştır: teoride, bir sinir ağı birçok değişkenin herhangi bir işlevine sonsuz doğrulukla yaklaşabilir ve ayrıca bir Turing makinesininkine eşdeğer hesaplamalar yapabilir.

    Öğrenilecek ağlar

    İnternet üzerinden çok monoton bir şekilde, birleşik paketler halinde bilgi iletmek mümkündür ve bu fikir üzerine inşa edilmiştir. Ancak bilgi farklı şekillerde üretilebilir ve tüketilebilir. Bunu yapan bilgisayar programları çok farklı. Sinir ağları aynıdır, aynı işlem çeşitliliğini sağlarlar.

    Bugün nöral ağların ne olduğunu açıklamak, ellili yılların sonlarında (ve Fortran dili 1957'de piyasaya sürüldü) geleneksel bilgisayar programlarının ne olduğunu anlatmaktır - eğer bilgisayarların her arabanın kontağı kontrol edeceğini ve ayrıca porno göstereceğini söylemeye başlasaydınız telefon ekranlarında film izle, alay konusu olursun.

    Şimdi size bir sinir hastasıyla konuşacağınızı söylersem bilgisayar ağı tabletinizde ve sinir ağı arabayı sürücüsüz kontrol edecek, buna da inanmayacaksınız - ama boşuna.

    Bu arada, sosyal ağlardaki "porno resimleri" artık insanlar tarafından değil, ağların kendileri tarafından keşfediliyor. Ancak bu, dünyada terabaytlarca terabaytlarca fotoğraf ve video izleyen 100 bin kişi tarafından yapıldı. Derin öğrenmenin gelişiyle birlikte veri işleme dünyası aniden ve hızla değişmeye başladı.

    Geleneksel bilgisayar programlarının aksine, sinir ağlarının "yazılması" gerekmez, "öğretilmesi" gerekir. Ve geleneksel yazılım mühendisliği ile uygulanmasının (imkansız değilse bile) son derece zor olduğu öğretilebilir. Örneğin, sinir ağları, ses ve videoyu insan düzeyinde ve hatta onlardan daha iyi tanımayı çoktan öğrendi. Veya tam tersi, ses ve video oluşturun - eğitimli bir derin sinir ağında somutlaşan bazı nesnelerin görüntülerini anlıyorsanız, aynı anlayış bu nesnelerin görüntülerini oluşturmak için kullanılabilir. Ses, metin ve görüntülerin sentezi henüz piyasada görünmedi, ancak deneyler şimdiden bu alanda daha önce ulaşılamayan başarıları gösteriyor. Ayrıca, sinir ağları yalnızca verileri analiz etmekle kalmaz, aynı zamanda komutlar da verebilir. Böylece Atari 2600 oyunlarını oynamayı öğrendiler ve hatta birçoğu bir erkekten daha iyi ve bunun için özel olarak programlanmaları gerekmiyordu.

    Bu sadece bugün nasıl mümkün olabilir? Neden bu tür sonuçlara uzun zaman önce, hatta aynı İnternet'in ortaya çıkmasından önce ulaşılmadı? Sonuçta, sinir ağlarının yetenekleri hakkındaki tartışmalar geçen yüzyılın aynı 50'li yıllarından beri devam ediyor!

    İlk olarak, derin sinir ağlarının nasıl öğretileceği - orada ne tür bir matematiğin işe yaradığı - netleşti. Derin bir sinir ağı, derinliği ikiden fazla katman olan bir ağ anlamına gelir. Daha az katman varsa, sığ (sığ) öğrenmeden bahsediyoruz. Katman sayısı ondan fazlaysa, çok derin öğrenmeden söz edilir, ancak şimdiye kadar bu nadirdir. Önceden, sinir ağları deneme yanılma yoluyla (“bilimsel dürtme” yöntemi olarak da bilinir) öğrenmeye çalışıyordu ve bu şekilde yalnızca küçük ağları eğitmek mümkün oluyordu. Zamanla, çok katmanlı sinir ağlarının matematiğine dair bir anlayış ortaya çıktı, onları tasarlamak mümkün hale geldi, yeni ağ türlerinin nasıl oluşturulacağı ve öğrenmelerinin nasıl sağlanacağı konusunda bir anlayış geldi.

    İkincisi, sinir ağı hızlı çalışır, ancak çok yavaş öğrenir ve bu çok büyük miktarda veri gerektirir - Büyük veri. Sinir ağındaki katman sayısı arttıkça, böyle bir ağ için daha fazla istek işlem gücüöğrenirken. Aslında, yakın zamana kadar sinir ağları yalnızca bir süper bilgisayarda öğretilebiliyordu.



    Bugün, video kartları sinir ağlarıyla çalışmak üzere bağlandığından durum değişti - ve bu onların eğitimini on kat hızlandırdı. Ancak bu hızlandırılmış öğrenme bile çoğu zaman saatlerce, hatta günlerce ve bazen haftalarca süren hesaplamalar anlamına gelir. Tek teselli, geleneksel programlama söz konusu olduğunda, aynı sorunları çözmenin sadece haftalarca değil, programcıların yıllarca çalışmasını gerektirecek olmasıdır.

    Ancak bir derin sinir ağı bir kez eğitildiğinde, geleneksel algoritmalardan yüzlerce ila binlerce kat daha hızlıdır. Program, daha kaliteli sonuçlarla yüzlerce kat daha az RAM kullanır.

    « Ustaların sinir ağı»

    Bu ağların alışılmadık özellikleri, veri analizinde neredeyse tüm uluslararası yarışmaların derin sinir ağları tarafından kazanılmasına yol açmıştır. Ve bir tür veri analizi göreviniz varsa ve bu verilerden çok varsa, bu durumda derin sinir ağlarının da fayda sağlama olasılığı yüksektir.

    Sinir ağlarına bulaşanların mesleğinin henüz bir adı bile yok. İnternetin şafağında "web yöneticisi" kavramı ortaya çıktıysa (ve beş veya altı yıl sürdüyse), o zaman benzer bir "sinir ağı ustası" mesleği henüz yok. Büyük veri alanında, bu tür uzmanlar kendilerini "veri bilimcileri" (veri bilimcileri) olarak adlandırırlar, ancak çalışmaları yine de programcıların çalışmalarıyla aynı mühendislik niteliğine sahiptir. Mühendisler hem hedef sistemleri hem de mühendislik araçlarını ölçer, analiz eder, tasarlar ve inşa eder. Yazılım Mühendisliği(yazılım mühendisliği) bilgisayar biliminden farklıdır. Sinir ağlarında da durum aynı: Henüz bir meslek adı yok, ancak bunları oluşturmanıza, eğitmenize ve kullanmanıza yardımcı olacak mühendisler zaten var. Neyse ki, geçen yıl içinde yeni bir meslek için gelişmiş bir altyapı ortaya çıktı: üniversite Eğitim Kursları, onlarca öğretici, kitap, yarışma ve eğitim alanı, çok sayıda ücretsiz yazılım. Bugün sadece Rusça konuşan derin öğrenme topluluğu VKontakte'de