Sinir Ağı Nasıl Yapılır: Mimari, Parametreler ve Kod

Yayınlanan: 2021-02-12

Sinir Ağları adından da anlaşılacağı gibi Nöronların devreleridir. Sinir Ağlarının farklı türleri vardır. Biyolojik Sinir Ağları, gerçek biyolojik Nöronlardan yapılmıştır. Oysa Yapay Sinir Ağları (YSA), beyinde olduğu gibi biyolojik Sinir Ağı üzerine kurulu bir sistemdir. Beyindeki tahmini Nöron sayısı, elektrokimyasal sinyaller aracılığıyla iletişim kuran 100 Milyar civarındadır.

YSA, biyolojik Nöronlarda bulunan hesaplama karmaşıklığını yeniden yaratmaya çalışır, ancak bununla karşılaştırılamaz ve biyolojik sinir ağlarının çok daha basit ve karmaşık olmayan versiyonlarıdır. Bu yazıda, bir YSA'nın yapısını anlayacağız ve Python kullanarak bir Sinir Ağının nasıl oluşturulacağını öğreneceğiz.

İçindekiler

Sinir Ağı Mimarisi

Yapay sinir ağı, “Düğümler” olarak da adlandırılan yapay nöronlardan oluşur. Bu düğümler, bir ağ veya ağ oluşturulacak şekilde birbirine bağlanır. Bu bağlantıların birbirine gücü bir değer atanır. Bu değer -1 ile 1 arasındadır.

Bağlantının değeri yüksekse, bu düğümler arasında güçlü bir bağlantı olduğunu gösterir. Her düğümün kendine özgü bir işlevi vardır. Bu işlevi değiştirmek, sinir ağının davranışını ve karmaşıklığını değiştirecektir. Bir ANN'de, aşağıda gösterildiği gibi giriş düğümleri, gizli düğümler ve çıkış düğümleri olmak üzere üç tür nöron vardır:

Kaynak

Giriş düğümü, genellikle sayısal değerler veya ifadeler biçimindeki bilgileri almaktan sorumludur. Bilgiler, her düğüme bir sayı verildiğinde, etkinleştirme değerleri olarak sunulur, sayı ne kadar yüksekse, etkinleştirme de o kadar büyük olur.
Bilgiler ağda daha fazla iletilir. Düğüm bağlantı ağırlıklarına ve belirli katmanların belirli nöronlarına ait aktivasyon fonksiyonuna bağlı olarak bilgi, nörondan nörona aktarılır. Düğümlerin her biri, alım üzerine aktivasyon değerlerini ekler, değerler transfer fonksiyonu temelinde değiştirilir.
Bilgi, çıkış düğümlerine ulaşana kadar ağ boyunca gizli katmanlar aracılığıyla akar. Çıktı düğümleri, girdiyi anlamlı bir şekilde dış dünyaya yansıttıkları için çok önemlidir. Burada, her katman ve düğüm için ağırlıkların ayarlanmasına yol açan sinir ağlarının şaşırtıcı bir yönü görülebilir.

Tahmin edilen değer ile gerçek değer (hata) arasındaki fark geriye doğru yayılır. Sinir Ağı bu nedenle yapılan hatalardan öğrenecek ve belirlenen öğrenme oranı yaklaşımı temelinde ağırlıkları ayarlamaya çalışacaktır.

Dolayısıyla, bir dizi gizli katman, katman başına bir dizi nöron, ağırlık yükseltme stratejisi ve aktivasyon fonksiyonu gibi parametreleri ayarlayarak bir Sinir Ağı oluşturabiliriz.

Parametreleri Tanımlayın

Aktivasyon Fonksiyonu

Eldeki probleme bağlı olarak Sinir Ağı'nda kullanılabilecek çeşitli aktivasyon fonksiyonları arasından seçim yapılabilir.

Aktivasyon fonksiyonları, her nöronun sahip olduğu matematiksel denklemlerdir. Bir Sinir Ağının çıktısını belirler.
Bu aktivasyon fonksiyonu, ağdaki her nörona bağlıdır ve o nöronun aktivasyonunun çıktı katmanında ilgili tahminlerin türetilmesine yardımcı olup olmadığına bağlı olarak, aktive edilip edilmeyeceğini belirler. Farklı katmanlar, kendisine bağlı farklı etkinleştirme işlevlerine sahip olabilir. Aktivasyon işlevleri ayrıca her nöronun çıktısını 1 ile 0 veya -1 ile 1 arasında bir aralığa normalleştirmeye yardımcı olur.

