Yapay sinir ağına gömme katmanı nedir?


92

Birçok sinir ağı kütüphanesinde, Keras veya Lasagne'de olduğu gibi 'katmanları gömmek' vardır .

Belgeleri okuduğumuza rağmen işlevini anladığımdan emin değilim. Örneğin, Keras belgelerinde şöyle yazıyor:

Pozitif tamsayıları (indeksleri) sabit büyüklükteki vektörlere dönüştürün, örn. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

Bilgili bir kişi ne yaptığını ve ne zaman kullanacağınızı açıklayabilir mi?


EDIT: Dokümantasyona yapıştırma konusunda dokümantasyondan yapıştırılacak fazla bir şey yok, bu yüzden sorumu. Yaptığı dönüşümü ve neden kullanılması gerektiğini anlamıyorum.

Her neyse, Keras'da şöyle açıklanır:

katıştırma

keras.layers.embeddings.Embedding (input_dim, output_dim, init = 'üniforma', input_length = Yok, ağırlıklar = Yok, W_regularizer = Yok, W_constraint = Yok, mask_zero = Yanlış, Hatalı) Pozitif tamsayıları (indeksler) sabit boyutlu vektörlere dönüştürün , Örneğin. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

Giriş şekli: Şekilli 2D tensör: (nb_samples, array_length). Çıkış şekli: 3 boyutlu tensör şekli: (nb_samples, array_length, output_dim). Argümanlar:

input_dim: int> = 0. Kelimenin büyüklüğü, yani. Giriş verilerinde oluşan 1 + maksimum tamsayı dizini. output_dim: int> = 0 Yoğun yerleştirmenin boyutu

Ve işte Lazanya’da nasıl açıklandığı:

Sözcük gömmeleri için bir katman. Giriş, bir tamsayı tipi Tensör değişkeni olmalıdır.

Parametreler: incoming: Layer örneği veya bir tuple

Bu katmana beslenen katman veya beklenen girdi şekli.

input_size: int

Farklı gömme sayısı. Son yerleştirme, index__dosyası - 1 dizinine sahip olacaktır.

output_size: int

Her gömülmenin boyutu.

W: Theano paylaşımlı değişken, ifade, numpy dizisi veya çağrılabilir

Gömülü matris için başlangıç ​​değeri, ifade veya başlatıcı. Bu şekilli bir matris olmalıdır (input_size, output_size). Daha fazla bilgi için lasagne.utils.create_param () 'e bakınız.

Örnekler

>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output
>>> import theano
>>> x = T.imatrix()
>>> l_in = InputLayer((3, ))
>>> W = np.arange(3*5).reshape((3, 5)).astype('float32')
>>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W)
>>> output = get_output(l1, x)
>>> f = theano.function([x], output)
>>> x_test = np.array([[0, 2], [1, 2]]).astype('int32')
>>> f(x_test) array([[[  0.,   1.,   2.,   3.,   4.],
                      [ 10.,  11.,  12.,  13.,  14.]],
                     [[  5.,   6.,   7.,   8.,   9.],
                      [ 10.,  11.,  12.,  13.,  14.]]], dtype=float32)

1
Lütfen sorunuzu anlamak ve cevaplamak için gerekli olan içeriği yapıştırın. İnsanlar başka bir yere gitmek ve sizin için sorunuzu yanıtlamak için belgeleri okumak istemeyeceklerdir.
gung

1
İstediğiniz değişiklikleri yaptım
Francesco

Aynı şüphe vardı ve bunun hakkında konuşmak birkaç belge buldum. İşte bazı ilginç olanlar: cs.cmu.edu/afs/cs/academic/class/15782-f06/slides/… thebottomoftheheap.net/2011/01/21/… 'de girilen zaman serilerinde gecikmelere neden olduğunu ve yeni vektörler olarak gecikmeler.
abutremutante

Şu videoya bakın: youtube.com/watch?v=bvZnphPgz74 . Yaklaşık 30 dakika içinde gömülerden bahsediyor.
Pieter

Yanıtlar:


69

Word2Vec ile İlişkisi

==========================================

Basit bir resimde Word2Vec:

word2vec pic

Daha ayrıntılı açıklama:

Doğal dil işlemedeki son Word2Vec inovasyonuyla ilgili olduğuna inanıyorum. Kabaca, Word2Vec kelime dağarcığımızın ayrı olduğu anlamına gelir ve her bir kelimeyi sürekli bir vektör uzayına yerleştirecek bir harita öğreneceğiz. Bu vektör uzay temsilini kullanmak, kelime kelimelerin sürekli, dağıtılmış bir temsiline sahip olmamızı sağlayacaktır. Örneğin veri setimiz n-gramdan oluşuyorsa, şimdi n-gramlarımızın dağınık bir gösterimini oluşturmak için sürekli kelime özelliklerimizi kullanabiliriz. Bir dil modeli eğitimi sürecinde bu kelimeyi yerleştirme kelimesini öğreneceğiz. Umut, sürekli bir temsil kullanarak, gömme işlemimizin benzer kelimeleri benzer bölgelere eşlemesidir. Örneğin, dönüm noktası makalesinde , Sözcük ve Deyimlerin Dağıtılmış Gösterimleri ve KompozisyonlarıTablo 6 ve 7'de, bazı ifadelerin semantik açıdan çok yakın komşu ifadelere sahip olduklarını gözlemleyin. Bu sürekli boşluğa dönüşmek, gömülüğümüzün anlamsal kalitesini değerlendirmek için sürekli benzerlik kavramlarını kullanmamızı sağlar.

Lazanya kodunu kullanarak açıklama

Lazanya kod pasajını parçalayalım:

x = T.imatrix()

x bir tam sayı matrisidir. Tamam sorun yok. Kelime haznesinde her kelime bir tamsayı veya 1-sıcak seyrek kodlama ile gösterilebilir. Eğer x 2x2 ise, her biri 2 gram olan iki veri noktamız var.

l_in = InputLayer((3, ))

w0,w1,w2

W = np.arange(3*5).reshape((3, 5)).astype('float32')

Bu bizim kelimemiz gömme matrisidir. 0 ile 14 arasındaki girişleri içeren 3 satırlı 5 sütun matrisidir.

w0=(1,0,0)w1=(0,1,0)w2=(0,0,1)Ww0w0W=[0,1,2,3,4].w1w1W=[5,6,7,8,9]

Kullanmamız gereken bir sıcak seyrek kodlama nedeniyle, bunu tablo aramaları olarak da adlandırdığınızı belirtmek gerekir.

l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W)

Gömme katmanı

 output = get_output(l1, x)

Gömmek için Sembolik Theano ifadesi.

f = theano.function([x], output)

Gömülü hesaplayan Theano işlevi.

x_test = np.array([[0, 2], [1, 2]]).astype('int32')

(w0,w2)(w1,w2)

(w0,w2)W

f(x_test) 

döner:

          array([[[  0.,   1.,   2.,   3.,   4.],
                  [ 10.,  11.,  12.,  13.,  14.]],
                 [[  5.,   6.,   7.,   8.,   9.],
                  [ 10.,  11.,  12.,  13.,  14.]]], dtype=float32)

Sizi gerçekten 3'ün kelime boyutunu temsil ettiğine ikna etmek için bir matris girmeyi deneyin x_test = [[5, 0], [1, 2]]. Bir matris yanlış eşleşme hatası oluşturduğunu göreceksiniz.


2
bu cevap güzel. Bu sorunun bir uzantısına sahibim; gömülü katman, Imdb duyarlılık örneğini (veya başka bir veri kümesinin) vektörüne ne şekilde dönüştürür. Bunlar kelimeler topluluğudur.
Önsezi

1

Gelen https://stackoverflow.com/questions/45649520/explain-with-example-how-embedding-layers-in-keras-works/ ben, 2 cümle kullanarak bir örnek hazırlamak için keras en texts_to_sequences çalıştı

'This is a text' --> [0 0 1 2 3 4]

ve katmanı gömme. Dayanarak keras 'Yerleştirilmiş' katman nasıl çalışır? yerleştirme katmanı önce yerleştirme vektörünü rasgele başlatır ve daha sonra keras içindeki diğer herhangi bir ağ katmanında olduğu gibi benzer şekilde güncellemek için ağ iyileştiricisini kullanır.

[0 0 1 2 3 4] --> 
[-0.01494285, -0.007915  ,  0.01764857],
[-0.01494285, -0.007915  ,  0.01764857],
[-0.03019481, -0.02910612,  0.03518577],
[-0.0046863 ,  0.04763055, -0.02629668],
[ 0.02297204,  0.02146662,  0.03114786],
[ 0.01634104,  0.02296363, -0.02348827]

Yukarıdakiler, (maksimum) 6 kelimelik bir cümle ve 3 çıkış_dim cümlesi için başlangıç ​​gömme vektörleri olacaktı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.