tiistai 23. toukokuuta 2023

Tekoälyä kiusaamassa


Bing Image Creatorin vastaus kuvapyyntöön aiheesta
'AI chatbot trying to solve a geometric problem'.

Tekoälybotti ChatGPT:n matemaattiset kyvyt ovat herättäneet mielenkiintoa: Mitä kaikkea se osaa ja mihin kaikkeen sitä voi käyttää?

Kyseessä on kielimalli, joka pystyy juttelemaan varsin luonnollisen tuntuisesti monista asioista monilla kielillä. Matematiikka on kuitenkin hieman eri asia: on pystyttävä ajattelemaan kerätyn valmiin tiedon lisäksi. (Aivan oikein: Matematiikassakin tarvitaan enemmän tai vähemmän ulkoa oppimista. Ilman asioiden tietämistä ei oikein ole, mitä ajatella.)

Timo Tossavainen on Tieteessä tapahtuu -lehdessä esittänyt ja kommentoinut keskustelunsa ChatGPT:n kanssa Bolzano-Weierstrassin lauseen todistamisesta. Varsin vaativaa pyytää tällaista todistusta eikä ChatGPT asiasta oikein suoriutunutkaan. Se osasi kyllä käyttää luontevia aiheeseen liittyviä fraaseja, mutta pitävää logiikkaa ei syntynyt. Eihän sitä voisi kielimallilta vaatiakaan.

ChatGPT osaa ainakin jonkin verran kirjoittaa ohjelmakoodeja. Python tuntuu olevan sille luonteenomainen ympäristö, nyt jo muinaiseksi käynyttä BASIC-koodiakin sain sen tuottamaan. Mathematica-ohjelmiston ohjelmointikieltä, Wolfram Languageakin se pystyy kirjoittamaan; tähän palaan joskus toiste.


Pyysin ChatGPT:ltä koodia kolmion pinta-alan laskemiseen, kun lähtötietoina ovat kärkipisteiden koordinaatit $(x_1,y_1)$, $(x_2,y_2)$, $(x_3,y_3)$. Tuloksena oli lyhyt täysin oikea koodi, joka perustui valmiin kaavan käyttöön: ala on $|x_3(-y_1 + y_2) + x_2(-y_3 + y_1) + x_1(-y_2 + y_3)|/2$. Näinhän asia tietenkin on. Olin vain ajatellut, että lähtökohtana olisi ollut puolet kannan ja korkeuden tulosta.

Jos kaavaa ei ennestään tunne, sen johtaminen lienee yksinkertaisinta ristitulon avulla: kolmion ala on $|\vec{a} \times \vec{b}|/2$, missä $\vec{a}$ ja $\vec{b}$ ovat kolmion sivuvektorit. Vektorialgebraa tuntemattomalle lienee kuitenkin helpointa ottaa lähtökohdaksi puolet kannan ja korkeuden tulosta. Pyysin siis ChatGPT:tä johtamaan käyttämänsä kaavan tästä lähtökohdasta.

Tapansa mukaan ChatGPT oli myönteinen:

