Sinir ağı görüntüleri nasıl tanır?


25

Sinir Ağının görüntü tanımada nasıl çalıştığını öğrenmeye çalışıyorum. Bazı örnekler gördüm ve daha fazla kafam karıştı. 20x20'lik bir görüntünün harf tanıma örneğinde, her pikselin değerleri giriş katmanı haline gelir. 400 nöron. Sonra gizli bir nöron tabakası ve 26 çıkış nöronu. Sonra ağı eğitin, sonra da işe yaramaz, mükemmel değil.

Sinir Ağı ile ilgili beni şaşırtan şey, bir resimde ne olduğunu nasıl öğrendiği. Bir şekilde ağın görüntüleri karşılaştırmayı ve tanımayı öğrenmesini sağlar, eşikleme veya bölümleme veya ölçüm yapmanız gerekmez. Şimdi benim için sihir gibi. Sinir ağını öğrenmeye nereden başlamalı?


1
Doğru anlarsam, sinir ağı, bazı soyut uzaylardaki yerel aşırı uçların olası seçimlere neden olduğu çok boyutlu bir yüzeydir. Bir sinir ağını öğretmek, sadece bu soyut yüzeyi görevine göre ayarlamaktır. Bu benim noobish anlayışım.

Yani açıklama VEYA kaynaklarının NN'lerle çalışmaya başlamasını mı istiyorsunuz? Netleştirmek güzel olurdu.

2
Kursta (şu anda) güzel ücretsiz bir kurs var ve sorunuza ithaf edildi. coursera.org/course/neuralnets
pat

Coursera NN sınıfı, giriş kadar iyi değil, gelişmiş gibi gözüküyor. Andrew Ng’nin, örneğin Youtube’da bulabileceğiniz daha nazik tanıtımları vardır.
Douglas Zare

Aslında, Coursera kursu ilerler, ancak kesinlikle yükselir ve OP'nin sorusuna oldukça iyi cevap verir. Ayrıca rakam tanıma konusunda pek çok örnek var.
Chris A.

Yanıtlar:


24

Bir sinir ağının, sadece örnekler verilen görüntü verileri kadar karmaşık bir şeyi sınıflandırmayı nasıl öğrenebileceği ve 1980'lerde yeni tanıma konusunda Profesör Kunihiko Fukushima'nın çalışmasını incelerken bana doğru cevaplar geldiğine dair büyük bir fikir. Ağına sadece birkaç görüntü göstermek ve kendi başına bir şeyler bulmak için geri yayılım kullanmak yerine, farklı bir yaklaşım benimsemiş ve ağ katmanını katman bazında ve hatta düğüm düğümlerini eğitmiştir. Ağın her bir düğümünün performansını ve işleyişini analiz etti ve bu parçaları kasıtlı olarak, hedeflenen şekilde yanıt vermeleri için değiştirdi.

Örneğin, ağın hatları tanımasını istediğini biliyordu, bu nedenle belirli katmanları ve düğümleri üç piksel yatay çizgileri, 3 piksel dikey çizgileri ve tüm açılardaki belirli çapraz çizgiler çeşitlerini tanımak için eğitti. Bunu yaparak, istenen örüntüler mevcut olduğunda, ağın hangi kısımlarının ateşleneceğine tam olarak güvenebileceğini biliyordu. Daha sonra, her katman birbirine çok bağlı olduğu için, bir bütün olarak tüm neocognitron, fiziksel olarak nerede bulunduklarına bakılmaksızın görüntüde bulunan bileşik parçaların her birini tanımlayabilir. Dolayısıyla görüntüde bir yerde belirli bir çizgi parçası bulunduğunda, her zaman ateş edecek belirli bir düğüm olacaktır.

Bu resmi hiç güncel tutmak, basitçe bir formül (veya bir çizgi) bulmaktan oluşan, basit bir şekilde verdiğiniz verilerden en yakından geçen, anlaşılması yeterince kolay olan bir kare hatayla doğrusal regresyon düşünün. Kavisli "çizgiler" bulmak için, aynı ürün hesap toplamını yapabiliriz, ancak şimdi x ^ 2 veya x ^ 3 birkaç parametre veya daha yüksek dereceli polinomları ekliyoruz. Şimdi bir lojistik regresyon sınıflandırıcınız var. Bu sınıflandırıcı, doğada doğrusal olmayan ilişkileri bulabilir. Aslında lojistik regresyon keyfi karmaşık olan ilişkileri ifade edebilir, ancak verileri tahmin etmede iyi bir iş yapmak için hala doğru güç özelliklerini seçmeniz gerekir.

