Bir sinir ağında 1x1 evrişim ne demektir?


106

Şu anda Udacity Deep Learning Tutorial'ı yapıyorum. 3. Derste, 1x1 evrişimi hakkında konuşurlar. Bu 1x1 evrişim Google Başlangıç ​​Modülünde kullanılmaktadır. 1x1 evrişimin ne olduğunu anlamada sorun yaşıyorum.

Bu yazıyı Yann Lecun tarafından da gördüm .

Biri bana bunu nazikçe açıklayabilir mi?


Ayrıca ilgili bir soruya
gkcn

1
İşte 1x1 konvolüsyonlarda ayrıntıya giren bu modüllerle ilgili bir blog yazısı: hackathonprojects.wordpress.com/2016/09/25/…
Tommy

1
Basitçe söylemek gerekirse, bütün fikir 3D hacimdeki kanal sayısını azaltmak, böylece hesaplamayı hızlandırmak.
onerhao

Yanıtlar:


113

Diyelim ki şekillendirilmiş bir tensörü veren bir konv katmanı var :(N,F,H,W)

  • N parti büyüklüğüdür
  • F , evrişimli filtrelerin sayısıdır
  • H,W mekansal boyutlardır

Bu çıktının 1x1 filtreli, sıfır ve adım 1 olan bir konv katmanına beslendiğini varsayalım . Daha sonra bu 1x1 konv katmanın çıktısının şekli .F1(N,F1,H,W)

Bu nedenle, 1x1 conv filtreleri, filtre alanındaki boyutluluğunu değiştirmek için kullanılabilir. Eğer ise boyutsallığı arttırıyoruz, ise , filtre boyutunda.F1>FF1<F

Gerçekten de, Google Inception makalesinde , Convolutions ile Daha Derinlere Gitmek , onlar (orijinal yazarlar tarafından değil, benim kalın harflerle yazılmıştır):

Yukarıdaki modüller ile ilgili en büyük sorun, en azından bu naif formda, mütevazı sayıda 5x5 konvolüsyonun bile, çok sayıda filtreli konvolüsyonlu bir katmanın üstüne büyük ölçüde pahalı olabileceğidir.

Bu, önerilen mimarinin ikinci fikrine yol açar: hesaplama gereksinimlerinin çok fazla artacağı yerde, boyutsal küçültme ve projeksiyonların tedbirli bir şekilde uygulanması. Bu, yerleştirmelerin başarısına dayanır: düşük boyutlu yerleştirmeler bile göreceli olarak büyük bir görüntü yaması hakkında çok fazla bilgi içerebilir ... 1x1 konvolüsyonlar, pahalı 3x3 ve 5x5 konvolüsyonlardan önce indirimleri hesaplamak için kullanılır. İndirgeme olarak kullanılmasının yanı sıra, onları çift amaçlı yapan düzeltilmiş doğrusal aktivasyon kullanımını da içerir.

Dolayısıyla, Başlangıç ​​mimarisinde, filtre boyutunda boyutsallığı azaltmak için 1x1 evrişimli filtreler kullanıyoruz. Yukarıda açıkladığım gibi, bu 1x1 konv katmanları genel olarak filtre alanı boyutluluğunu değiştirmek için kullanılabilir (artırma veya azaltma) ve Başlangıç ​​mimarisinde, bu 1x1 filtrelerinin, filtre boyut alanında açıkça boyutsallık azaltma için ne kadar etkili olduğunu görüyoruz. , uzaysal boyut uzayı değil.

Belki de 1x1 konveksiyon filtrelerinin başka yorumları da var, ancak bu açıklamayı özellikle Google Inception mimarisi bağlamında tercih ediyorum.


3
1x1 conv, 5x5 conv'yi uygulamadan önce önceki filtre boyutunu 1'e sıkıştırıyor mu?
Leonard Loo

1
@LeonardLoo her 1x1 çekirdeği, filtre boyutunu 1'e indirger, ancak bir 1x1 evrişimde birden fazla çekirdeğe sahip olabilirsiniz, böylece "filtreler" sayısı tercihinize göre olabilir.
Fazzolini

43

1x1'lik bir evrişim, etrafındaki hiçbir şeye bakmadan, tüm kanallarıyla birlikte bir giriş pikselini çıktı pikseline eşler. Genellikle derinlik kanallarının sayısını azaltmak için kullanılır, çünkü hacimleri aşırı büyük derinliklerle çarpmak genellikle çok yavaştır.

input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)

input (256 depth) -> 4x4 convolution (256 depth)

Dipteki yaklaşık ~ 3.7x daha yavaş.

Teorik olarak sinir ağı, her şeyi çarpma yerine kaba kuvvet yerine, hangi renkleri kullanmaya karar vereceğini seçebilir.


