Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Challenge: Syötteen Eteenpäin Suuntautuvien Verkkojen Toteuttaminen | Transformer-komponenttien Rakentaminen
Transformerit Luonnollisen Kielen Käsittelyssä
Osio 2. Luku 3
single

single

bookChallenge: Syötteen Eteenpäin Suuntautuvien Verkkojen Toteuttaminen

Pyyhkäise näyttääksesi valikon

Tutkiessasi Transformer-arkkitehtuuria luonnollisen kielen käsittelyssä kohtaat tärkeän osan jokaisessa Transformer-lohkossa: paikkakohtaisen syötteen eteenpäin syötetyn verkon (FFN). Kun itsehuomiomekanismi on käsitellyt syötteen esitykset, FFN muuntaa näitä esityksiä edelleen jokaisessa sekvenssin kohdassa, riippumatta muista kohdista. Tämä tarkoittaa, että jokaiseen lauseen tokeniin sovelletaan samaa pientä neuroverkkoa, mikä mahdollistaa mallin lisätä epälineaarisuutta ja oppia monimutkaisempia rakenteita tekstistä. FFN on olennainen itsehuomion koodaaman tiedon suhteiden havaitsemisessa ja tarkentamisessa, erityisesti käsiteltäessä ihmiskielen hienovaraisuuksia ja monitulkintaisuutta.

123456789101112131415161718192021222324252627282930313233
import numpy as np def relu(x): return np.maximum(0, x) class PositionWiseFeedForward: def __init__(self, d_model, d_ff): # Initialize weights and biases for two linear layers self.W1 = np.random.randn(d_model, d_ff) * 0.01 self.b1 = np.zeros((1, d_ff)) self.W2 = np.random.randn(d_ff, d_model) * 0.01 self.b2 = np.zeros((1, d_model)) def __call__(self, x): # x shape: (batch_size, seq_len, d_model) # Apply first linear layer and ReLU activation out1 = relu(np.matmul(x, self.W1) + self.b1) # Apply second linear layer out2 = np.matmul(out1, self.W2) + self.b2 return out2 # Example usage: batch_size = 2 seq_len = 4 d_model = 8 d_ff = 16 # Example input: random tensor simulating text representations x = np.random.randn(batch_size, seq_len, d_model) ffn = PositionWiseFeedForward(d_model, d_ff) output = ffn(x) print("Output shape:", output.shape)
copy

Yllä olevassa koodissa näet yksinkertaisen paikkakohtaisen syötteen eteenpäin syötetyn verkon toteutuksen käyttäen numpy-kirjastoa. Verkko koostuu kahdesta lineaarisesta muunnoksesta (matriisikertolaskusta), joiden välissä on ReLU-aktivointifunktio.

Note
Määritelmä

ReLU-aktivointifunktio: ReLU (Rectified Linear Unit) -aktivointi määritellään seuraavasti: relu(x) = max(0, x). Se asettaa kaikki negatiiviset arvot nollaksi ja säilyttää positiiviset arvot muuttumattomina. ReLU:ta käytetään syötteen eteenpäin suuntautuvassa verkossa tuomaan epälineaarisuutta, mikä mahdollistaa monimutkaisempien mallien oppimisen datasta.

Ensimmäinen lineaarinen kerros projisoi syötteen d_model-ulottuvuudesta (kunkin tokenin upotuksen koko) korkeamman ulottuvuuden tilaan d_ff, mikä mahdollistaa monimutkaisempien piirteiden havaitsemisen. Toinen lineaarinen kerros projisoi tuloksen takaisin alkuperäiseen d_model-kokoon. Huomaa, että tämä verkko sovelletaan itsenäisesti jokaiseen sekvenssin positioon, mikä tarkoittaa, että yhden tokenin muunnos ei vaikuta suoraan muihin. Tämä itsenäisyys auttaa mallia käsittelemään jokaisen tokenin esityksen rinnakkain, mikä tekee Transformereista erittäin tehokkaita tekstidatan käsittelyssä.

Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Toteuta positionaalinen syötteestä riippumaton syväsyöttöverkko-funktio käyttäen numpy-kirjastoa.

Määrittele funktio position_wise_ffn(x, W1, b1, W2, b2), joka ottaa seuraavat parametrit:

  • x: numpy-taulukko muodossa (batch_size, seq_len, d_model);
  • W1: numpy-taulukko muodossa (d_model, d_ff);
  • b1: numpy-taulukko muodossa (1, d_ff);
  • W2: numpy-taulukko muodossa (d_ff, d_model);
  • b2: numpy-taulukko muodossa (1, d_model).

Jokaiselle sekvenssin positiolle suoritetaan:

  • Lineaarinen muunnos: out1 = x @ W1 + b1;
  • ReLU-aktivointi: out1 = relu(out1);
  • Toinen lineaarinen muunnos: out2 = out1 @ W2 + b2.

Palauta tulostaulukko out2, jonka muoto on (batch_size, seq_len, d_model).

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt