Pokroky v uvažování LLM: technický hluboký ponor | B4N1

Pokroky v uvažování LLM: technický hluboký ponor

9 months ago · b4n1 Tiempo de lectura: 3 min

Úvod

Velké jazykové modely (LLM) způsobily v posledních letech revoluci v oblasti zpracování přirozeného jazyka (NLP). Tyto modely dosáhly nejmodernějších výsledků v různých úlohách NLP, včetně jazykového překladu, sumarizace textu a zodpovězení otázek. Skutečný potenciál LLM však spočívá v jejich schopnosti uvažovat a chápat složité vztahy mezi pojmy. V tomto článku se ponoříme do pokroku v uvažování LLM, prozkoumáme základní techniky, architektury a výzvy.

Pozadí

LLM jsou typem neuronové sítě, která je trénována na obrovském množství textových dat, aby se naučila vzorce a vztahy mezi slovy a pojmy. Tyto modely se obvykle skládají z kodéru a dekodéru, kde kodér zpracovává vstupní text a dekodér generuje výstupní text. Kodér je obvykle architektura založená na transformátoru, která je zvláště vhodná pro sekvenční data, jako je text.

Architektura transformátoru

Architektura transformátoru, představená v článku „Attention is All You Need“ od Vaswaniho a kol. (2017), se stal de facto standardem pro LLM. Transformátor se skládá z kodéru a dekodéru, každý složený z více vrstev. Každá vrstva se skládá ze dvou podvrstev: mechanismu sebepozorování a plně připojené dopředné sítě (FFNN).

dovozní pochodeň
importovat pochodeň.nn jako nn

class 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 forward(self, x):
        # Mechanismus sebepozornosti
        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)

        návrat x_ffnn

Pokroky v uvažování LLM

LLM dosáhly významného pokroku v uvažování a chápání složitých vztahů mezi pojmy. Některé z klíčových vylepšení zahrnují:

1. Uvažování na základě grafů

Uvažování založené na grafu zahrnuje reprezentaci znalostí jako graf, kde uzly představují pojmy a hrany představují vztahy mezi nimi. LLM mohou být trénováni, aby uvažovali o těchto grafech a předpovídali vztahy mezi uzly.

použít graf::Graf;
použijte neural_network::NeuralNetwork;

fn graph_reasoning(graph: &Graph, query: &str) -> String {
    let embedding = neural_network.query(graf, dotaz);
    let vysledek = neural_network.reason(graph, embedding);
    result.to_string()
}

2. Víceúkolové učení

Víceúlohové učení zahrnuje trénování jednoho modelu na více úkolech současně. Ukázalo se, že tento přístup zlepšuje výkon LLM při různých úkolech, včetně uvažování a porozumění složitým vztahům.

hlavní balíček

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

type Model struct {
	*nn.Lineární
	*nn.Lineární
}

func (m *Model) Forward(x *mat.Dense) *mat.Dense {
	// Přechod vpřed
	z := m.Lineární(x)
	z = m.Lineární(z)
	vrátit z
}

3. Mechanismy pozornosti

Mechanismy pozornosti umožňují LLM zaměřit se při generování výstupu na konkrétní části vstupního textu. Ukázalo se, že tento přístup zlepšuje výkon LLM při různých úkolech, včetně uvažování a porozumění složitým vztahům.

dovozní pochodeň
importovat pochodeň.nn jako nn

class AttentionMechanism(nn.Modul):
    def __init__(self, d_model, n_heads):
        super(AttentionMechanism, self).__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 forward(self, x):
        # Dotaz, klíč a hodnota
        q = self.query(x)
        k = self.key(x)
        v = vlastní hodnota(x)

        # Pozor na váhy
        váhy = pochodeň.matmul(q, k.T) / math.sqrt(q.shape[1])
        váhy = self.dropout(weights)
        hmotnosti = pochodeň.softmax(hmotnosti, dim=-1)

        # Kontextový vektor
        kontext = pochodeň.matmul(váhy, v)

        návratový kontext

Vizualizace

Pro vizualizaci výkonu LLM na různých úkolech můžeme použít graf k porovnání přesnosti různých modelů na daném úkolu. Zde je příklad grafu pomocí Chart.js:

{
  "type": "bar",
  "data": {
    "labels": ["Task 1", "Task 2", "Task 3"],
    "datové sady": [
      {
        "label": "Model 1",
        "data": [0,8, 0,7, 0,9],
        "backgroundColor": "rgba(255, 99, 132, 0,2)",
        "borderColor": "rgba(255, 99, 132, 1)",
        "šířka okraje": 1
      },
      {
        "label": "Model 2",
        "data": [0,9, 0,8, 0,7],
        "backgroundColor": "rgba(54, 162, 235, 0,2)",
        "borderColor": "rgba(54, 162, 235, 1)",
        "šířka okraje": 1
      }
    ]
  },
  "options": {
    "title": {
      "zobrazit": pravda,
      "text": "Přesnost různých modelů na různé úkoly"
    },
    "váhy": {
      "yAxes": [
        {
          "ticks": {
            "beginAtZero": pravda
          }
        }
      ]
    }
  }
}

Závěr

V tomto článku jsme prozkoumali pokroky v uvažování LLM, včetně uvažování založeného na grafech, víceúkolového učení a mechanismů pozornosti. Pro ilustraci těchto konceptů jsme také poskytli příklady kódu v Pythonu, Rustu a Go. Nakonec jsme použili graf k vizualizaci výkonu LLM při různých úkolech. Tyto pokroky mají potenciál způsobit revoluci v oblasti NLP a umožnit LLM uvažovat a chápat složité vztahy mezi pojmy.

Reference

  • Vaswani a kol. (2017). Vše, co potřebujete, je pozornost. arXiv předtisk arXiv:1706.03762. *Devlin a kol. (2018). BERT: Předškolní příprava hlubokých obousměrných transformátorů pro porozumění jazyku. arXiv předtisk arXiv:1810.04805. *Radford a kol. (2019). Jazykové modely jsou multitaskní studenti bez dozoru. arXiv předtisk arXiv:1906.08237.

¿Tienes preguntas?

Hablemos

Contáctame en LinkedIn