Seyrek kodlama ve otomatik kodlayıcı arasındaki farklar nelerdir?


35

Seyrek kodlama, giriş vektörlerini temsil etmek için aşırı eksiksiz bir temel vektörler dizisi öğrenmek olarak tanımlanır (<- neden bunu istiyoruz). Seyrek kodlama ve otomatik kodlayıcı arasındaki farklar nelerdir? Ne zaman seyrek kodlama ve otomatik kodlayıcı kullanacağız?


1
Seyrek kodlama aslında bilinen autoencoder belirli bir türünü teşkil seyrek autoencoder . Dolayısıyla, seyrek kodlamayı, otomatik kodlayıcıların alt kümesi olarak düşünebilirsiniz.
HelloGoodbye,

Yanıtlar:


34

Farklılıkların bulunması modellere bakarak yapılabilir. İlk önce seyrek kodlamaya bakalım.

Seyrek kodlama

Seyrek kodlama hedefi en aza indirir W bir baz matrisi, H bir kod matrisi ve X temsil etmek istediğimiz verilerin matrisi olduğu 1 sparity terimi . λ , seyreklik ve yeniden yapılanma arasında bir ticaret gerçekleştirir. Eğer H verilirse , W tahmininin en küçük kareler üzerinden kolay olduğunu unutmayın.

Lsc=||W'H-X||22yeniden yapılanma terimi+λ||'H||1seyreklik
WXλ'HW

Ancak başlangıçta yok . Yine de, H ile ilgili olarak yukarıdaki hedefi çözebilecek birçok algoritma mevcuttur . Aslında, şu şekilde çıkarım yapıyoruz: görünmeyen bir x'e ait h'yi bilmek istiyorsak bir optimizasyon problemini çözmemiz gerekiyor .'H'Hhx

Otomatik kodlayıcılar

Otomatik kodlayıcılar denetlenmemiş sinir ağlarının bir ailesidir. Bunlardan birçoğu vardır, örneğin derin otomatik kodlayıcılar veya farklı düzenleyici hileler eklenmiş olanlar - örneğin, kıkırdama, büzülme, seyrek. Üretken stokastik ağlar veya değişken otomatik kodlayıcı gibi olasılıksal olanları bile vardır. En soyut şekli ancak şimdilik çok daha basit olanı ile gideceğiz: L ae = | | W σ ( W T X )

D(d(e(x;θr);θd),x)
, σ lojistik sigmoid σ ( x ) = 1 gibi doğrusal olmayan bir fonksiyondur.
Lae=||Wσ(WTX)-X||2
σ .σ(x)=11+exp(-x)

benzerlikler

Not bu görünüyor neredeyse gibi L bir E biz ayarlamasına H = σ ( W , T x ) . Her ikisinin de farkı, i) otomatik kodlayıcıların, genel biçimlerinde seyrekliği teşvik etmemesidir ii) bir otomatik kodlayıcı, kodları bulmak için bir model kullanırken, seyrek kodlama, optimizasyon yoluyla bunu yapar.LscLbire'H=σ(WTX)

WWLsc

Ayrıca, farklı regülasyon metotları, farklı karakteristiklerle temsili sağlar. Denoising otomatik kodlayıcıların da belirli bir RBM vs. formuna eşdeğer olduğu gösterilmiştir.

Ama neden?

Bir tahmin sorununu çözmek istiyorsanız, yalnızca çok az etiketli ve çok sayıda etiketsiz veri yoksa otomatik kodlayıcıya ihtiyacınız olmayacak . O zaman, genellikle derin bir otomatik kodlayıcı eğitmek ve derin bir sinir ağını eğitmek yerine, üstüne bir doğrusal SVM koymak daha iyi olacaktır.

Bununla birlikte, dağılımların karakteristiğini yakalamak için çok güçlü modellerdir. Bu belirsiz olmakla birlikte, şu anda bunu istatistiki gerçeklere dönüştürmek için araştırmalar yürütülmektedir. Derin gizli Gauss modelleri: Değişken Otomatik kodlayıcılar veya üretken stokastik ağlar, temelde veri dağılımını kesin olarak tahmin eden otomatik kodlayıcılar elde etmenin oldukça ilginç bir yoludur.


