Modern Makine Öğrenimi çağında, Derin Evrişimli Sinir Ağları, her türlü görev için görüntülerle çalışmak için çok güçlü bir araçtır. Yaklaşık 1000 farklı nesne türünü çok iyi performansla sınıflandırabilen/tespit edebilen bazı ağlar gördük. Bir sınıflandırıcı oluşturmanın geleneksel yolu aşağıdaki gibidir:
2015 tarihli bir makalede (FaceNet olarak adlandırılır), yazarlar başka bir yaklaşım benimsediler. Doğrudan sınıflandırıcı olarak bir NN'ye sahip olmak yerine, bir "Siyam ağı" oluşturdular ve iki girdinin benzer olup olmadığına karar vermek için çıktıyı karşılaştırdılar, bu yaklaşımı "One Shot Learning" olarak adlandırdılar ve "Triplet Loss" adı verilen özel bir kayıp işlevi kullandılar.
Bu makale, bu iki kavramı keşfetmek ve bunları Keras kullanarak MNIST veri kümesine uygulamakla ilgilidir.
Geleneksel bir sınıflandırma projesinde, tipik olarak bir sinir ağını, girdi olarak bir resim ile ağ her sınıf için bir olasılık (genellikle bir softmax) verecek şekilde eğitirsiniz. Bu nedenle, resmin bir kedi, bir köpek veya bir at içerip içermediğini bilmek istiyorsanız, ağınız her sınıf için bir tane olmak üzere 3 olasılık verecektir. Bir köpek resmi girerseniz, ağın köpek çıktısı için yüksek bir olasılık ve kedi ve at çıktısı için düşük bir olasılık vermesi gerekir. Bunu görmenin bir başka yolu da modelin “Girdi hangi sınıftır?” sorusuna yanıt vermesidir.
Bu tür bir eğitim için, ağ onları nasıl uygun şekilde nitelendireceğini öğrenene kadar çok sayıda kedi, köpek ve at resmi besleyerek ağınızı eğiteceksiniz. Kapsamlı bir testten sonra, modelinizden memnunsunuz ve onu bir yere yerleştirmek için kullanabilirsiniz.
Şimdi, bu hayvan sınıflandırıcısına bir maymun sınıfı eklemeniz gerekirse ne olur? Bir sürü maymun resmi bulmanız, ağınıza yeni bir çıktı eklemeniz, yeniden eğitmeniz, yeniden test etmeniz ve yeniden dağıtmanız gerekiyor.
Bu, bazı durumlarda mükemmel şekilde çalışır, ancak çoğu durumda bu pratik olmayabilir. Sınıflar yeniden eğitilemeyecek kadar hızlı değişirse ne olur? Bu duruma tipik bir örnek, şirket güvenlik kapıları için çalışan yüzü tanımadır. Buradaki sınıflar çalışanlardır ve sisteminizi çalışan yüzleriyle eğitmeniz gerekir. Bir çalışanın şirkete her gelişinde veya şirketten ayrılmasında modeli yeniden eğitmek, yeniden test etmek ve yeniden dağıtmak pek gerçekçi değildir. Ve her çalışanın binlerce fotoğrafının olması da pek gerçekçi değil.
2015 tarihli “ FaceNet: Yüz Tanıma ve Kümeleme için Birleştirilmiş Bir Gömme ” makalesine girin ( bununla yakından ilişkili olanın ardından ). Ana fikir, sadece bir örneğe dayanarak karar verebilmek, böylece iki görüntüyü karşılaştırabilmek ve aynı olup olmadığını söyleyebilmektir. Dolayısıyla “Tek Atışta Öğrenme”
Sistemimiz tarafından cevaplanan soru şu olur: “Bu iki resim benzer mi?” Doğrudan bir sınıflandırıcı oluşturmuyoruz, bir benzerlik karşılaştırıcısı oluşturuyoruz.
Bunu yapmak için Siyam ağ mimarisi kullanılır: giriş resimleri iki ağdan geçer ama burada bu iki ağ aslında aynıdır. Aynı mimari, aynı ağırlık, aslında aynı ağ ama iki farklı girdi için kullanılıyor. Çıktılar daha sonra benzer olup olmadıklarına karar vermek için kullanılır.
İki resim arasındaki benzerliği analiz etmek için girdi resmimizi daha küçük bir temsile, diyelim ki tek bir vektöre dönüştürebilmemiz gerekir. Bu gösterime genellikle gömme denir. Aşağıdaki özelliklere sahip olmaları için tez yerleştirmelerini oluşturmamız gerekiyor:
Yerleştirme süreniz ne kadar olmalı? Dört sayı? 40? Daha? Buradaki fikir, yerleştirmenizin, sınıfınızı diğerlerinden ayırt etmek için "yeterince iyi" bir temsilini içerebilmesi gerektiğidir. Gömme uzunluğu, sorunun yeni bir hiper parametresidir.
Örneğin, bu dört süper basit 3x3 piksel sınıfını ayırt etmek için iki sayı yeterlidir.
FaceNET makalelerinde yazarlar, insan yüzü özelliklerini temsil etmek için 64 sayı seçtiler. 128 ile denemek, performansı biraz artırdı, ancak çok fazla değil, bu yüzden 64'ü iyi bir uzlaşma olarak gördüler.
Resimlerle çalışmamasına rağmen, Google tarafından oluşturulan BERT sistemi , bir kelimeyi veya bir ifadeyi anlamsal anlamını temsil etmek için 768 sayı kullandı.
Bu yazıda, 10 boyutunda yerleştirmelere sahip olmayı seçtik.
Ağımızın parametrelerini öğrenmenin iki ana yolu vardır. İlk olarak, giriş resimleri aynı sınıftan ise Y=1 ve değilse Y=0 ile sistemin doğru kısmını bir ikili sınıflandırıcı olarak düşünebiliriz.
İkinci olarak, FaceNet makalesinde kullanılan yaklaşımı kullanabiliriz. İki resmi karşılaştırmak istediğimizden ve benzer görüntüler için küçük mesafeli yerleştirmelere ve farklı görüntüler için büyük mesafeli yerleştirmelere sahip olmak istediğimizden, fikir şudur:
uzaklık(A,P) < uzaklık(A,N)
Farklı yazalım
mesafe(A,P) - mesafe(A,N) < 0
Ağımızın her şeye sıfır vererek denklemi karşılayan kolay bir çözüm öğrenmesini önlemek için, bir kenar boşluğu parametresiyle AP ve AN arasında bir kenar boşluğunu zorlayalım:
uzaklık(A,P) — uzaklık(A,N) + kenar boşluğu < 0
Kayıp fonksiyonumuz bu varlığı temel alacak ve aşağıdaki forma sahip olacaktır:
L=maks(d(A,P)−d(A,N)+marj,0)
Bu yazımızda MNIST veri setini kullanacağız. Tüm resimler sınıflarına göre sıralanacaktır, bu daha sonra üçlü gruplarımızı hazırlamak için faydalı olacaktır.
Şimdi üçlü grupları eğitim için hazırlamamız gerekiyor. Partimizin her numunesi 3 resim içerecektir: Çapa, Pozitif ve Negatif. Üçüzümüz nasıl seçilir? İlk yaklaşım, üçlüyü tamamen rastgele aşağıdaki gibi seçmek olacaktır:
Sınıflarımızı açıkça ayırt etmeyi öğrenmek için benzerlik ağımıza ihtiyacımız var. Kaybın tanımına göre, üç üçüz kategorisi vardır:
Burada kullanılabilecek, her birinin antrenman hızı üzerinde etkisi olan birçok strateji olduğunu unutmayın. İyi seçilmiş üçlülerle ağ daha hızlı yakınsar, ancak hangi üçlülerin kullanılacağını seçmek için çok fazla hesaplama kullanmak genel olarak daha yavaş olabilir. Daha ileri gitmek için üçlü madenciliği tartışan bu mükemmel makaleye bakın .
Peki, Sinir Ağımız için hangi mimari? Bu durumda daha çok kayıp fonksiyonuna odaklandığımız için, buradaki NN mimarisi pek alakalı değil. Gerçekten, basit olandan ResNet gibi güçlü olana kadar herhangi bir mimariyi alabiliriz. Basitlik adına, basit bir tane alalım: üç yığın Evrişimli/Havuz katmanı+biri tamamen bağlı. Tüm gömme değerleri aralığına sahip olmak için son katmanın herhangi bir aktivasyon fonksiyonuna sahip olmadığından emin olmalıyız.
Özel bir Keras katmanı olarak uygulanan üçlü kayıp işlevi
L=maks(d(A,P)−d(A,N)+marj,0)
Şimdi, çapa, pozitif ve negatif resim girdileri olan Full Keras modelimiz
Geleneksel bir sınıflandırıcıda performansımız, tüm sınıfların en iyi tahmin puanına dayalı olacak ve bu da Kesinlik, geri çağırma veya F1 metrikleriyle bir karışıklık matrisine yol açacaktır .
Bizim durumumuzda, modelimiz mesafeleri hesaplamak için kullanabileceğimiz yerleştirmeler üretir, bu nedenle model performansımızı değerlendirmek için aynı sistemi uygulayamayız. İki resim aynı sınıftan ise mesafe “düşük”, resimler farklı sınıflardan ise mesafe “yüksek” olmalıdır. Yani bir eşiğe ihtiyacımız var : Bulunan mesafe eşiğin altındaysa bu “aynı” bir karardır, eğer mesafe eşiğin üzerindeyse “farklı” bir karardır. Bu eşiği dikkatlice seçmeliyiz. Çok düşük, yüksek hassasiyete sahip olacağımız, ancak aynı zamanda çok fazla yanlış negatif olacağı anlamına gelir. Çok yüksek ve çok fazla yanlış pozitifimiz olacak. Bu bir ROC eğrisi problemidir. Dolayısıyla, değerlendirme için bir metrik, Eğrinin Altındaki Alan (AUC) olabilir. Bu yazımızda Yanlış Pozitif Oranın 10e-3'ün altında olması için eşiği seçeceğiz ve ardından duyarlılığı (hatırlatma) değerlendireceğiz.
Değerlendirme sürecimiz test veri setini alacak ve tüm resimlerin birbirine olan mesafesini değerlendirecek ve ardından sklearn işlevini kullanarak AUC'yi hesaplayacaktır.
Eğitim sırasında bakılması gereken bir başka ilginç ölçüm, her bir sınıftan yerleştirmelerin birbirinden ne kadar "uzak" olduğudur. Kapsamlı olmak için tüm veri setini değerlendirmeliyiz, ancak burada bu sadece ağın tüm sınıflar için sorunsuz bir şekilde yakınsadığını kontrol etmek içindir.
Şimdi modelimizi eğitelim. Her döngü yeni bir toplu iş oluşturur ve onu işler.
İşte eğitimden sonraki ROC eğrimiz:
Şimdi sınıflar arasındaki mesafelerin ne kadar olduğunu görelim. Ortalama 0,5'ten 1,4'e taşındılar. Bu, ilgili yerleştirmelerinin ağımız tarafından daha iyi üretildiğini açıkça gösterir.
Birkaç test görüntüsünü her sınıftan bir referans resimle karşılaştırmaya çalışarak ağımızla oynayalım. Ağımızın artık sağlam bir benzerlik karşılaştırıcısı olduğunu açıkça görebiliyoruz:
Kodun tamamı burada github adresimde mevcuttur .
Bu kod, Azure Veri Bilimi Sanal Makinesinde (Nvidia K80 GPU ile) çalışan Azure Not Defterleri üzerinde oluşturulmuştur.
Coursera'da Derin Öğrenme Evrişimli Sinir Ağı hakkında Andrew Ng kursu
2015 FaceNet: Florian Schroff, Dmitry Kalenichenko ve James Philbin tarafından Yüz Tanıma ve Kümeleme için Birleşik Bir Gömme
Bir üçlü kaybı ve üçlü madenciliği nother ayrıntılı açıklama TensorFlow ile Olivier Moindreau tarafından
Tess Ferrandez benimkinden daha iyi Kayıp uygulaması için
Abdelkader Dahou ve Habib Salas incelemeleri için
Giriş Bildiğimiz gibi veri her şeyin anahtarıdır, ancak veri bulmak yorucu bir iştir 🤔. Öyleyse neden veri bulmak yerine kendi verimizi oluşturamıyoruz.
Merhaba, Makine öğrenimi severler! Bu blog, "Yeni Başlayanlar için Komple Makine Öğrenimi ve Derin Öğrenme" serisinin ikinci yazısıdır ve bizi önümüzdeki yolculuğa hazırlamaya odaklanacaktır. Bu, makine öğrenimini öğrenmek için gerekli olan matematiğin ve istatistiğin temel taşını oluşturacaktır.
Bu, bir önceki makalenin devamı niteliğinde, henüz okumadıysanız lütfen okuyun. 3. Gün Ertesi sabah balkondan başka bir muhteşem sabah manzarasıyla uyandım.
Artık ilk Presearch NFT düşüşü yayına girdiğine göre, her NFT hakkında bazı ek bilgiler ve bunları basmaya hak kazanmak için hangi belirli kriterlerin gerekli olduğu hakkında bilgi vermek için buradayız. Presearch NFT koleksiyonu hakkında daha fazla bilgiyi buradan edinebilirsiniz: https://presearch.
Sophia, birkaç hafta önce JRF ve büyüyen bir grup ortakla yapacağım çalışma hakkında paylaştı. JRF gibi bir vakfın bu alana ve özellikle de bu zamanda yatırım yapmasına gerçekten çok sevindim.
2021'de çok şey oldu. Bu, mücadele ettiğim şeylerden sadece birkaçına, değişimi hızlandıran şeylere ve kendim hakkında öğrendiklerime dair süper yoğun bir yansıma.
Kristen Stewart bir keresinde 'Pamuk Prenses' rol arkadaşı Chris Hemsworth'a sert bir yumruk attı ve bu, oyuncunun geleceğini görmediği bir saldırıydı.
GQ Magazine ile yaptığı bir röportajda BTS'den Jin, BTS ve Coldplay'in şarkısı 'My Universe'nin bir bölümünün 'son bölümü yapmadığını' açıkladı.
Bir röportaj sırasında Kane Brown, Elvis Presley'in "Hound Dog" ve "Blue Christmas" şarkılarının defalarca şarkılarını nasıl etkilediğini tartıştı.
'Çığlık', bazı yeni yönler veren kanlı bir dönüş sağlar, ancak Ghostface'in en yeni öldürme çılgınlığı olması gerektiği kadar derin kesmez.
Her hafta güncellenen mini bulmacamız, en sevdiğimiz HowStuffWorks okumalarımızı zeki ipuçlarıyla birleştiriyor!
Doğru deterjanı seçme konusunda endişelenmenize gerek kalmadan çamaşır yıkamak yeterince kötü. Peki en iyisi hangisi? Yoksa önemli mi?
Kentucky kırsalındaki Fugates ve Combs aileleri, genetik piyangoyu kaybettiler ve her ikisi de, evlenirken tenlerinin mavi görünmesine neden olan nadir bir çekinik özelliği paylaştılar. Bunun nedeni neydi? Ve ailelere ne oldu?
İki babasız erkek civciv, California akbabasını yok olmaktan kurtarmak için bir programda yetiştiriliyor. Böyle 'bakire' doğumlar nasıl mümkün olabilir?
Brian Cox ayrıca yakında çıkacak olan Putting the Rabbit in the Hat adlı anı kitabında Harry Potter ve Karayip Korsanları film serilerindeki potansiyel rollerden bahsetti.
Ağustos 2019'da nişanlanan ve 1,5 yaşındaki oğulları River'ı paylaşan çift, Pazar günü evlendi.
Bir panel eyalet Senatörü Sarah Eckhardt'a Orta Teksas'ta bir ilçe yargıcıyken meydana gelen olaylar nedeniyle uygulanan yaptırımları tersine çevirdi
New York Rep. Alexandria Ocasio-Cortez, COVID-19 ile geçirdiği bir maçın ardından "neyse ki iyileşti ve karantinayı tamamladı" - "muhtemelen omicron", Pazar günü Instagram'da bir gönderi ekledi.