» »

DeepMind izumil nov algoritem za množenje matrik, človek ga je hitro izboljšal

DeepMind izumil nov algoritem za množenje matrik, človek ga je hitro izboljšal

Slo-Tech - Umetna inteligenca, ki jo razvija DeepMind, je iznašla nov, hitrejši način za množenje matrik. Njihov program AlphaTensor iz družine Alpha je s tem popravil 50 let stari algoritem, nato pa sta ga teden dni pozneje nepričakovano prekosila avstrijska matematika z Univerze v Linzu.

Množenje matrik je izjemno pomembna računska operacija v računalništvu, ki se ponavlja pri obdelavi in izrisu slik, stiskanju, prepoznavanju govora in slik in drugod. Najučinkovitejši pri množenju matrik so grafični procesorji, ki lahko nalogo razkosajo na manjše podnaloge, nato pa se vzporedno ukvarjajo z njimi. Naivno množenje matrik, kot se ga učimo v šoli, terja množenje vsake vrstice z vsakim stolpcem, kar za matriki dimenzij n x n terja n3 operacij množenja. A s premislekom gre tudi hitreje. Nemški matematik Volker Strassen je že leta 1969 odkril algoritem, ki na primer za množenje matrik 2 x 2 namesto osmih potrebuje sedem operacij množenja, za matriki 4 x 4 pa namesto 64 le 49. Njegova zahtevnost ni O(n3), temveč O(n2,81).

Kasneje so raziskovalci odkrili algoritme s še nižjo zahtevnostjo, a v praksi to ni prineslo pohitritev. Čeprav so imeli nižji eksponent, so bili predfaktorji tako veliki, da bi bili hitrejši le pri tako ogromnih matrikah, ki jih v praksi nikoli ne srečamo. Takšne algoritme imenujemo galaktični algoritmi. Zato se je še vedno uporabljal Strassnov algoritem, ki na račun manj operacij množenja potrebuje več operacij seštevanja, a so te bistveno hitrejše.

AlphaTensor pa je odkril vrsto algoritmov za množenje matrik, ki ljudem niso intuitivni in jih zato človeški raziskovalci še niso odkrili. Večina je bila počasnejših od Strassnovega algoritma, a med njimi je bil tudi hitrejši. Številke so res velike. Za matrike 4x4 je AlphaTensor odkril 14.000 algoritmov. AlphaTensor je odkril algoritme za matrike različnih dimenzij, ki so še malce hitrejši. Testi na Nvidii V100 in Google TPU so pokazali, da je pohitritev 10- do 20-odstotna. Konkretno, namesto 49 operacij množenja na matrikah 4x4 potrebuje novi algoritem le 47 operacij množenja.

Novi algoritem je matematično preverjen in pravilen, čeprav nihče ne ve, kako ga je AlphaTensor lahko odkril in zakaj se ga ni bil domislil noben človek. In ko je že kazalo, da bo to za nekaj časa nov rekord, sta Manuel Kauers in Jakob Moosbauer odkril še en algoritem, ki je za poseben primer še malce hitrejši. Za množenje matrik 5x5 namesto 96 operacij, kolikor jih je potreboval AlphaTensor, zadostuje 95 operacij množenja. Strassnov algoritem jih potrebuje 98. Kauers in Moosbauer sta povedala, da sta kot izhodišče uporabila AlphaTensorjev algoritem in ga še izboljšala. Ljudje torej še niso odslužili.

DeepMind je doslej razvil umetno inteligenco za cel kup problemov, ne le množenje matrik. Njegovi izdelki so igrali go, brali z ustnic, simulirali jedrsko fuzijo, razvozlavali povezave v teoretični matematiki, analizirali starodavna besedila, izračunavali zvijanje beljakovin itd. Zdi se, da se lahko lotijo skoraj kateregakoli problema in izboljšajo človeške rešitve. Zadnje odkritje avstrijskih matematikov pa kaže, da je človek še vedno nujen, da osmisli rezultate in jih morda še izboljša. Računalniki so pač naši pomočniki.



11 komentarjev

MaFijec ::

Originalni članek je precej marketinško usmerjen, kot se za deep learning spodobi.

Analiza Strassnovega algoritma je asimptotična, uporablja se ga ko je dimenzija dovolj velika. Za konkretne dimenzije so bili že prej znani algoritmi, ki to opravijo z manj operacijami. Prav tako je analiza asimptotične zahtevnosti, nekaj povsem drugega kot iskanje algoritma, ki ima najmanjše število operacij, spet drug problem je iskanje algoritma, ki je najhitrejši za specifično arhitekturo. V članku je vse precej pomešano.
Poleg tega preiskujejo poseben podprostor operacij in seveda ne vse možne algoritme, ki pripeljejo do množenja dveh matrik. Take, ki se jih da predstaviti kot tenzor, plus še nekaj dodatne bločne strukture, algoritem se pa išče kot dekompozicija čim manjšega ranga, kjer je rang tenzorske dekompozicije število operacij. To je NP težek problem v splošnem, kar piše tudi vi članku.
Tako da ni presenetljivo, da so našli algoritem z manjšim številom operacij.
Poleg tega ni nobenega zagotovila, da je končen algoritem numerično stabilen, kar vse napravi delno uporabno.
Še kaj drugega se najde. Drugače je rezultat impresiven, ampak niti približno toliko kot je predstavljeno.

