Deeplearning4j Mimarisi #2 – Kurulum

Giriş

Yazı serisinin üçüncüsünde DL4J kütüphanesini yakından tanıyacağız. DL4J’nin yararlandığı üçüncü taraf kütüphanelere, modüllere ve arka planda yer alan mimarisine göz atacağız.

DL4J’nin Arkasındaki Güç

DL4J kütüphanesinin geliştiricisi Skymind adında bir firma. Bu firma kendisini ticari yapay zeka ürünleri geliştiricisi olarak tanımlıyor, temek olarak kurumsal ölçekteki firmaların “Yapay zeka patlıyor, bir ucundan tutunalım” dedikleri anda “yardımlarına” koşuyor ürünlerini daha “zeki” hale getiriyorlar. Geliştirdikleri Skymind Intelligence Layer ile büyük veri işleme, örüntü tanıma, sınıflandırma, raporlama gibi alanlarda derin öğrenme algoritmaları ile hizmet veriyorlar. Bu katmanı geliştirirken bir çok açık kaynak projeden yararlanmışlar ve kendi geliştirdikleri kütüphaneyi de açık kaynak hale getirmişler. Hizmet verdikleri firmalar sayesinde doğrudan büyük verinin içinde oldukları için DL4J; Hadoop, spark gibi çatıları da (framework) desteklemektedir. Bu kütüphanelere olan destek sayesinde Enterprise bir ürün/hizmet geliştimek tümleşik bir kütüphane ile daha hızlı geliştirilebilir olmuştur.

Skymind bir çok yerden, yatırımcıdan hatırı sayılır miktarda yatırım topladı, bu sayede geliştirici ekibini projede tutamamak gibi bir sıkıntı içerisinde değil bu demek oluyor ki DL4J kütüphanesine olan destek yakın zamanda sona erecek bir şey değil, destek konusunda tereddüt yaşamanıza gerek yok.

DeepLearning4J’nin Özellikleri

  • API: DL4J yalnızca Java ve Sacala desteği sunmaktadır.
  • Entegrasyonlar: DL4J’nin entegre olabileceği framework’ler Spark, Hadoop ve Model Import from Keras’dır.
  • İşletim Sistemi:Windows, OSX, Linux
  • Derleme Araçları: Maven, Gradle, SBT, Ivy, Leiningen
  • Sinir Ağları: DL4J ile oluşturabileceğiniz sinir ağları;
  1. Restricted Boltzmann machines (Sınırlı Boltzmann Makinesi)
  2. Convolutional nets (Convolutional neural network- Konvansiyonel Sinir Ağı)
  3. Recursive Autoencoders
  4. Recurrent nets: Long Short-Term Memory (LSTM) (including bi-directional LSTMs),
  5. Deep Belief Networks,
  6. Denoising and Stacked Denoising Autoencoders,
  7. Deep Autoencoders
  • Optimizasyon Algoritmaları:
  1. Stochastic Gradient Descent (SGD)
  2. Stochastic gradient descent with line search
  3. Conjugate gradient line search (c.f. Hinton 2006)
  4. L-BFGS
  • Kayıp Fonksiyonları:
  1. MSE: Mean Squared Error: Linear Regression
  2. EXPLL: Exponential log likelihood: Poisson Regression
  3. XENT: Cross Entropy: Binary Classification
  4. MCXENT: Multiclass Cross Entropy
  5. RMSE_XENT: RMSE Cross Entropy
  6. SQUARED_LOSS: Squared Loss
  7. NEGATIVELOGLIKELIHOOD: Negative Log Likelihood
  • Aktivasyon Fonksiyonları:
  1. ReLU
  2. Leaky ReLU
  3. Tanh
  4. Sigmoid
  5. Hard Tanh
  6. Softmax
  7. Identity
  8. ELU: Exponential Linear Units
  9. Softsign
  10. Softplus
DeepLearning4J Eko Sistemi
DeepLearning4J Eko Sistemi | Orijinal Görsel Kaynağı: deeplearning4j.org/cn

DeepLearning4j Bileşenleri

