Bir Bakışta Yapay Sinir Ağları 3: Aktivasyon İşlevleri

Nöronal ağlar birçok AI ve Genai uygulamasının motorudur. Bu makale dizisi bireysel unsurlar hakkında bir fikir sunar.

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.

Üçüncü taraf, operasyonların genel kitlesinde çalışmayı nasıl oluşturduğunu ve aktivasyon seçiminin ağın derinliği ile nasıl etkileşime girdiğini gösterir.

İleriye çağrılan ön planlama, bir nöronal ağın çıktısını doğrusal dönüşümleri ve giriş verilerinde doğrusal olmayan aktivasyon fonksiyonlarını hesaplama işlemini ifade eder. Tek bir katman için, önceki katmanın aktivasyonlarını bir^(ℓ-1) ile tanımlarsak, katmanın ağırlığı w^(ℓ) ve B^(ℓ) ile bozulma taşıyıcısı, katman önceden ayarlanmış vektör z^(ℓ) hesaplar.

Z^(ℓ) = w^(ℓ) · a^(ℓ – -1) + b^(ℓ)

Z^(ℓ) 'nin hesaplanmasına göre, seviye, başlangıç aktivitelerini oluşturmak için doğrusal bir aktivasyon fonksiyonu σ olmayan bir elementin öğesini kullanır:

A^(ℓ) = σ (z^(ℓ)).

Her seviye için bu işlemleri girişten çıktıya birleştirerek, ağ bir başlangıç giriş taşıyıcısını, bir karakteristik tahmin veya dahil etmeyi temsil eden bir nihai çıkış taşıyıcısına dönüştürür.

Bu hesaplamaları somut terimlerle göstermek için, bir matris olarak bir grup giriş taşıyıcısını düşünüyoruz. X Şekille (batch_size, input_dim) temsil etmek. Pytorch'ta tamamen bağlı bir seviye, aşağıdaki gibi manuel olarak uygulanabilir, bu nedenle W biçim (output_dim, input_dim) VE b biçim (output_dim) Ha:


import torch

batch_size = 32
input_dim = 10
output_dim = 50

# Simulieren Sie einen Stapel von Eingaben
X = torch.randn(batch_size, input_dim)

# Initialisieren Sie die Gewichtungsmatrix und den Bias-Vektor
W = torch.randn(output_dim, input_dim)
b = torch.randn(output_dim)

# Berechnen Sie die Voraktivierung für den Stapel: Z = X @ W^T + b
Z = X.matmul(W.t()) + b
# Wende eine Nichtlinearität (z. B. ReLU) an, um Aktivierungen A zu erhalten
A = torch.relu(Z)

Bu bölümde tensör içeriyor X Gösteri amacıyla rastgele değerler. İfade W.t() Transpozisyonunu tanımlar WBiçim (input_dim, output_dim) Ha. Parti matrisinin çarpımı X.matmul(W.t()) Yeni bir tensör oluşturun Z Şekille (batch_size, output_dim)Çünkü her biri batch_sizeX çizgileri wᵀ ile çarpılır. Ekleme b İLE Z Bozulma vektörünü tüm satırlara aktarırız, bu da bize tam ön aktivasyon değerlerini verir. Sonunda ipucu torch.relu Düzeltilmiş doğrusal birimin bir elemanı Z -den A Oluşturmak için.

Aktivasyon fonksiyonları, nöronal ağların karmaşık modelleri öğrenmesine izin veren doğrusal olmayan bir şekilde getirilir. Tarafından tanımlanan lojistik sigmoid işlevi

σ (z) = 1 / (1 + açıklama (−z)),

Sıfır ve bir arasındaki alanda her gerçek girişi oluşturur. Türeviniz, baskınızla ilgili olarak ifade edilebilir.

σ '(z) = σ (z) · (1 – σ (z)).

Sigmoid geçmişte çok popüler olmasına rağmen, gradyanları çok küçük olabilirse | Z | Bir ağın derinliğinde yavaş öğrenmeye yol açan harika.

Pytorch'ta bir Z tensörü için bir sigmoid aktivasyonunu aşağıdaki komutla hesaplamak mümkündür:

A_sigmoid = torch.sigmoid(Z)

Nerede torch.sigmoid Lojistik fonksiyonunun elemanı her öğede Z tarafından kullanılır ve sıfır ile bir arasında değerleri olan yeni bir tensör oluşturur.

Hiperbolik Groppoma fonksiyonu,