Sinir ağını düşünmenin bir yolu, son katmanı bir lojistik regresyon sınıflandırıcısı olarak düşünmek ve sonra gizli katmanlar otomatik "özellik seçicileri" olarak düşünülebilir . Bu, giriş özelliklerinin doğru sayısını ve gücünü manuel olarak seçme çalışmasını ortadan kaldırır. Böylece, NN bir otomatik güç özelliği seçicisi haline gelir ve herhangi bir doğrusal ya da doğrusal olmayan ilişkiyi bulabilir ya da isteğe bağlı olarak karmaşık kümelerin bir sınıflandırıcısı olarak işlev görebilir ** (bu, yalnızca, karmaşıklığını temsil etmek için yeterli gizli katmanların ve bağlantıların olduğunu varsayar) öğrenmesi gereken model). Sonunda, iyi işleyen bir NN'nin yalnızca girdi ve çıktılar arasındaki ilişkiyi değil, aynı zamanda bir soyutlama veya model için de çaba sarfediyoruz.iyi genelleştirir .

Genel bir kural olarak, sinir ağı, akıllı bir insanın aynı verilerden yeterince zaman vererek teorik olarak öğrenemediği bir şeyi öğrenemez.

  • Henüz kimsenin anlamadığı bir şeyler öğrenebilir.
  • Büyük problemler için sinir ağlarını işleyen bir bilgisayar bankası, bir takım insandan çok daha hızlı gerçekten iyi çözümler bulabilir (çok daha düşük bir maliyetle)
  • Bir kez eğitilmiş NN'ler, üzerinde eğitildikleri girdilerle tutarlı sonuçlar üretecek ve düzgün bir şekilde ince ayar yapıldığında iyi bir şekilde genelleştirilmelidir.
  • NN asla sıkılmaz ya da dikkati dağılmaz

1
Son katmanın gizli katmanın özellik seçiminin tepesinde nasıl lojistik regresyon yaptığı hakkındaki paragraf için +1. NN'ler hakkında düşünmek için güzel bir yol.
jlund3

Teşekkürler, ama şunu söylemeliyim ki, her YSA'nın son katının aslında bir lojistik regresyon katmanı olduğunu söylemiyorum, ancak bunun sadece birçok sorunu çözebilecek olası bir yapılandırma olduğunu söylüyorum. Çoğunlukla rastgele bir yoldan dolayı, tipik olarak YSA'nın en muhtemel herhangi bir gerilemesinin çok sayıda düğüm ve katmana çok rastgele bir şekilde yayılması muhtemeldir. Biri alt ağları belirli şekillerde cevap verecek şekilde eğitebilir ve daha sonra belirli problemler için özel ağlar oluşturmak için bunların çıkışını bir regresyon katmanına pompalayabilir. YSA'yı bellek ve hızda oldukça verimli kılar.
mcstar

1
Bu cevap görüş almaya devam ediyor, bu yüzden şimdi 5 yaşından büyük olduğunu ve sadece tamamen bağlı ağları beslediğini düşünürdüm. Buradaki kavramsal görüşler hala geçerli olmasına rağmen, uygulayıcıya son on yılda standart hale gelen derin NN kavramlarını anlamaya yetecek kadar veremiyorlar. CNN (evrişimsel sinir ağı), derin ağlara kenarları, kontrastı, keskinliği, renk alanlarını, gölgeleri ve daha fazlasını bulmalarını sağlayarak süper güçler veren ve düşük seviyeli özelliklerin bağlamını belirlemek için kullanan çok önemli bir modern adaptasyondur.
mcstar

10

