ARTIFICIAL INTELLIGENCE – MACHINE LEARNING – DEEP LEARNING – COMPUTER VISION- AI AGENTS – IOT- IOT Edge – AI Edge
Yapay Zeka içinde 3 temel yapıyı da içeriyor. Derin Öğrenme, Makine Öğrenimi ve Bilgisayarlı görme.
AI – Artifical Intelligence – Yapay Zeka
ML – Machine Learning – Makine Öğrenimi
DL – Deep Learning – Derin Öğrenme
CV – Computer Vision – Bilgisayarlı Görme veya Görü
IOT – Internet of Things – Nesnelerin interneti..
LLM – Large Language Models – Büyük dil modelleri..
Biraz teknik ve kimsenin girmediği konuları basitçe anlatarak başlamak istiyorum.
Biz bir yapay zeka projesi veya Makine Öğrenimi projesi yaparken şu basit adımları aslında gerçekleştiririz. Bunu yazayım ki bundan sonraki kısımları kolayca anlayın kafanızda büyük resim oluşsun..
1-) Kodlama için Python veya C# seçiyorum..
2-) Python kod kütüphanesi için Pytorch vb ve C# içinde ML.NET i kullanabilirim..
3-) Elimde yapacağım konu ile ilgili veri yoksa veri setlerini internetten bulabilirim. GITHUB da var mesela..Varsa sorun yok..Yoksa kendimiz hazırlamalıyız ki bu iş yazılım yazmaktan çok daha zor bence.. Cümlenin pozitif veya negatif olmasını bulan cümleleri yavaş yavaş yazıp karşılarına da pozitif veya negatif i bizim yazmamız gerekir.. Binlerce cümle olabilir..
4-) eğer bu veriler text ise ve mesela sentiment veya semantic yani duygu veya anlam analizi olarak olumlu veya olumsuz, kötü cümle vb cümleyi tahmin etmeye dayalı ise o halde ML yani machine learning algoritmalarından birini kullanacağım demektir..Veriler resim ise ve hangi sınıfa gireceğini tahmin edeceksem yine ML algoritması olacak..
5-) Eğer veriler bir resim veya video ve biz bunların içindeki nesneleri (araba,insan çocuk ,sandalye vb) bulacak isek o zaman bu içinde CV yani bilgisayarlı görme ve veya derin öğrenme barındıran bir algoritma olmalı..
6-) Veri var ve algoritma (eğitilmemiş model) da var. O zaman bu verileri kodlamayla modele yüklüyor veya atama ile kodu set ediyoruz..ve Train et (ML.NET de mesela Fit komuru var.) diyoruz.. Modelimiz train edilip eğitiliyor ve kodlamaya göre ya hafızada (küçük test yazılımları için) veya mesela ONNX uzantılı olarak kaydediliyor..
Biz de artık bu eğitilmiş modeli yani ONNX uzantılı dosyayı kullanarak kodlamayla resim veya video nun içinde neler olduğunu veya bir cümlenin pozitif veya negatif olup olmadığını bu verileri kodlayarak bu eüitilmiş veriyi kullanarak bize çıkarım yapmasını istiyoruz.. Olay bu..
Yani Kodlama + Veri Seti -> Eğitilmiş Veri -> Kodlama + istek verisi -> Sonuç Çıkarım.. Olayın kısa şekli bu.. Şimdi kavramları öğrendik biraz olsun o halde
Neden? Nasıl? Niçin e geçelim..
Derin Öğrenme birden fazla katmandan oluşan ve her katmanda bir yazılımlar bir iş yapılan kısım var. Öğreniyor, karar veriyor.
Makine Öğrenimi ise bir katmandan oluşuyor ve sadece tahmin sonucu üretiyor. Öğreniyor ancak sadece verilen veri tasarımlarına bakıp öğrenip o verilere göre kendisine sorulan bir soruya cevap veriyor..Tahmin yapıyor..
Bilgisayarlı görme veya görü ise bir resim veya video dan nesneleri çıkarıyor ve anlamlandırıyor..
Makine Öğrenimi ve Bilgisayarlı görme birbirinin içine girmiş gibi görülebiliyor bazan.. Makine öğrenimi modelleri, bilgisayarlı görme tekniklerini geliştirmek ve bilgisayarlı görme sistemlerinin performansını iyileştirmek için kullanılır diyelim ve devam edelim..
Python, C# veya Java veya vs vs ile çalışabilirsiniz. Her biri için kütüphaneleri mevcut. Kütüphane ne iş eyarıyor dersek kodlama mantığımızı kısaltıp işe fokuslanmamızı sağlayan kod kütüphaneleri bunlar..
Peki bu dosyalarda veri mi var ne var?
6-7 yıl önce modeller de Pytorch un .pt veya .pth ve tensorflow .pb modellerinde da 32 bitlik şekilde saklanıyordu… Ancak bunlar light dediğimiz uygulamalar içindi. Pytorch ve Tensorflow un ilk zamanları mesela.. Özellikle LLM dediğimiz geniş dil modelleri için (chatGPT mesela) yetersizdi ve 32 bitlik veri halinde saklıyordu bu yüzden 16 ve 8 bite kadar veri saklaması düşürüldü. Biz buna Quantization diyoruz.. Bu neyi sağladı ? Aynı veri seti 4 kat dan fazla küçüldü.. Hafıza gereksinimlerini azalttı ve daha fazla donanım üzerinde çalışmasını sağladı..
Tensorflow .pb ve Pytorch da .pt veya .pth uzantılı eğitilmiş veri setlerini kullanıyordu..
Bu Quantization yapılırken ONNX yapısı önce ortaya çıktı. Bu ONNX farklı veri setleri arasında değişimi desteklemek için bir yapı getirdi. Hala kullanılıyor.
Ancak bu da yetmedi..Çünkü Quantization ı limitli sunuyordu…Şu anda bile ONNX uzantılı veri setleri var ve gayet rahat C# ve ML.NET ile kullanmanız mümkün..
Sonra GGUF çıktı..Amacı geniş ve çok büyük veri modelleri ve bu modellerin ağır şekilde kullandığı limitli donanımlarda dahi performanslarında düşüş olmadan
çalışmasını sağlamak. (modeli 2 anlamda kullanırız biz. Biri algoritma olarak diğeri ise bu modele veri yükleyip eğitiriz yani train ettiririz buna da model deriz. Farkı cümlede konuşurken anlaşılır..)
Bakın GGUF yapısı bize hangi avantajları sağlıyor:
Quantization desteği (Quantization = büyük değerleri veya büyük verileri küçük değerlerle ifade edilir hale getirme diyelim)
Quantization 4 veya 8 bit i de destekliyor..
Metadata saklama .. GGUF yapısı modelin yapısını, token şemasını ,Quantization seviyelerini de saklar. Bu da bize modelleri kolayca yüklemeyi ve değişiklik yapmayı da sağlar..
Inference optimizasyonu (çıkarım iyileştirmesi) ..bellek kullanımını optimize ederek CPU tabanlı sistemlerde daha hızlı çıkarım yapılmasını sağlar.
Peki esas eğitilmiş veri nerede? O da GGUF içinde zaten…Bu yapılarla iç içe..
Peki ONNX, GGUF gibi eğitilmiş veri ve metadata bulunan bu yapıları anladık da biz neyi nasıl kullanacağız..?
Diyelim elinizde .pb yani Python ve Pytorch u destekleyen eğitilmiş set var.
VE biz python da değil örneğin C# yani .NET ile bunu nasıl kullanacağız..?
Tabii ki dönüştüreceksiniz.. Bunu dönüştüren çeşitli tool veya yazılımlar var. Onlarla bu formatlara dönüştürmek gerekecek..
ONNX veya GGUF u C# .NET ve ML.NET projelerinizde kullanabilirsiniz direkt..
Örnek vermek gerekirse lokalinize indirebileceğiniz ve LLM desteği sunan chatGPT benzeri bir GGUF model (eğitilmiş model verisi) dosyası 4-5 GB boyutta olabilir ve size mesela şirketinizde bir yazılımla müşteri ilişkilerinde yardımcı olabilir bir AI agent gibi kullanılabilir. Bunu şahsen denedim ve oldukça kolay ve etkili olduğunu gördüm..
Yapay Zeka özellikle LLM modelleri mesela ChatGPT vb GPU sistemlerinde çok çok hızlı çalışır. Sebebi CPU larda seri veri işleniyor halbuki bu GPU larda paralel veri ve işlem var.. BitCoin miner lar GPU lu özel makineler kullanır mesela çünkü saniyede binlerce tahmin yapabilmeleri ve sihirli şifreyi diyelim bilmeleri gerekir..
Burada da LLM yani geniş ve büyük dil modelli yapay zeka da GPU lar çok çok etkilidir.. NVIDIA nın piyasa değerinin çok çok yükselmesinin sebebi budur..
Gerçek zamanlı video larda bir nesnenin , insanın vb .ok hızlı tanınması veya tanımlanması için YOLO algoritmalı eğitilmiş model lerin kullanılması gerekir..
YOLO nun eğitilmiş çeşitli modelleri vardır. İhtiyaca göre bunları bulup kullanabilirsiniz.. Yukarıda anlattığım gibi bu eğitilmiş (veri ile algoritma çalıştırılıp sonucunda yeni bir veri dosyası) YOLO veri setlerini hangi yazılım dili ve kütüphanelerini kullanacaksanız ona göre tanınan bir formata dönüitürülmüş olması gerektiğini unutmayın..
Tekrarlamak gerekirse aslında AI veya ML veya DL kodlamak o kadar zor değil. Veri bilimi açısından da işler çok çok kolaylaştı artık.. Daha da kolay olacaktır..
Burada önemli fark yaratacak işler Veri setini hazırlamaktır. Eğer elimizde bu veri seti ile yapmak istediğimiz işin de algoritması yoksa o zaman kendi modelimizi yani algoritmamızı kodlamamız gerekir. Bu da oldukça zor aslında. Hazır model builder uzantısı ile bu işlemi destekleyen Tool ve editörler var ancak daha ilerisi de gerekirse o daha da zor..
Çoğu zaman temel işlemlerde çok lazım belki olmuyor ancak ileri düzey işlemlerde bu gerekebilir..
Kodlama temel işlemlerde ve orta seviye işlemlerde kolay. İleri düzey farklı sistemlerin konuşacağı performans, çevik, sağlam isterlerin olduğu büyük projelerde çok daha farklı özelliklerimizin olması gerektiğini de unutmayalım..
Veri bilimcilerinin ve yazılım geliştiricilerin iş hayatları daha da zor olacaktır. Ancak yeni alanlarda ortaya çıkabilir ve gerçek yazılım mühendislerine olan ihtiyaç da çok artabilir..
Biraz da AI Agent veya AI Chatbot konusuna gelelim.
Yapay zeka ajanları chatbot lardan da RPA dediğimiz robotic process automation lardan da farklıdır. Bunların her ikisi de daha statik dir.
Yani chatbot da basit işlemler yapılıyor ama AI Agent veya AI Agent lar LLM destekli ve ileri düzey kapasiteli, karmaşık workflow yani iş akışlarını da yönetebilip ayrıca müşteri ile yaptığı konuşma veya yazışmalardan da öğrenebilme yeteneği var..
AI Agent kodlamak da aslında hem kolay hem zor.. Semantic Kernel,AutoGen kütüphaneleri bunu destekliyor.. Python,C# ve Java dil desteği de var bunlarda..Ben diğer kütüphane vb yazmıyorum çünkü ana amacım bunların ne olduğunu neden ve nasıl yapıldığını size göstermek..
Özellikle Semantic Kernel kütüphanesi kullanarak bir çok örnek yazılım bulabilir ve nasıl yapıldığını görebilirsiniz..
Hiç kod yazmadan da AI Agent yapmanız mümkün.. n8n kullanarak günlük işlerinizi bir sekreter veya asistana yaptırmak yerine bu AI Agent a kolayca yaptırabilirsiniz.. Web sitesinde bir çok şablon var..
AI yani Yapay Zeka yı bazen de IOT ile yan yana çok fazla kullanıyorlar.. IOT konusunda da oldukça fazla deneyimim olduğundan faydalı buluyorum..AWS, Azure vb gibi cloud sistemlerde (IOT Hub veya GreenGrass vb isimlerle kullanılıyor) IOT yönetim altyapısı ve API leri kurup gerçek IOT cihazlarınızın da ayar yazılımlarıyle IOT üzerinde konfigirasyon ayarlarını bu Cloud da ki tanımladığınız IOT uçlarıyla konuşturup bilgileri Cloud da depolayıp yönetebilirsiniz.. Aslında Cloud tarafta bir MQTT yapısı var. XMPP nin küçüğü diyebiliriz..
Bilirsiniz bu sistemlerde Subscribe ve Publish olayı var..Bu MQTT aslında bir soket yazılımı. yani bir port üzerinden dinliyor dışarıdan mesela sizin scooter üzerindeki IOT cihazından gelen veri çağrılarını vb.. O anda veriyi alıp sizin Cloud taraftaki kurgunuza göre işlem yapıyor.. Subscribe dinleme, Publish de veri gönderme diyelim..
Biz Cloud kullanmadan bu işleri server tarafta bir port üzerine tanımladığımız bir soket yazılımı ile yaparız..Bu hep dinler bu portu ve 2 yönlü konuşur yani hem server ile hem de IOT ile..
Peki Yapay Zeka ile ne ilgisi var..Var yani.. 2 yapı var IOT edge ve AI Edge..
Topladığınız IOT verilerini değerlendirebilir ve çıkarımlar yapmaya çalışabilirsiniz.. Mesela IOT üzerinde hem SIM
kart var hem GPS hem de mesela ivme sensörü ve giroskop.. Ivme sensöründen gelen bilgileri değerlendirip yaya yoluna çıkıp çıkmadığını bu verilerden bir ML algiritması kurarak anlamanız mümkün. Biniş sonrası cezayı yazarsınız..
Daha Ötesi IOT Edge de yapay zeka kullanılması.. IOT Edge aslında altyapının Cloud da değil bir donanım (bir pc mesela) üzerinde olduğu ve UÇ (edge) da kullanılan bir yapı.. Cloud da istemiyorum tanımları lokal şirketimde vb kullanacağım derseniz IOT Edge budur. Bu yapıyı kendi Cloud unuz gibi görün hani.. IOT cihazlarınız mesela
kamera , buzdolabı, ışık sistemi , IOT vb donanımlarınızı bu sistemde tanımlayıp (MQTT vb hizmetleri verecek size) ve her cihazı da bu IOT edge ile konuşacak şekilde ayarlarsanız veriler sizin sisteminizde kalır ve cloud da ne yapacaksanız burada da yapabilirsiniz..
Microsoft da IOT Edge birsanal linux makinesine kurulu bir runtime , docker engine ı ve bu engine ın yöneteceği moduller olarak yer alır..
istenirse cloud interface leri ile bu IOT edge makinaları uzaktan yönetmek ve izlemek de mümkündür..
AI Edge ise yapay zeka algoritma ve modellerinin IOT vb cihazlarına yüklenmesi demek.. Edge uç cihaz için kullanılan bir kelime..