Kurs

Sinir Ağlarına Giriş
Sinir ağları veya simüle edilmiş sinir ağları, insan beyninden esinlenen bir makine öğrenimi alt kümesidir. Biyolojik nöronların birbirleriyle nasıl iletişim kurduğunu taklit ederek bir karara ulaşırlar.
Bir sinir ağı; bir girdi katmanı, bir gizli katman ve bir çıktı katmanından oluşur. İlk katman ham girdiyi alır, birden fazla gizli katman tarafından işlenir ve son katman sonucu üretir.
Aşağıdaki örnekte, tablo verilerini sınıflandırmak için sinir ağlarının eğitim sürecini simüle ettik. Çıktı üretmek için 4 ve 2 nöronlu 2 gizli katmandan geçirilen X1 ve X2 parametrelerimiz var. Birden fazla yineleme ile model hedefleri sınıflandırmada daha iyi hale geliyor.

Görsel TF Playground ile oluşturuldu
Derin öğrenme algoritmaları veya derin sinir ağları birden fazla gizli katman ve düğümden oluşur. “Derin”, sinir ağlarının derinliğini ifade eder. Genellikle Görüntü sınıflandırma, Konuşma tanıma ve Metin üretimi gibi karmaşık sorunları çözmek için kullanılırlar.
Sinir ağları hakkında daha fazla bilgi edinmek için Derin Öğrenme Eğitimi yazımızı okuyun. Aktivasyon Fonksiyonu, Kayıp Fonksiyonu ve Geriye Yayılımın nasıl çalışarak doğru sonuçlar ürettiğini öğreneceksiniz.
Sinir Ağı Türleri
Gelişmiş makine öğrenimi uygulamaları için kullanılan birden fazla sinir ağı türü vardır. Her durumda işe yarayan tek bir model mimarisi yoktur. En eski sinir ağı türü, 1958'de Frank Rosenblatt tarafından oluşturulan Perceptron’dur.
Bu bölümde, teknoloji sektöründe kullanılan en popüler 5 sinir ağı türünü ele alacağız.
İleri Beslemeli Sinir Ağları
İleri beslemeli sinir ağları bir girdi katmanı, gizli katmanlar ve bir çıktı katmanından oluşur. Veri ileri yönde aktığı ve geriye yayılım olmadığı için ileri beslemeli olarak adlandırılır. Çoğunlukla Sınıflandırma, Konuşma tanıma, Yüz tanıma ve Desen tanımada kullanılır.
Çok Katmanlı Algılayıcı
Çok Katmanlı Algılayıcılar (MLP’ler), geriye yayılım yoluyla öğrenememe gibi ileri beslemeli sinir ağının eksikliklerini giderir. Çift yönlüdür ve birden çok gizli katman ile aktivasyon fonksiyonlarından oluşur. MLP’ler girdiler için ileri yayılımı, ağırlıkları güncellemek için geriye yayılımı kullanır. Bilgisayarlı görü, dil teknolojisi ve diğer sinir ağları için temel oluşturan temel sinir ağlarıdır.
Not: Gerçek dünya problemleri doğrusal olmadığından, MLP’ler algılayıcılardan değil, sigmoid nöronlardan oluşur.
Evrimsel Sinir Ağları (CNN’ler)
Evrimsel Sinir Ağları (CNN) genellikle bilgisayarlı görü, görüntü tanıma ve desen tanımada kullanılır. Birden fazla evrim (konvolüsyon) katmanı kullanarak görüntüden önemli özellikler çıkarmak için kullanılır. CNN’deki evrimsel katman, görüntüler üzerinde evrim yapmak ve bir harita oluşturmak için özel bir matris (filtre) kullanır.
Genellikle Evrimsel Sinir Ağları; girdi katmanı, evrimsel katman, havuzlama katmanı, tam bağlı katman ve çıktı katmanından oluşur. CNN’in nasıl çalıştığını öğrenmek için TensorFlow ile Python Evrimsel Sinir Ağları (CNN) eğitimimizi okuyun.
Yinelemeli Sinir Ağları (RNN’ler)
Yinelemeli Sinir Ağları (RNN’ler) yaygın olarak metinler, görüntü dizileri ve zaman serileri gibi sıralı veriler için kullanılır. Geri bildirim döngüsü kullanarak önceki dizilerden girdi almaları dışında ileri beslemeli ağlara benzerler. RNN’ler NLP, satış tahminleri ve hava durumu tahminlerinde kullanılır.
RNN’ler, Kısa Süreli Bellek Ağları (LSTM’ler) ve Kapılı Yinelemeli Birim Ağları (GRU’lar) olarak adlandırılan gelişmiş RNN sürümleriyle çözülen kaybolan gradyan sorunlarıyla birlikte gelir. LSTM ve GRU’lar hakkında daha fazla bilgi edinmek için Yinelemeli Sinir Ağı (RNN) Eğitimi yazısını okuyun.
R'de Sinir Ağlarının Uygulanması
Popüler R paketleri neuralnet ve Keras ile sinir ağları oluşturmayı öğreneceğiz.
İlk örnekte minimum çabayla basit bir sinir ağı oluşturacağız, ikinci örnekte ise Keras paketiyle daha gelişmiş bir problemi ele alacağız.
Gerekli kütüphane ve bağımlılıkları indirerek R ortamını kurarak başlayalım.
install.packages(c('neuralnet','keras','tensorflow'),dependencies = T)
R'de Basit Sinir Ağı uygulaması
Bu ilk örnekte, yerleşik R verisi iris’i kullanarak basit bir sinir ağı ile çoklu sınıflandırma problemlerini çözeceğiz.
Veri manipülasyonu ve model eğitimi için gerekli R paketlerini içe aktararak başlayacağız.
library(tidyverse)
library(neuralnet)
Veri Analizi
R konsolunda `iris` yazıp çalıştırarak veriye erişebilirsiniz. Veriyi eğitmeden önce, karakter türündeki sütunları faktöre dönüştürmemiz gerekir.
Not: örnekleri çalıştırmak için DataCamp R çalışma alanını kullanıyoruz.
iris <- iris %>% mutate_if(is.character, as.factor)
`summary` fonksiyonu istatistiksel analiz ve veri dağılımı için kullanılır.
summary(iris)
Görüldüğü gibi, dengeli veriye sahibiz. Üç hedef sınıfın her birinde 50 örnek bulunuyor.
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
Eğitim ve Test Ayrımı
Tekrarlanabilirlik için tohum belirleyecek ve modeli eğitmek ve değerlendirmek üzere veriyi eğitim ve test kümelerine böleceğiz. %80:%20 oranında böleceğiz.
set.seed(245)
data_rows <- floor(0.80 * nrow(iris))
train_indices <- sample(c(1:nrow(iris)), data_rows)
train_data <- iris[train_indices,]
test_data <- iris[-train_indices,]
Sinir Ağının Eğitilmesi
neuralnet paketi eski olsa da R topluluğu arasında hâlâ popülerdir.
`neuralnet` fonksiyonu basittir. Tamamen özelleştirilebilir bir model mimarisi oluşturma özgürlüğü sağlamaz.
Bizim durumda, GLM’de olduğu gibi makine öğrenimi formülü ve veri sağlıyoruz. Formül, hedef değişkenleri ve özelliklerden oluşur.
Ardından iki gizli katman oluşturuyoruz: ilk katman dört, ikinci katman iki nöron içeriyor.
model = neuralnet(
Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,
data=train_data,
hidden=c(4,2),
linear.output = FALSE
)
Model mimarisini görüntülemek için `plot` fonksiyonunu kullanacağız. Bir model nesnesi ve `rep` argümanı gerektirir.
plot(model,rep = "best")

Model Değerlendirme
Karmaşıklık matrisi için:
- Test veri kümesini kullanarak kategorileri tahmin edeceğiz.
- Kategori adlarının bir listesini oluşturun.
- Bir tahmin veri çerçevesi oluşturup sayısal çıktıları etiketlerle değiştirin.
- ‘gerçek’ ve ‘öngörülen’ değerleri yan yana göstermek için tabloları kullanın.
pred <- predict(model, test_data)
labels <- c("setosa", "versicolor", "virginca")
prediction_label <- data.frame(max.col(pred)) %>%
mutate(pred=labels[max.col.pred.]) %>%
select(2) %>%
unlist()
table(test_data$Species, prediction_label)
Neredeyse kusursuz sonuçlar elde ettik. Görünüşe göre modelimiz üç örneği yanlış tahmin etmiş. Her katmana daha fazla nöron ekleyerek sonucu iyileştirebiliriz.
prediction_label
setosa versicolor virginica
setosa 8 0 0
versicolor 0 13 0
virginica 0 3 6
Doğruluğu kontrol etmek için önce gerçek kategorik değerleri sayısal değerlere dönüştürüp tahmin edilen değerlerle karşılaştırmamız gerekir. Sonuç olarak bir boole değerleri listesi elde edeceğiz.
`sum` fonksiyonunu kullanarak `TRUE` değerlerinin sayısını bulup toplam örnek sayısına bölebilir ve doğruluğu hesaplayabiliriz.
check = as.numeric(test_data$Species) == max.col(pred)
accuracy = (sum(check)/nrow(test_data))*100
print(accuracy)
Model, değerleri %90 doğrulukla tahmin etti.
90
Not: Bu örneğin kaynak kodu R çalışma alanında mevcuttur: R'de Sinir Ağı (NN) Modelleri Oluşturma.
Keras ile R'de Evrimsel Sinir Ağı
Bu örnekte, görüntü sınıflandırma görevi için bir Evrimsel Sinir Ağı modeli oluşturup eğitmek üzere Keras ve TensorFlow kullanacağız. Bunun için, on kategoriye etiketlenmiş 60.000 adet 32x32 renkli görüntüden oluşan cifar10 görüntü veri setini kullanacağız.

