Biyoinformatik | Derin Öğrenme Kütüphaneleri
Ayşegül MURAT - Ege Üniversitesi Sağlık Biyoinformatiği ABD, Doktora Öğrencisi
Bir önceki yazımın son kısmında değindiğim derin öğrenme kütüphaneleri (deep learning library & frameworks), derin öğrenme modellerinin geliştirilmesine yardımcı olmak için tasarlamışlardır. Bu kütüphanelerin birbirleri ile karşılaştırılmasında kullanılan önemli özelliklerden birkaçı; programlama dili (Python, C++, Java vb.) CNN, RNN ve DBN gibi çeşitli derin öğrenme modellerinde kullanılabilirlik, birden çok GPU (Graphics Processing Units, Grafik İşlem Birimi) veya birden çok sunucuyu desteklemesidir.[1]
Tensorflow, Theano, CNTK, Keras
Günümüzde Google’ın Tensorflow’u popüler bir derin öğrenme kütüphanesiyken, esas olarak akademik araştırmalar için geliştirilmiş erken derin öğrenme kütüphaneleri de mevcuttur. Birkaç yıl öncesine kadar Caffe (Berkeley Üniversitesi) ve Theano (Montreal Üniversitesi) popülerlikteyken sonrasında Microsoft’un açık kaynak lisanslı olarak piyasaya sürmüş olduğu, Microsoft Bilişsel Araç Seti (Cognitive Toolkit ya da CNTK) popülerlik kazanmıştır [1]. Theano, kullanıcıların ve geliştiricilerin NumPy’ın (Python kütüphanesi) sözdizimini kullanarak, ifadelerini optimize etmelerine ve değerlendirmelerine olanak tanıyan matematiksel ifadeler için derleyici olarak MILA laboratuvarında geliştirilen açık kaynaklı bir Python kütüphanesidir. 2007 yılında doğan Theano, 2008 yılından beri aktif olarak geliştirilmektedir.[2, 3] Tam adı, hızlı özellik gömme için evrişimli mimari (convulutional architecture for fast feature embedding) olan Caffe’nin yazarı Yangqing Jia, derin öğrenme alanındaki tüm kod, algoritma ve ayrıntıları açan ilk tam kütüphaneyi oluşturmuştur.[3]

Tensorflow’un başlangıcıyla Microsoft, Apple ve Facebook gibi şirketlerde kütüphane geliştirme rekabetine katılmaya başladılar.[3] Bu rekabetle Python kütüphanesi olarak kullanılabilecek Google’ın Tensorflow’u, Microsoft’un CNTK’sı ve bunların bir tür öncülü sayacağımız Theano’yu karşılaştırılabilir duruma geldik. Derin öğrenme kütüphanelerinin en yaygın ve önemli işlevi, otomatik farklılaştırmayı gerçekleştirme yeteneğidir. Bunun sonrasında ise GPU kullanımını içerir. Temel olarak, derin öğrenme modellerinin tüm matematiksel ifadeleri, düğümlerden ve kenarlardan oluşan hesaplama grafikleri olarak temsil edilebilir. Kısmi türevlerle, yazılımın hesaplamasının zincir kuralını kullanarak herhangi bir değişkene göre herhangi bir düğümün farklılaşmasına izin verebilmektedir.[1, 2] Her şeyden önce kodlamanın rahatlığı CNTK, Tensorflow ve Theano olarak sıralanmaktadır. Kriterin basitçe kodların uzunluklarına dayandığı ve öğrenme eğrisi ile kodlama kolaylığının ana önemli kriterler olmadığı bir çalışmanın kriterlerine göre, Theano’nun uygulanması en zor ve CNTK ve Tensorflow ise biraz daha kolay bulunmuştur. Bu çalışma Tensorflow ile çalışırken ağırlık değişkenlerini (weight variables) ve önyargıları (biases) açıkça tanımlamak gerektiğini belirtmiştir.[1] Geliştiricilerine göre, C++ ile verimli bir şekilde yazılmış olan CNTK arayüzü hem CPU hem GPU yürütme genelinde; Python, C++ ve C# gibi çeşitli dillerin API’lerini (Aplication Programming Interface- Uygulama Programlama Arayüzleri) destekler.[2]

Şekil 2: Derin öğrenme kütüphanesinin özelliklerinin bir özeti. † Neon, tüm donanımlarda en iyi performansı sağlamayı amaçlayan Intel Nervana referans derin öğrenme kütüphanesidir. Kullanım kolaylığı ve genişletilebilirlik için tasarlandı.[3]
Tensorflow’un esnek mimarisi, geliştiricilerin ve kullanıcıların çok çeşitli derin sinir ağı modellerini denemelerine ve eğitmelerine olanak tanır ve makine öğrenimi sistemlerini konuşma tanıma, NLP (Natural Language Processing, Doğal Dil İşleme), bilgisayar görüşü (Computer Vision), robotik ve hesaplamalı ilaç gibi farklı alanlar için üretim yapmak ve dağıtmak için kullanılır ve Python, C++ ve C# gibi çeşitli dillerin API’lerini destekler.[2, 3] Tensorflow’un ünlü açık kaynaklı sarmalayıcısı Keras’tır ve bununla birkaç kod satırında bir model oluşturulabilir. Python’da geliştirilmiş DL kitaplığı olan Keras, Tensorflow’un sağladığı esneklikten yoksun olmasına rağmen neredeyse her ayrıntıyı kontrol edebilen kullanışlı ve kullanımı kolay bir derin öğrenme kütüphanesidir.[4] 2015 yılında Google mühendisi Chollet tarafından, ONEIROS (Açık Uçlu Nöro-Elektronik Akıllı Robot İşletim Sistemi) araştırma projesinin bir parçası olarak kurulmuştur. CNTK, Theano veya Tensorflow kütüphanelerinin üzerinde çalışır.[2] Başlangıçta araştırmacılarda hızlı deneyler sağlamak amacıyla geliştirilmiş Keras’ın temel özellikleri şunlardır:
Aynı kodun CPU veya GPU’da sorunsuz bir şekilde çalışmasına izin verir.
Derin öğrenme modellerinin hızlı bir şekilde prototipini kolaylaştıran kullanıcı dostu bir API’ye sahiptir.
Bilgisayarlı görü için evrişimli ağlar (convolutional networks), sekans işleme için tekrarlayan sinir ağlar (recurrent networks) ve her ikisinin herhangi bir kombinasyonu için yerleşik desteğe sahiptir.
İsteğe bağlı ağ mimarilerini destekler: çoklu giriş veya çoklu çıkış modelleri, katman paylaşımı ve model paylaşımı gibi.
Keras MIT lisansı ile dağıtılır ve bu da ticari projelerde kullanılabilir olduğunu gösterir. Python’un 2.7’den 3.8’ya kadar olan tüm sürümleriyle uyumludur. Keras’ın hem yeni kurulan şirketlerdeki hem de büyük şirketlerdeki akademik ve mühendislikten mezun öğrenciler ve hobi olarak ilgilenenler dahil, 2020 ilk verilerine göre 350.000’den fazla kullanıcıya sahiptir. Bu sayı 3-4 yıl önce 200.000 civarındaydı. Google, Netflix, Uber, CERN, Yelp, Square ve çok problemler üzerinde çalışan yüzlerce girişimde kullanılmaktadır. Keras aynı zamanda Kaggle’ın popüler bir kütüphanesidir.[5] Bu sistemlerin oldukça fazla güvenilir olması gerekmektedir. Uber’e ait sürücüsüz araç kazası bir yayanın ölümü ile sonuçlanmıştı. Bu veya benzeri felaketlere derin öğrenme sistemlerindeki yazılım kaynaklı hataların kontrolünün iyi olması gerekmektedir.[6]
Derin Öğrenme İşlemcileri
Evrişimli ağlarda görüntü işleme ve tekrarlayan sinir ağları ile sıralı işleme, hızlı birçok çekirdekli CPU’da bile son derece yavaş olacaktır. Gerçekçi bir şekilde çalıştırılabilen uygulamalar için bile genellikle modern bir GPU kullanılması bu hızı 5 veya 10 kat artıracaktır. Eğer makineye bir GPU yüklemek istemiyorsanız AWS EC2 GPU veya Google Cloud platformunda çalışmayı tercih edebilirsiniz. Zamanla ilginin artması bu platformların kullanımında pahalılığa yol açacağı gerçeğini de unutmamak gerekir.[5]
Derin öğrenme için bilmemiz gereken bir diğer önemli unsur da derin öğrenme işlemcileri (DLP, Deep Learning Processor) olabilir. DLP’ler derin öğrenme hızlandırıcı, genellikle ayrı veri belleği ve özel komut seti mimarisi ile derin öğrenme algoritmaları için tasarlanmış devrelerdir. Bugünlerde DLP’ler mobil cihazlardan (Huawei cep telefonundaki Neural Processing Unit, NPU gibi) bulut sunuculara (Google Cloud’daki Tensor Processing Unit, TPU gibi) kadar geniş bir yelpazedeki ticari altyapının parçası olmuştur. DLP’lerin amacı derin öğrenme algoritmalarını işlerken mevcut işleme cihazlarından yani genel CPU’lardan (Central Process Unit, İşlemci) ve GPU’lardan daha yüksek verimlilik ve performans sağlamaktır.[6-8]
Referanslar
Chung, Y., Ahn, S., Yang, J., & Lee, J. (2017). Comparison of deep learning frameworks: about theano, tensorflow, and cognitive toolkit. Journal of Intelligence and Information Systems, 23(2), 1-17.
Shatnawi, A., Al-Bdour, G., Al-Qurran, R., & Al-Ayyoub, M. (2018, April). A comparative study of open source deep learning frameworks. In 2018 9th international conference on information and communication systems (icics) (pp. 72-77). IEEE.
Wang, Z., Liu, K., Li, J., Zhu, Y., & Zhang, Y. (2019). Various frameworks and libraries of machine learning and deep learning: a survey. Archives of computational methods in engineering, 1-24.
Li, Y., Huang, C., Ding, L., Li, Z., Pan, Y., & Gao, X. (2019). Deep learning in bioinformatics: Introduction, application, and perspective in the big data era. Methods, 166, 4-21.
Chollet, F. (2018). Deep learning with Python (Vol. 361). New York: Manning.
Pham, H. V., Lutellier, T., Qi, W., & Tan, L. (2019, May). CRADLE: cross-backend validation to detect and localize bugs in deep learning libraries. In 2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE) (pp. 1027-1038). IEEE.
Jouppi, N. P., Young, C., Patil, N., Patterson, D., Agrawal, G., Bajwa, R., ... & Yoon, D. H. (2017, June). In-datacenter performance analysis of a tensor processing unit. In Proceedings of the 44th annual international symposium on computer architecture (pp. 1-12).
Mittal, S. (2021). A survey of accelerator architectures for 3D convolution neural networks. Journal of Systems Architecture, 102041.