Modern sinir ağları, aktivasyon fonksiyonu ve türev fonksiyonu üzerinde artan bir hesaplama gerilimi yerleştiren ağırlıkları ayarlayarak modeli eğitmek için geri yayılım adı verilen önemli bir teknik kullanır.

Bir aktivasyon fonksiyonunun çalışması
Eksik bağlantı

3 tür Aktivasyon işlevi vardır:
İkili- x<0 y=0 , x>0 y=1
Doğrusal- x=y
Doğrusal Olmayan – Çeşitli tipler: Sigmoid, TanH, Lojistik, ReLU, Softmax vb.

Kaynak: Blog

Tür: ReLU
Eksik bağlantı

algoritma

Birçok sinir ağı türü vardır, ancak bunlar genellikle ileri beslemeli ve geri beslemeli (geri yayılım) ağlara ayrılır.

1) İleri besleme ağı, girdileri, çıktıları ve gizli katmanları içeren, tekrar etmeyen bir ağdır; çünkü sinyaller sadece bir yönde hareket edebilir. Girdi verileri, hesaplamaları gerçekleştirdiği işleme ekipmanı katmanına aktarılır. Her işleme faktörü, hesaplamasını girdinin ağırlığına göre yapar. Yeni değerler hesaplanır ve ardından yeni giriş değerleri bir sonraki katmanı besler.

Bu işlem tüm katmanlardan geçene kadar devam eder ve sonucu belirler. Çıkış katmanındaki nöron çıkışını ölçmek için bazen bir Limit transfer fonksiyonu kullanılır. İleri Besleme ağları, Perceptron (doğrudan ve dolaylı) ağları olarak bilinir ve bunları içerir. İleri beslemeli ağlar genellikle veri madenciliği için kullanılır.

2) Geri Besleme ağı (örneğin, tekrarlayan bir sinir ağı veya RNN) geriye dönük mekanizmalara sahiptir, bu da tuzaklar/döngüler kullanarak her iki yönde hareket eden sinyallere sahip olabilecekleri anlamına gelir. Nöronlar arasındaki tüm olası iletişime izin verilir.

Döngüler bu tür ağlarda mevcut olduğundan, bir kararlılık durumuna ulaşana kadar sürekli değişen doğrusal olmayan bir sistem haline gelir. Geri besleme ağları, ağ iyi bir bağlantılı nesneler kümesi ararken, performans sorunlarıyla ilişkili bellekler için sıklıkla kullanılır.

Eğitim

ileri beslemeli geçiş, bir girdinin verildiği anlamına gelir ve çıktının nasıl hesaplandığına ağırlık verir. Eğitim tamamlandıktan sonra, tahminleri oluşturmak için yalnızca ileri geçişi çalıştırırız.

Ancak öncelikle ağırlıkları gerçekten öğrenmek için modelimizi eğitmemiz gerekiyor ve bu nedenle eğitim prosedürü şu şekilde çalışıyor:

  1. Tüm düğümler için ağırlıkları rastgele seçin ve başlatın. TensorFlow ve Keras'ta (Python) yerleşik olarak bulunan akıllı başlatma yöntemleri vardır.
  2. Her eğitim örneği için, mevcut ağırlıkları kullanarak bir ileri geçiş gerçekleştirin ve soldan sağa giden her düğümün çıktısını hesaplayın. Nihai çıktı, son düğümün değeridir.
  3. Eğitim verileri içindeki gerçek hedef ile nihai çıktıyı karşılaştırın ve bir kayıp fonksiyonu kullanarak hatayı ölçün.
  4. Sağdan sola doğru bir geri geçiş gerçekleştirin ve son adımda hesaplanan hatayı geri yayılımı kullanarak her bir düğüme yayın.
  5. Her nöronun hataya ağırlık katkısını hesaplayın ve gradyan inişini kullanarak bağlantının ağırlıklarını buna göre ayarlayın. Son katmandan başlayarak hata gradyanlarını geriye doğru yayın.

Sinir Ağı için Python Kodu

Artık Yapay Sinir Ağı'nın teorik olarak nasıl yapıldığını anladığımıza göre, aynısını Python kullanarak uygulayalım.

Python'da Sinir Ağı
Sinir ağımızı oluşturmak için Keras API'sini Tensorflow veya Theano arka uçları ile kullanacağız.

Kitaplıkları yükleme
Theano
>>> pip kurulumu –upgrade –no-deps git+git://github.com/Theano/Theano.git

Tensorflow ve Keras
>>> pip3 tensorflow'u kurun
>>> pip kurulumu – Keras'ı yükseltin

Kitaplıkları içe aktar

ithalat keraları
keras.models'den sıralı içe aktar
keras.layers'dan Yoğun içe aktar

Yapay Sinir Ağının Başlatılması

model = Sıralı()

Girdi ve Gizli Katmanlar Oluşturur-

model.add(Dense(input_dim = 2, unit = 10, activation='relu', kernel_initializer='üniform'))

Bu kod, sıralı ağa giriş katmanı ve bir gizli katman ekler.
Yoğun(): yoğun bağlantılı bir sinir ağı oluşturmamıza izin verir
input_dim: giriş katmanındaki düğümlerin şekli veya sayısı
birimler: geçerli katmandaki nöronların veya düğümlerin sayısı (gizli katman)
aktivasyon: her bir düğüme uygulanan aktivasyon fonksiyonu.”relu”, Rektifiye Doğrusal Birim anlamına gelir.
kernel_initializer: katmanın ilk rastgele ağırlıkları

İkinci gizli katman
model.add(Yoğun(birimler = 20, activation='relu', kernel_initializer='üniform'))

Kod, 20 düğüm ve 'düzeltilmiş Doğrusal' aktivasyon fonksiyonu ile modele başka bir gizli katman oluşturur ve ekler. Probleme ve karmaşıklığa bağlı olarak benzer şekilde daha fazla katman eklenebilir.

Çıktı Katmanı
model.add(Yoğun(birimler = 1, activation='sigmoid', kernel_initializer='üniform'))

Sigmoid veya softmax ile tek bir çıktı katmanı, bir çıktı katmanı için yaygın olarak kullanılan etkinleştirme işlevleridir.

ANN derlemesi:
model.compile(optimizer='adam', kayıp='binary_crossentropy', metrics=['doğruluk'])

YSA, eğitilmeden önce bir optimize edici işlevi ve bir kayıp işlevi ile derlenir.

Optimize Edici: ağ için bir optimize edici işlevi, Çeşitli optimize edici türleri vardır ve adam çoğunlukla kullanılır.
Kayıp: Kayıpları ve hataları hesaplamak için kullanılır. Çeşitli türleri vardır ve seçim, ele alınan sorunun doğasına bağlıdır.
Metrikler: modelin performansını ölçmek için kullanılan metrik.

Modeli eğitim verileriyle uydurmak:
model.fit(X_train,Y_train,batch_size=64, çağ sayısı=30)

Bu kod modeli oluşturacak

Çözüm

Şimdi elimizdeki probleme göre değiştirilebilecek farklı parametreleri anladığımız için sıfırdan bir Yapay Sinir Ağı (Python üzerinde) oluşturabiliriz.

Derin öğrenme teknikleri , makine öğrenimi hakkında daha fazla bilgi edinmek istiyorsanız, IIIT-B & upGrad'ın çalışan profesyoneller için tasarlanmış ve 450+ saatlik zorlu eğitim, 30'dan fazla vaka çalışması ve Makine Öğrenimi ve Yapay Zeka alanında PG Diplomasına göz atın. atamalar, IIIT-B Mezun statüsü, 5+ pratik uygulamalı bitirme projesi ve en iyi firmalarla iş yardımı.

Dünyanın En İyi Üniversitelerinden ML Kursu öğrenin . Kariyerinizi hızlandırmak için Master, Executive PGP veya Advanced Certificate Programları kazanın.

Yapay Zeka Güdümlü Teknolojik Devrime Öncülük Edin

Makine Öğrenimi ve NLP'de İleri Düzey Sertifika Programına Başvurun