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.Module
Pytorch'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 x
Ağ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)
Bir yanıt yazın