19
1x1'in yalnızca bir pikseli bir çıktı pikseliyle eşleştirdiğini, ancak tüm girdi pikseli kanallarını bir piksele daralttığını söyleyebilirim. İlk satırdaki örneğinizde giriş için 256 kanal var ve 64 1x1 çekirdeğin her biri 256 giriş kanalının tümünü yalnızca bir "piksel" e (gerçek sayı) daraltıyor. Sonuç olarak, şimdi aynı satır boyutunda 256 yerine 64 kanalınız var, bu da 4x4 evrişimi ikinci satır örneğinize göre hesaplamalı olarak daha ucuz hale getiriyor.
Fazzolini

İyi nokta,
gönderiyi

3
3.7x'i daha yavaş nereden aldın?
CMCDragonkai

@ CMCDragonkai Hesaplama maliyetinin ağırlık sayısıyla orantılı olduğunu varsayalım. Daha sonraki durumda num_weights = in_depth x out_depth x kernel_size = 256x256x4x4,. İlk durumda num_weights = 256x64x1x1+64x265x4x4=256x64x17,. Oranı alın ve bu 256/17 ~ 3.7 verir. Num ağırlıkları giriş derinliği ve çıkış derinliği ile ilgili nasıl bir görselleştirme için bu sayfa 9 kontrol edin. arxiv.org/pdf/1603.07285.pdf
Nelson Dinh

11

1x1 konvolyonları anlamadığımın ana nedeni, konvolyonun gerçekte nasıl çalıştığını anlamadığımdır - temel faktör, çoklu kanalların / filtrelerin bir konvolüsyonunun nasıl çalıştığını hesaplamaktır. Bunu anlamak için, bu cevabı da yararlı buldum:any

https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work

Özellikle, Tip 2.2, burada bir evrişimin doğru açıklamasıdır.

Başka bir yararlı cevap:

https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or

Bu cevap, her giriş / çıkış kanalı kombinasyonu için ayrı bir filtrenizin nasıl olduğunu açıklar . Bunların her birini hesapladıktan sonra, sonuçlar çıkış kanalı numarası ile birlikte bırakılarak giriş kanalı ekseni üzerinde toplanır .

İşte 1x1 evrişimin nasıl çalıştığını anlamama yardım eden buldum.

https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x

İşte ondan çıkardığım başlıca şeyler:

  • 1x1 konvolüsyon giriş genellikle boyut bilgisi önceki sarımlarına olduğu X . Ancak , son filtresi varsa , şeklinde bir matris elde . 1x1 evrişim aslında boyutuna sahip bir vektör olan bir oluşturma, tüm görüntü boyunca evriştirmekte x çıkış filtresi. 1x1 konvolüsyonunuz varsa, 1x1 konvolüsyonlarının çıktısı boyuttur .mnf1(m,n,f1)f1mnf2(m,n,f2)
  • Bu nedenle, varsayıldığında bir evrişim, filtreleri aracılığıyla filtrelerinin tekrar ortaya olarak görülebilir . Ağın, boyutu en verimli şekilde nasıl azaltacağını eğitmesini sağlar.f2<f1f1f2

Tamam, şu ana kadar 1x1 evrişimi ile aslında bir 'nokta' ürün olduğunu açıklayan tek yer burası(m,n,f1)
Red Floyd

3

Resimlerle daha sezgisel ve kısaca açıklamaya çalışacağım!

A 1 * 1 dönüşüm (aka ağda ağ )?

Diyelim ki girişiniz (n_H, n_W, n_c_prev). Sen olabilir düşünmek (1 * 1 * n_c_prev) olarak ait tek bir nöron (a Tamamen Bağlı ağ -IE neden N / N / w w ) o çarpılarak girişteki (n_c_prev) sayılarda alıyor (1 * 1 * n_c_prev ) ve sonra ReLu ve çıkışı (n_H, n_W) ekleyip sonra alarak ve eğer birden fazla filtreniz varsa (n_c) o zaman çıktı (n_H, n_W, n_C) olur.

Böylece, uzaysal boyutları (n_H, n_W) azaltmak için havuz katmanını kullanabilir ve çok sayıda hesaplama yapan n_c_prev'i (yani kanal sayısını) azaltmak için 1 * 1 conv kullanabilirsiniz. Örneğin

görüntü tanımını buraya girin

Bu nedenle, bir take away

  • N_C'yi azaltmak için 1x1 evrişimli bir katman kullanabilirsiniz, ancak n_H, n_W değil.

  • N_H, n_W ve n_C'yi azaltmak için bir havuzlama katmanı kullanabilirsiniz.

