Bir Bakışta Yapay Nöronal Ağlar 2: Katmanlar ve Güç Ağları İleri

Nöronal ağlar, Yapay Zeka (AI) ve Genai'deki birçok uygulamanın motorudur. Bu makale dizisi bireysel unsurlar hakkında bir fikir sunar. İlk bölümde nöronların sunulmasından sonra, ikinci kısım ağ katmanlarına adanmıştır.

Dr. Michael Stal, 1991 yılından bu yana Siemens teknolojisi üzerinde çalışmaktadır. Yazılım mimarisi sorunları hakkında iş alanları önermektedir ve Siemens'in kıdemli yazılım mimarlarının mimari oluşumundan sorumludur.

Birkaç yapay nöron, herkesin seslerle aynı ifadeyi aldığı ve masraflarını paralel olarak yarattığı için gruplandırılırsa, bu koleksiyonu bir katman olarak tanımlarız. Tek bir katmanda, her nöron kendi ağırlık vektörünü ve önyargı sonunu gelen sinyale dönüştürür, ancak tüm nöronlar aynı girişi paylaşır. Seviyeleri bir sırayla düzenleyerek, basit sayısal sesleri herhangi bir zengin temsile dönüştürebilen bir ağ oluştururuz.

Matematiksel olarak koymak için: ℓ-1 katmanının aktivasyonlarını aℓ-1 sütunundan vektöründen ve ℓ katmanının ağırlıklarını bir Wℓ matrisi ile belirlersek, hatları tek tek nöronların ağırlık vektörleri olan, daha sonra-İtalya öncesi taşıyıcı zℓ katman ℓ 'da ürün vektör ürününden tabidir:

Zℓ = wℓ · aℓ – 1 + bℓ

Yani katman için bozulma taşıyıcı ℓ. Dolayısıyla, seviyenin sürümünü elde etmek için doğrusal olmayan bir aktivasyon işlevselliği σ uyguluyoruz:

Aℓ = σ (Zℓ)

Bir giriş yığınını beslersek, her girişi bir X matrisinin bir sütun olarak (veya hatta, hatta) istifleyin ve vektör işlemlerini yığın üzerinde matris çarpımları ile değiştirin ve bu da yüksek derecede verimli bir vektör hesaplamasına yol açın.

Kodda, Pytorch kolayca sınıflandırılabilir ve bağlantılarını ifade edebilir. Entegre sınıf torch.nn.Linear Kapsül hem ağırlık matrisi hem de polarizasyon taşıyıcısı ve bunları otomatik farklılaşma için hesaplamaların sayımı ile bağlar. Aşağıda, gizli seviyeye sahip küçük bir besleme ağının minimum örneğini bulacaksınız. Her satır ayrıntılı olarak açıklanır.


import torch
import torch.nn as nn

class SimpleMLP(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(SimpleMLP, self).__init__()
        # Definieren Sie eine vollständig verbundene Schicht, die input_dim auf hidden_dim abbildet
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        
        # Wählen Sie eine nichtlineare Aktivierungsfunktion für die versteckte Schicht
        self.relu = nn.ReLU()
        # Definieren Sie eine zweite vollständig verbundene Schicht, die hidden_dim auf output_dim abbildet
        self.fc2 = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        # Wende die erste lineare Transformation an
        x = self.fc1(x)
        # Wende die nichtlineare Aktivierungsfunktion elementweise an
        x = self.relu(x)
        # Wende die zweite lineare Transformation an, um die Ausgabe zu erzeugen
        x = self.fc2(x)
        return x

İçe Aktarma Talimatlarını Yükle torch Tensör işlemleri için e torch.nn Sinir ağlarının kurucu unsurları için adlandırılan bir ritim olarak. Sınıf SimpleMLP miras almak nn.ModulePytorch'un nöronal ağların tüm bileşenleri için temel sınıfı. Çağrı super(SimpleMLP,, self).init()İç makinelerin Module Doğru başlatılır.

Üreticinin içinde self.fc1 VE self.fc2 Örnekleri nn.Linear. Her doğrusal tabaka, formun formunun bir işaretçisine sahiptir. (output_features, input_features) ve uzunluk bozulma vektörü output_features A. Bu seviyeleri modül öznitelikleri olarak kaydetme, Pytorch parametrelerinizi otomatik olarak kaydeder, böylece hatırladığımızda model.parameters() Tüm ağırlıklandırma ve bozulma sensörlerini tek bir yineleme nesnesinde döndürebilir.

Seçim ReLU İçin self.relu Yaygın kullanımını yansıtır: düzeltilmiş doğrusal ünite, her negatif giriş ve her bir negatif olmayan giriş için sıfır döndürür. Bu basit doğrusal olmayan işlem, ağın karmaşık işlevlere yaklaşması gereken doğrusal olmayanlığı tanıtmaktadır.

İleri yöntem, girişcinin dönüşümünü tanımlar xAğdan akarken. Eğer x biçim (batch_size, input_dim) Ha, sonra var self.fc1(x) biçim (batch_size, hidden_dim) Ve RelU kullandıktan sonra aynı şekli korur, negatif değerler sıfıra yansıtılır. Son çağrı self.fc2 Formun bir çıktısını oluşturun (batch_size, output_dim). Geri dönmek x Sonunda forward Ağın bir işlev olarak hatırlamasını sağlıyoruz:


model = SimpleMLP(input_dim=10, hidden_dim=50, output_dim=1)
batch_of_inputs = torch.randn(32, 10)
outputs = model(batch_of_inputs)

Bu örnekte batch_of_inputs Her biri on özelliğe sahip otuz örneği temsil eden formun (32, 10) bir tensörü. Arama model(batch_of_inputs) Arka planda ara forward bir outputs Numune için bir broşür almak için şekle (32, 1) sahiptir.

Arka planda Pytorch, her işlemi kaydeden bir hesaplama grafiği oluşturur – matrisin çoğalmaları, eklemeleri ve doğrusal olmaması – böylece bir kayıp çıktı temelinde hesaplandığında ve daha sonraki erişimin erişimi loss.backward() tüm parametrelerin gradyanları fc1 VE fc2 Otomatik olarak hesaplamasına izin verin. Bu nedenle bu gradyanlar, ağırlıklandırma matrislerini ve önyargı taşıyıcılarını güncellemek için optimize ediciler tarafından kullanılabilir.

Daha fazla seviyeyi istifleyerek – örneğin doğrusal ve aktivasyon seviyelerini değiştirerek – ve gizli boyutları değiştirerek, son derece karmaşık atamaları öğrenebilen daha derin ve daha geniş ağlar oluşturmak mümkündür.

Serinin bir sonraki kısmı, lotların, vektör işlemlerinin genel kitlesinde nasıl ilerlemeyi oluşturduğunu ve aktivasyon seçiminin ağın derinliği ile nasıl etkileşime girdiğini gösteriyor.


(RME)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir