LLM-päättelyn edistysaskel: tekninen syväsukellus | B4N1

LLM-päättelyn edistysaskel: tekninen syväsukellus

9 months ago · b4n1 Read time: 3 min

Johdanto

Suuret kielimallit (LLM) ovat mullistaneet luonnollisen kielen käsittelyn (NLP) alan viime vuosina. Nämä mallit ovat saavuttaneet huippuluokan tuloksia erilaisissa NLP-tehtävissä, mukaan lukien kielen kääntäminen, tekstin yhteenveto ja kysymyksiin vastaaminen. LLM:ien todellinen potentiaali piilee kuitenkin heidän kyvyssään perustella ja ymmärtää monimutkaisia ​​käsitteiden välisiä suhteita. Tässä artikkelissa perehdymme LLM-päättelyn edistymiseen ja tutkimme taustalla olevia tekniikoita, arkkitehtuuria ja haasteita.

Tausta

LLM:t ovat eräänlainen hermoverkko, joka on koulutettu valtaviin määriin tekstidataa oppimaan kuvioita ja suhteita sanojen ja käsitteiden välillä. Nämä mallit koostuvat tyypillisesti kooderista ja dekooderista, joissa kooderi käsittelee syötetyn tekstin ja dekooderi generoi tulostekstin. Enkooderi on yleensä muuntajapohjainen arkkitehtuuri, joka sopii erityisen hyvin peräkkäiselle datalle, kuten tekstille.

Transformer-arkkitehtuuri

Muuntaja-arkkitehtuuri, joka esiteltiin Vaswanin et al. (2017), on tullut de facto standardi LLM:ille. Muuntaja koostuu kooderista ja dekooderista, joista kukin koostuu useista kerroksista. Jokainen kerros koostuu kahdesta alikerroksesta: itsetarkkailumekanismista ja täysin yhdistetystä feed-forward-verkosta (FFNN).

tuonti taskulamppu
tuonti taskulamppu.nn nimellä nn

luokka TransformerLayer(nn.Module):
    def __init__(itse, d_malli, n_heads, d_ff):
        super(TransformerLayer, itse).__init__()
        self.self_attn = nn.MultiHeadAttention(d_malli, n_heads)
        itse.ffnn = nn.Lineaarinen(d_malli, d_ff)
        self.dropout = nn.Dropout(0.1)
        self.layer_norm = nn.LayerNorm(d_model)

    def eteenpäin(itse, x):
        # Itsehuomiomekanismi
        x_attn = self.self_attn(x, x)
        x_attn = self.dropout(x_attn)
        x_attn = x + x_attn

        # FFNN
        x_ffnn = itse.ffnn(x_attn)
        x_ffnn = self.dropout(x_ffnn)
        x_ffnn = self.layer_norm(x_ffnn + x_attn)

        palauta x_ffnn

LLM-päättelyn edistyminen

LLM:t ovat edistyneet merkittävästi käsitteiden välisten monimutkaisten suhteiden päättelyssä ja ymmärtämisessä. Jotkut tärkeimmistä edistysaskeleista ovat:

1. Kaaviopohjainen päättely

Graafipohjaiseen päättelyyn kuuluu tiedon esittäminen graafina, jossa solmut edustavat käsitteitä ja reunat niiden välisiä suhteita. LLM:t voidaan kouluttaa ajattelemaan näitä kaavioita ja tekemään ennusteita solmujen välisistä suhteista.

käytä kuvaajaa::Graph;
käytä hermoverkko::NeuralNetwork;

fn graph_reasoning(kaavio: &Kaavio, kysely: &str) -> Merkkijono {
    anna upottaminen = hermoverkko.kysely(kaavio, kysely);
    anna tulos = hermoverkko.reason(kaavio, upottaminen);
    result.to_string()
}

2. Multi-Task Learning

Monitehtäväoppiminen tarkoittaa yhden mallin harjoittelua useille tehtäville samanaikaisesti. Tämän lähestymistavan on osoitettu parantavan LLM:ien suorituskykyä erilaisissa tehtävissä, mukaan lukien päättely ja monimutkaisten suhteiden ymmärtäminen.

pääpaketti

tuonti (
	"fmt"
	"gonum.org/v1/gonum/mat"
)

