Tekoäly ja laajat kielimallit
Kun puhutaan tekoälystä niin usein tarkoitetaan koneoppimiseen perustuvia laajoja kielimalleja, joiden toimintaan minäkin keskityn tällä sivulla. Tämä erittäin tiivistetty teksti on tarkoitettu kaikille aiheesta kiinnostuneille, jonka lisäksi mukana on myös käytännön koodiesimerkki ilahduttamassa itseäni ja muita tänne eksyviä tavallisia ohjelmistokehittäjiä.
Näin laajat kielimallit toimivat
Koulutuksen aikana malli säätää parametrejä, jotka ovat mallin sisällä olevia numeerisia painoja, tunnistaakseen tilastollisia säännönmukaisuuksia datasta. Näin se muodostaa todennäköisyysjakauman siitä, miten "saneet" tyypillisesti esiintyvät ja liittyvät toisiinsa. Sane (token) on pieni tekstin osa, kuten sana, sanan osa tai välimerkki. Tekstiä generoitaessa malli käsittelee nykyisen tekstin, laskee todennäköisyydet mahdollisille seuraaville saneille, valitsee näistä yhden ja toistaa prosessin.
Laajat kielimallit eivät päättele
Nimestään huolimatta keinotekoisia neuroverkkoja ei ole tarkoitettu mallintamaan aivoja. Ne ovat matemaattisia funktion approksimaattoreita, jotka sovittavat funktioita dataan sen sijaan, että ne noudattaisivat selkeitä loogisia sääntöjä.
Näin funktion approksimaattori toimii käytännössä
Koulutusdata:
$training_data = [
1 => 3,
2 => 5,
3 => 7,
4 => 9,
5 => 11
];Esimerkki siitä miten malli koulutetaan:
function trainer(array $training_data): array {
$x = array_keys($training_data);
$y = array_values($training_data);
$n = count($x);
$average_x = array_sum($x) / $n;
$average_y = array_sum($y) / $n;
$numerator = 0;
$denominator = 0;
for($i = 0; $i < $n; $i++){
// Add how changes in x relate to changes in y (covariance)
$numerator += ($x[$i] - $average_x) * ($y[$i] - $average_y);
// Measure how much x varies from its average (variance)
$denominator += ($x[$i] - $average_x) ** 2;
}
$slope = $numerator / $denominator;
$offset = $average_y - $slope * $average_x;
return [$slope, $offset];
}Esimerkki siitä miten malli ajetaan:
/*
This binds model parameters to a model, creating a function
that behaves like hard-coded logic but is derived from data.
*/
function function_approximator(callable $model, array $parameters): callable {
return function(float $input) use ($model, $parameters){
[$slope, $offset] = $parameters;
return $model($input, $slope, $offset);
};
}
function model(float $input, float $slope, float $offset): float {
return $slope * $input + $offset;
}
$parameters = trainer($training_data);
$fitted_function = function_approximator('model', $parameters);
// Make a prediction
$input = 6;
$output = $fitted_function($input);
echo $output; // 13Laajat kielimallit eivät ole mustia laatikoita
Niitä voi olla vaikea tulkita, mutta niiden sisäinen toiminta ei ole tuntematonta. Niiden toimintaa ohjaavat tilastolliset piirteet ennemmin kuin piilevä logiikka, joten niitä voidaan ymmärtää tilastollisella tasolla.
Laajojen kielimallien luhistuminen
Nykyiset mallit ovat perustavanlaatuisesti rajoittuneita datan, ei laskentatehon takia. Niiden suorituskyky riippuu korkealaatuisesta, monipuolisesta, reaalimaailman datasta, joka on sekä rajallista että yhä enemmän saastunutta. Varhaisen vaiheen mallien luhistuminen on jo havaittavissa, joka heijastaa taustalla olevan datan jakauman heikkenemistä.

