PyTorch ile Autoencoder Kullanarak Anomali Tespiti: Derin Öğrenme ile Normalin Dışındakini Yakalamak
Blog'a Dön

PyTorch ile Autoencoder Kullanarak Anomali Tespiti: Derin Öğrenme ile Normalin Dışındakini Yakalamak

Buğra Şıkel

PyTorch ile Autoencoder Kullanarak Anomali Tespiti: Derin Öğrenme ile Normalin Dışındakini Yakalamak

Bilgisayarlı görü ve makine öğrenmesi alanında bir yapay zeka mühendisi olarak, veri setlerindeki olağandışı durumları, yani anomalileri tespit etmek günümüzün en kritik problemlerinden biridir. Finanstan siber güvenliğe, üretim hatlarından tıbbi teşhislere kadar pek çok alanda anomali tespiti, riskleri azaltmak, hataları önlemek ve verimliliği artırmak için hayati öneme sahiptir. Bu makalede, PyTorch kullanarak autoencoder ile anomali tespiti konusunu derinlemesine inceleyeceğiz. Özellikle, bu tekniklerin nasıl çalıştığını, neden güçlü olduklarını ve gerçek dünya senaryolarında nasıl uygulandıklarını teknik detaylarıyla ele alacağız.

İçindekiler

  • Anomali Tespiti Nedir ve Neden Zorludur?
  • Gözetimli (Supervised) ve Gözetimsiz (Unsupervised) Anomali Tespiti
  • Autoencoder Mimarisi: Kodlayıcı ve Kod Çözücü Mantığı
  • Neden Sadece Normal Verilerle Eğitim Yapılır?
  • Yeniden Yapılandırma Kaybı (Reconstruction Loss) ile Anomali Tespiti
  • PyTorch ile Basit Autoencoder Mimarisi
  • Eşik (Threshold) Belirleme Stratejileri
  • Görüntü Tabanlı ve Endüstriyel Kullanım Senaryoları
  • Avantajlar, Sınırlamalar ve Pratik İpuçları

Anomali Tespiti Nedir ve Neden Zorludur?

Anomali tespiti, veri setindeki tipik veya beklenen kalıplardan önemli ölçüde sapan veri noktalarını, olayları veya gözlemleri belirleme sürecidir. Bu olağandışı unsurlara aykırı değerler, sıra dışı olaylar veya sapmalar da denilebilir.

Anomali tespiti çeşitli nedenlerle zorludur:

  • Veri Dengesizliği: Anomaliler genellikle veri setinin çok küçük bir kısmını oluşturur. Bu, modellerin normal kalıpları öğrenmesini kolaylaştırırken, nadir görülen anomalileri tespit etmesini zorlaştırır.
  • Tanımlama Zorluğu: Anomalilerin ne olacağını önceden tanımlamak çoğu zaman imkansızdır. Yeni ve beklenmedik türde anomaliler ortaya çıkabilir.
  • Gürültü ve Varyans: Gerçek dünya verileri gürültü ve doğal varyans içerir. Bu, gerçek anomalileri gürültüden ayırt etmeyi güçleştirir.
  • Dinamik Ortamlar: Veri dağılımı zamanla değişebilir, bu da statik modellerin etkinliğini azaltır.

Gözetimli (Supervised) ve Gözetimsiz (Unsupervised) Anomali Tespiti

Anomali tespiti için kullanılan iki ana yaklaşım vardır:

Gözetimli Anomali Tespiti

Bu yaklaşımda, hem normal hem de anormal veri örnekleri etiketlenmiş olarak bulunur. Model, bu etiketli verileri kullanarak normal ve anormal sınıflar arasındaki ayrımı öğrenir. Ancak, gerçek dünya senaryolarında genellikle yeterli sayıda etiketlenmiş anomali örneği bulunmaz, bu da bu yöntemi sınırlayıcı kılar.

Gözetimsiz Anomali Tespiti (Unsupervised Anomaly Detection)

