Professional Documents
Culture Documents
www.cihanozhan.com
Version : 02/2020
Sunumun Hedefi
• Yapay zekanın temel felsefesine genel bir bakış atmak.
• Yapay zeka hakkında temel bir bakış açısı kazandırmak.
• Yazılım geliştiricilere yapay zeka ile ilgili temel algoritmik bakış açısını kazandırmak.
• Yapay zeka geliştirmek için kullanılabilecek açık kaynaklı çözümleri tanıtmak.
• Düzenli güncellemeler ile genel ve hızlı bir başlangıç kaynağı oluşturmak.
Taklit Nedir?
Biyomimetik
Biyotaklit & Yapay Zeka
• Yapay zeka da temel olarak bir biyotaklit ürünüdür.
• İnsan beynindeki nöronların çalışma mekanizması ve çiziminin ortaya
çıkarılmasıyla birlikte bilgisayar bilimciler tarafından ilgili çalışma yönteminin
dijital bir taklidinin oluşturulması fikriyle yapay zeka ortaya çıktı.
• Halen daha eğer computer vision’u anlamak isterseniz insan/canlı görme
yeteneğini incelemeniz, yapay zekayı anlamak için de sinir bilimi alanında en
azından temel bilgilere sahip olmanız gerekir.
Yapay Zeka Nedir?
• Bazen “Hesaplamaya Dayalı Zeka - Computational Intelligence” de adlandırılır.
• Yapay Zeka kavramı 1957 yılında Dartmouth New Hampshire’de yapılan bir
konferansta ortaya atılmıştır.
• Sınıflandırma (Classification)
– Her bir gözlem için bir kategori/sınıf atamasının yapılarak verinin sınıflandırılmasının sağlandığı
yöntemdir.
• Örn : bu otomobil kiralanabilecek en kötü araba (negatif)
• Örn : güzel hizmet, memnun kaldım, makine akıyor (pozitif)
• Regresyon (Regression)
– Her bir gözlem için öğrenilen verilere bakarak değer tahmini yapmaya denir.
• Örn : 2010 yılında inşa edilen, İstanbul’un X semtindeki 5. kattaki bir evin fiyatı 1.500.000 TL’dir.
• Evin balkonu, oda /banyo sayısı, denizi görüyor mu?, deprem bölgesinde mi vb ek bilgiler…
Öğrenme Türleri
(Unsupervised Learning)
Öğrenme Türleri
(Unsupervised Learning)
• Bu yöntemde hedef çıktılar verilmez, modelin kendi içinde verilen
girdilerden bir şablon oluşturması beklenir.
• Etiketsiz gözlemlerden öğrenme yapılan süreçtir.
• Algoritmanın(model) örüntü keşifleriyle kendi kendine öğrenmesinin
beklendiği bir yöntemdir.
• Kümeleme (Clustering)
– Gözlemlerin homojen bölgelere ayrıldığı algoritmadır.
– Örn : Bir şehir ya da ülkedeki sosyolojik insan gruplarını gruplamak.
• Boyut Azaltımı (Dimensionality Reduction)
– Gözlemlerin özellik sayısını sadeleştirir(az/öz) ve en iyi öğrenme imkanını sunmayı
hedefler.
Öğrenme Türleri
(Semi-Supervised Learning)
Öğrenme Türleri
(Reinforcement Learning)
• Pekiştirmeli ögr̆ enme, gözetmeli ögr̆ enmenin özel bir halidir. Modele
hedef çıktılar verilmez, onun yerine modelin çıktılarını ne ölçüde doğru
olduğunu belirten dereceler verilir.
Yapay Zeka Projesine Hazırlık
• Sorun nedir?
– Soruna göre yapay zeka alt başlığına odaklanılacak. Bu nedenle önemli.
– Örn : Bir görüntü üzerine bir sorun çözülecek ise ilgili algoritmalar, teknolojiler ve kurallar
belirlenir.
• Yapay zeka ile çözülecek sorun üzerine bir domain uzmanı var mı?
– Finans alanındaki yapay zeka sorununu sadece en iyi yazılımcılara sahip olarak çözemezsiniz.
Aynı zamanda finans alanında iyi ve teknik süreçlerden de anlayan finansçılar da gerekir.
• Başarı hedefi nedir?
– Yapay zeka ile çözülecek sorun belirlenmiş olabilir ancak hedeflenen başarı oranı nedir? Eğer
başarı oranı belirlenmediyse modelin testi sonrasında elde edilen başarı oranının bir anlamı
olmayacaktır. Karşılaştırma yapabilmek ve testin başarı oranını ölçebilmek için başarı oranı
hedefi belirlenmelidir.
• Sorunu çözmek için yeterli veriye sahip misin?
– Eğer yeterli veri yok ise veri çoğaltmak için çeşitli yollar bulunmalı ve teknikler uygulanmalıdır.
• Doğru teknolojileri seçtiğine emin misin?
– Her sorunu çözmek için farklı bakış açıları ve teknolojiler gerekebilir. Çeşitli performans ve
yeterlilik karşılaştırmalarını inceleyip daha sonra karşılaşılacak sorunlar bertaraf edilebilir.
Yapay Zeka Projesine Hazırlık
• Maliyet hesabı yapıldı mı?
– Yapay zeka da göreceli olarak en yüksek maliyet kalemlerinden biri donanımsal hesaplama
gücüdür. Özellikle resim, video, ses gibi veriler üzerinde yapılacak çalışmalarda yüksek GPU,
CPU, RAM, HDD vb. gibi birçok temel gider oluşur. Bunlar hesaplandı mı? Cloud’da yaparız
diyebilirsin! Cloud maliyetleri hesaplandı mı? Cloud daha tuzlu da olabilir…
– Yapay zeka projelerinin çoğunda geliştirme süresini tahmin etmek pek mümkün değildir.
Genellikle ve muhtemelen geliştirme sırasında ciddi ertelemeler olacak. Buna hazır mısın?
– Bir dedicated server kurup bir verimerkezine koyup yayın yaparım diyebilirsin! Ancak yüksek
hesaplama yapan bilgisayarlarda yüksek ısı oluşur ve yüksek elektrik enerjisi harcar. Bu
durumda ilgili verimerkezi senin sunucunu kendi ağına dahil etmek istemeyebilir. Alternatifin
var mı?
– API olarak sunulacak görüntü analizi yapan bir yapay zeka projesinde sunucu maliyetleri
yüksek olacaktır. Müşterinin/istemcinin client ve mobil cihazlarını kullanarak maliyeti
düşürme yöntemine gidebilirsin ancak bu sefer de birden fazla platform için ayrı ayrı
geliştirme maliyetini hesaplaman gerekir.
– Özel bir sorunu çözeceksen verisetini kendin oluşturmak zorundasın. Mesela 500 bin
resimden oluşacak bir verisetini hazırlamak için yeterli eleman kaynağın var mı? Her bir resim
üzerinde çalışılması gerekir. Ve bunun standartları belli… Süreçleri bilen ekibin var mı? Olmak
zorunda! Stratejin nedir?
Yapay Zeka Projesine Hazırlık
• Yapay zeka uygulamasını geliştirdin. Ya DevOps süreçleri?
– Yapay zeka yazılımlarının ölçeklenmesi, yüksek trafik altında optimize edilmesi ve tüm
sunucu yönetimleri diğer yazılım projelerinden epey farklıdır. Bu süreçler için tecrübeli
DevOps uzmanı/larına ihtiyacın olacak. Bunlara Data Engineer diyoruz.
Model Hazırlık Süreci
• Veri Bulma & Oluşturma (VeriSeti/DataSet)
– Metin, görüntü(araç, insan, tümör vb.), sayısal ölçümler, sosyal ağlar, genetik verisi vb…
• Veri Temizleme
– Hatalı, geçersiz ve gereksiz verilerin temizlenerek verinin kullanışlı hale getirilmesi.
• Veri Bölümlendirme
– Hazırlanan verinin eğitim ve test olmak üzere ikiye ayrılması.
– Genellikle %80-20 ya da %70-30 oranlarıyla bölünmesi önerilir.
• Özellik Çıkarımı (Feature Extraction)
– Ham veriden özellik çıkarımı yapmak
– Çıkarılan özelliklerden özellik seçimi(feature selection) yapmak
– Bu süreçte domain bilgisi önemli…
• Model Oluşturma
– Özellik çıkarımından sonra model bu matris üzerinde çalışmaya başlar ve çeşitli kurallar çıkarır.
• Değerlendirme
– Bu süreçte eğitilmiş modeli test verisiyle test ederiz.
• İyileştirme
– Bu süreç sonunda model yeterince başarılı değilse sorunlar tespit edilir ve model güncellenir.
– Veri -> Temizleme -> Özellik Çıkarımı -> Öğrenme Algoritması -> Model -> Değerlendirme -> İyileştirme ->
Temizleme -> …
• Tahmin
– Eğer eğitilen model test verisi üzerinde başarıyla çalıştıysa uygulama ortamına hazır demektir.
Etiketleme
(Labeling)
Etiketleme
(Labeling)
Etiketleme Araçları
• Etiketleme araçları için GitHub kaynakları
– github.com/heartexlabs/awesome-data-labeling
– github.com/jsbroks/awesome-dataset-tools
– github.com/rodrigofay/awesome-data-labeling
Data Augmentation
• Data Augmentation temel olarak iki amaçla kullanılabilmektedir.
– Yapay zeka uygulamalarındaki ezberleme sorununu çözme tekniklerinden biri
– Modeli eğitmek için gerekenden daha az veriye sahip olunduğu durumda veri çoğaltmak.
Data Augmentation
AI Ortamı
(Özet)
• Donanım
– CPU
• Sadece alıştırma kodları için…
– GPU
• Ürün ortamı için mecburi
– HDD
• Yüksek depolama alanı ve hızlı disk okuma-yazma kapasitesi
• Yazılım
• Cloud Computing
– Depolama hizmetleri, metinsel, görüntü ve ses gibi verilerin depolanması ve işlenmesi.
– Cloud tabanlı hazır yapay zeka servislerinin kullanılması.
• Zaman!
– Doğru algoritma seçimi, model geliştirme, model eğitme…
Donanımsal Bakış
• NVIDIA CUDA GPUs
– developer.nvidia.com/cuda-gpus
– CUDA Toolkit
• developer.nvidia.com/cuda-downloads
• PyTorch : 9.2
• TensorFlow : 10.1
– cuDNN SDK (>= 7.6) (Deep Neural Network library)
• developer.nvidia.com/cudnn
– CUPTI (CUDA Profiling Tools Interface)
• docs.nvidia.com/cuda/cupti/
• Özel ML/DL Bilgisayarı(Örnek) : lambdalabs.com/
– Bu örnek bir ML geliştiricisi için gereken bilgisayar özelliklerini anlatmak amacıyla verilmiştir.
– Bu tür bilgisayar konfigürasyonlarını inceleyerek kendiniz de toplayabilirsiniz.
– Ancak ürün ortamında yayın hizmeti verecek bir sunucuyu hazırlamanın çook daha fazla
detayı bulunmaktadır.
Hangi Model?
• CNN (Convolutional Neural Networks - Evrişimli Sinir Ağları):
– Nesne tanıma ve takip etme, stil transferi, kanser tespiti vb.
• LSTM (Long Short Term Memory – Uzun/Kısa Süreli Bellek):
– Doğal dil işleme, çeviri, chatbot, finans uygulamaları vb.
• GAN (Generative Adversarial Networks - Çekişmeli Üretici Ağlar):
– Sentetik veri üretme, sahte yüz üretme, stil transferi vb.
• RL (Reinforcement Learning - Pekiştirmeli Öğrenme):
– Kendi kendine ve az veriyle öğrenen yapay zeka sistemleri vb.
Hangi Programlama Dilleri?
• Python
– ML çalışmalarında kullanılan en yaygın dildir. Başlangıç, hızlı proje üretme amacıyla ve start-up projeleri için önerilir.
• C/C++
– İleri seviye, yapay zeka altyapı/library gibi yüksek performans gereken projelerde önerilir.
• Java
– Eğer ‘Biz Java biliyorum, hızlı bir şekilde nasıl öğrenebilirim’ diyorsan sınırlı da olsa kaynak var.
– Ancak çok tecrübeli Java ekibi yoksa önerilmez.
• R
– ‘Ben uygulama geliştirici değilim, istatistik temelim var ve bu tür uygulamalarda çalışıyorum’ diyorsan önerilir ve çok
yaygındır. Yapay zeka uygulama geliştirici girişim ya da bir yazılım odaklı girişim için faydası sınırlıdır.
• JavaScript
– Machine Learning ve Deep Learning odaklı web projelerinde bazı hesaplama yüklerini client’a yıkmak için önerilir. Ayrıca
cross-platform mobil uygulamalar için de entegre edilebilen çözümlere sahiptir.
• C#
– Performans ve dil gücü olarak yapay zeka da etkili olabilecekse de açık kaynakta amiral gemisi olmaktan şuan için uzak. Ancak
bir C# geliştiricisi olarak herhangi başka bir dil öğrenmeden machine learning, deep learning, computer vision projeleri
geliştirilebilecek kadar kaynak ve proje mevcuttur.
• Go
– Güç ve performans olarak çok iyidir. Şahsen yapay zeka uygulamalarında gelecek vadettiğini düşünsem de bu tür projelerde
kod yazma maliyeti yüksektir. Sınırlı open-source proje nedeniyle iyi bir Go geliştirici olmak ve ciddi bir proje geliştirme
süresine ihtiyaç vardır.
• Rust
– Bu listedeki en performanslı dillerden biridir. Sistem ve işletim sistemi seviyesinde çalışmalarda kullanılabilecek kadar
güçlüdür. Hesaplama gücü nedeniyle henüz ürün ortamında olmasa da AR-GE amacıyla araştırmalar yapılması tavsiye edilir.
Programlama Dilleri
• Python
– github.com/vinta/awesome-python
– slideshare.net/cihanzhan/python-programlama-dili
• C/C++
– github.com/fffaraz/awesome-cpp#machine-learning
– awesome-cpp.readthedocs.io/en/latest/README.html
– dlib.net/ml.html
– mlpack.org/
• JavaScript
– tensorflow.org/js
• C#
– scisharp.github.io/SciSharp/
– cihanozhan.com/csharp-net-makine-ogrenmesi-derin-ogrenme-kutuphaneleri/
• Go
– cihanozhan.com/golang-machine-learning-libraries/
• Rust
– arewelearningyet.com/
Programlama Dili ve Ortamlar
(Alternatif)
• Scala
• Julia
• Octave
• MatLab
Başlangıç Rehberi
(Geliştirici)
• Kişisel Bilgisayarlar
– Python, Anaconda, VSCode(Önerilir), PyCharm vb…
• Bulut Bilgisayar Çözümleri (Ücretsiz)
– Microsoft Azure Notebook (CPU Destekli)
• notebooks.azure.com/
– Google Colab (GPU Destekli)
• colab.research.google.com/
• Stanford Üniversitesi:
– CS221 : Artificial Intelligence: Principles and Techniques
• web.stanford.edu/class/cs221/
– CS229 - Machine Learning
• s cpd.stanford.edu/search/publicCourseSearchDetails.do;jsessionid=D675581FB0E42483186744CEFEDAB61C?method=load&courseId=11763&showInternal=true
– CS224n - Natural Language Processing with Deep Learning
• web.stanford.edu/class/cs224n/
– CS231n - Convolutional Neural Networks for Visual Recognition
• vi s i on.stanford.edu/teaching/cs231n/
– deeplearnin.ai Kurs Sunumları
• cs 230.s tanford.edu/syllabus/
• MIT (Massachusetts Teknoloji Enstitüsü):
– 6.034-Artificial Intelligence
• ocw.mi t.edu/courses/electrical-engineering-and-computer-science/6-034-artificial-intelligence-fall-2010/
– 6.867 - Machine Learning
• ocw.mi t.edu/courses/electrical-engineering-and-computer-science/6-867-machine-learning-fall-2006/
– 6.S191 - Introduction to Deep Learning
• i ntrotodeeplearning.com/
– 6.S099 - Artificial General Intelligence
• a gi .mit.edu/
– MIT Deep Learning (Lex Fridman)
• deeplearning.mit.edu/
• Hacettepe Üniversitesi:
– CMP784-Deep Learning : https://web.cs.hacettepe.edu.tr/~aykut/classes/spring2018/cmp784/
• Diğer Online Kaynaklar
– Coursera
• coursera.org/courses?languages=en&query=artificial+intelligence
– Udacity
• udacity.com/course/intro-to-artificial-intelligence--cs271
– edX
• edx.org/course?search_query=artifical+intelligence
– fast.ai
• fast.ai/
– Udemy
• udemy.com/courses/search/?q=derin%20%C3%B6%C4%9Frenme&src=sac&kw=derin%20%C3%B6%C4%9Frenme
– Google
• https://ai.google/education/#?modal_active=none