Cevabınız için teşekkürler! Yani bu, seyrek kodlamanın herhangi bir durumda kullanılmaması, otomatik kodlayıcı kullanılması gerektiği anlamına mı geliyor? Ayrıca, W kodunu düzenleyen seyrek kodlamada fazladan bir terim olmalıdır.
RockTheStar

Bunun gibi genel bir kural yoktur. SC'nin AE'lere göre bir avantajı vardır: optimizasyon yoluyla kodlama çok güçlü olabilir.
bayerj,

Üzgünüm, bu konuda ayrıntılı bilgi verebilir misiniz?
RockTheStar

Bazı kısıtlamaları takip etmek için tahmin edilen sabit bir haritaya sahip olmak (burada: seyrek sonuç), muhtemelen birçok yinelemede böyle bir çözüm bulmaya çalışan bir iyimserden daha az güçlüdür.
bayerj,

1
Bu soruyu tekrar gündeme getirdiğim için üzgünüm. Autoencoder'ın seyrekliği de teşvik edebileceğini düşünüyorum, yani seyrek otomatik kodlayıcı.
RockTheStar

11

Sinirbilimde Sinir Kodlama terimi, bir uyarıcı tarafından indüklenen nöronların elektriksel aktivite modellerini ifade etmek için kullanılır. Seyrek Kodlama, sırayla tek bir kalıptır. Bir uyarının (bir görüntü gibi), göreceli olarak az sayıda nöronun aktivasyonunu kışkırtması durumunda bir kodun seyrek olduğu söylenir. Makine öğreniminde, bir seyrek kod modeli oluşturmak için kullanılan aynı optimizasyon kısıtı, bir seyrek kısıtlama ile eğitilmiş normal otomatik kodlayıcılar olan Seyrek Otomatik Kodlayıcıları uygulamak için kullanılabilir. Aşağıda her bir sorunuz için daha ayrıntılı açıklamalar verilmiştir.

Seyrek kodlama, giriş vektörlerini temsil etmek için tamamlanmış bir temel vektörler seti öğrenmek olarak tanımlanır (<- neden bunu istiyoruz)

Birincisi, en azından o zamandan beri (Hubel ve Wiesel, 1968) , V1 bölgesinde, kenar benzeri uyarıcılara (diğerlerinin "faydalı" özelliklere sahip olmasının yanı sıra) maksimum tepki veren spesifik hücrelerin olduğu bilinmektedir. Seyrek Kodlama, bu sistemin gözlenen özelliklerinin çoğunu iyi açıklayan bir modeldir. Daha fazla detay için bakınız (Olshausen & Field, 1996) .

İkincisi, seyrek kodlamayı tanımlayan modelin Makine Öğrenimi'nde özellik çıkarımı için kullanışlı bir teknik olduğu ve transfer öğrenme görevlerinde iyi sonuçlar verdiği gösterilmiştir. Raina ve diğ. (2007) , elle yazılmış karakterlerden oluşan bir eğitim seti ile öğrenilen bir dizi "temel vektör" (kalem vuruşları ve kenarlar gibi özellikler) 'nin elle yazılmış rakamları tanıma görevinde sınıflandırmayı geliştirdiğini göstermiştir. Daha sonra Seyrek Kodlama tabanlı modeller, "derin" ağları eğitmek için, seyrek özellik dedektörlerinin katmanlarını "seyrek derin inanç ağı" oluşturmak üzere istiflemek için kullanıldı (Lee ve diğerleri, 2007).. Daha yakın bir zamanda, bir kedinin görüntüsünü tamamen denetimsiz bir şekilde ayırabilen birkaç katmanlı (ünlü "Google Beyin") bir ağ oluşturmak için seyrek kodlama tabanlı modeller kullanılarak görüntü tanımada şaşırtıcı sonuçlar elde edildi (Le ve ark. , 2013) .

Üçüncüsü, sıkıştırılmış işlemi gerçekleştirmek için öğrenilen temeli kullanmak muhtemelen mümkündür. Gerçekten de bunu yapan kimseyi görmedim.

Seyrek kodlama ve otomatik kodlayıcı arasındaki fark nedir?

Otomatik kodlayıcı, genellikle bir tür kısıtlama kullanarak girişini yeniden yapılandırmaya çalışan bir modeldir. Buna göre Wikipedia'ya göre "verimli kodlamaları öğrenmek için kullanılan yapay bir sinir ağıdır". Autoencoder'ın tanımında seyreklik isteyen hiçbir şey yok. Seyrek kodlamaya dayalı çelişkiler mevcut tekniklerden biridir, ancak başkaları da vardır; Hepsi, ağın girdinin iyi temsilini öğrenmesini sağlar (bu aynı zamanda yaygın olarak "seyrektir").

Ne zaman seyrek kodlama ve otomatik kodlayıcı kullanacağız?

Muhtemelen derin ağların özelliklerinin çıkarılması ve / veya önceden eğitimi için bir otomatik kodlayıcı kullanmakla ilgileniyorsunuzdur. Seyrek kısıtlı bir otomatik kodlayıcı uygularsanız, her ikisini de kullanırsınız.


Bu cevabın birçok ilginç noktası ve önemli referansları vardır. Ancak, ilk paragraf yanlıştır . Seyrek kodlama ve seyrek otomatik kodlayıcılar farklı hayvanlardır.
bayerj,

Bunların aynı şey olduğu nerede söylenir? Lütfen söyle bana cevabı düzelteyim.
Saul Berardo

İlk cümlede.
bayerj,

"Seyrek Kodlama, otomatik kodlayıcıların eğitimi için mevcut tekniklerden sadece bir tanesidir". Bu cümle, "Seyrek Kodlama" yı otomatik kodlayıcı ile aynı "canavar" olarak tanımlamaz. Otomatik kodlayıcıların eğitimi için mevcut tüm teknikler arasında, bunlardan birinin "Seyrek Kodlama" olduğunu söylüyor. Cümlenin, cevabın geri kalanı tarafından netleştirildiğine inandığım bazı belirsizliklerin olduğuna katılıyorum.
Saul Berardo

Seyrek kodlamanın otomatik kodlayıcıları eğitmek için bir yöntem olduğunu söylüyorsunuz. Otomatik kodlayıcılar, bir optimizasyon algoritmasıyla uygulanmayan açık bir kod çözücüye sahip olduklarından açıkça durum böyle değil. Keyfi bir otomatik kodlayıcı verildiğinde, seyrek kodlama ile eğitemezsiniz.
bayerj,

1

Seyrek bir kodlayıcı, otomatik kodlayıcının yarısı kadardır. Bir otomatik kodlayıcı şöyle çalışır:

input  =>  neural net layer  =>  hidden outputs => neural net layer => output

Geriye yayılım için, hata sinyali, kayıp, şöyledir: giriş - çıkış

Gizli çıktılara bir azlık kısıtı uygularsak, çoğu sıfır olur ve birkaçı 1 olur. Daha sonra, ikinci katman, esas olarak, gizli çıktılardan hangisinin 1s olduğuna bağlı olarak bir araya getirilen bir dizi doğrusal temel fonksiyondur.

Seyrek kodlamada, bunun sadece ikinci yarısına sahibiz:

                                codes => neural net layer => output

'Kodlar', sinir ağı katmanındaki ağırlıklar tarafından temsil edilen temel fonksiyonları seçen bir grup gerçek sayıdır. Olshausen'in makalesinde, kodlara az miktarda bir kısıtlama uyguladıkları için, kodlar, seyrek otomatik kodlayıcıda olduğu gibi, seyrek: çoğunlukla birkaç tane olan sıfırlardır.

Şimdi açıkça görebildiğimiz fark: seyrek kodlama için sinir ağının ilk yarısı yoktur: kodlar bizim için bir sinir ağı tarafından otomatik olarak sağlanmaz.

Kodları seyrek kodlamada nasıl alırız? Girdi görüntüsüyle eşleşen çıktıyı en iyi sağlayan kod kümesini bulmak için, gradyan iniş veya benzerini kullanarak yaptığımız kendimizi optimize etmek zorundayız. Bunu, her seferinde, her test görüntüsü dahil her görüntü için yapmalıyız.


0

Bu son makaleyi okumak isteyebilirsiniz, https://arxiv.org/abs/1708.03735v2 . Bu yazıda yazarlar aslında bir otomatik kodlayıcıyı kurabilir, öyle ki gerçek doğruluk sözlüğü bu otomatik kodlayıcının kare kaybı işlevinin kritik bir noktasıdır.

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.