Görsel kaynağı: CIFAR-10
Gerekli R paketlerini içe aktarın.
library(keras)
library(tensorflow)
Verinin hazırlanması
Keras’ın yerleşik veri setini içe aktaracak ve eğitim ile test kümelerine böleceğiz.
c(c(x_train, y_train), c(x_test, y_test)) %<-% dataset_cifar10()
Eğitim ve test özelliklerini 255’e bölerek veriyi normalleştirin.
x_train <- x_train / 255
x_test <- x_test / 255
Modelin oluşturulması
Keras API, tamamen özelleştirilebilir karmaşık sinir ağı mimarileri kurma esnekliği sağlar.
Bizim durumda; birden çok evrimsel katman, ardından maksimum havuzlama katmanı, dropout katmanı, yoğun katman ve çıktı katmanı oluşturacağız.
Çıktı katmanı hariç tüm katmanlar için aktivasyon fonksiyonu olarak ‘Leaky ReLU’ kullanıyoruz. Çıktı katmanında ise ‘softmax’ kullanıyoruz.
İlk 2B evrimsel katmanın girdi şeklini, eğitim veri setindeki görüntünün (32,32,3) biçimine ayarlamamız gerekir.
model <- keras_model_sequential()%>%
# Start with a hidden 2D convolutional layer
layer_conv_2d(
filter = 16, kernel_size = c(3,3), padding = "same",
input_shape = c(32, 32, 3), activation = 'leaky_relu'
) %>%
# 2nd hidden layer
layer_conv_2d(filter = 32, kernel_size = c(3,3), activation = 'leaky_relu') %>%
# Use max pooling
layer_max_pooling_2d(pool_size = c(2,2)) %>%
layer_dropout(0.25) %>%
# 3rd and 4th hidden 2D convolutional layers
layer_conv_2d(filter = 32, kernel_size = c(3,3), padding = "same", activation = 'leaky_relu') %>%
layer_conv_2d(filter = 64, kernel_size = c(3,3), activation = 'leaky_relu') %>%
# Use max pooling
layer_max_pooling_2d(pool_size = c(2,2)) %>%
layer_dropout(0.25) %>%
# Flatten max filtered output into feature vector
# and feed into dense layer
layer_flatten() %>%
layer_dense(256, activation = 'leaky_relu') %>%
layer_dropout(0.5) %>%
# Outputs from dense layer
layer_dense(10, activation = 'softmax')
Model mimarisini görmek için `summary` fonksiyonunu kullanacağız.
summary(model)
İki evrimsel katman ve bunları izleyen bir maksimum havuzlama katmanı, ardından iki evrimsel katman daha, bir maksimum havuzlama katmanı, çıktıların vektöre dönüştürülmesi için bir düzleştirme katmanı ve sonrasında iki yoğun katmanımız var.
Model: "sequential"
________________________________________________________________________________
Layer (type) Output Shape Param #
================================================================================
conv2d_3 (Conv2D) (None, 32, 32, 16) 448
________________________________________________________________________________
conv2d_2 (Conv2D) (None, 30, 30, 32) 4640
________________________________________________________________________________
max_pooling2d_1 (MaxPooling2D) (None, 15, 15, 32) 0
________________________________________________________________________________
dropout_2 (Dropout) (None, 15, 15, 32) 0
________________________________________________________________________________
conv2d_1 (Conv2D) (None, 15, 15, 32) 9248
________________________________________________________________________________
conv2d (Conv2D) (None, 13, 13, 64) 18496
________________________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 6, 6, 64) 0
________________________________________________________________________________
dropout_1 (Dropout) (None, 6, 6, 64) 0
________________________________________________________________________________
flatten (Flatten) (None, 2304) 0
________________________________________________________________________________
dense_1 (Dense) (None, 256) 590080
________________________________________________________________________________
dropout (Dropout) (None, 256) 0
________________________________________________________________________________
dense (Dense) (None, 10) 2570
================================================================================
Total params: 625,482
Trainable params: 625,482
Non-trainable params: 0
________________________________________________________________________________
Modelin derlenmesi
- Öğrenme oranını üstel azalma zamanlayıcısı ile ayarlayacağız. 1500 adımda öğrenme oranını 0,98’e düşürür.
- Öğrenme oranı nesnesini Adamax optimize edicisine verin.
- Kayıp fonksiyonumuz seyrek kategorik çapraz entropi olacaktır.
- Modeli kayıp ve optimize edici fonksiyon ile performans metriğini kullanarak derleyin.
learning_rate <- learning_rate_schedule_exponential_decay(
initial_learning_rate = 5e-3,
decay_rate = 0.96,
decay_steps = 1500,
staircase = TRUE
)
opt <- optimizer_adamax(learning_rate = learning_rate)
loss <- loss_sparse_categorical_crossentropy(from_logits = TRUE)
model %>% compile(
loss = loss,
optimizer = opt,
metrics = "accuracy"
)
Modelin eğitilmesi
Modelimizi eğitecek ve değerlendirme metriğini `history` içinde saklayacağız.
- Modeli 10 epoch boyunca eğitecek ve yığın boyutunu 32 olarak ayarlayacağız.
- Doğrulama için test veri kümesini ekliyoruz.
- `shuffle` argümanı, her epoch başında eğitim verisini karıştıracaktır.
history <- model %>% fit(
x_train, y_train,
batch_size = 32,
epochs = 10,
validation_data = list(x_test, y_test),
shuffle = TRUE
)
Modelin değerlendirilmesi
`evaluate` fonksiyonunu kullanarak modeli test veri kümesi üzerinde değerlendirebilir ve nihai kayıp ile doğruluğu elde edebilirsiniz.
model %>% evaluate(x_test, y_test)
Modeli 50 epoch boyunca yeniden eğitmek, doğruluğu artıracaktır.
Loss 0.648191571235657 Accuracy 0.776799976825714
Her epoch için kayıp ve doğruluk çizgi grafiklerini çizmek üzere `plot` fonksiyonunu kullanacağız.
plot(history)
Grafiğe baktığımızda, çizginin henüz yataylaşmadığını görebiliriz. Bu, epoch sayısını artırarak model metriklerini iyileştirebileceğimiz anlamına gelir.

