Ensin kiitos kaikille oikein asiallisesta keskustelusta. Vaikka en olisi samaa mieltä arvostan laadukkaita vastineita.
Luonnollisella kielellä voidaan säätää reseptin tarkkuutta paljon. Mielestäni jopa niin paljon, ettei videota tarvita, vaikka ei olisi ikinä kokannut. Toki jos ei ole ikinä elänyt ihmisen vaan on alien toisesta maailmasta niin sitten video lienee tarpeen. Pelkästä reseptistä voidaan laajentaa, mitä välineitä on keittiössä, ja miten niitä pitäisi käyttää. Voidaan myös kertoa jauhelihan rakenteesta, väreistä jne. Luonnollisen kielen kautta mallit ovat myös oppineet jauhelihan sisältämistä makroravinteista, allergioista, ruokakemiasta sekä ruokalajeista ja juomista, jotka sopivat yhteen jauhelihan kanssa jne. Videoissa tätä ei voi olla ilman luonnollista kieltä.
Toki luonnollisella kielellä on rajat, ja monessa asiassa videosta on apua, koska sillä saadaan helposti lisää “resoluutiota” asiaan. Jossain kohtaa se videon apukin loppuu ja pitää itse opetella loppuun. Olen aikuisiällä opetellut useita uusia lajeja. Vaikka aikuisena tietty lapsuusiän herkkyys puuttuu, olen silti päässyt kohtuulliselle tasolle suunnistuksessa, lumilautailussa ja maastopyöräilyssä. Videoita katsomalla sinne ei valitettavasti pääse.
Eli mikä on mun pointtina? Varmaan se, että vaikka videolla on paljon dataa, siellä on vähän signaalia. Malleja voidaan boostata niillä ehkä 5 %. Uskottavampi lähestyminen AGI:n
saavuttamiseksi olisi, jos mallit alkaisivat oppia tekemällä ja kokeilemalla, kuten shakkikoneet, jotka oppivat pelaamalla itseään vastaan (reinforcement learning).
Jotenkin tämä “4-vuotias on nähnyt enemmän dataa” on hiukan hölmö hot-take, johon asiallinen vastaus lienee: “Montako hyödyllistä vastausta saat nelivuotiaalta vs. ChatGPT?”
Periaatteessa koodausta mallit voisivat opiskella reinforcement learning -tavalla lisää. Koodauksessahan video ei auta mitään. Alla pari onnistunutta ja epäonnistunutta koodausesimerkkiä. Kannattaa ehkä skipata, jos et ole alalla.
Fail1. Yksikään malli, ChatGPT 4.0 tai o1-mini tai Claude Opus, eivät saaneet kohtuullisen yksinkertaista koodipätkää toimimaan. Ajattelin, että saan sen LLM:n kanssa ekalla tai toisella pyynnöllä oikein, tyyliin 5-10 minuutissa. No, tappelin sitten eri mallien kanssa 2 tuntia. Sitten luovutin ja koodasin sen itse. Siinä meni seuraavat 2 tuntia. Kaikki mallit yrittivät liian hienoa toteutusta, mihin erään erittäin suositun Python-kirjaston toiminta ei taipunut. Koitin ensin kertoa malleille, että tee yksinkertaisempaa koodia. Ei auttanut. Sitten annoin malleille aivan apinatason ohjeet, että askel yksi, askel kaksi jne. Silti kaikki mallit halusivat tuottaa jotain eleganttia, joka ei toiminut ajossa. Tarjosin LLM-porukalle vielä toisen mahdollisuuden, kun omaa toteutusta piti hiukan korjata. Mallit tekivät nämä pyydetyt korjaukset, mutta hajottivat koodin uudestaan elegantilla sekoilulla. Yleensä ihmiskoodari tajuaa nopeasti, että tapa A ei toimi, vaikka pitäisi, joten kokeillaan tavalla B. Mallit taas itsepäisesti tuputtivat tapaa A.
Fail2. Nopeasti koodatessa eräs funktio oli kasvanut turhan pitkäksi, ja siinä tehtiin noin kolmea asiaa sekaisin. Lisäksi oli syntynyt koodiduplikaatteja, usean funktion tehdessä samankaltaisia asioita. Koitin saada LLM:n korjaamaan tämän ongelman. Se tuotta koodista ehkä vieläkin pahempaa sotkua. Kyseessä oli ihan perus refaktorointi, jossa piti tunnistaa yhteiset toiminnallisuudet eri paikoista, tehdä niistä funktiot ja poistaa duplikaatit. Jos malli oikeasti olisi edes keskitason koodari, tämä onnistuisi.
Yleensä LLM:n kanssa koodaus on puhdasta suklaata, kun niitä syöttää teelusikalla. Itse teen tutkimuksen kylkeen pientä data-analytiikkaohjelmistoa. Perinteisesti plottaaminen on aika tuskallista. Ensin pitää selvittää sopiva plottauskirjasto, sitten tutkia sen APIa ja koittaa saada toimimaan. Kaikki, jotka ovat R:n ggplot2:sen kanssa tapelleet, tietävät tuskan. LLM:lle näytin, mitä dataa on inputissa ja kerroin millainen kuvan pitäisi olla. Näin usean tunnin koodausrupeama tuli valmiiksi viidessä minuutissa. Toinen juttu, jonka LLM koodasi hyvin, oli konfiguraation lukeminen tiedostosta ja läpi tulevien kutsujen tekeminen dynaamisesti oikeisiin funktioihin. Nuo molemmat alueet ovat sellaisia, etten tiedä niistä hirveästi, enkä oikeastaan haluakaan tietää. Tälläkin viikolla on varmaan kymmenen tuntia säästynyt LLM:n avulla. Se ei tarkoita, että LLM yksinään mitään toimivaa saisi aikaiseksi. Ei ennen kuin se voi reinforcement learningilla opetella lisää.
Varmaan noiden epäonnistuneiden esimerkkien takia jotkut firmat käyttävät LLM:ää yllättävän vähän koodauksessa. Sekin on pelottavaa, eikä noille firmoille uskalla ennustaa hyvää tulevaisuutta. LLM:n kanssa olen keskimäärin 3x nopeampi koodari. Lisäksi jää enemmän aikaa korkeantason arkkitehtuurin pohtimiseen.