Sinir ağlarının " evrensel fonksiyon belirleyicileri " olduğunu duymuş olabilirsiniz . Temelde, Cybenko teoremi, gerçekleri gerçeklerle eşleştiren herhangi bir işlev için, onu sigmoid etkinleştirme işlevlerine sahip bir sinir ağı ile yaklaştırabileceğinizi söylüyor. Aslında, sinir ağlarının bir Turing makinesi tarafından hesaplanabilen herhangi bir işlevi (yani hesaplamak için bir algoritma yazabileceğiniz herhangi bir şeyi) hesaplamanıza olanak sağladığı görülmüştür. Ne yazık ki, bu kanıtlar sadece nöronların ve ağırlıkların sonlu konfigürasyonları için, herhangi bir fonksiyonu yaklaşık olarak alabileceğinizi söylüyor.

Teori güzel ve zordur, ancak sorunuz daha çok bazı fonksiyonların hesaplanmasını bir dizi nöron ve ağırlığa nasıl kodlayacağınızla ilgili gibi görünüyor. Örneklemek için, basit bir örneği düşünün - münhasır veya. XOR iki giriş alır, bu girişleri geçer. Girişlerden biri ve yalnızca biri aktif olduğunda, çıkış düğümü etkinleştirilir. Hem giriş hem de hiçbiri etkinleştirilmemişse, çıkış düğümü etkinleştirilmez.

XOR hesaplayabilen üç katmanlı bir Perceptron ağı wikipedia'dan ödünç alındı.

Üç gizli düğümün farklı şeyler yaptığına dikkat edin. Soldaki ve sağdaki çoğu düğümler, saygıyla giriş düğümleri aktivasyonlarından basitçe geçer. Orta nöron iki girişi alır ve her ikisi de açıksa bir şekilde onları olumsuzlar. Girdilerin bir araya getirilmesi ve yeniden birleştirilmesi bu akıllıca, aslında bir sinir ağında nasıl çalıştığını göstermektedir.

Açıkçası, daha karmaşık fonksiyonlar için birleştirme ve yeniden birleştirmenin daha akıllı ve karmaşık yollarla yapılması gerekir, ancak özünde düşük bir düzeyde olan şey budur. Çılgınca bir şey, hesaplanabilir bir işlevi hesaplamak için ihtiyaç duyduğunuz tek şey bu! Sonra tekrar, turing makineleri de aldatıcı basit olduğu ortaya çıktı ...

Sorun şu ki, bazı keyfi işlevleri hesaplayan sinir ağını sihirli bir şekilde üretecek bir yolumuz yok. Kanıtlar, sadece orada yapabilecek bir ağ olduğunu söylüyor. Yapay sinir ağlarımızı eğitirken, sadece oldukça yakın bir ağ bulmaya çalışıyoruz.

Görüntü tanıma bağlamında, ağa kodlama kalıpları düşünebilirsiniz. Örneğin, '1' sayısını tanımak için, komşu piksellerin kapalı olmasıyla birlikte bir piksel sütununun çoğunlukla veya tamamen etkin olmasını bekleyen gizli bir düğüm hayal edebilirsiniz. Bu gizli düğüm, belirli bir sütundaki düz bir çizgiyi tanımakta oldukça iyi olabilir. Bunları bir araya getirin ve kısa bir süre sonra görüntünüzün yeterli yerinde yapan bir grup düğüme sahip olursunuz, eğer ağa bir tane gösterirsem, '1' i belirten yeterli düz çizgi gizli düğümleri aktif hale gelir. Elbette ki problem, ağı genelleştirmekte ve böylece çeşitli girdi kümelerini tanıyabilmektedir.

Umarım bu, sinir ağının nasıl hesaplamalar yapabileceği ile ilgili kavramları aşağı yukarı anlamanıza yardımcı olur. Bununla birlikte, sinir ağları için oldukça önemli bir noktaya değindiniz: genel olarak ağın neden belirli bir çıktıyı tükettiğini anlamak, özellikle de görüntü tanıma gibi bir şey için ağların genellikle Makinenin hareketli parçalarının her birini anlamak için insanların zorlu bir zaman geçirmesine yetecek kadar büyük. Meseleyi daha da karmaşık hale getiren şey, genel olarak çoğu sinir ağının ağın veriler hakkında öğrenebileceği her küçük özellik için tek bir gizli düğüme sahip olmamasıdır. Bunun yerine, '1' sayısını sınıflandırmak için düz bir çizgi gibi bir şey tespit etmek, birçok gizli düğüm üzerinde merkezileşmemiş bir şekilde gerçekleşir. Diğer algoritmalar

