Connect with us

Entwicklung & Code

Webentwicklung ohne Grenzen Teil 2: Der Praxis-Guide für barrierefreies Design


Digitale Barrierefreiheit baut auf vier Grundprinzipien auf, die sich auf die Gestaltung von Produkten, Dienstleistungen, Inhalten und Umgebungen beziehen. Diese Grundprinzipien sollen sicherstellen, dass digitale Inhalte für alle Nutzenden, unabhängig von ihren Fähigkeiten, zugänglich sind. Das erlaubt eine möglichst vollständige digitale Erfahrung für alle. Dieser zweite Teil der Artikelserie erläutert die Prinzipien, stellt hilfreiche Tools vor und gibt Tipps zum Überprüfen und Implementieren.

Alle Informationen und Bestandteile der Userschnittstelle müssen so präsentiert werden, dass die Nutzenden sie wahrnehmen können.
Alle Bestandteile der Userschnittstelle und alle Navigationselemente müssen bedienbar sein.
Alle Informationen und Bestandteile der Userschnittstelle müssen verständlich sein.
Alle Informationen und Bestandteile der Userschnittstelle müssen so implementiert sein, dass sie mit möglichst vielen Useragenten, zum Beispiel unterschiedlichen Browsern, und Assistenztechnologien kompatibel sind.

Tabelle: Grundprinzipien der digitalen Barrierefreiheit


Susanne Dirks

Susanne Dirks

Susanne Dirks ist Vertretungsprofessorin im Fachgebiet Rehabilitationstechnologie der TU Dortmund. Ihre Forschungsschwerpunkte liegen in den Bereichen Partizipative Forschung und Entwicklung, Digitale Barrierefreiheit sowie Sprachtechnologie und Unterstützte Kommunikation.




Alessandro Manuel Bras Da Silva studiert im Bachelor Informatik an der TU Dortmund und arbeitet als Studentische Hilfskraft im Fachgebiet Rehabilitationstechnologie.




Alexander Feld studiert im Bachelor Informatik an der TU Dortmund und arbeitet als Studentische Hilfskraft im Fachgebiet Rehabilitationstechnologie.

Nicht alle Menschen können gut sehen und hören. Deshalb müssen alle inhaltlichen Informationen einer Internetseite und alle Komponenten einer Benutzeroberfläche für alle Nutzenden in einer für sie wahrnehmbaren Weise dargestellt werden.

Stellen Sie sich beispielsweise Lisa Beer vor. Sie arbeitet als Bürokauffrau und hat eine starke Sehbeeinträchtigung. Lisa soll eine aktuelle Übersicht über alle derzeit verfügbaren digitalen Telefonanlagen erstellen. Viele der relevanten Seiten im Internet enthalten Bild- und Videoinformationen, die sie aufgrund ihrer Sehbeeinträchtigung nicht wahrnehmen kann. Wenn für diese visuellen Inhalte Textalternativen, Untertitel und Audiobeschreibungen existieren, kann Lisa ebenso wie ihre Kolleginnen und Kollegen selbständig und ohne Probleme die Übersicht zusammenstellen.

Um das Grundprinzip der Wahrnehmbarkeit umzusetzen, sollten Webentwicklerinnen und -entwickler die folgenden Kriterien berücksichtigen (siehe W3C – Perceivable information and user interface):

  • Erstellen von Alternativtexten für Bilder, Icons, Schaltflächen und Grafiken
  • Beschreibung von Daten in Tabellen, Diagrammen und Illustrationen
  • Beschriftungen für Formularsteuerungen, Eingaben und andere Komponenten der Useroberfläche
  • Vermeiden von Schriftgrafiken
  • Transkripte und Untertitel für Audioinhalte
  • Audiodeskriptionen (Beschreibung wichtiger visueller Details in einem Video)
  • Gebärdensprachvideos für Audioinhalte
  • Ausreichender Kontrast zwischen Vorder- und Hintergrundfarbe
  • Farbe nicht als einziges unterscheidendes Merkmal für die Identifikation von Inhalten und Navigationselementen
  • Textvergrößerung auf bis zu mindestens 200 Prozent möglich, ohne dass sich Informationen überlappen oder verloren gehen
  • Audiowiedergaben lassen sich stoppen, neu starten oder beenden
  • Hintergrundtöne lassen sich anpassen oder abschalten

Viele Menschen können aus unterschiedlichen Gründen keine Computermaus nutzen und verwenden für das Surfen im Internet die Tastatur oder alternative Eingabemöglichkeiten. Deshalb sollten alle Inhalte, alle Komponenten der Useroberfläche und Navigationselemente über verschiedene Methoden erreichbar und bedienbar sein, etwa über die Tastatur, durch Berührung und Gesten oder durch Sprachbefehle. Dies ermöglicht es Nutzenden mit verschiedenen Beeinträchtigungen, wie motorischen Einschränkungen, digitale Inhalte zu erreichen und mit ihnen zu interagieren.

Das folgende Beispiel zeigt die Relevanz dieses Grundprinzips: Fred Maier hat bei einem Verkehrsunfall den rechten Arm verloren. Er arbeitet als Redakteur in einem Online-Verlag und nutzt eine Einhandtastatur ohne integrierte Maus. Die Tastatur bedient er mit der linken Hand. Damit er seine Recherchen ohne fremde Hilfe ausführen kann, müssen die Webseiten, die er besucht, vollständig über die Tastatur bedienbar sein. Dafür müssen die folgenden Kriterien erfüllt sein:

  • Verfügbarkeit aller Funktionen, die mit der Maus ansteuerbar sind, auch über die Tastatur
  • Durchgehender Tastaturfokus, Fokus bleibt nicht an einem Teil des Inhalts hängen
  • Webbrowser, Authoring-Tools und andere Tools bieten Tastaturunterstützung

Zur Bedienbarkeit gehören aber noch weitere Aspekte, die über den nahtlosen Einsatz der Tastatur hinausgehen. Manche Menschen brauchen beispielsweise mehr Zeit als andere, um digitale Inhalte zu lesen und zu nutzen, Text zu tippen, Anweisungen zu verstehen, Bedienelemente zu betätigen oder andere Aufgaben auf einer Webseite zu erledigen. Dafür müssen die folgenden Kriterien berücksichtigt werden:

  • Möglichkeit, Zeitlimits anzuhalten, zu verlängern oder anzupassen
  • Anhalten, Stoppen oder Ausblenden von sich bewegenden, blinkenden oder scrollenden Inhalten
  • Möglichkeit, Unterbrechungen zu verschieben oder zu unterdrücken
  • Möglichkeit zur Neuauthentifizierung, wenn eine Sitzung abläuft, ohne Daten zu verlieren

Inhalte, die in bestimmten Raten oder Mustern blinken, können bei den Nutzenden lichtempfindliche Reaktionen oder Krampfanfälle auslösen. Idealerweise vermeiden Entwicklerinnen und Entwickler blinkende Inhalte ganz oder verwenden sie nur in einer Weise, die keine bekannten Risiken birgt. Auch Animationen und bewegte Inhalte können Unbehagen und Stress verursachen oder körperliche Reaktionen hervorrufen.

Gut strukturierte Inhalte helfen den Nutzenden einer Website, sich zu orientieren und effektiv zu navigieren. Auf jeder einzelnen Webseite einer gut designten Website müssen die folgenden Kriterien umgesetzt sein:

  • Eindeutige Titel und beschreibende Abschnittsüberschriften auf allen Seiten
  • Implementierung verschiedener Suchstrategien
  • Erkennbare Markierung des aktuellen Standorts innerhalb einer Reihe von zusammenhängenden Seiten
  • Möglichkeit, sich wiederholende Inhaltsblöcke zu umgehen
  • Gut erkennbarer Tastaturfokus und sinnvolle Reihenfolge
  • Zweck eines Links ist erkennbar und verständlich

All das hilft dabei, auf unterschiedliche Weise durch Webseiten zu navigieren. Während einige Menschen beispielsweise hierarchische Navigationsstrukturen wie Menüleisten bevorzugen, um bestimmte Webseiten zu finden, nutzen andere stattdessen die Suchfunktionen auf Webseiten. Manche Nutzende sehen die Inhalte, andere hören sie oder sehen und hören sie gleichzeitig. Einige Menschen nutzen die Inhalte nur mit der Maus oder der Tastatur, während andere beides benutzen.

Touchscreens und mobile Endgeräte mit alternativen Eingabemodalitäten, wie Berührungsaktivierung, Spracheingabe und Gesten, erleichtern es vielen Menschen mit Beeinträchtigungen, digitale Inhalte und Dienste zu nutzen. Zusätzliche Designüberlegungen maximieren den Nutzen dieser Möglichkeiten. Dazu gehören:

  • Alternativen für Gesten, die Geschicklichkeit oder feine Bewegungen erfordern
  • Vermeidung von versehentlicher Aktivierung von Komponenten durch eindeutige Gestaltung, etwa durch eine Rückgängig-Funktion
  • Verwendung von Bezeichnungen, die dem Objektnamen im Code entsprechen, um die Aktivierung durch Sprache zu unterstützen
  • Alternative Bedienung von Funktionen, die durch Bewegung aktiviert werden können
  • Ausreichende Größe von Schaltflächen, Links und aktiven Komponenten, um sie leicht durch Berührung aktivieren zu können

Die Verständlichkeit einer Webseite ist dann gegeben, wenn die auf den Seiten verfügbaren Inhalte gut lesbar und verständlich sowie die Struktur und die Organisation nachvollziehbar sind und alle Bedienelemente erwartbar und nachvollziehbar funktionieren. Zusätzlich sollten alternative Ein- und Ausgabemöglichkeiten vorhanden sein, die helfen, Bedienfehler zu vermeiden und den Nutzenden bei der Verbesserung von Fehlern helfen.

Hier soll ein Beispiel einer Person mit einer Lernbeeinträchtigung zur Verdeutlichung dienen: Thomas Werner hat eine Lernbeeinträchtigung und arbeitet in einer Werkstatt für Menschen mit Behinderungen (WfbM). Er engagiert sich im Werkstattrat und informiert sich regelmäßig über aktuelle sozialpolitische Entwicklungen. Dafür besucht er oft Webseiten der Bundes- und Landesministerien. Dort findet er zu vielen Themen Informationen in Leichter Sprache, die ihm helfen, Inhalte und Zusammenhänge besser zu verstehen.

Um eine gute Verständlichkeit zu ermöglichen, sollten Entwicklerinnen und Entwickler die folgenden Kriterien umsetzen:

  • Angabe der Hauptsprache einer Webseite (für die passende Spracheinstellung des Screenreaders)
  • Angabe von Änderungen der Sprache in Textpassagen, Phrasen oder einzelnen Teilen einer Webseite
  • Bereitstellen von Definitionen für ungewöhnliche Wörter, Sätze, Redewendungen und Abkürzungen
  • Verwenden von möglichst klarer und einfacher Sprache oder Bereitstellen von Inhalten in Leichter Sprache
  • Gleiche Positionierung von Navigationselementen, die auf mehreren Seiten wiederholt werden
  • Gleiche Bezeichnungen für Komponenten der Benutzeroberfläche, die sich auf mehreren Seiten wiederholen
  • Keine signifikanten Änderungen auf einer Webseite ohne die Zustimmung der Nutzenden, beispielsweise Änderung von Berechtigungen

Das Ausfüllen von Formularen und andere Interaktionen können für manche Menschen schwierig sein und vermehrt Fehler erzeugen. Ein sinnvolles Design kann beim Verständnis der Struktur und der Korrektur von Fehlern unterstützen:

  • Bereitstellen von beschreibenden Anweisungen, Fehlermeldungen und Vorschlägen zur Korrektur
  • Kontextsensitive Hilfe für komplexere Funktionen und Interaktionen
  • Möglichkeit, Eingaben zu überprüfen, zu korrigieren oder rückgängig zu machen

Das vierte und letzte Prinzip der barrierefreien Webentwicklung ist die Robustheit. Das bedeutet in diesem Fall, dass alle Inhalte und Steuerelemente mit aktuellen und zukünftig genutzten Werkzeugen und Infrastrukturelementen kompatibel sind. Dazu gehören die verschiedenen Browser und Betriebssysteme sowie assistive Technologien und andere Nutzeragenten (User Agents).

Ein weiteres Beispiel verdeutlicht die Relevanz: Anna Berger ist blind und nutzt für ihre Arbeit als Übersetzerin einen Screenreader. Damit dieser alle textuellen Informationen korrekt vorlesen kann, muss das auf der Seite verwendete Markup standardkonform sein. Da sie viele ausländische Seiten besucht, ist es wichtig, dass der Screenreader Informationen über die verwendete Sprache erhält, damit die Inhalte in der entsprechenden Sprache vorgelesen werden können. Um immer mit der aktuellen Version der Screenreader-Software arbeiten zu können, macht Anna Berger regelmäßige Updates. Mit einer standardkonformen Verwendung von Markups können Entwicklerinnen und Entwickler sicherstellen, dass der Screenreader auch nach den Updates fehlerfrei funktioniert.