En yaygın kullanılan ve pratik olan yöntemdir. Bu yaklaşımda, model yalnızca normal olarak kabul edilen verilerle eğitilir. Model, normal verinin temel yapısını ve özelliklerini öğrenir. Eğitimden sonra, veri noktaları modele sunulduğunda, modelin bu noktaları ne kadar iyi yeniden yapılandırabildiğine bakılır. Normal noktalara yakın olanlar iyi yeniden yapılandırılırken, anormal noktalarda yüksek bir yeniden yapılandırma hatası (reconstruction error) gözlemlenir. Bu durum, modelin normal veri setinin dışında kalan bu noktalara aşina olmadığını gösterir.

Autoencoder Mimarisi: Kodlayıcı ve Kod Çözücü Mantığı

Autoencoder, derin öğrenme alanında boyut indirgeme, veri sıkıştırma ve üretken modelleme gibi görevlerde kullanılan bir tür yapay sinir ağıdır. Temel olarak, girdiyi olabildiğince sadık bir şekilde yeniden oluşturmayı öğrenen gözetimsiz bir öğrenme modelidir.

Bir autoencoder iki ana bölümden oluşur:

  • Kodlayıcı (Encoder): Bu bölüm, girdiyi alıp daha düşük boyutlu, sıkıştırılmış bir gösterime (latent representation veya code) dönüştürür. Bu sıkıştırma işlemi, girdinin en önemli özelliklerini yakalamayı amaçlar.
  • Kod Çözücü (Decoder): Bu bölüm ise kodlayıcının ürettiği düşük boyutlu gösterimi alır ve orijinal girdiyi olabildiğince yakın bir şekilde yeniden oluşturmaya çalışır.

Yani, autoencoder’ın amacı girdi $X$ ise, $X’$ çıktısını elde etmektir, öyle ki $X \approx X’$. Bu yeniden yapılandırma işlemini başarmak için model, girdideki temel desenleri ve bilgileri öğrenmek zorunda kalır.

Neden Sadece Normal Verilerle Eğitim Yapılır?

Unsupervised anomaly detection stratejisinde, autoencoder’ın yalnızca normal verilerle eğitilmesinin temel nedeni, modelin “normal”in ne olduğunu öğrenmesini sağlamaktır. Eğer model hem normal hem de anormal verilerle eğitilirse, anormal örnekleri de öğrenir ve bunları da normal gibi yeniden yapılandırmayı deneyebilir. Bu durum, anomali tespitinin amacını boşa çıkarır.

Sadece normal verilerle eğitilen bir autoencoder, normal verinin özelliklerini, dağılımını ve yapısını derinlemesine öğrenir. Bu öğrenme süreci sonunda, model normal verilere aşina hale gelir. Eğitilmeyen normal veriler sunulduğunda, model bunları başarılı bir şekilde yeniden yapılandırır (düşük yeniden yapılandırma hatası). Ancak, daha önce hiç görmediği ve normal dağılımdan sapan bir anomali sunulduğunda, model bu veriyi etkili bir şekilde temsil edemez ve yeniden yapılandırma hatası yüksek olur.

Yeniden Yapılandırma Kaybı (Reconstruction Loss) ile Anomali Tespiti

Anomali tespiti için autoencoder’ın temel çalışma prensibi, reconstruction loss üzerine kuruludur. Bu kayıp fonksiyonu, orijinal girdi ile modelin yeniden yapılandırdığı çıktı arasındaki farkı ölçer.

Kullanılan yaygın kayıp fonksiyonlarından bazıları şunlardır:

  • Ortalama Kare Hata (Mean Squared Error – MSE): $MSE = \frac{1}{N} \sum_{i=1}^{N} (x_i – x’_i)^2$
  • Ortalama Mutlak Hata (Mean Absolute Error – MAE): $MAE = \frac{1}{N} \sum_{i=1}^{N} |x_i – x’_i|$

Eğitim sırasında model, bu kayıp fonksiyonunu minimize etmeye çalışarak girdiyi en iyi şekilde yeniden yapılandırmayı öğrenir. Test aşamasında, modele bir veri noktası sunulduğunda, bu kayıp hesaplanır. Yüksek bir kayıp değeri, o veri noktasının normal kalıplardan saptığını ve dolayısıyla bir anomali olabileceğini gösterir.

PyTorch ile Basit Autoencoder Mimarisi

