Progrese în raționamentul LLM: o scufundare tehnică profundă | B4N1

Progrese în raționamentul LLM: o scufundare tehnică profundă

9 months ago · b4n1 Read time: 4 min

Introducere

Modelele de limbaj mari (LLM) au revoluționat domeniul procesării limbajului natural (NLP) în ultimii ani. Aceste modele au obținut rezultate de ultimă generație în diferite sarcini NLP, inclusiv traducerea limbii, rezumarea textului și răspunsul la întrebări. Cu toate acestea, adevăratul potențial al LLM constă în capacitatea lor de a raționa și de a înțelege relațiile complexe dintre concepte. În acest articol, vom aprofunda în progresele raționamentului LLM, explorând tehnicile, arhitecturile și provocările care stau la baza.

Fundal

LLM-urile sunt un tip de rețea neuronală care este antrenată pe cantități mari de date text pentru a învăța modele și relații dintre cuvinte și concepte. Aceste modele constau de obicei dintr-un codificator și un decodor, unde codificatorul procesează textul de intrare, iar decodorul generează textul de ieșire. Codificatorul este de obicei o arhitectură bazată pe transformator, care este deosebit de potrivită pentru date secvențiale precum textul.

Arhitectura transformatoarelor

Arhitectura transformatorului, introdusă în lucrarea „Attention is All You Need” de Vaswani et al. (2017), a devenit standardul de facto pentru LLM. Transformatorul este format dintr-un encoder și un decodor, fiecare compus din mai multe straturi. Fiecare strat este format din două substraturi: un mecanism de auto-atenție și o rețea feed-forward (FFNN) complet conectată.

torță de import
import torch.nn ca nn

clasa TransformerLayer(nn.Module):
    def __init__(self, d_model, n_heads, d_ff):
        super(TransformerLayer, self).__init__()
        self.self_attn = nn.MultiHeadAttention(d_model, n_heads)
        self.ffnn = nn.Linear(d_model, d_ff)
        self.dropout = nn.Dropout(0,1)
        self.layer_norm = nn.LayerNorm(d_model)

    def înainte(self, x):
        # Mecanism de autoatenție
        x_attn = self.self_attn(x, x)
        x_attn = self.dropout(x_attn)
        x_attn = x + x_attn

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

        returnează x_ffnn

Progrese în raționamentul LLM

LLM-urile au făcut progrese semnificative în raționamentul și înțelegerea relațiilor complexe dintre concepte. Unele dintre progresele cheie includ:

1. Raționament bazat pe grafice

Raționamentul bazat pe grafic implică reprezentarea cunoștințelor ca un grafic, unde nodurile reprezintă concepte, iar marginile reprezintă relațiile dintre ele. LLM-ii pot fi instruiți să raționeze despre aceste grafice, făcând predicții despre relațiile dintre noduri.

folosește graph::Graph;
utilizați rețeaua_neurală::Rețeaua neurală;

fn graph_reasoning(graph: &Graph, interogare: &str) -> String {
    let embedding = rețea_neurală.query(graf, interogare);
    let result = neuronal_network.reason(graph, embedding);
    result.to_string()
}

2. Învățare cu mai multe sarcini

Învățarea cu mai multe sarcini implică antrenarea unui singur model pe mai multe sarcini simultan. S-a demonstrat că această abordare îmbunătățește performanța LLM-urilor în diverse sarcini, inclusiv raționarea și înțelegerea relațiilor complexe.

pachet principal

import (
	"fmt"
	„gonum.org/v1/gonum/mat”
)

tip Model struct {
	*nn.Liniar
	*nn.Liniar
}

func (m *Model) Înainte(x *mat.Dense) *mat.Dense {
	// Pasă înainte
	z := m.Liniar(x)
	z = m.Liniar(z)
	întoarce z
}

3. Mecanisme de atenție

Mecanismele de atenție permit LLM-urilor să se concentreze pe anumite părți ale textului de intrare atunci când generează rezultatul. S-a demonstrat că această abordare îmbunătățește performanța LLM-urilor în diverse sarcini, inclusiv raționarea și înțelegerea relațiilor complexe.

torță de import
import torch.nn ca nn

clasa AttentionMechanism(nn.Modul):
    def __init__(self, d_model, n_heads):
        super(Mecanism de atenție, sine).__init__()
        self.query = nn.Linear(d_model, d_model)
        self.key = nn.Linear(d_model, d_model)
        self.value = nn.Linear(d_model, d_model)
        self.dropout = nn.Dropout(0,1)
        self.layer_norm = nn.LayerNorm(d_model)

    def înainte(self, x):
        # Interogare, cheie și valoare
        q = self.query(x)
        k = self.key(x)
        v = self.value(x)

        # Atenție greutăți
        greutăți = torch.matmul(q, k.T) / math.sqrt(q.shape[1])
        greutăți = self.dropout(greutăți)
        greutăți = torch.softmax(greutăți, dim=-1)

        # Vector de context
        context = torch.matmul(greutăți, v)

        contextul de întoarcere

Vizualizare

Pentru a vizualiza performanța LLM-urilor la diferite sarcini, putem folosi o diagramă pentru a compara acuratețea diferitelor modele pentru o anumită sarcină. Iată un exemplu de diagramă care utilizează Chart.js:

{
  "tip": "bar",
  „date”: {
    „etichete”: [„Sarcina 1”, „Sarcina 2”, „Sarcina 3”],
    „seturi de date”: [
      {
        "label": "Model 1",
        „date”: [0,8, 0,7, 0,9],
        "backgroundColor": "rgba(255, 99, 132, 0.2)",
        "borderColor": "rgba(255, 99, 132, 1)",
        „borderWidth”: 1
      },
      {
        "label": "Modelul 2",
        „date”: [0,9, 0,8, 0,7],
        "backgroundColor": "rgba(54, 162, 235, 0.2)",
        "borderColor": "rgba(54, 162, 235, 1)",
        „borderWidth”: 1
      }
    ]
  },
  „opțiuni”: {
    „titlu”: {
      „afișare”: adevărat,
      „text”: „Acuratețea diferitelor modele pentru diverse sarcini”
    },
    „scale”: {
      „yAxes”: [
        {
          „căpușe”: {
            „beginAtZero”: adevărat
          }
        }
      ]
    }
  }
}

Concluzie

În acest articol, am explorat progresele în raționamentul LLM, inclusiv raționamentul bazat pe grafice, învățarea cu sarcini multiple și mecanismele de atenție. De asemenea, am oferit exemple de cod în Python, Rust și Go pentru a ilustra aceste concepte. În cele din urmă, am folosit o diagramă pentru a vizualiza performanța LLM-urilor la diferite sarcini. Aceste progrese au potențialul de a revoluționa domeniul NLP, permițând LLM-urilor să raționeze și să înțeleagă relațiile complexe dintre concepte.

Referințe

  • Vaswani et al. (2017). Atenția este tot ce aveți nevoie. arXiv preprint arXiv:1706.03762.
  • Devlin și colab. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv preprint arXiv:1810.04805.
  • Radford și colab. (2019). Modelele lingvistice sunt cursanți multitask nesupravegheați. arXiv preprint arXiv:1906.08237.

Have Questions?

Let's Talk

Contact me on LinkedIn