Başka bir deyişle, görüntü tanımını buraya girin

  • 1 * 1 CONV filtresi kullanarak ne yapıyorsunuz? temelde (elementwise * + takiben) "W boyuta sahip resim / featureMap üzerinden bu hacim "1 * 1 * num_input_channel_of_featureMap" boyutu ağırlıklarını & convolve almak H num_input_channel_of_featureMap" ve ne olsun boyutu "W * H" bir çıkıştır.

  • Şimdi, bu tür "#filters" sayısını kullanabilirsiniz "1 * 1 * num_input_channel_of_featureMap" ve "W H #filter" hacmini son çıktı olarak alabilirsiniz!

  • Dahası, tam olarak, giriş özellikleri haritasında aynı dilimdeki bir dilim ile 32 farklı ağırlık (1 * 1 Hacim) gibi "1 * 1" i çarpıyor ve ardından ReLu'yu takip ediyor ve yeşil renkli piksel olarak görülen tek bir karşılık gelen sayıyı alıyorsunuz. !

  • 1 * 1 CONV, kanal sayısını daraltmaya ve bazı ağlarda hesaplamaları kaydetmeye yardımcı olur (INCEPTIONS).!

  • Ancak, elbette, kanal sayısını giriş özelliği haritasındakiyle aynı tutmak istiyorsanız, bu da iyidir, 1 * 1 CONV'un yapması gereken tek şey, karmaşık fonksiyonların öğrenilmesini sağlayan ReLU Doğrusallığı uygulamaktır. NN .


1

1x1 filtreler bağlamında boyutsallık azaltma hakkında bir fikir daha:

Örneğin FCN'den bir 4096x8x8 fc7 katmanı alın. Bir sonraki katman (fc8 olarak adlandırılır) filtre boyutu 1 olan 2048x8x8 ise ne olur? fc7 ağın içinde çok derindir, 4096 özelliklerinin her biri anlam bakımından zengindir, ancak her bir nöron (örneğin giriş görüntüsü 250x250x3'tür) geniş bir alıcı alana sahiptir. Başka bir deyişle, eğer bir nöron çok aktifse, anlamsal alanında bir yerde buna karşılık gelen bir özellik olduğunu biliyoruz.

Örneğin fc8'de 1x1 filtreli en üstte bulunan bir nöron alın. Her biri tek bir özellik ile aktive edilen sadece aynı alıcı alanda (görüntünün sol üst köşesi) bulunan 4096 nöronun / özelliklerin tümüne bağlanır. Bazıları (aynı 500'ü bulalım) bazıları çok aktif. Eğer ortaya çıkan nöron da çok aktifse, bu alıcı alanda 1 veya daha fazla özellik tanımlamayı öğrendiği anlamına gelir. Bu 2048 kez fc8'deki en üst düzey nöronlar için yaptıktan sonra, bunlardan bir kaçı (örneğin 250) çok aktif olacak, bu da aynı alıcı alandan fc7'ye kadar 'topladıkları' anlamına geliyor. bir.

Boyutsallığı azaltmaya devam ederseniz, azalan sayıda nöron aynı alıcı alandan artan sayıda özellik öğreniyor olacaktır. Mekansal parametreler 8x8 aynı kaldığından, her nöronun görüşünü değiştirmeyiz, böylece uzaysal pürüzlülüğü azaltmazız.

Long, Shelhamer ve Darrel'in 'Tamamen Konvolüsyonlu Ağlara' bakmak isteyebilirsiniz.


1
Bunun mekanizmanın bir başka iyi sezgisi olduğunu düşünüyorum , ama geri dönmem gerekecek, çünkü boyutların kafa karıştırıcı bir gösterimini buluyorum, özellikle de "En sol için bu 2048 kez yaptıktan sonra fc8'deki nöronlar ".
WillC

Ne demeye çalıştığını çok iyi anlamadım, lütfen bunu daha iyi anlatabilir misin?
Michael Heidelberg,

0

Konvolüsyonun matematiksel işlemi, iki olası (sürekli veya ayrık) fonksiyonun tüm olası kaydırma pozisyonları üzerinden hesaplanması anlamına gelir.

2 boyutlu (gri seviyeli) bir görüntüde, bir evrişim, pencerenin (2d evrişimi çekirdeği) bir matrisi olduğu bir sürgülü pencere işlemi ile gerçekleştirilir .v×v

Nöral ağların görüntü işleme uygulamaları - evrişimli sinir ağları dahil - incelenmiştir: [M. Egmont-Petersen, D. de Ridder, H. Handels. Yapay sinir ağları ile görüntü işleme - bir inceleme , Örüntü Tanıma , Cilt. 35, No. 10, sayfa 2279-2301, 2002].

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.