Şimdi, PyTorch kullanarak basit bir autoencoder mimarisini nasıl oluşturabileceğimize dair kod örneklerini inceleyelim. Bu örnek, görüntü verileri (örneğin MNIST) üzerinde çalışacak şekilde tasarlanmıştır.

Öncelikle gerekli kütüphaneleri import edelim:


import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
  

Ardından, autoencoder modelini tanımlayalım:


class Autoencoder(nn.Module):
    def __init__(self):
        super(Autoencoder, self).__init__()
        # Encoder
        self.encoder = nn.Sequential(
            nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1), # Girdi: (N, 1, 28, 28) -> (N, 16, 14, 14)
            nn.ReLU(True),
            nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1), # (N, 16, 14, 14) -> (N, 32, 7, 7)
            nn.ReLU(True),
            nn.Conv2d(32, 64, kernel_size=7, stride=1, padding=0) # (N, 32, 7, 7) -> (N, 64, 1, 1)
        )
        # Decoder
        self.decoder = nn.Sequential(
            nn.ConvTranspose2d(64, 32, kernel_size=7, stride=1, padding=0), # (N, 64, 1, 1) -> (N, 32, 7, 7)
            nn.ReLU(True),
            nn.ConvTranspose2d(32, 16, kernel_size=3, stride=2, padding=1, output_padding=1), # (N, 32, 7, 7) -> (N, 16, 14, 14)
            nn.ReLU(True),
            nn.ConvTranspose2d(16, 1, kernel_size=3, stride=2, padding=1, output_padding=1) # (N, 16, 14, 14) -> (N, 1, 28, 28)
        )

    def forward(self, x):
        x = self.encoder(x)
        x = self.decoder(x)
        return x
  

Yukarıdaki kodda:

  • Encoder, art arda iki evrişimli katman (Conv2d) ile girdiyi sıkıştırır. Stride ve padding parametreleri, katmanlar arasında görüntü boyutunu azaltmaya yardımcı olur. Son katman, veriyi daha kompakt bir temsil olan latent uzaya sıkıştırır.
  • Decoder ise evrişimli transpoz (ConvTranspose2d) katmanları kullanarak bu sıkıştırılmış temsili orijinal görüntü boyutuna geri genişletir.
  • nn.ReLU(True) aktivasyon fonksiyonu, doğrusal olmayanlık katarak modelin daha karmaşık desenleri öğrenmesini sağlar.

Modeli eğitelim:


# Veri yükleyicileri ve normalizasyon
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,)) # MNIST için tek kanal
])

# MNIST veri seti sadece normal veriler olarak kabul edilebilir
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True)

# Model, kayıp fonksiyonu ve optimizasyon
model = Autoencoder()
criterion = nn.MSELoss() # Yeniden yapılandırma hatası için MSE
optimizer = optim.Adam(model.parameters(), lr=0.001)

# Eğitim döngüsü
num_epochs = 10
for epoch in range(num_epochs):
    for data in train_loader:
        img, _ = data
        img = img # .to(device) eğer GPU kullanılıyorsa
        
        # Forward pass
        outputs = model(img)
        loss = criterion(outputs, img)
        
        # Backward and optimize
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
  

Bu eğitim döngüsünde, her bir epoch’ta veri seti üzerinde ilerlenir, girdiler modelden geçirilir, yeniden yapılandırma hatası hesaplanır ve modelin parametreleri bu hatayı minimize edecek şekilde güncellenir.

Eşik (Threshold) Belirleme Stratejileri

Model eğitildikten sonra, yeni veri noktalarının anomali olup olmadığını belirlemek için bir eşik (threshold) belirlememiz gerekir. Bu eşik, yeniden yapılandırma hatası için bir sınır görevi görür. Eğer bir veri noktasının yeniden yapılandırma hatası bu eşikten yüksekse, o veri noktası anomali olarak sınıflandırılır.

