single
Sfida: Strutturare i Blocchi Encoder e Decoder
Scorri per mostrare il menu
Comprendere la struttura dei blocchi encoder e decoder è fondamentale per padroneggiare il modo in cui i Transformer elaborano e generano testo. Ogni blocco encoder in un Transformer è progettato per trasformare sequenze di input in rappresentazioni ricche di contesto, mentre ogni blocco decoder genera sequenze di output prestando attenzione sia agli output precedenti sia alle rappresentazioni dell'encoder. Nei compiti di sequenza a sequenza, come la traduzione o il riassunto, l'encoder prende il testo di input e lo codifica in una serie di stati nascosti. Il decoder utilizza poi questi stati nascosti, insieme alla propria self-attention, per generare la sequenza di destinazione passo dopo passo. Questa interazione tra blocchi encoder e decoder consente al modello di catturare dipendenze complesse nel testo, rendendo i Transformer estremamente efficaci per una vasta gamma di compiti di elaborazione del linguaggio naturale.
La seguente tabella riassume la sequenza delle operazioni in un blocco encoder di un Transformer e ne evidenzia l'importanza per i dati testuali:
| |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Each operation ensures that the encoder builds increasingly abstract and context-aware representations of the input text, which are essential for downstream sequence-to-sequence tasks. |
Scorri per iniziare a programmare
Il tuo compito è completare le parti mancanti della classe TransformerEncoderBlock inizializzando correttamente i suoi componenti chiave e assicurandoti che vengano utilizzati nel calcolo forward.
La classe TransformerEncoderBlock modella un singolo blocco encoder in un'architettura Transformer. Devi inizializzare correttamente due componenti principali nel costruttore della classe (metodo __init__):
- Il layer di self-attention utilizzando
MultiHeadAttention(hidden_dim). Questo layer consente a ciascun token in input di prestare attenzione a tutti gli altri token, catturando le relazioni contestuali; - La rete feed-forward utilizzando
FeedForward(hidden_dim). Questo layer applica trasformazioni non lineari a ciascuna rappresentazione di token individualmente, elaborando ulteriormente l'output del layer di self-attention; - Nel metodo
forward, dovresti applicare questi due layer in sequenza:- prima, passa l'input
xattraverso il layer di self-attention; - poi, passa l'output del layer di self-attention attraverso la rete feed-forward;
- restituisci l'output finale.
- prima, passa l'input
Assicurati di istanziare sia MultiHeadAttention sia FeedForward con il parametro hidden_dim fornito alla classe. Questi componenti rappresentano la struttura centrale di un blocco encoder e devono essere applicati nell'ordine corretto affinché il blocco funzioni correttamente.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione