"Dikkat, Dikkat veya Dikkat, en önemli üç konferans makalesini okudum, şimdi CVPR, ICCV'yi göndermek çok kolay, sadece dikkatinizi rastgele bir şekilde ekleyin, harika bir yenilik olsa bile?" Bu, laboratuvardaki herkes için bir zamandır. Kağıdı okuduktan sonra çok düzgün bir yuva.
Ağ yapınızı diğerlerinden farklı "görünmesini" denemek için sürekli olarak evrişimli katmanlar, havuz katmanları ve tamamen bağlantılı katmanlar ekliyor olabilirsiniz veya görüntü bölümleme alanından noktaları nasıl "ödünç alacağınızı" merak ediyor olabilirsiniz. Görüntü tanıma alanında işler kullanılmaya başlandı.
Pek çok bilimsel araştırma acemi için, nihayet 50'den fazla makaleyi kemirdikten sonra, zihinlerinde bir tutam ilham, yazdıktan sonra titreyen yenilikçi bir noktayı fark etti. Sonra beklenmedik yeniliklerden daha acımasız bir gerçeği keşfettim - küçük bir kağıttaki tek bir yenilik yeterli değil.
Diğer yenilikler ancak mümkün olduğu kadar "birlikte çalışmaya" dayanabilir.
Sinir ağının kendisi biraz metafiziktir ve mucizevi bir ilaç yapmak için hangi çeşninin eklendiğini bilemezsiniz. Ve bu "Dikkat" ham maddesi, sinir ağının birçok profesyonel simyacısı tarafından doğrulanmıştır, gerçekten çok yönlüdür ve kullanımı kolaydır.
Öyleyse, makalenin yenilikçi noktaları için hala kafanızı kaşıyorken, sinir ağı yapısındaki vahşi asistanı deneyebilirsiniz - Dikkat mekanizması.
TensorFlow 2.0'ın piyasaya sürülmesiyle, Keras tarafından uygulanan derin ağ, geliştiricilerin dikkatini çekmeye başladı. TensorFlow 2.0'da Keras, derin ağları uygulamak için aşağıdaki üç güçlü üst düzey sinir ağı API'sini kullanabilir.
· Sıra API'si - bu en basit API'dir, ilk önce modeli harekete geçirin = Sıralı () ve model.add (Yoğun (...)) gibi sürekli katmanlar ekleyin.
· Fonksiyonel API-Gelişmiş API, özel desenler, rastgele girdi / çıktı oluşturun. Burada tanımlanan modül dikkatli olmalı, herhangi bir küçük değişiklik kullanıcı tarafını etkileyecektir. Modeli tanımlamak için model = Model (inputs =, outputs =) kullanın.
· Alt sınıflandırma API-yüksek seviyeli API, model bir Python sınıfı olarak tanımlanabilir. Burada modelin ileri geçişi genel sınıfta tanımlanır ve Keras otomatik olarak geriye doğru geçişi hesaplar.
Resim kaynağı: Keras resmi belge ana sayfası
Keras, hızlı deneyleri desteklemek için tasarlanmış üst düzey bir sinir ağı API'sidir.Tensorflow, Pytorch ve Caffe gibi derin öğrenme çerçeveleri ile karşılaştırıldığında, daha çok bir sinir ağı arayüzü gibidir. Sağladığı temel esneklik ve esneklik, diğer derin öğrenme çerçevelerinden daha düşük olsa da, modülleri yüksek oranda kapsüllüdür, çok kullanıcı dostudur ve kullanımı en kolay olanıdır. Fikirleri hızlı bir şekilde sonuçlara aktarmanın en iyi yoludur. seçildi.
Dolayısıyla, hızlı bir şekilde bir sinir ağı oluşturmanız ve ağ modüllerinizin bu kadar "düzgün" eklenip eklenmediğini test etmeniz gerektiğinde, kullanımı çok kolay bir API olan Keras'ı kullanmayı deneyebilirsiniz.
Yukarıda bahsedilen Dikkat dikkat mekanizması, aslında insan beyni nöronlarının çalışma prensibine atıfta bulunarak geliştirilen sinir ağına benzemektedir.Dikkat dikkat modeli, gereksiz bilgileri otomatik olarak göz ardı ederken, gelişim sürecinde insanın gerekli bilgiye odaklanmasından da zekice ödünç alınmıştır. Bilginin görsel dikkat çekme mekanizması ilkesi.
Daha sonra, bu makale "dizi-dizi modeli" nin tanıtımı ile başlayacak ve ardından Dikkat mekanizmasının sıra-dizi modeli için neden çok önemli olduğunu göstermek için "dikkat mekanizmasının özünü" tanıtacak ve son olarak örnekleri kullanacaktır. Keras, Dikkat Katmanı'nı hızla uygular.
"Sıralamadan Sıraya Model", makine öğrenimi alanındaki en zor problemleri çözmek için tasarlanmış güçlü bir derin öğrenme modelleri dalıdır. Örneğin:
· Makine çevirisi
· Sohbet robotu
· Metin özeti
Her sorunun kendine özgü zorlukları vardır. Örneğin, makine çevirisi farklı kelime sırası topolojileriyle (yani özne-fiil nesne sırası) ilgilenmelidir. Bu nedenle, bu "sıra-sekans" modeli, karmaşık sinir dilbilimsel programlama ile ilgili problemleri çözmek için gerekli bir silahtır.
"Sıralı sıra" modeli, İngilizce-Fransızca makine çevirisi görevlerine nasıl uygulanır?
"Dizi-dizi" modelinin iki bileşeni vardır, bir kodlayıcı ve bir kod çözücü. Kodlayıcı, kaynak cümleyi özlü bir vektöre (bağlam vektörü olarak adlandırılır) dönüştürür, burada kod çözücü bağlam vektörüne girer ve bilgisayar çevirisini gerçekleştirmek için kodu çözülmüş gösterimi kullanır.
Dizi modeline göre sıralama
Bu yöntemle ilgili herhangi bir sorun var mı?
Bu yöntemin ciddi darboğazları vardır. Bağlam vektörünün, belirli bir kaynak cümlesindeki tüm bilgileri birkaç yüz öğe içeren bir vektöre kodlaması gerekir. Şimdi, ilgili bağlama entegre olmak için vektörün aşağıdaki bilgileri tutması gerekir:
Özne, nesne ve yüklem fiilleriyle ilgili bilgiler
· Bu karakterler arasındaki etkileşim
Bu sürecin görevi, özellikle uzun cümleler için oldukça zordur. Bu nedenle, darboğazı çözmek için Dikkat mekanizmasının asıl amacı olan daha iyi bir çözüme ihtiyaç vardır.
Ya kod çözücü sadece bağlam vektörüne değil, tüm geçmiş durumlara erişebiliyorsa? Dikkat mekanizmasının yaptığı tam olarak budur. Her bir kod çözme adımında, kod çözücü, kodlayıcının özel durumunu istediği zaman kontrol edebilir. Burada Bahdanau Dikkat mekanizmasını tartışacağız. Aşağıdaki şekil, dikkat mekanizmasının iç işleyişini açıklamaktadır.
Dikkat mekanizması altında diziden diziye model
Şekilden bağlam vektörünün tüm kodlayıcıların geçmiş durumlarının ağırlıklı toplamı olduğunu görmek zor değildir. Aslında, Dikkat mekanizması matematiksel formüller ve kod uygulaması açısından ağırlıklı bir özettir ve ağırlıklı toplamda ağırlıkların makul konfigürasyonunu incelemek, tam olarak Dikkatin çözmek istediği problemdir.
Bazı mevcut dikkat mekanizmalarının çalışması oldukça zahmetli olabilir. Keras dikkat mekanizması, dikkat mekanizmasını daha ince bir seviyede uygulayan daha modüler bir yaklaşım kullanır (yani, belirli bir kod çözücünün RNN / LSTM / GRU'nun her bir kod çözücü adımı).
Dikkat dikkat katmanını kullanın
Dikkat Katmanı'nı herhangi bir katman olarak kullanabilirsiniz, örneğin bir dikkat katmanı tanımlayın:
attn_layer = AttentionLayer (name = 'care_layer') ()İşte dikkat katmanının NMT'de (nmt.py) nasıl kullanılacağını göstermek için basit bir Sinir Makinesi Çevirisi (NMT) örneği. İşte bazı ayrıntılar.
Burada, NMT'ye ulaşmak için dikkat mekanizmasını kullanma adımlarını kısaca tanıtın.
İlk önce kodlayıcı ve kod çözücü girişlerini tanımlayın ((kaynak / hedef karakterler) Hepsinin belirli özellikleri vardır (parti boyutu, zaman adımı, kelime boyutu).
encoder_inputs = Girdi (batch_shape = (batch_size, en_timesteps, en_vsize), name = 'encoder_inputs') decoder_inputs = Girdi (batch_shape = (batch_size, fr_timesteps-1, fr_vsize), name = 'decoder_inputs')Kodlayıcıyı tanımlayın (return_sequences = True not edin).
encoder_gru = GRU (hidden_size, return_sequences = True, return_state = True, name = 'encoder_gru') encoder_out, encoder_state = encoder_gru (kodlayıcı_inputs)Kod çözücüyü tanımlayın (return_sequences = True olduğuna dikkat edin).
decoder_gru = GRU (hidden_size, return_sequences = True, return_state = True, name = 'decoder_gru') decoder_out, decoder_state = decoder_gru (decoder_inputs, initial_state = kodlayıcı_state)Dikkat katmanını tanımlayın. Dikkat katmanının girdileri kodlayıcı çıkışı (kodlayıcı çıktı dizisi) ve kod çözücü çıkışıdır (kod çözücü çıktı dizisi).
attn_layer = AttentionLayer (name = 'care_layer') attn_out, attn_states = attn_layer ()Attn_out ve decoder_out'u bağlayın ve Softmax katmanının girdisi olarak kullanın.
decoder_concat_input = Birleştir (axis = -1, name = 'concat_layer') ()TimeDistributed Softmax katmanını tanımlayın ve decoder_concat_input girin.
yoğun = Yoğun (fr_vsize, activation = 'softmax', name = 'softmax_layer') dense_time = TimeDistributed (yoğun, ad = 'time_distributed_layer') decoder_pred = yoğun_süresi (decoder_concat_input)Tam modeli tanımlayın.
full_model = Model (inputs =, outputs = decoder_pred) full_model.compile (optimize edici = 'adam', kayıp = 'categorical_crossentropy')Aslında bu sadece dikkat mekanizmasının farkına varmakla kalmaz, aynı zamanda dikkat mekanizmasını görselleştirmek için bir yol sağlar. Çünkü her kod çözme adımı için bu katman iki değer döndürür:
· Dikkat bağlam vektörü (kod çözücünün Softmax katmanına ek bir girdi olarak kullanılır)
· Dikkat ağırlığı (Dikkat mekanizmasının Softmax çıkışı)
Bu nedenle, dikkat ağırlığını görselleştirerek, eğitim / akıl yürütme sırasında dikkatin ne yaptığını tam olarak anlayabiliriz. Bu süreç aşağıda ayrıntılı olarak tartışılmaktadır.
NMT çıkarımının aşağıdaki adımları tamamlaması gerekir:
· Enkoder çıktısını alın
· Kod çözücünün tek bir adımını gerçekleştirmek için bir kod çözücü tanımlayın (çünkü bir sonraki girişe hazırlanmak için bu adımın tahminini sağlamamız gerekir)
· Kod çözücünün başlangıç durumu olarak kodlayıcı çıkışını kullanın
· Geçersiz bir kelime / çıktı elde edene kadar kod çözme yapın < EOS > / Sabit dağıtım
Dikkat ağırlıkları almak için bu modelin nasıl kullanılacağına bir göz atalım.
aralıktaki i için (20): dec_out, dikkat, dec_state = decoder_model.predict () dec_ind = np.argmax (dec_out, axis = -1) ... care_weights.append ((dec_ind, dikkat))Ardından, dikkat ısı haritasını diğer parametrelerle almak için bu dikkat ağırlıkları listesini plot_attention_weights'a (nmt.py) iletmeniz gerekir. Çizimden sonraki çıktı aşağıdaki gibi görünebilir.
Bu makale, Dikkat Katmanı'nı uygulamak için Keras'ı kullanır. Sıralı modeller veya diğer bazı modeller için dikkat mekanizması çok önemlidir çünkü gerçekten çok yönlüdür.
Dikkat mekanizmasının uygulanması için mevcut yöntemler ya çok eskidir ya da henüz modülerliğe ulaşmamıştır. Ve Keras, dikkat mekanizmasının gerçekleştirilmesi için iyi bir çözüm sağlayabilir.
Bu makaleyi okuduktan sonra, Keras'ı kullanarak dikkat mekanizmasını daha önce de söylediğim kadar basit bir şekilde gerçekleştirmeyi deneyebilirsiniz.Belki karşılaştığınız kağıt yenilik darboğazı hemen çözülecektir (İyi Şanslar).
Yorum Beğen Takip Et
Yapay zeka öğrenme ve geliştirmenin kuru mallarını paylaşalım
Tam platform yapay zeka dikey öz medya "temel okuma tekniği" ni takip etmeye hoş geldiniz