tyyppi malli struct {
	*nn.Lineaarinen
	*nn.Lineaarinen
}

func (m *malli) Eteenpäin(x *matto.Tiheä) *matto.Tiheä {
	// Eteenpäinsyöttö
	z := m.Lineaarinen(x)
	z = m.Lineaarinen(z)
	palauta z
}

3. Huomiomekanismit

Huomiomekanismit antavat LLM:t keskittyä tiettyihin syöttötekstin osiin tulostetta luodessaan. Tämän lähestymistavan on osoitettu parantavan LLM:ien suorituskykyä erilaisissa tehtävissä, mukaan lukien päättely ja monimutkaisten suhteiden ymmärtäminen.

tuonti taskulamppu
tuonti taskulamppu.nn nimellä nn

luokan huomiomekanismi(nn.moduuli):
    def __init__(itse, d_malli, n_heads):
        super(AttentionMechanism, self).__init__()
        self.query = nn.Lineaarinen(d_malli, d_malli)
        self.key = nn.Lineaarinen(d_malli, d_malli)
        itse.arvo = nn.Lineaarinen(d_malli, d_malli)
        self.dropout = nn.Dropout(0.1)
        self.layer_norm = nn.LayerNorm(d_model)

    def eteenpäin(itse, x):
        # Kysely, avain ja arvo
        q = self.query(x)
        k = oma.avain(x)
        v = itsearvo(x)

        # Huomiopainot
        painot = taskulamppu.matmul(q, k.T) / math.sqrt(q.shape[1])
        painot = self.dropout(painot)
        painot = taskulamppu.softmax(painot, dim = -1)

        # Kontekstivektori
        konteksti = taskulamppu.matmul(painot, v)

        palauttaa kontekstin

Visualisointi

Havainnollistaaksemme LLM:ien suorituskykyä eri tehtävissä, voimme käyttää kaaviota vertaamaan eri mallien tarkkuutta tietyssä tehtävässä. Tässä on esimerkki Chart.js:ää käyttävästä kaaviosta:

{
  "tyyppi": "palkki",
  "data": {
    "labels": ["Task 1", "Task 2", "Task 3"],
    "tietojoukot": [
      {
        "label": "Malli 1",
        "data": [0,8, 0,7, 0,9],
        "backgroundColor": "rgba(255, 99, 132, 0.2)",
        "borderColor": "rgba(255, 99, 132, 1)",
        "borderWidth": 1
      },
      {
        "label": "Model 2",
        "data": [0,9, 0,8, 0,7],
        "backgroundColor": "rgba(54, 162, 235, 0.2)",
        "borderColor": "rgba(54, 162, 235, 1)",
        "borderWidth": 1
      }
    ]
  },
  "vaihtoehdot": {
    "otsikko": {
      "näyttö": totta,
      "text": "Eri mallien tarkkuus eri tehtävissä"
    },
    "vaa'at": {
      "yAxes": [
        {
          "ticks": {
            "beginAtZero": totta
          }
        }
      ]
    }
  }
}

Johtopäätös

Tässä artikkelissa olemme tutkineet LLM-päättelyn edistysaskeleita, mukaan lukien graafipohjainen päättely, monitehtäväoppiminen ja huomiomekanismit. Olemme myös toimittaneet koodiesimerkkejä Pythonissa, Rustissa ja Gossa havainnollistamaan näitä käsitteitä. Lopuksi olemme käyttäneet kaaviota visualisoidaksemme LLM:ien suorituskykyä erilaisissa tehtävissä. Nämä edistysaskeleet voivat mullistaa NLP:n alan, jolloin LLM:t voivat järkeillä ja ymmärtää monimutkaisia ​​käsitteiden välisiä suhteita.

Viitteet

  • Vaswani et ai. (2017). Huomio on kaikki mitä tarvitset. arXiv preprint arXiv:1706.03762.
  • Devlin et ai. (2018). BERT: Syvien kaksisuuntaisten muuntajien esikoulutus kielen ymmärtämiseen. arXiv preprint arXiv:1810.04805.
  • Radford et ai. (2019). Kielimallit ovat valvomattomia moniajooppijoita. arXiv preprint arXiv:1906.08237.

Have Questions?

Let's Talk

Contact me on LinkedIn