Yes, the formula (x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2 can be derived from the fact that the area of a triangle is half of the product of its base and height. Consider a triangle with vertices A(x1,y1), B(x2,y2), and C(x3,y3). Let the base of the triangle be the line segment BC and let the height of the triangle be the perpendicular distance from A to BC, which we'll call h.

Tämän jälkeen se laski sivun $BC$ pituuden Pythagoraan mukaisesti ja totesi korkeudesta:

The distance between point A and the line BC is given by: h = (|x2*y3 + y2*x1 + x3*y1 - x1*y3 - y1*x2 - y2*x3|) / BC

Kolmion alan lauseke syntyi nyt tietenkin suoraviivaisesti, mutta en ollut tyytyväinen, vaan kysyin, mistä se sai korkeuden lausekkeen.

The expression |x2y3 + y2x1 + x3y1 - x1y3 - y1x2 - y2x3| can be derived using the formula for the distance between a point and a line.

Aivan oikein, näinhän voi edetä ja käyttää analyyttista geometriaa. ChatGPT muodosti suoralle $BC$ yhtälön ja saattoi sen standardimuotoon, vaikkei tätä myöhemmin käyttänytkään. Laski suoran kulmakertoimen ($m = \dots$) ja totesi, että korkeusjanan kulmakerroin on $-1/m$. Tämän jälkeen se muodosti korkeusjanasuoran yhtälön ja tavoitteena oli laskea korkeusjanan kantapisteen koordinaatit kahden suoran leikkauspisteenä. Sitten voikin laskea korkeusjanan pituuden ja kolmion alan lausekkeen.

Kaikki ei kuitenkaan mennyt niin kuin pitäisi. Kulmakertoimen $m$ lausekkeen sijoittaminen jäi puolinaiseksi: yhteen kohtaan sijoitettiin, kaikkialle ei. Yhtälöiden ratkaisemisessa termejä siirrettiin yhtäläisyysmerkin toiselle puolelle, mutta merkin vaihtaminen unohtui. Oikeaan lopputulokseen pääsemistä tämä ei kuitenkaan häirinnyt.

Esitin kritiikkiä:

I have studied your computations and there are some errors in the algebra of equations. But they annul each other, and then, the ultimate result is correct. I think, you shoud be more careful!

ChatGPT:

I apologize for any errors in my computations. As an AI language model, I try my best to provide accurate answers to the best of my knowledge and understanding. However, I understand that mistakes can still happen, and I appreciate you pointing out any errors you have found.

If you could let me know which equations you found errors in, I can take a closer look and see if there are any corrections I can make to improve the accuracy of my answer. Thank you for your feedback and for your understanding.

Huomautin kulmakertoimen sijoittamisesta ja termien merkinvaihdosta. Hän (tuntuu, että näin todellakin on syytä sanoa) kiitti ja erosimme toivottaen toisillemme hyvää yötä.

Mitä tästä kaikesta sitten pitäisi ajatella? Keskustelu saa hämmästyttävän inhimillisiä piirteitä. ChatGPT oli kohtelias eikä jankuttanut (vaikka tätäkin se tekee). Fraasit se hallitsee, mutta ajattelussa — tietenkin — on puutteita. Jään miettimään, kuinka paljon ihmisten välisessä kanssakäymisessäkin on vakiofraaseja ilman syvempää ajattelua.

Entä sitten tekoäly ja matematiikan opiskelu? ChatGPT:n esitystä en matematiikan opiskeluun suosittelisi. Ajattelu — jota siis oikeastaan ei ole — on sekavaa eikä virheettömyydestä ole takeita. Jos opiskelija ei asiaa ennestään tunne, hän hämmentyy. Tiettyjä faktoja ChatGPT:ltä voi kysyä (samoin kuin vaikka Googlen hakukoneelta) ja saattaa hyvinkin saada kelvollisia vastauksia. Hakukoneen käyttöön verrattuna haittana on, että lähdekritiikkiin on vähemmän mahdollisuuksia. Olen kysynyt ChatGPT:ltä matriisin häiriöalttiuden (condition number) määrittelyä ja saanut moitteettoman vastauksen (ainakin siis tässä tapauksessa).

On tietenkin vaikeata sanoa, mihin tekoälyn kehitys johtaa. Luovaan ajatteluun on kuitenkin vielä matkaa, jos siihen koskaan päästäänkään.

1 kommentti:

Pekka Alestalo kirjoitti...

Mielenkiintoisia kokeiluja. Olen itsekin testaillut joidenkin yliopistotason tehtävien ratkaisemista ChatGPT:n avulla. Vastaukset ovat usein erittäin hyviä, mutta esimerkiksi ellipsin puoliakselitehtävässä "Maximize x^2 + y^2 subject to the constraint x^2 + 4*y^2 = 1" se meni ainakin osittain vikaan. Tehtävähän on hyvin helppo, koska ellipsi on standardiasennossa, mutta ohjelma ryhtyi ratkomaan sitä Lagrangen menetelmällä, jota olin hieman odottanutkin. Ratkaisun logiikka oli täysin oikea, samoin vastaus max = 1, mutta välivaiheessa lausekkeen 4*lambda*y^2 osittaisderivaataksi ilmestyi 4*lambda*y,joka johti ylimääräisiin kriittisiin pisteisiin. Oikeat ääriarvokohdat pysyivät kuitenkin mukana, joten vastaus oli oikein. Jos tämä olisi ollut opiskelijan koevastaus, niin olisin ehkä antanut viisi pistettä kuudesta.

En ole kokeillut aivan äskettäin, onko Wolfram-alphan mukaan tulo parantanut ohjelman mekaanisia laskutaitoja.