Zgodovina sprememb…

  • spremenilo: MaFijec ()

hbgqzR ::

To je mojster, kaj češ tu dodat...

Rias Gremory ::

Prvi komentar je prav osvežujoč in je vrsta komentarja, ki bi jih v večinskem deležu pričakoval na portalu kot je Slo-Tech.
Hvala @MaFijec.
Mirno gledamo, kako naš svet propada,
saj za časa našega življenja ne bo popolnoma propadel.

Maxlos ::

Zanimivo,
verjetno ne bodo samo roboti v kitajskih tovarnah.
AI ne more patentirat, lahko pa korporacija ki si lasti AI, ki je to ustvaril.
Barking up the wrong tree

link_up ::

Pa zna DM na koncu dneva priznati, da je bil butast?

mafijc je pa pa Stepisnikov stil. :)
In and Out

Zgodovina sprememb…

  • spremenilo: link_up ()

ales85 ::

MaFijec je izjavil:


Poleg tega ni nobenega zagotovila, da je končen algoritem numerično stabilen, kar vse napravi delno uporabno.

S tem se pa se nisem srecal, kaj to pomeni? Imam idejo, ampak ne zelim ugibati :)

Zgodovina sprememb…

  • spremenil: ales85 ()

IgorCardanof ::

ales85 je izjavil:

MaFijec je izjavil:


Poleg tega ni nobenega zagotovila, da je končen algoritem numerično stabilen, kar vse napravi delno uporabno.

S tem se pa se nisem srecal, kaj to pomeni? Imam idejo, ampak ne zelim ugibati :)


Vecinoma vedno racunas z realnimi stevili, katera pa v racunalniku seveda ne mores tocno predstavit. Lahko uporabis le njihov priblizek. Zdej pa ce ti racunas s priblizki, se ti lahko tvoje napako z racunanjem povecujejo. Ti si pa na koncu seveda zelis cimbolj tocen rezultat. Zelo kriticne so recimo kako operacije deljenja z zelo majhnimi stevili. Majhna napaka pri majhni stevilki bo denimo pri deljenju lahko povzrocila hudo odstopanje.

Recimo:
1000 / 0.00000000367
1000 / 0.00000000368

Razlike potem pridejo ogromne in z nadaljnim racunanjem postane najbrz se slabse in tvoj koncni izracunan rezultat ne bo imel veliko pomena, ker bo od dejanskega prevec odstopal.
Retail investor, Simp, Crypto analyst, Cardano hejtr
Ne odgovarjam na DM.

kuall ::

napredek v AI se dogaja. sprašujem se ali dovolj hitro, da bomo še videli v našem življenju kaj res impresivnega tu. po moje ne. ko pa bo nam ne bo zgledalo "nič posebnega".

Jarno ::

IgorCardanof je izjavil:


Recimo:
1000 / 0.00000000367
1000 / 0.00000000368

Razlike potem pridejo ogromne in z nadaljnim racunanjem postane najbrz se slabse in tvoj koncni izracunan rezultat ne bo imel veliko pomena, ker bo od dejanskega prevec odstopal.


Primer je malce slabo izbran, ker je format števil s plavajočo vejico takšen, da nima decimalnega dela s fiksno dolžino (predznak, mantisa, eksponent).
Ampak se "na spletu" da prebrati, da je 32 bitov premalo za dolgoročne kalkulacije in se prikradejo zgoraj omenjene degradacije. 64 bitna natančnost ftw.
#65W!

MaFijec ::

s = 1e-17
sum1 = 0
sum2 = 0
sum1 += 1
for i in range(int(1e8)):
    sum1 += s
    sum2 += s
sum2 += 1
print(sum1)
print(sum2)

sum1 bo zmeraj 1.0, sum2 izracun pa je stabilen in za konkreten primer 1.000000001
To je aritmetika v plavajoci vejici, stabilnost je se toliko bolj pomembna za float32, float16 aritmetiko (bolj kot za float32), ki je zelo hitra na gpujih and tpujih, itd. Numericno nestabilen algoritem v float16 aritmetiki je lahko na koncu cisto neuporaben.
Plavajoca vejica

Zgodovina sprememb…

  • spremenilo: MaFijec ()

MaFijec ::

Algoritem je direktno stabilen, če vrne rezultat, ki se malo razlikuje od prave vrednosti.Ponavadi preverjamo relativno direktno stabilnost. Direktna absolutna in relativna napaka sta|y_i|in|y_i-y|/|y|.
Algoritem je obratno stabilen, če za izračunan rezultat obstajajo taki malo zmoteni podatki, daiz njih s točnim izračunom dobimo izračunano vrednost. Obratna absolutna napaka je najmanjši|?x|,tako da velja f(x+?x)=y_i. Obratna relativna napaka je |?x|/|x|.
y_i je izračunana vrednost, y je eksaktna vrednost.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Visual Basic - matrike z datagridview

Oddelek: Programiranje
81244 (916) blay44
»

Računalništvo in (matematika vs. informatika)

Oddelek: Šola
104681 (4333) Pureforce
»

Matrix multiplication program Pycuda in Mathlab

Oddelek: Programiranje
292522 (2097) Senitel
»

Strassenovo množenje matrik

Oddelek: Programiranje
102170 (1911) eXoo
»

mnozenje matrik

Oddelek: Programiranje
194729 (4391) Vesoljc

Več podobnih tem