Das Umsetzen folgender Kriterien verbessert die Robustheit von Webseiten:

  • Sicherstellen, dass verwendete Markups durch standardkonforme Anwendung zuverlässig interpretierbar sind
  • Bereitstellen eines Namens, einer Rolle und eines Wertes für nicht standardisierte Komponenten der Useroberfläche
  • Statusmeldungen, die Nutzenden von assistiven Technologien präsentiert werden können, ohne Fokus zu erhalten

Damit steigt die Kompatibilität mit aktuellen und zukünftigen Nutzeragenten, einschließlich unterstützender Technologien, und assistive Technologien können die Inhalte der Seiten zuverlässig verarbeiten und adäquat darstellen, auch bei nicht standardisierten Schaltflächen, Eingabefeldern und anderen Steuerelementen.



Source link

Entwicklung & Code

software-architektur.tv: Webperformance mit Lucas Dohmen und Lisa Maria Schäfer


In dieser Folge des Videocasts software-architektur.tv sprechen Lucas Dohmen und Lisa Maria Schäfer über Webperformance. Sie klären, was sich dahinter verbirgt und warum das Thema wichtig ist – und zwar für alle, die Webseiten entwickeln. Des Weiteren stellen sie Tools zum Messen der Webperformance vor und geben Impulse, wie man seine Website schneller machen kann.

Lisa Maria Schäfer malt dieses Mal keine Sketchnotes, da sie vor der Kamera ist.

Die Ausstrahlung findet am Freitag, 5. September 2025, live von 13 bis 14 Uhr statt. Die Folge steht im Anschluss als Aufzeichnung bereit. Während des Livestreams können Interessierte Fragen via Twitch-Chat, YouTube-Chat, Bluesky, Mastodon, Slack-Workspace oder anonym über das Formular auf der Videocast-Seite einbringen.

software-architektur.tv ist ein Videocast von Eberhard Wolff, Blogger sowie Podcaster auf iX und bekannter Softwarearchitekt, der als Head of Architecture bei SWAGLab arbeitet. Seit Juni 2020 sind über 250 Folgen entstanden, die unterschiedliche Bereiche der Softwarearchitektur beleuchten – mal mit Gästen, mal Wolff solo. Seit mittlerweile mehr als zwei Jahren bindet iX (heise Developer) die über YouTube gestreamten Episoden im Online-Channel ein, sodass Zuschauer dem Videocast aus den Heise Medien heraus folgen können.

Weitere Informationen zur Folge finden sich auf der Videocast-Seite.


(mdo)



Source link

Weiterlesen

Entwicklung & Code

Microsoft gibt 6502 BASIC frei


Microsoft hat den Quellcode seines historischen 6502-BASIC-Interpreters aus dem Jahr 1976 erstmals offiziell als Open Source freigegeben und somit einen wichtigen Beitrag zur Bewahrung der Geschichte der Heimcomputer geleistet. Die Software wurde ursprünglich von Bill Gates und Ric Weiland für den beliebten 8-Bit-Prozessor MOS 6502 entwickelt. Später lag sie den einflussreichen Computern Commodore PET, VIC-20 und Commodore 64 zugrunde – Millionen von Nutzern lernten damit programmieren und prägen bis heute die Kulturszene rund ums Retro-Computing.

Die jetzt unter der MIT-Lizenz veröffentlichte Version 1.1 enthält laut Microsoft unter anderem Verbesserungen an der Speicherverwaltung, die 1978 gemeinsam mit Commodore-Entwickler John Feagans umgesetzt wurden. Damit handelt es sich um die Variante, die als BASIC V2 auf dem PET ausgeliefert wurde und bis heute in den ROM-Archiven von Computermuseen und Emulatoren lebt. Der 6955 Zeilen umfassende Assembly-Sourcecode steht ab sofort auf GitHub bereit – samt Unterstützung für verschiedene historische Systeme wie Apple II oder Commodore PET.

