Neural nodes, connected together with wired links in electronic cyberspace. 3D rendering image on the subject of 'Artificial Intelligence'.

RNN, CNN ile beraber derin öğrenmenin iki temel mimarisinden biridir. RNN zaman serisi şeklinde ifade edilen problemler için kullanılıyor. Örneğin ses işleme, speech to text,text to speech, chatbot, machine translation ve text summarization.

CNN Fully Connected Layer – Source: https://www.superdatascience.com/blogs/convolutional-neural-networks-cnn-step-4-full-connection

CNN mimarisini hatırlarsak, sinir ağı belirli bir boyutta bir veri alıyor. Bu veriyi sinir ağı içerisinde işlemden geçiriyor. İşlemin sonucunda bir çıktı üretiliyor. Örneğin girdi olarak resim verisi alıp çıktı olarak resmin sınıfının döndürülmesi gibi.

İnsan beyni belli yalnızca bir yöne doğru çalışan milyarlarca nöron hücresinden oluşmuyor. Bu açından bakıldığında CNN mimarisi insan beyninin veriyi işleme yapısıyla karşılaştırıldığında oldukça temel bir mimari olarak kalıyor. Bir karar verilirken yalnızca o anda ne gördüğümüz veya duyduğumuzla değil. Geçmişteki alınan kararların neden ve sonuçları açısından düşünülmesine de ihtiyaç var.

CNN sınıflandırmaya dayalı işlemlerde çok başarılı olurken ardışık gelen zamana göre ilerleyen konuşurken kullandığımız doğal gibi verilerde benzer şekilde yeterince başarılı olamıyor. Bir cümlede geçen kelimelerin sıralaması ve cümlelerin metin içerisindeki sıralaması çok önemlidir. CNN’de verilerdeki sıralama çok önemli değildir. Verilerdeki sıralama dikkate alınmaması ve geçmişteki verileri hatırlayacak bir hafızası da olmadığı için o anda alınan veri ile işlem yapılıyor. Yeniden bir girdi alındığında önceki işlenen verilerin bir önemi olmuyor ve unutuluyor.

RNN mimarisinde yapay sinir ağına daha önce işletilmiş zaman adımlarındaki yapılan işlem sonuçlarını hatırlaması için bir hafıza ekleniyor. Yukarıda ki yapay sinir ağı yapısını sadeleştirip aşağıdaki gibi gösterebiliriz. Bu yapıya hafıza yapısını oluşturacak bir döngü ekleniyor. RNN içerisinde döngü RNN’in kendi kendini beslemesini sağlıyor.

RNN zaman adımları – Source: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

Rnn içerisindeki döngüyü açarsak,yukarıdaki gibi zaman adımlarından oluştuğunu görürüz.

X: Mars is the fourth planet from the Sun and the second smallest planet in the Solar System.

Yukarıda cümle üzerinde işlem yaptığımızı varsayarsak, cümlede ki her bir kelime X0,…,Xtinputlarını temsil ediyor. Bu seriye noktalama işaretleri de dahildir. x(t) t zamanında ki girişi, h(t) t zamanındaki hidden stateleri gösteriyor. x(t) girişi A neural networkünde işlendikten sonra hidden state güncelleniyor ve ardından bir output üretiliyor. Rnn denklemini incelersek,

h(t) = f(h(t – 1), x(t))

h(t) yeni durumumuz, f fonksiyonunun parametreleri olan h(t-1) önceki state ve input ile belirleniyor. Başka bir deyişle fonksiyon bir önceki rnn’in ürettiği hidden state’i ve t anındaki input vektörünü alıyor. RNN üzerinde işlem gerçekleştiğinde ise yeni bir hidden state ve output ortaya çıkıyor. Her bir zaman adımında bu işlem tekrarlanıyor.  Bu şekilde rnn’ler üzerinde aktarılan bir hafıza oluşmuş oluyor.

Forward Propagation