Daha fazla okuma arıyorsanız, bu derste ai junkie'de okumayı şiddetle tavsiye ederim . Sinir ağının nasıl çalıştığının temelleri arasında size yol gösterir ve hatta bir tankı hedefe doğru yönlendirmek için sinir ağlarını elde etmek için basit bir kod örneği verir. Bununla birlikte, eğitim, sinir ağlarını eğitmenin en yaygın yolu olan ve bunun yerine basit bir genetik algoritma kullanan geri yayılımı kapsamamaktadır. Genetik konuşmaya başladığında, okumayı kesebilirsin sanırım ...


Tüm bu sözleri ve düşünceleri bir araya getirme çabaları için teşekkürler. Özellikle görüntü tanıma için Convolutional NN ile ilgileniyorum. OpenCV kütüphanesinde yüz tanıma örneğini denedim, ancak bunun sadece sert nesnelerde iyi olduğunu gördüm. Yapay Sinir Ağının bilmece tanıma konusunda benzer bir sınırı var mı, yani sadece katı cisimlerde iyi mi?
user1731927 10:12

NN'nin (veya bu konu için CNN'nin) örüntü tanıma sınırlaması olmasının teorik bir nedeni yoktur, ancak daha önce keşfetmiş olduğunuz gibi, bazı problemleri diğerlerinden daha kolay öğrenebilirsiniz. Makine öğrenimindeki birçok problemde olduğu gibi, muhtemelen modelinizi biraz değiştirmek zorunda kalacaksınız, böylece çözmeye çalıştığınız belirli türden problemi çözebilir ve NN'ler bunun bir istisnası olmaz.
jlund3

1
Burada, NN'lerin görüntü sınıflandırması gibi 2d ızgara problemlerini çözmek için birlikte nasıl daha iyi yapılandırılacağı hakkında ilginç bir makale bulunmaktadır. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3

1
Teğetsel olarak, "rijit olmayan" görsel nesneleri veya kenarları temiz çizgileri olmayan nesnelerin doğru şekilde sınıflandırılmasındaki zorluk, doğanın bile kamuflajın mükemmel bir kaçınma stratejisi olduğunu belirlemesinin tam nedeni budur. Düşünce için yiyecek.
mcstar

2

Kafanı karıştıran bu

Bir resimde ne olduğunu nasıl öğrendiği.

Bir görüntüde olan, dijital olarak görüntünün piksellerindeki değerlerle temsil edilir. Görüntüdeki renklerden bir örnek alırsanız. Piksel, her biri üç ana renk için üç değere sahip olabilir - Kırmızı, Yeşil ve Mavi ( RGB). ( 10,50,100) İle bir piksel, ( ) ile bir pikselden 'daha az' mavi renk öğelerine sahip olduğu anlamına gelir 40,50,100. Dolayısıyla görüntüde, ilk piksel daha az mavi renk olan bir bölgeyi temsil eder. Bu, sinir ağının görüntünün bir konumundan / bölgesinden diğerine öğrendiği ve görüntüde ne olduğunu 'bilerek' bittiği bilgilerdir. Sinir ağına girdi olarak kullanılabilecek diğer görüntü özellikleri (renk dışında) için aynı prensip uygulanır. Bkz bu ve bu temel resim konseptler için ve daha sonra hareket bu Sinir ağının nasıl çalıştığını öğrenmek.


1

Tüm makine öğrenme problemleri aynı. Bazı tren verileriniz var, bu verileri temsil eden bir model öğreniyorsunuz ve bu bilgiyi kümelenme, sınıflandırma, farklı algoritmalarla öğrenme yönteminizle genelleme yeteneğiniz var.

Resim tanımada, tekrar öğrenmek istediğiniz bir dizi resme sahipsiniz.

  1. Bu görüntüler ilk olarak işlenir ve bazı özellikler, pikselleri ve değerlerini kullandığınız gibi görüntülerden (SIFT, WORDS Çanta gibi birçok olası görüntü özelliği şeması) çıkarılır.
  2. Bu görüntülere karşılık gelen özellik vektörleri ile ML algoritmanıza (Neural Net, SVM veya diğerleri) verin.
  3. Bir model öğren
  4. Eğitim verilerinde yeterince görülen nesneleri tanımak için bu modeli kullanın.

Birden fazla şeyi tanımak istiyorsanız, her biri için birden fazla sınıflandırıcı kullanın.


1

Ayrıca görüntü tanıma evrişimsel sinir ağları için çok popüler olanlardan bahsetmek istiyorum. Bir CNN'nin basitleştirilmiş açıklamasına bir link .

Kısaca, CNN görüntüsünde ilk önce kenarlar, şekiller, şekil koleksiyonları gibi özelliklere ayrılır. Daha sonra bu özellikler 'normal' tamamen bağlı çok katmanlı sinir ağına (çok katmanlı algılayıcı) 'beslenir'.

Daha ayrıntılı olarak, özellikleri bir özellik haritası biçiminde çıkarmak için bir dizi filtre uygulanır. Bir filtre, orijinal görüntüye uygulanan başlangıç ​​matriksi ve filtre matrisinin nokta ürünü hesaplanan ve sonuç toplanan sadece bir matristir (başlangıçta rastgele). Filtre, orijinal görüntü boyunca aynı anda bir piksel (adım) hareket eder ve özellik haritasının matrisi doldurulur. Her filtre için bir özellik haritası oluşturulur. Daha sonra, her bir özellik haritasındaki her piksel için RELU (Rektifiye Doğrusal Birim) ile doğrusal olmayan özellik tanıtıldı. Havuzlama, max (), sum () veya average () uygulaması ile evrişimden sonra yapılır. Son olarak, bu şekilde çıkarılan özellikler orijinal görüntünün 'büyütülmüş' parçalarına benziyor. Bu özellikler tamamen bağlı (tüm birimler birbirine bağlı) bir sinir ağına giriyor ve her görüntünün olasılıkları (ağımızı arabalar, ağaçlar ve tekneler üzerinde ağ üzerinde eğittiğimizi söyleyelim) ağdan geçen her feed'den sonra hesaplanır. Ağ eğitilmiştir, bu da parametrelerin (ağırlıklar) ve filtre matrislerinin geri yayılma (yanlış sınıflandırma hatasının en aza indirilmesi) yoluyla optimize edildiği anlamına gelir. Eğitimli ağa yeni bir görüntü girildiğinde, görüntüyü tanımlamak için yalnızca feedforward gerekir (ağın yeterince doğru olması koşuluyla, yani yeterli sayıda örnekle eğitildik vs. Bu, parametrelerin (ağırlıklar) ve filtre matrislerinin geri yayılma (yanlış sınıflandırma hatasının en aza indirilmesi) yoluyla optimize edildiği anlamına gelir. Eğitimli ağa yeni bir görüntü girildiğinde, görüntüyü tanımlamak için yalnızca feedforward gerekir (ağın yeterince doğru olması koşuluyla, yani yeterli sayıda örnekle eğitildik vs. Bu, parametrelerin (ağırlıklar) ve filtre matrislerinin geri yayılma (yanlış sınıflandırma hatasının en aza indirilmesi) yoluyla optimize edildiği anlamına gelir. Eğitimli ağa yeni bir görüntü girildiğinde, görüntüyü tanımlamak için yalnızca feedforward gerekir (ağın yeterince doğru olması koşuluyla, yani yeterli sayıda örnekle eğitildik vs.).


0

ANN'in bu konuda herhangi bir f (x) veya f (x, y, z, ..) fonksiyonunu veya herhangi bir çok işlevini oluşturabileceğini bilmek iyidir. Ancak, fonksiyonların veriyi nasıl sınıflandırabileceklerine dair sınırları olduğunu bilmek de önemlidir ... sınıflandırmada önemli olan nesnelerin güç gruplarının daha karmaşık ilişkiler alt grupları vardır ve bunlar bu tür fonksiyonlar tarafından zarif veya doğal bir şekilde tanımlanmamıştır. fakat dil ve nesnelerin sınıflandırılmasında önemlidir. Bununla birlikte YSA bunu başarabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.