Mit an Bord sind außerdem die dokumentierten Easter Eggs von Bill Gates selbst. Denn in den Quellcodes von Microsoft 6502 BASIC sind mehrere versteckte Funktionen verborgen, darunter die berühmten Labels STORDO und STORD0, wie Bill Gates selbst 2010 bestätigte. Besonders bekannt ist das WAIT 6502,1-Kommando, das auf einem Commodore PET mit BASIC V2 das Wort MICROSOFT! auf dem Bildschirm erscheinen lässt – das versteckte Markenzeichen hatte Bill Gates gezielt eingebaut.

Microsoft betont mit der Veröffentlichung die historische Bedeutung des BASIC-Interpreters für die eigenen Anfänge. Gleichzeitig verweist der Konzern in seiner Ankündigung darauf, dass sich die Community – von Museumsarchiven bis hin zu modernen FPGA- und Emulator-Projekten – schon seit Jahrzehnten für dessen Erhalt und praktische Anwendung eingesetzt hat. 2020 hatte Microsoft bereits den GW-BASIC-Interpreter als Open Source veröffentlicht, der aus dem Jahr 1983 stammt und für IBM-kompatible PCs beziehungsweise MS-DOS zum Einsatz kam.


(fo)



Source link

Weiterlesen

Entwicklung & Code

Künstliche Neuronale Netze im Überblick 7: Rekursive neuronale Netze


Neuronale Netze sind der Motor vieler Anwendungen in KI und GenAI. Diese Artikelserie gibt einen Einblick in die einzelnen Elemente. Der siebte Teil widmet sich rekursiven neuronalen Netzen, nachdem der sechste Teil der Serie Convolutional Neural Networks vorgestellt hat.


Michael Stal

Michael Stal

Prof. Dr. Michael Stal arbeitet seit 1991 bei Siemens Technology. Seine Forschungsschwerpunkte umfassen Softwarearchitekturen für große komplexe Systeme (Verteilte Systeme, Cloud Computing, IIoT), Eingebettte Systeme und Künstliche Intelligenz.

Er berät Geschäftsbereiche in Softwarearchitekturfragen und ist für die Architekturausbildung der Senior-Software-Architekten bei Siemens verantwortlich.

Rekursive neuronale Netze sind für die Verarbeitung sequenzieller Daten ausgelegt, indem sie einen versteckten Zustand aufrechterhalten, der sich im Laufe der Zeit weiterentwickelt. Im Gegensatz zu Feedforward-Netzwerken, die davon ausgehen, dass jede Eingabe unabhängig von allen anderen ist, ermöglichen rekursive Netzwerke das Speichern von Informationen über Zeiträume hinweg. Bei jedem Schritt t empfängt eine rekurrente Zelle sowohl den neuen Eingabevektor xₜ als auch den vorherigen versteckten Zustand hₜ₋₁. Die Zelle berechnet einen neuen versteckten Zustand hₜ gemäß einer gelernten Transformation und erzeugt (optional) eine Ausgabe yₜ.

In ihrer einfachsten Form berechnet eine Vanilla-RNN-Zelle einen Präaktivierungsvektor zₜ als Summe einer Eingabetransformation und einer versteckten Zustandstransformation plus einer Verzerrung:

zₜ = Wₓ · xₜ + Wₕ · hₜ₋₁ + b

Der neue Zustand entsteht durch elementweise Anwendung einer nicht linearen Aktivierung σ:

hₜ = σ(zₜ)

Wenn bei jedem Zeitschritt eine Ausgabe yₜ erforderlich ist, kann eine Ausleseschicht hinzugefügt werden:

yₜ = V · hₜ + c

wobei V und c eine Ausgabegewichtungsmatrix und ein Bias-Vektor sind.

In PyTorch kapselt die Klasse torch.nn.RNN dieses Verhalten und verarbeitet das Stapeln mehrerer Schichten und Batches nahtlos. Das folgende Beispiel zeigt, wie man eine einlagige RNN-Zelle erstellt, ihr einen Stapel von Sequenzen zuführt und den endgültigen versteckten Zustand extrahiert:


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)