DL4J hali hazırdaki ürünlerinize entegrasyon veya  geliştirmek istediğiniz bir derin öğrenme projesi için gerekecek bir çok teknolojiye destek verebilmek adına içerisinde farklı  açık kaynak bileşenleri barındırmaktadır. Bu Bileşenler DataVec, ND4J, RL4J, ScalNet, Arbiter, Model Importer . En temel bileşenlere göz atacak olursak:

  1. DataVec : Yapay sinir ağlarında en temel bileşenlerden birisi veri setidir. Veri setleri probleme göre video, ses, resim, metin vb. gibi farklı formatlarda olabilir. Yapay sinir ağları ise girdileri vektörler şeklinde alır, girdileri sağlayabilmek için bu veri türlerini vektör haline getirmek gerecektir. DataVec bir araç seti olarak tanımlanabilir ve yaptığı şey verileri vektör haline getirerek sinir ağı girişini hazırlamaktır.
  2. N-Dimensional Arrays for Java (ND4J): Yapay sinir ağları kapsamlı problemleri çözmek için ileri düzeyde matematiksel hesaplamaya ihtiyaç duyar çünkü büyük boyutlu matrisler, vektörler, çaprazlamalar üzerinde işlem yapmak gerekmektedir. İsmini muhtemel daha önce duyduğunuz Numpy kütüphanesi Python için bu işlemleri yapmayı sağlamaktadır ve bir çok derin öğrenme kütüphanesi de Numpy kütüphanesini kullanmaktadır. ND4J de kendisini JVM platformu için Numpy olarak tanımlamaktadır. CPU veya GPU üzerinde çalışabilmektedir. ND4J de Skymind tarafından açık kaynak olarak geliştirilmektedir.
  3. Deep Reinforcement Learning for the JVM  (RL4J): Reinforcement Learning; terminolojideki Türkçe ismini bulamadığım fakat kelime anlamı olarak baktığımızda “Takviye Öğrenme” olarak adlandırılmaktadır. Bu alandaki bazı algoritmaları kullanabilmek adına bu bileşen Skymind tarafından geliştirilmiştir.
  4. Model Importer: Derin öğrenme kütüphanelerinden beklenen bir özellik ise; farklı kütüphaneler ile eğitilmiş modelin bu kütüphanede de kullanılabilir olmasıdır. X kütüphanesi ile günlerce sürmüş bir eğitim sonucu elde edilen modelin, Y kütüphanesinde kullanılabilmesi beklenen ve istenilen bir şeydir aksi durumda eğitim süreci tekrarlanacaktır. DL4J de Keras modellerini desteklemektedir ve bunun için geliştirilmiş bileşen ise Keras Model Importer olarak adlandırılmaktadır.

DeepLearning4J  Modülleri

DL4J’nin hadoop, spark gibi çatılar destek verdiğinden bahsetmiştik bu desteği sağlayabilmek adına bazi modüller geliştirilmiştir. Bu modüller cuda (deeplearning4j-cuda), graph, nlp (doğal dil işleme), nn, scaleout. Hızlıca bazılarına göz atacak olursak;

  1.  deeplearning4j-cuda:  Nvidia cuDNN GPU üzerinde hesaplamalar yapabilmek, derin öğrenme için gereken hesaplama hızına ulaşabilmek adına Nvidia GPU’yu etkin biçimde kullanmayı sağlayan bir kütüphanedir. DL4J de bu GPU teknolojisinden yararlanmak için cuDNN desteği sağlamak adına bu modüle sahiptir.
  2. deeplearning4j-graph: DeepWalk tekniğini uygulayabilmek için geliştirmiş bir modüldür. Doğal dil işleme için yeni bir yöntemdir. Dil modellemesinde veya derin öğrenme de  kelimelerin dizilimlerinden yola çıkarak bir sonraki kelime veya cümleye yapılan çağrıları/kullanımları yakalamak için bir yöntemdir.
  3. deeplearning4j-nlp:  Metin madenciliği veya metin analizi için gerekli olan kelime bağımlılıklarını ayrıştırma, kelime ilişkilerini belirleme için gerekli olan alt yapıyı sağlar.

 


Kaynakça