Python'da Tekrarlayan Sinir Ağı: Yeni Başlayanlar İçin Nihai Kılavuz

Yayınlanan: 2020-04-27

Bir programda dizileri (günlük hisse senedi fiyatları, sensör ölçümleri vb.) işlemeniz gerektiğinde, tekrarlayan bir sinir ağına (RNN) ihtiyacınız vardır.

RNN'ler, bir adımın çıktısının yeni adıma girdi olarak aktarıldığı bir tür Sinir Ağıdır. Geleneksel sinir sistemlerinde, tüm veri kaynakları ve çıktılar birbirinden bağımsızdır. Ancak, bir cümlenin sonraki ifadesini tahmin etmek gibi durumlarda, önceki kelimelere ihtiyaç duyulur ve dolayısıyla geçmiş kelimeleri hatırlama ihtiyacı vardır.

Burada RNN devreye giriyor. Bu sorunları çözmek için bir Gizli Katman oluşturdu. RNN'nin temel ve en önemli unsuru, bir dizi hakkındaki bazı verileri hatırlayan Gizli durumdur.

RNN'ler, en yaygın gerçek dünya uygulamalarından bazılarında doğru sonuçlar üretmektedir: Metni etkili bir şekilde işleme yetenekleri nedeniyle, RNN'ler genellikle Doğal Dil İşleme (NLP) görevlerinde kullanılır.

  • Konuşma tanıma
  • makine çevirisi
  • Müzik kompozisyonu
  • Elyazısı tanıma
  • dilbilgisi öğrenme

Bu nedenle RNN'ler derin öğrenme alanında büyük bir popülerlik kazanmıştır.

Şimdi Python'da tekrarlayan sinir ağlarına olan ihtiyacı görelim.

Kariyerinizi hızlandırmak için Makine Öğrenimi Sertifikasyonu Dünyanın en iyi Üniversitelerinden - Yüksek Lisanslar, Yönetici Yüksek Lisans Programları ve Makine Öğrenimi ve Yapay Zeka alanında İleri Düzey Sertifika Programından çevrimiçi olarak alın.

İçindekiler

Python'da RNN'lere İhtiyaç Nedir?

Bu soruyu cevaplamak için önce vanilya sinir ağları olarak da adlandırılan Evrişim Sinir Ağı (CNN) ile ilgili sorunları ele almamız gerekiyor.

CNN'lerle ilgili en büyük sorun, yalnızca önceden tanımlanmış boyutlar için çalışabilmeleridir, yani sabit boyutlu girdileri kabul ederlerse, aynı zamanda sabit boyutlu çıktılar da verirler.

Oysa RNN'lerde bu sorun kolayca halledilir. RNN'ler, geliştiricilerin hem girdiler hem de çıktılar için değişken uzunluklu dizilerle çalışmasına izin verir.

Aşağıda RNN'lerin nasıl göründüğünün bir örneği verilmiştir:

Kaynak: Andrej Karpathy

Burada kırmızı renk girdileri, yeşil RNN'leri ve mavi çıktıları gösterir.

Her birini ayrıntılı olarak anlayalım.

Bire bir : Bunlara düz veya vanilya sinir ağları da denir. Sabit girdi boyutuyla sabit çıktı boyutuyla çalışırlar ve önceki girdilerden bağımsızdırlar.

Örnek : Görüntü sınıflandırması.

Bire çoğa : Girdi olarak bilgi sabit boyuttayken, çıktı bir veri dizisidir.

Örnek : Resim yazısı (resim girdidir ve çıktı bir dizi kelimedir).

Çoktan bire : Girdi bir bilgi dizisidir ve çıktı sabit bir boyuttadır.

Örnek : Duyarlılık analizi (girdi bir sözcük kümesidir ve çıktı, sözcük kümesinin olumlu mu yoksa olumsuz bir duyguyu yansıtıp yansıtmadığını söyler).

Çoktan çoğa : Girdi bir bilgi dizisidir ve çıktı bir veri dizisidir.

Örnek : Makine çevirisi (RNN bir cümleyi İngilizce okur ve istenen dilde cümlenin bir çıktısını verir).

Değişken uzunluklarda dizi işleme, RNN'leri çok kullanışlı hale getirir. İşte nasıl:

  • Makine Çevirisi : Bunun en güzel örneği Google Çeviri'dir. Çoktan çoğa RNN'lerde çalışır. Bildiğiniz gibi, orijinal metin, çevrilmiş metin veren bir RNN'ye girilir.
  • Duygu Analizi : Google'ın olumsuz yorumları olumlu olanlardan nasıl ayırdığını biliyor musunuz? Bire bir RNN ile elde edilir. Metin RNN'ye beslendiğinde, girdinin bulunduğu sınıfı yansıtan çıktıyı verir.

Şimdi RNN'lerin nasıl çalıştığını görelim.

RNN'ler Nasıl Çalışır?

Bir örneğe bakarak Python'da tekrarlayan bir sinir ağının çalışmasını anlamak en iyisidir.

Bir çıktı katmanı, üç gizli katman ve bir girdi katmanı içeren daha derin bir ağ olduğunu varsayalım.

Tıpkı diğer sinir ağlarında olduğu gibi, bu durumda da her gizli katman kendi ağırlıkları ve önyargıları ile gelecektir.

Bu örnek için, katman 1 için ağırlıkların ve önyargıların (w1, b1), katman 2'nin (w2, b2) ve katman 3'ün (w3, b3) olduğunu düşünelim. Bu üç katman birbirinden bağımsızdır ve önceki sonuçları hatırlamaz.

Şimdi, RNN'nin yapacağı şey şu:

  • Tüm katmanların aynı ağırlıkları ve önyargıları içermesini sağlayarak bağımsız aktivasyonları bağımlı olanlara dönüştürecektir. Bu da, çıktıyı bir sonraki gizli katmana girdi olarak vererek, artan parametrelerin karmaşıklığını ve önceki sonuçların her birinin hatırlanmasını azaltacaktır.
  • Böylece, üç katmanın tümü, aynı ağırlıkları ve önyargıları içermesi için tek bir tekrarlayan katmanda iç içe geçecektir.
  • Mevcut durumu hesaplamak için aşağıdaki formülü kullanabilirsiniz:

Neresi,

= mevcut durum

= önceki durum

= giriş durumu

  • Etkinleştirme işlevini (tanh) uygulamak için aşağıdaki formülü kullanın:

Neresi,

= tekrarlayan nörondaki ağırlık

= giriş nöronundaki ağırlık

  • Çıktıyı hesaplamak için aşağıdaki formülü kullanın:

Neresi,

= çıktı

= çıktı katmanındaki ağırlık

İşte bir RNN'nin nasıl eğitilebileceğinin adım adım açıklaması.

  1. Bir seferde, ağa giriş verilir.
  2. Şimdi, mevcut giriş setini ve önceki durumu kullanarak mevcut durumunu hesaplamanız gerekiyor.
  3. Akım, zamanın bir sonraki adımı olacaktır.
  4. İstediğiniz kadar zaman adımı gidebilir ve önceki tüm durumlardan gelen verileri birleştirebilirsiniz.
  5. Tüm zaman adımları tamamlanır tamamlanmaz, nihai çıktıyı hesaplamak için son mevcut durumu kullanın.
  6. Bu çıktıyı gerçek çıktıyla, yani hedef çıktıyla ve ikisi arasındaki hatayla karşılaştırın.
  7. Hatayı ağa geri iletin ve RNN'yi eğitmek için ağırlıkları güncelleyin.

Çözüm

Sonuç olarak, önce Python'da Yinelenen Sinir Ağının avantajlarına dikkat çekmek istiyorum:

  • Bir RNN aldığı tüm bilgileri hatırlayabilir. Bu, önceki girdileri hatırlayabildiği için seri tahmininde en çok kullanılan özelliktir.
  • RNN'de her zaman adımında aynı parametrelerle aynı geçiş fonksiyonu kullanılabilir.

