Nöronal ağlar birçok AI ve Genai uygulamasının motorudur. Bu makale dizisi bireysel unsurlar hakkında bir fikir sunar. Yedinci kısım, tanıtılan kamu sinir ağı serisinin altıncı kısmından sonra özyinelemeli nöronal ağlara 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.
Özyinelemeli nöronal ağlar, zaman içinde daha da gelişen gizli bir durumu korurken sıralı verilerin işlenmesi için tasarlanmıştır. Her bir girişin diğerlerinden bağımsız olduğunu varsayan güç ağlarının aksine, özyinelemeli ağlar bilgilerin dönemlerde depolanmasına izin verir. Her adım T, hem yeni giriş Xₜ vektörünü hem de önceki gizli duruma tekrar eden bir hücre alır. Hücre, öğrenilmiş bir dönüşüme göre yeni bir gizli durum Hₜ hesaplar ve bir yₜ (isteğe bağlı) çıktı oluşturur.
En basit haliyle, bir vanilya RNN hücresi, bir giriş dönüşümünün ve gizli bir durum yapısal bilgisinin ve bir bozulmanın toplamı olarak bir Zₜ ön -atama taşıyıcısını hesaplar:
Zₜ = wₓ · xₜ + wₕ · hₜ₋₁ + b
Yeni durum, doğrusal olmayan aktivasyon elemanının kullanımı ile oluşturulur σ:
Hₜ = σ (Zₜ)
Her zaman aşaması için bir yₜ çıkışı gerekiyorsa, bir okuma seviyesi ekleyebilirsiniz:
Yₜ = V · Hₜ + C
V ve C I bir çıkış ağırlığı ve polarizasyon taşıyıcısı bir matrisiyim.
Pytorch Sınıfı Sınıf torch.nn.RNN
Bu davranış ve farklı katmanların istiflenmesini ve süreklilikleri olmadan detaylandırır. Aşağıdaki örnekte, tek sınıflı bir RNN hücresinin nasıl oluşturulacağını, bir dizi dizinin nasıl ekleneceğini ve son gizli durumu çıkaracağını gösteriyor:
import torch
import torch.nn as nn
# Angenommen, wir haben Sequenzen der Länge 100, jedes Element ist ein 20-dimensionaler Vektor,
# und wir verarbeiten sie in Batches der Größe 16.
seq_len, batch_size, input_size = 100, 16, 20
hidden_size = 50
# Erstellen Sie einen zufälligen Stapel von Eingabesequenzen: Form (seq_len, batch_size, input_size)
inputs = torch.randn(seq_len, batch_size, input_size)
# Instanziieren Sie ein einlagiges RNN mit tanh-Aktivierung (Standard)
rnn = nn.RNN(input_size=input_size,
hidden_size=hidden_size,
num_layers=1,
nonlinearity='tanh',
batch_first=False)
# Initialisiere den versteckten Zustand: Form (Anzahl_Schichten, Batchgröße, versteckte Größe)
h0 = torch.zeros(1, batch_size, hidden_size)
# Vorwärtspropagierung durch das RNN
outputs, hn = rnn(inputs, h0)
# `outputs` hat die Form (seq_len, batch_size, hidden_size)
# `hn` ist der versteckte Zustand beim letzten Zeitschritt, Form (1, batch_size, hidden_size)
Bu bölümün her satırının net bir etkinliği vardır. Giriş oluşturarak bir grup zaman serisi verilerini simüle eder. RNN modülü iki parametre matrisini gösterir: biri şekli (hidden_size, input_size
) Wₓ için ve formu olan biri (hidden_size, hidden_size
) Wₕ ve uzunluk distorsiyon taşıyıcısı için hidden_size
. Giriş ve başlangıç durum modülü H0 çağrılırken, 100 zamansal adımdan geçer ve her adımla özyineleme ilişkisini hesaplar. İhraç eden kişi tüm ara durumları toplarken, HN sadece sonuncusunu geri döndürür.
Vanilya-vanilya kavramsal olarak basit olsa da, birçok zamansal adımda akan gradyanlar kaybolma veya patlama eğiliminde olduğundan, uzun vadeli bağımlılıkları öğrenmekte zorluk çekersiniz. Bunu azaltmak için, LSTM ve Gran gibi tekrarlayan birimler, girdinin ve önceki durumun yeni durumu ne kadar güçlü bir şekilde etkilemesi gerektiğini kontrol eden iç kapılar sunar.
LSTM hücresi (kısa vadeli kısa vadeli bellek) hem gizli bir Hₜ durumunu hem de bir mobil durumu Cₜ yönetir. Üç Kapı Kapısı Fₜ Gate-Forcet, Iₜ ve Çıkış Kapısı Oₜ-CI kullanın Sigmoid aktivasyonları ve bir Tanh aktivasyonu ile hesaplanabilen aday hücre ĉₜ güncellemesi olarak hesaplanır. Özellikle:
fₜ = σ (w_f · xₜ + u_f · hₜ₋₁ + b_f)
İₜ = σ (w_i · xₜ + u_i · hₜ₋₁ + b_i)
Oₜ = σ (w_o · xₜ + u_o · hₜ₋₁ + b_o)
ĉₜ = tan (w_c · xₜ + u_c · hₜ₋₁ + b_c)
Hücre durumu daha sonra unutma ve giriş kapıları ile ağırlıklandırılmış önceki hücre durumunu ve adayı birleştirerek güncellenir:
Cₜ = fₜ * cₜ₋₁ + iₜ * ĉₜ
Son olarak, sistem hücre durumunun doğrusal olmamasına çıkış kapısını kullanarak yeni gizli durumu oluşturur:
Hₜ = oₜ * tan (cₜ)
Pytorch torch.nn.LSTM
Kaputun altındaki tüm bu hesaplamaları kapsül. Aşağıdaki kod bir dizi dizinin bir örneğini göstermektedir:
import torch
import torch.nn as nn
# Sequenzparameter wie zuvor
seq_len, batch_size, input_size = 100, 16, 20
hidden_size, num_layers = 50, 2
# Zufälliger Eingabebatch
inputs = torch.randn(seq_len, batch_size, input_size)
# Instanziieren eines zweischichtigen LSTM
lstm = nn.LSTM(input_size=input_size,
hidden_size=hidden_size,
num_layers=num_layers,
batch_first=False)
# Initialisiere versteckte und Zellzustände: jeweils mit der Form (Anzahl_Schichten, Batchgröße, versteckte Größe)
h0 = torch.zeros(num_layers, batch_size, hidden_size)
c0 = torch.zeros(num_layers, batch_size, hidden_size)
# Vorwärtsdurchlauf durch das LSTM
outputs, (hn, cn) = lstm(inputs, (h0, c0))
# `outputs` hat die Form (seq_len, batch_size, hidden_size)
# `hn` und `cn` haben jeweils die Form (num_layers, batch_size, hidden_size)
Tekrarlayan birim (Gran), unutma ve giriş kapılarını tek bir Zₜ güncelleme kapısında birleştirerek ve hücre koşullarını ve gizli bir şekilde birleştirerek LSTM'yi basitleştirir. Denklemler:
Zₜ = σ (w_z · xₜ + u_z · hₜ₋₁ + b_z)
rₜ = σ (w_r · xₜ + u_r · hₜ₋₁ + b_r)
ħₜ = Tan (W · Xₜ + U · (Rₜ * Hₜ₋₁) + B)
Hₜ = (1 – zₜ) * hₜ₋₁ + zₜ * ħₜ
Pytorch tekliflerinde torch.nn.GRU
Aynı arayüze sahip bu işlev nn.LSTM
sadece gizli koşulların iade edilmesi dışında.
Değişken uzunluk dizileriyle çalışırken, genellikle gereklidir torch.nn.utils.rnn.pack_padded_sequence
VE pad_packed_sequence
Jetonları doldurmak için hesaplama gücünü boşa harcamadan dizileri partideki verimli bir şekilde işlemek için.
Özyinelemeli ağlar, vokal modelleme, zamansal serilerin tahminleri ve diziden sekansa çeviriler gibi görevler için idealdir, ancak dikkat tabanlı modellerin uygulanmasının birçok alanında aşılmıştır.
Bununla birlikte, her şeyden önce, bu serinin sonraki kısmı, veri ve özyinelemeli seviyelerin, alan ve zamansal yapı ile verileri işlemek için birleşmesine adanmıştır. Video sınıflandırmasında, CO -simpresif bir sinir ağı, örneğin, hareket dinamiklerini kaydetmek için bir LSTM'ye yerleştirilen çerçeve seviyesinde işlevselliği çıkarabilir.
(RME)
Bir yanıt yazın