Tan (z) = (exp (z) – exp (−z)) / (exp (z) + exp (−z)),

Daha az ve bir arasındaki kraliyet girdilerini takip edin. Türeviniz 1 – tan (z)^2 ile verilir. Tan sıfıra odaklandığından, genellikle sigmoid'den daha hızlı bir yakınsama yol açar, ancak kaybolan gradyanlardan daha büyük veya negatif girdilerden muzdariptir.

Pytorch'ta aşağıdaki komutla bir tanch aktivasyonunu hesaplamak mümkündür:

A_tanh = torch.tanh(Z)

Modern derin ağlarda kullanılan en sık kullanılan aktivasyon,

Relu (z) = maks (0, z)

Z negatif olduğunda türetmeniz her zaman sıfırdır ve z pozitif olduğunda her zaman bir tanedir. Bu basit doğrusal şekil, kaybolan gradyan problemini önemli ölçüde hafifleten pozitif girişler için doygunluğu önler. Bununla birlikte, nöronlar, girdileri negatif hale geldiğinde ve negatif kaldığında eğitim sırasında “ölebilir”, bu da kalıcı sıfır gradyanlara yol açar.

Pytorch ile isteksiz bir aktivasyon yapabilirsiniz. torch.relu veya bir örnek oluşturarak Moduls Aşağıdakilere uygulayın:

A_relu = torch.relu(Z)import torch.nn as nnrelu_layer = nn.ReLU()A_relu_mod = relu_layer(Z)

Relu kaybeden “ölmek relu” problemini çözmek için,

Leakirelu (z) = maks (α · z, z).

Z negatif olduğunda türetmeniz α ve z pozitif olduğunda birdir. Α için tipik bir seçim 0.01'dir. Kodda, aşağıdaki kodla Pytorch kayıplarında relu için bir seviye oluşturmak ve kullanmak mümkündür:

leaky_relu = nn.LeakyReLU(negative_slope=0.01)A_leaky = leaky_relu(Z)

Birden çok sınıfta sınıflandırılırken, Softmax işlevi, bir olasılık dağılımındaki herhangi bir gerçek değere sahip bir taşıyıcıyı dönüştürmek için kullanılır. Z_I bileşenlerine sahip bir Z taşıyıcısı için geçerlidir

Softmax (z) _i = exp (z_i) / σ_j exp (z_j).

Softmax'ın Jacobi matrisinde ∂σ_i/∂z_j = σ_i (Δ_ {ij} -σ_j) sesleri vardır. Uygulamada, softmax genellikle haç kaybı ile birleştirilir, bu da sayısal olarak kararlı ve daha basit bir kombine gradyana yol açar. Pytorch'ta Softmax belirli bir boyut boyunca kullanılabilir. Ad ve modül loguları ile çok fazla logit için (batch_size, num_classes) Örneğin yazabilirsiniz:

import torch.nn.functional as Fprobabilities = F.softmax(logits, dim=1)

Bu, logitlerdeki her bir satırın üstel işlevlerini hesaplar, bunları hat toplamlarına göre normalleştirir ve aynı şeklin bir tensörü döndürür, bu da sıfır ile her satırda sonuçlanan bir değerleri içerir.

Bu klasik aktivasyonlara ek olarak, Gaußsche Fleischenlinear birimi olan Z · sigmoid (Z) ve Gelu olarak tanımlanan Swish gibi daha yeni fonksiyonlar, bazı mimariler için popülerlik kazanmıştır, çünkü sıvı gradyanları ve dil modellemesi gibi faaliyetlerde daha iyi bir performans sunmaktadır. Pytorch gibi kitapçılardaki bu işlevler (örneğin form yoluyla nn.GELU), birçok uygulayıcının standart seçimleri için daha fazla işleme çabaları nedeniyle Relu ve varyantları olarak kalın.

Artık hem tüm seviyelerin ön aktivasyonlarının tedavi edildiği hem de daha sonra doğrusal olmayan aktivasyon fonksiyonlarını tedavi ettiğimize göre, giriş verilerini kapsamlı dahili gösterimlere dönüştüren derin nöronal ağlar oluşturabiliyoruz.

Serinin bir sonraki kısmı, bir ağın tahminlerinin, kayıp fonksiyonları getirerek istenen hedeflere ne kadar iyi karşılık geldiğini gösterir. Makale daha sonra ağ parametrelerinin uyarlanabileceği gradyana göre optimizasyon algoritmalarını gösterir.


(RME)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

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