Eşik belirleme için bazı stratejiler:

  • Eğitim Verisi Üzerinde Kayıp Dağılımı: Modelin eğitildiği normal veri setinden bir miktar örnek alınıp, bu örnekler için yeniden yapılandırma hataları hesaplanır. Bu hataların dağılımı incelenerek, belirli bir istatistiksel limite (örneğin, ortalama + 3 standart sapma veya belirli bir persentil) eşik değeri atanabilir.
  • Doğrulama Seti (Validation Set) Kullanımı: Eğer belirli sayıda etiketlenmiş anomali örneğine sahip bir doğrulama setiniz varsa, farklı eşik değerleri denenerek en iyi performansı (örneğin en yüksek F1 skorunu) veren eşik seçilebilir. Ancak bu durum, aslında tam gözetimsiz bir yaklaşım olmaktan çıkarır.
  • İstatistiksel Yöntemler: Box plot, quantiles gibi istatistiksel yöntemler kullanılarak uygun bir eşik değeri belirlenebilir.

Genel olarak, eşiğin belirlenmesi, yanlış pozitif (normalin anomali olarak işaretlenmesi) ve yanlış negatif (anomalinin gözden kaçırılması) arasındaki dengeyi kurmayı gerektirir.

Görüntü Tabanlı ve Endüstriyel Kullanım Senaryoları

Autoencoder ile anomali tespiti, özellikle görüntü verileri için çok yönlüdür:

Görüntü Tabanlı Senaryolar

  • Kalite Kontrol: Üretim hatlarındaki ürünlerin görsellerinde kusurları (çatlaklar, lekeler, şekil bozuklukları) tespit etmek.
  • Tıbbi Görüntüleme: X-ışınları, MRG veya CT taramalarında tümörler, lezyonlar veya diğer patolojiler gibi normalden sapan bölgeleri belirlemek.
  • Siber Güvenlik (Görsel): Güvenlik kameralarından gelen videolarda olağandışı hareketleri veya nesneleri tespit etmek.
  • Uydu Görüntü Analizi: Çevresel değişiklikleri veya yasa dışı faaliyetleri gösteren olağandışı desenleri belirlemek.

Endüstriyel Kullanım Senaryoları

  • Sistem İzleme: Sunucu logları, ağ trafiği veya endüstriyel sensör verilerindeki anormal davranışları tespit ederek potansiyel arızaları veya siber saldırıları önceden bildirmek.
  • Sahtecilik Tespiti: Finansal işlemlerde veya sigorta taleplerinde olağandışı ve şüpheli paternleri belirlemek.
  • Makine Arıza Tahmini: Endüstriyel makinelerden gelen titreşim, sıcaklık veya ses verilerindeki anormal paternleri izleyerek arızaları önceden tahmin etmek.

Avantajlar, Sınırlamalar ve Pratik İpuçları

Avantajlar

  • Etkili Gözetimsiz Öğrenme: Yeterli etiketlenmiş anomali verisi olmadığında bile etkili bir şekilde çalışır.
  • Esneklik: Farklı veri tiplerine (görüntü, zaman serisi, yapısal veriler) uyarlanabilir.
  • Boyut İndirgeme: Verinin en önemli özelliklerini yakalayarak daha kompakt temsiller oluşturabilir.
  • Derin Öğrenmenin Gücü: Karmaşık ve doğrusal olmayan ilişkileri öğrenebilir.

Sınırlamalar

  • Yüksek Hesaplama Maliyeti: Derin öğrenme modelleri, özellikle büyük veri setlerinde ve karmaşık mimarilerde yüksek hesaplama gücü gerektirebilir.
  • Eşik Belirleme Zorluğu: Optimal eşiği belirlemek, çoğu zaman deneme yanılma ve domain bilgisi gerektirir.
  • “Normalin” Tanımı: Veri setindeki “normal” tanımı net değilse veya zamanla değişiyorsa, modelin performansı düşebilir.
  • Öğrenme Kapasitesi: Çok karmaşık ve çeşitlilik gösteren anomaliler, eğer normal verilere yeterince benzemiyorsa, model tarafından öğrenilemeyebilir.

Pratik İpuçları

  • Veri Ön İşleme: Veri normalleştirme ve standartlaştırma işlemleri modelin performansını önemli ölçüde artırabilir.
  • Mimari Seçimi: Kullanacağınız verinin türüne ve karmaşıklığına göre uygun bir autoencoder mimarisi (örneğin, daha fazla katman, farklı evrişim türleri) seçin.
  • Düzenlileştirme (Regularization): Overfitting’i önlemek ve modelin genelleme yeteneğini artırmak için dropout, L1/L2 düzenlileştirmesi gibi teknikleri kullanın.
  • Anomali Tespiti Odaklı Kayıplar: Autoencoder’ın kayıp fonksiyonunu anomali tespitini daha iyi teşvik edecek şekilde tasarlamak (örneğin, anomali bölgelere daha fazla ceza veren özel kayıp fonksiyonları) faydalı olabilir.
  • Iteratif İyileştirme: Eşik değerini belirlerken ve modeli değerlendirirken elde ettiğiniz sonuçları kullanarak modeli ve eşik belirleme yöntemini sürekli olarak iyileştirin.

Sıkça Sorulan Sorular (SSS)

PyTorch ile anomali tespiti için en iyi autoencoder mimarisi hangisidir?

Bu, veri setinizin özelliklerine ve anomali türlerine bağlıdır. Genellikle Convolutional Autoencoder’lar (CNN tabanlı) görüntü verileri için, Recurrent Neural Network (RNN) tabanlı modeller ise zaman serisi verileri için iyi sonuçlar verir. Daha karmaşık veriler için Transformer tabanlı modeller de kullanılabilir.

Unsupervised anomaly detection’da neden her zaman tek bir eşik kullanılır?

Çoğu durumda, tek bir eşik pratiklik ve basitlik sağlar. Ancak, duruma göre farklı risk toleransları için birden fazla eşik belirlenebilir veya eşik değerinin dinamik olarak ayarlanması da mümkündür.

Autoencoder ile anomali tespiti ne kadar doğrudur?

Doğruluk, veri setinin kalitesine, anomalinin doğasına, seçilen mimariye ve eşik belirleme yöntemine bağlıdır. Yüksek kaliteli ve iyi tanımlanmış normal verilere sahip senaryolarda yüksek doğruluk oranları elde edilebilir.

Sonuç

Autoencoder ile anomali tespiti, özellikle PyTorch gibi güçlü derin öğrenme kütüphaneleriyle birleştiğinde, normalin dışındaki durumları tespit etmek için son derece etkili bir unsupervised anomaly detection yöntemidir. Bu teknik, az etiketlenmiş anomali verisi olduğu durumlarda bile büyük bir avantaj sunar. Encoder-decoder mimarisinin normal veri yapısını öğrenmesi ve bu bilgiyi yeniden yapılandırma hatası yoluyla anomalileri belirlemek için kullanması, onu çeşitli endüstriyel ve görüntü tabanlı uygulamalar için güçlü bir araç haline getirir.

Bu makalede ele aldığımız teknik detaylar ve pratik ipuçları, PyTorch kullanarak kendi anomali tespiti projelerinizi başarıyla hayata geçirmenize yardımcı olacaktır. Unutmayın ki, makine öğrenmesi yolculuğunda sürekli öğrenme ve deneme yanılma, en iyi sonuçlara ulaşmanın anahtarıdır.

Bunları da beğenebilirsiniz

REACT useState() Kullanımı
23 Ekim 2022

REACT useState() Kullanımı

Merhabalar, bu yazımızda React useState() hook’u inceleyeceğiz, ne olduğuna ve kullanımına bakacağız. React useState() Hook, bir fonksiyon bileşenindeki durumu izlememizi sağlar. Durum genellikle bir uygulamada…

Devamını Oku
Konsol Portfolyo Tasarımım Yayında
24 Ekim 2022

Konsol Portfolyo Tasarımım Yayında

Merhabalar, bu yazımda sizlere mevcut olarak kullandığım portfolyo tasarımımın alternatifi olarak bir de konsol tasarımını tamamladığımı duyurmak istiyorum. Yeni tasarlamış olduğum bu konsol portfolyoda belirli…

Devamını Oku
PHP ile QR Kod Oluşturucu Fonksiyonu
15 Ekim 2022

PHP ile QR Kod Oluşturucu Fonksiyonu

Merhabalar, bu içeriğimizde PHP ile QR Kod oluşturacak bir fonksiyon yazacağız. Bu fonksiyon ile istediğimiz verileri QR koda dönüştürebilir ve bu verinin çıktısını alabiliriz. Bu…

Devamını Oku
AI Asistan