Jede Zeile dieses Ausschnitts hat eine klare Aufgabe. Durch das Erstellen von Eingaben simuliert man ein Batch von Zeitreihendaten. Das RNN-Modul weist zwei Parametermatrizen zu: eine mit der Form (hidden_size, input_size) für Wₓ und eine mit der Form (hidden_size, hidden_size) für Wₕ sowie einen Bias-Vektor der Länge hidden_size. Beim Aufrufen des Moduls für Eingaben und den Anfangszustand h0 durchläuft es die 100 Zeitschritte und berechnet bei jedem Schritt die Rekursionsbeziehung. Der Ausgabetensor sammelt alle Zwischenzustände, während hn nur den letzten zurückgibt.

Obwohl Vanilla-RNNs konzeptionell einfach sind, haben sie Schwierigkeiten, langfristige Abhängigkeiten zu lernen, da über viele Zeitschritte zurückfließende Gradienten dazu neigen, zu verschwinden oder zu explodieren. Um das abzumildern, führen Gated Recurrent Units wie LSTM und GRU interne Gates ein, die steuern, wie stark die Eingabe und der vorherige Zustand den neuen Zustand beeinflussen sollen.

Die LSTM-Zelle (Long Short-Term Memory) verwaltet sowohl einen versteckten Zustand hₜ als auch einen Zellzustand cₜ. Sie verwendet drei Gates – Forget Gate fₜ, Input Gate iₜ und Output Gate oₜ –, die als Sigmoid-Aktivierungen berechnet werden, sowie eine Kandidaten-Zellaktualisierung ĉₜ, die sich mit einer Tanh-Aktivierung berechnen lässt. Konkret:

fₜ = σ( W_f · xₜ + U_f · hₜ₋₁ + b_f )

iₜ = σ( W_i · xₜ + U_i · hₜ₋₁ + b_i )

oₜ = σ( W_o · xₜ + U_o · hₜ₋₁ + b_o )

ĉₜ = tanh( W_c · xₜ + U_c · hₜ₋₁ + b_c )

Der Zellzustand wird dann durch Kombination des vorherigen Zellzustands und des Kandidaten aktualisiert, gewichtet durch die Vergessens- und Eingangsgatter:

cₜ = fₜ * cₜ₋₁ + iₜ * ĉₜ

Schließlich erstellt das System den neuen versteckten Zustand, indem es das Ausgangs-Gate auf die Nichtlinearität des Zellzustands anwendet:

hₜ = oₜ * tanh(cₜ)

PyTorchs torch.nn.LSTM kapselt all diese Berechnungen unter der Haube. Folgender Code zeigt ein Beispiel für eine Reihe von Sequenzen:


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)


Die Gated Recurrent Unit (GRU) vereinfacht das LSTM, indem sie die Vergessens- und Eingangsgatter zu einem einzigen Aktualisierungsgatter zₜ kombiniert und die Zell- und versteckten Zustände zusammenführt. Die Gleichungen lauten:

zₜ = σ( W_z · xₜ + U_z · hₜ₋₁ + b_z )

rₜ = σ( W_r · xₜ + U_r · hₜ₋₁ + b_r )

ħₜ = tanh( W · xₜ + U · ( rₜ * hₜ₋₁ ) + b )

hₜ = (1 − zₜ) * hₜ₋₁ + zₜ * ħₜ

In PyTorch bietet torch.nn.GRU diese Funktionalität mit derselben Schnittstelle wie nn.LSTM, außer dass nur die versteckten Zustände zurückgegeben werden.

Bei der Arbeit mit Sequenzen variabler Länge benötigt man häufig torch.nn.utils.rnn.pack_padded_sequence und pad_packed_sequence, um Sequenzen effizient im Batch zu verarbeiten, ohne Rechenleistung für das Auffüllen von Tokens zu verschwenden.

Rekursive Netzwerke eignen sich hervorragend für Aufgaben wie Sprachmodellierung, Zeitreihenprognosen und Sequenz-zu-Sequenz-Übersetzungen, wurden jedoch in vielen Anwendungsbereichen von aufmerksamkeitsbasierten Modellen übertroffen.

Zunächst widmet sich der nächste Teil dieser Serie jedoch der Kombination aus konvolutionalen und rekursiven Schichten, um Daten mit sowohl räumlicher als auch zeitlicher Struktur zu verarbeiten. Bei der Videoklassifizierung kann ein Convolutional Neural Network beispielsweise Merkmale auf Frame-Ebene extrahieren, die dann in ein LSTM eingespeist werden, um Bewegungsdynamiken zu erfassen.


(rme)



Source link

Weiterlesen

Beliebt