Python'daki tekrarlayan sinir ağının dil anlayışı olmadığını anlamak çok önemlidir. Yeterince gelişmiş bir örüntü tanıma makinesidir. Her durumda, Markov zincirleri veya frekans analizi gibi yöntemlerden farklı olarak, RNN, dizideki bileşenlerin sırasına bağlı olarak tahminler yapar.

Temel olarak, insanların sadece olağanüstü örüntü tanıma makineleri olduğunu ve bu şekilde, tekrarlayan sinir sisteminin sadece bir insan-makine gibi davrandığını söylerseniz.

RNN'lerin kullanımı, içerik oluşturmanın ötesine geçerek makine çevirisi, resim yazısı ve yazar tanımlamasına kadar uzanmaktadır. RNN'ler muhtemelen insanların yerini alamasa da, daha fazla eğitim bilgisi ve daha büyük bir modelle, bir sinir sisteminin yeni, mantıklı patent özetlerini entegre etme seçeneğine sahip olması mümkündür.

Ayrıca, Makine öğrenimi hakkında daha fazla bilgi edinmek istiyorsanız, çalışan profesyoneller için tasarlanmış ve 450+ saatlik zorlu eğitim, 30'dan fazla vaka çalışması ve ödev sunan IIIT-B & upGrad'ın Makine Öğrenimi ve AI'daki Yönetici PG Programına göz atın. , IIIT-B Mezunları statüsü, 5'ten fazla pratik uygulamalı bitirme projesi ve en iyi firmalarla iş yardımı.

CNN, RNN'den daha mı hızlı?

Hem CNN hem de RNN'nin hesaplama zamanına bakarsak, CNN'nin RNN'ye kıyasla çok hızlı (~ 5x) olduğu bulunur. Bunu bir örnekle daha iyi anlamaya çalışalım.

Bir restoran incelemesi ise: 'Hizmet inanılmaz derecede yavaştı ve bu restoran beni oldukça hayal kırıklığına uğrattı. Yemek kalitesi de vasattı.' Burada, ifadede, duyguların iyi mi yoksa kötü mü olduğunu bulmaya çalışabileceğiniz sıralı veriler var. CNN modeli, 'inanılmaz derecede yavaş', 'vasat' ve 'hayal kırıklığına uğradı' gibi yalnızca belirli ifadelere bakacağı için buradaki hesaplamaları daha hızlı hale getirebilecek. Burada, RNN diğer birkaç parametreye bakarak kafanızı karıştırabilir. CNN, RNN'den daha verimli olmasını sağlayan daha basit bir modeldir.

RNN uygulamaları nelerdir?

RNN'ler, birçok alanda kullanılan oldukça güçlü makine öğrenimi modelleridir. RNN'nin temel amacı, kendisine sunulan sıralı verileri işlemektir. Sıralı verilerin mevcudiyeti çeşitli alanlarda bulunur. Farklı alanlardaki uygulamalarından bazıları Makine çevirisi, Konuşma tanıma, Çağrı merkezi analizi, Tahmin sorunları, Metin özetleme, Video etiketleme, Yüz algılama, Görüntü tanıma, OCR uygulamaları ve Müzik kompozisyonunu içerir.

RNN ve CNN arasındaki bazı önemli farklar nelerdir?

RNN'ler, videolar veya metinler gibi sıralı ve zamansal verileri analiz etmek için kullanışlıdır. Öte yandan, CNN, görüntüler gibi uzamsal verilerle ilgili sorunları çözmek için kullanışlıdır. RNN'de girdilerin ve çıktıların boyutları değişebilirken, CNN'de girdi ve sonuçta ortaya çıkan çıktı için sabit bir boyut vardır. RNN'ler için bazı kullanım durumları makine çevirisi, konuşma analizi, duygu analizi ve tahmin sorunlarıdır; CNN'ler ise tıbbi analiz, sınıflandırma ve yüz tanımada faydalıdır.