Keras API hakkında daha fazla bilgi edinmek ve onu derin sinir ağları kurmak için nasıl kullanabileceğinizi öğrenmek isterseniz, keras: R'de Derin Öğrenme eğitimine göz atın.
Sinir Ağlarının Uygulamaları
Gerçek hayatta sinir ağı örneklerini, mobil uygulamalardan mühendisliğe kadar her yerde bulabiliriz. Dil ve büyük görsel modellerdeki son patlama sayesinde, daha fazla şirket kârı ve müşteri memnuniyetini artırmak için derin sinir ağlarını uygulamaya ilgi duyuyor.
Bu bölümde, modern dünyayı şekillendiren sinir ağlarının en iyi 10 uygulamasını öğreneceğiz.
1. Tablo Verisi Tahmini
Basit sinir ağları, büyük tablo verilerinde oldukça etkilidir. Sınıflandırma, kümeleme ve regresyon problemleri için kullanılabilirler.
2. Hisse Senedi Fiyat Tahmini
Birçok şirket finansal tahmin için LSTM, GRU ve RNN kullanıyor. Bu, daha iyi kararlar almalarını sağlar.
3. Tıbbi Görüntüleme
Meme kanseri tespiti, anomali tespiti ve görüntü bölütleme, Evrimsel sinir ağlarının bazı uygulamalarıdır. Önceden eğitilmiş dönüştürücüler sayesinde, hastalıkların önlenmesi ve ölümcül hastalıkların erken tespitinde ileri araştırmalar gördük.
4. E-ticaret
Ürün önerileri, kişiselleştirilmiş deneyimler ve sohbet botları, E-ticarette kullanılan sinir ağı uygulamalarından bazılarıdır. Bu modeller, platformda müşteri deneyimini iyileştirmek için ağırlıkla kümeleme, doğal dil işleme ve bilgisayarlı görüde kullanılır.
5. Üretken Görüntü
DALL·E 2 ve stable diffusion’ın popülerliği sayesinde bu alan ana akıma taşındı. Canva ve Adobe gibi şirketler, kullanıcı sayısını artırmak için üretken görüntü yeteneklerini çoktan uygulamaya koydu. Ana akım ilgisinin ötesinde, üretken görüntüler; modelin performansını, kararlılığını ve önyargılarını iyileştirmek üzere sentetik veri üretmek için her sektörde kullanılıyor.
6. Üretken Metin
ChatGPT, GPT-3 ve GPT-NEO alana hakim olan derin sinir ağı modelleridir. Bu modeller programlama yardımı, sohbet botları, çeviri, soru/cevap ve daha fazlası için kullanılır. Her yerde karşımıza çıkıyor ve şirketler mevcut sistemlerine entegre etmeyi kolay buluyor.
7. Müşteri Hizmetleri Sohbet Botu
DailoGPT ve Blenderbot, sohbet botu deneyiminizi geliştiren popüler konuşma modelleridir. Uyarlanabilirdirler ve belirli bir amaç için ince ayar yapılabilirler. Gelecekte uzun bekleme süreleri görmeyeceğiz; bu sohbet botları sorunlarınızı anlayıp gerçek zamanlı çözümler sunabilecek.
8. Robotik
Pekiştirmeli öğrenme ve bilgisayarlı görü sinir ağı modelleri, sektörlerin dönüşümünde büyük rol oynuyor. Örneğin, tamamen otomatik depo yönetimi, fabrikalar ve alışveriş deneyimi.
9. Konuşma Tanıma
Konuşma tanıma, metinden konuşmaya ve ses etkinliği tespiti sinir ağı modelleri; sesli asistanlar, otomatik deşifre ve gelişmiş iletişim uygulamalarında kullanılır.
10. Çok Modlu
Metinden Görüntüye (DALLE-2), Görüntü Metin, Görsel Soru Cevaplama ve özellik çıkarımı; çok modlu sinir ağlarında kullanılan uygulamalardan bazılarıdır. Gelecekte sesli metinden videoya görürsünüz. Sadece senaryoyu vererek tam bir film oluşturabileceksiniz.
Sonuç
Keras ve TensorFlow R paketleri, belirli görevler için karmaşık model mimarileri oluşturmak üzere tam bir araç yelpazesi sunar. Veri setini yükleyebilir, ön işleme yapabilir, modeli kurup optimize edebilir ve birkaç satır kodla modeli değerlendirebilirsiniz. Ayrıca TensorFlow ile deneylerinizi izleyebilir, GPU’ları yapılandırabilir ve modeli üretime alabilirsiniz.
Bu eğitimde sinir ağlarının temellerini, model mimarisi türlerini ve uygulamalarını öğrendik. Ayrıca `neuralnet` kullanarak basit bir sinir ağını ve `keras` kullanarak bir evrimsel sinir ağını nasıl eğiteceğimizi gördük. Eğitim; modelin oluşturulması, derlenmesi, eğitilmesi ve değerlendirilmesini kapsamaktadır.
TensorFlow ve Keras API hakkında daha fazla bilgi edinmek için R'de TensorFlow’a Giriş kursunu alın. TensorBoard ve diğer TensorFlow API’lerini, derin sinir ağları kurmayı ve düzenlileştirme, dropout ve hiperparametre optimizasyonu kullanarak model performansını artırmayı öğreneceksiniz.