Rnn’de forward propagation işlemi aşağıdaki şekildeki gibi gerçekleşmekte. Şekli incelersek, rnn fonksiyonu her zaman adımında x(t) bir inputla beraber bir hidden state alıyor. Başlangıç koşulunda hidden state’i 0 vektörü olarak başlatabiliriz. Hidden state ve input neural network sistemine veriliyor. Çıktı olarak bir Y output’u ve güncel bir hidden state üretiliyor. Yeni üretilen o an ki hidden state bir sonraki X input ile tekrardan neural network’e veriliyor. Çıktı olarak output ve hidden state oluşuyor. Bu şekilde input dizisi bitene kadar devam ediyor.

Forward propagation boyunca neural network her zaman adımında farklı bir input ve hidden state almasına karşın aynı weight değerini kullanıyor. Üretilen her bir output değeri için bir Loss hesaplaması yapılması gerekiyor. Sinir ağımızda geri yayılım yapabilmemiz için tahmin edilen y(t) değerleri için Loss değerlerine ihtiyacımız var. Loss değerlerini şekilde ki gibi L harfiyle ifade ediyoruz. İleri yayılımda her bir zaman adımında oluşan Loss değerlerini toplayarak bir Cost değeri hesaplıyoruz. Cost değerinin hesaplanmasına kadar olan işlemlere ileri yayılım ismi veriliyor. Loss fonksiyonu modelin ürettiği output’un ne kadar doğru olduğunu görmemizi sağlıyor. Tüm input değerleri işlendikten sonra ortaya çıkan Loss değerleri toplanıyor ve bir cost değeri elde ediyoruz.

Backward Propagation

Geri yayılım yapılabilmesi için bir cost değerine ihtiyacımız var. Output olarak tahmin edilen sonuç y(t) gerçek değerimizden “y” den farklı ise Cost değerimiz yüksek çıkacaktır. Cost değeri yüksek çıkarsa W ve B değerlerimizi güncellememiz gerektiğini anlıyoruz. Amacımız ise Cost değerini minimize etmek. Weight ve Bias değerlerini güncelleme işlemine geri yayılım deniyor. Loss fonksiyonunu matematiksel olarak aşağıda ki şekilde gösterebiliriz.

ꓡ(ŷ, y) = – (ylog ŷ + (1 – y)log(1- ŷ))

y gerçek değerimiz ŷ ise tahmin ettiğimiz değer olarak denkleme giriyor. İlk iterasyonlarda cost değerinin büyük çıkması beklenen bir durumdur. Çünkü başlangıç değerlerini sezgisel olarak veriliyor. Buna bağlı olarak W ve Bias değerlerine göre Loss değerleri büyük çıkacaktır. Geriye yayılım zaman adımlarında geriye doğru giderek gerçekleştiriliyor. Geri yayılımda hataları düşürerek optimize edebilmek için optimizasyon yöntemlerini kullanıyoruz.

Bunlar arasında genel olarak kullanılan yöntemler Gradient Descent ve Cross Entropy yöntemleri. Gradient Descent için türevine göre azalma yöntemi de diyebiliriz. Optimizasyon algoritmasını kullanarak önce her bir zaman adımı için L değerleri hesaplanıyor. L değeri aslında Weight ve bias değerlerimizin bir karşılığıdır. Sonrasında y değerleri ve h değerleri hesaplanıyor. İleri yayılımda ilerlerken çıkışlarımız L y ve h iken geri yayılımda çıkış değerlerimiz w ve b değerlerimiz oluyor. Bu sayede güncel W ve b değeriyle tekrar ileri yayılım gerçekleştirebiliyoruz. Bu kısım için öğrenmenin gerçekleştiği kısım diyebiliriz.

Bu makale ile birlikte RNN konusuna bir giriş yapmış olduk. Sonraki yazılarımda rnn türlerini ve rnn mimarisini kullanarak nasıl dil modeli geliştirilebilir onun üzerinde duracağız. Umarım faydalı olmuştur sonraki yazılarımda görüşmek üzere.

Murat 🙂

By mgm

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir