Ugródeszkák matek szakon – Mihálykó András

Ugródeszkák matek szakon – Mihálykó András

Beszélgetés Mihálykó Andrással (Algorithm Developer, SOPHiA GENETICS)

Ha jól tudom, elméleti matematikusként végeztél, nemrég védted meg a PhD-det, és mégsem akadémiai kutatóként dolgozol. Hogyhogy?

Valóban, az ELTE-n végeztem matematika BSc-t, majd matematikus MSc-t, és idén márciusban védtem meg a doktori értekezésemet, de alapvetően nem vágytam arra, hogy elméleti matematikus legyek. Már középiskolásként felismertem, hogy én programozni szeretnék, csak okosan. Matematikára jelentkeztem, de később valamilyen cégnél akartam elhelyezkedni, lehetőleg alkalmazott kutatásban.

Miért nem programozónak tanultál? Informatika tagozatra jártál a középiskolában, természetes folytatás lett volna. Ugyan matematika szakon is tanítanak programozni, de nyilván nem olyan mértékben, mint egy informatikust. Így is megérte?

Amikor én jelentkeztem egyetemre, több ismerősöm, akik nálam jóval jobb programozók voltak középiskolában, külföldre mentek informatika képzésre, vagy a matematika szakot választották. Én úgy látom – és ez nagy szívfájdalmam –, hogy itthon a programozás egyetemi oktatása jelentősen le van maradva a nemzetközi élvonalhoz képest. Egy példa: míg a középiskolásoknak rendezett Nemzetközi Informatika Diákolimpián ott van a magyar csapat és minden évben érmekkel térnek haza, addig az ACM ICPC-n, ami az egyik legrangosabb, egyetemisták számára szervezett nemzetközi programozási verseny, sok éve nem jutott ki magyar csapat a világdöntőbe. Bár azt is hozzá kell tennem, hogy utóbbi években egyre közelebb kerülnek hozzá az ELTE-s csapatok. Talán jövőre.

Mivel én „okosan” akartam programozni, ezért inkább olyan szakot választottam, ahol akkori reményeim szerint jobban fejlődhettem. Úgy vélem, abszolút megérte, hiszen a matematika oktatás itthon nagyon színvonalas.

Kutató matematikus szüleid örömmel fogadták a döntést?

Fontosnak tartották, hogy a testvéreimmel mi is foglalkozzunk a matematikával már fiatal korunktól fogva, de nem nehezedett ránk nyomás, hogy ezt a hivatást válasszuk. Én lettem az egyetlen, aki matematikára ment. Láttam, látom rajtuk, hogy élvezik, amit csinálnak. Ez sokat jelentett nekem.

Középiskolásként sok versenyen vettem részt, jól bírtam ezt a stresszt, még ha nem is értem el komolyabb eredményeket. A matematika megszerettetésében nagyon nagy szerepe volt Pósa Lajosnak, illetve Juhász Péternek is, akik nagyon élvezetesen tanítottak, hagyták nekünk felfedezni az érdekes összefüggéseket. Így a matekozás mint szórakozás lett része az életemnek, és ez jelenleg, munka mellett is így van.

A matek mellett maradt időd programozni is az egyetemen?

Elvégeztem néhány programozós kurzust, például a neurális hálókról, ami 2014-15-ben menőnek tűnt, és mára kiderült, hogy az is volt. Továbbá tanultam bioinformatikát és alkalmazott szemléletű egészértékű programozást is. De elsősorban nem ezek által fejlődtem a programozásban.

Hanem?

Leginkább azáltal, hogy programoztam. Sok programozási versenyen indultam: egyéni és csapat, illetve jelenléti és online versenyeken. Néhány, amire így hirtelen vissza tudok emlékezni: ACM, Topcoder, Google Code Jam, Codeforces, ProjectEuler, NNG programozási verseny. Emellett csak saját szórakozásból is programoztam.

Mindeközben az egyetemen, ha választanod kellett, az alkalmazott matematikusi irány helyett mindig az elméleti mellett döntöttél.

A BSc második évétől vált szét az alkalmazott és az elméleti matematikus képzés. A kollégiumi társaim – a Bolyai Kollégium tagja voltam – mind elméletire szakirányra mentek, és igazából az első évben én is intenzív szinten végeztem a tárgyakat, úgyhogy végül az elméleti mellett döntöttem. A Matematikus MSc pedig azért tűnt számomra megfelelőbbnek, mert szabadabban választhattam olyan tárgyakat, amelyeket akartam.

Meg volt egy kisebb megszakítás is a BSc és az MSc elméleti matematika között. A BSc utáni nyáron ugyanis két hónapot gyakornokoskodtam a Morgan Stanleynél. Jó volt, sokat tanultam például a vállalati kultúráról: milyen egy cégnél dolgozni, vagy látni a kollégákon, hogy milyen a munkamennyiség fluktuálása. Illetve más gyümölcse is volt: sikerült a Morgan Stanleyt megnyerni a Bolyai Konferencia szponzorálásának.

Az MSc alatt nem akartál náluk dolgozni?

Egyáltalán dolgozni nem akartam egyetem mellett. Azt akartam, hogy legyen elég időm a matekra, és nem mellékesen persze kikapcsolódásra, feltöltődésre. Én különben nem javaslom egyetemistáknak a tanulmányok melletti munkát, ha ezt pénzügyileg megengedhetik maguknak. Az egyetemista lét az életnek a legjobb része is lehet, jó szórakozás. Úgyis sokat kell tanulni, az azon túli időt inkább élvezzék, töltsék azzal, amit szeretnek csinálni. Ne az egyetem alatt égjenek ki! Lesz még rá elég lehetőségük később. Külön javaslom az Erasmust, érdemes legalább egy fél évet kint tölteni, nagyszerű élmény. Munkának a nyári gyakorlatot tudom ajánlani, azt érdemes legalább egyszer kipróbálni. Nem mellesleg az önéletrajzban is jól mutat.

De az MSc végeztével elérkezett az idő, hogy megvalósítsam a középiskolai tervemet: munkát kerestem, hogy „okosan” programozhassak. Elkezdtem dolgozni a SignAll Technologies nevű cégnél kutató-fejlesztőként.

A helyeden érezted magadat?

Igen, szerettem a munkát; jelnyelv automatikus fordításának leprogramozásával foglalkoztunk. Bár a matematikus gondolkodásmód folyamatosan segített, nem volt szükség mély matematikára: egy ilyen feladat esetén általában nem az optimális megoldás megadása a cél, hanem egy többségében jó megoldás megkeresése. De azért egy stabil párosítást csináló algoritmust csak belecsempésztem a kódba.

Mégis visszatértél az egyetemre.

Munka közben megmaradt a jó kapcsolat témavezetőmmel, Jordán Tiborral. Az MSc-s szakdolgozatom egyik új eredményéből cikk is született. Végül egy év munka után magánéleti okokból visszatértem az egyetemre, elkezdtem a doktori képzést. Nagyon hálás vagyok ezért a négy évért. Sok nehézség volt benne, cikkek, munka, covid, de végig megmaradt jó szórakozásnak. A disszertációm címe „Augmentation problems in count matroids and globally rigid graphs”, fő témája a ritkasági matroidok és (k, l)-ritkaság volt, főként  a kétdimenziós kombinatorikus merevségben előforduló kérdések által inspirálva.

Habár a szakdolgozataimat és a PhD disszertációmat is főként elméleti témákból írtam, mindegyikben hangsúlyos volt az algoritmikus szemlélet. Igaz, hogy nem alkalmazott matematikusként vagy programozóként végeztem, de az algoritmusfejlesztés szeretete végig megmaradt.

Doktori alatt nem is programoztál?

Az PhD alatt elindítottunk egy – különben még most is futó – neurális hálós projektet: Lukács András témavezetésével, Ács Judittal és Madarasi Péterrel dolgoztunk együtt. Igazán érdekes a kérdés, fő vonalaiban vázolhatom.

Egy egészértékű program (Integer Programming, IP) megoldására tervezett IP solver úgy működik, hogy valamilyen ötlet, heurisztika alapján eldönti, hogy hogyan, melyik részfeladatra keressünk megoldást a következő lépésben. A jól kiválasztott részfeladat nagyban tudja szűkíteni a még megoldásra váró részt, így gyorsítja a program futásidejét. A következő részfeladat kiválasztására vannak jobb és kevésbé jó heurisztikák. A jobbak azok, amelyek segítségével kevesebb részfeladat megoldása után megtaláljuk az optimális megoldást, de ezek persze nagyobb számítási igényű, lassabb futási idejű heurisztikák. Mire jó egy neurális háló, ha nem pont ilyen helyzet kezelésére?! Be akartunk tanítani egy hálót, hogy gyorsan és jól leutánozzon egy költséges heurisztikát.

Akartunk? Sikerült?

Nem… Voltak részeredményeink, hogy néhány speciális feladatot gyorsabban tudott megoldani, mint egy solver. Igaz, körülbelül egy éve szálltam ki a projektből, lehet, hogy most már jobb eredményeik vannak. Ez egy olyan elképzelés, ami jól hangzik, és komoly dolog lenne, ha ezt is meg tudnák oldani a neurális hálók, de egyelőre ez senkinek sem sikerült. Néhány másik kutatócsoport is foglalkozik ezzel világszerte, vannak versenyek, cikkek, de egyelőre nincs áttörés. Persze az is igaz, hogy ez messze nem annyira kutatott terület, mint például a természetes nyelvfeldolgozás. Valószínűleg a solverek cégei is dolgoznak ilyeneken, és minden bizonnyal észrevennénk, ha nekik összejönne. Ezzel a témával másfél-két évet foglalkoztam: csapatban, közösen programoztunk, nagyon hasznos volt.

Most pedig megint a középiskolai álmodat valósítod meg: egy cégnél programozol. Mesélj a mostani munkahelyedről!

Jelenleg Genfben élek, ugyanis feleségem, Zsófi itt kapott doktori ösztöndíjat. Három hónapig voltam vendégkutató az École Polytechnique Fédérale de Lausanne egyetemen, most pedig a SOPHiA GENETICS nevű cégnél dolgozom algoritmusfejlesztőként. A cég genetikai elemzéssel foglalkozik, amit főként rákdiagnosztikára és -gyógyászatra használunk.

Ezt kicsit kifejtenéd?

A különböző fajta rákoknak különböző genetikai mutációk az okai. Lehet, hogy bizonyos mutációk egy kezelésre jól reagálnak, míg más mutációk esetén ugyanaz a gyógymód teljesen hatástalan. Azért, hogy ne mindenkit kemoterápiával kezeljünk és gyengítsünk, érdemes mintát venni a rákos sejtekből és megvizsgálni, hogy milyen mutáció okozta a betegséget, így utána arra lehet célzott, kevesebb járulékos kárral járó kezelést adni. A cég egyrészt ezzel a diagnosztikával foglalkozik, másrészt pedig utánkövetéssel: gyűjti az adatokat, hogy melyik kezelés melyik betegeknél volt hatásos. Adatbázis építésével lehet javasolni kezelést másik, hasonló elváltozásos betegeknek. Mi a betegeket kezelő kórházakkal szerződünk, hogy ténylegesen a páciensek életminőségét javítsuk; értékes munka. Tíz éves a cég, és körülbelül 500-an dolgozunk itt.

És te mit csinálsz?

Egy hatfős csapat tagjaként én azokkal az algoritmusokkal dolgozom, amelyek a nyers adatot jobban értelmezhetővé teszik azoknak, akik utána a statisztikával foglalkoznak. Különben a szűkebb csapatomban mindenkinek van PhD-ja: egy bioinformatikus, négy fizikus és én, a matematikus (aki még várja, hogy kézbesítsék a hivatalos dokumentumokat).

Algoritmusfejlesztés informatikus nélkül?

Néha valóban hátrány, hogy hiányosabb a technikai tudásunk, de egyrészt a problémák által sok mindenbe beletanulunk, másrészt az egyikünk egészen jól ért az ilyen rendszergazdai feladatokhoz, általában ő szokta megoldani az elakadásokat.

Az egyetemen tanultakból mit tudsz felhasználni?

A gondolkodásmódot folyamatosan. Használok mellette algoritmuselméletet is, leggyakrabban dinamikus programozást. Néha valamilyen ismert algoritmussal dolgozom, nemrég a Smith–Waterman-algoritmus egy változatát implementáltam. Nem emlékszem, hogy pont ezt tanultam volna az egyetemen, de hasonlót egészen biztosan igen. Két string (szó) illeszkedésének az optimalizációjára szolgál.

Erről mesélj még!

Ugye a DNS-t felfoghatjuk egy stringnek, amiben csak négy betűt használhatunk. Van egy mintánk, a referencia DNS-ünk egy variánsa, és szeretnénk meghatározni, hogy ez a minta és a referencia DNS hogyan illeszkednek egymáshoz. A két string soron következő karaktereit párba állíthatjuk, ha azonosak. Ha különbözőek, akkor mondhatjuk, hogy ott eltérő a két string, de azt is, hogy a mintánkban ott van egy üres hely vagy pedig a minta tartalmaz beillesztett plusz karaktereket. Mindegyik műveletnek van egy költsége és az összköltséget szeretnénk minimalizálni.

Ez egyáltalán nem nehéz. Például, ha a referencia stringben van egy 23 hosszú karaktersor, ami a minta stringben nem található meg, a karaktersor előtt és után viszont szépen összepárosíthatók, akkor optimális eredményt kaphatunk, ha azt mondjuk, hogy a mintánkban van 23 üres hely. És általában csak ez lesz optimális. Na, de mit mondjunk, ha a 23 hosszú karaktersor a referencia stringben közvetlenül egymás után kétszer szerepel, a minta stringben viszont csak egyszer? Ekkor sokféleképpen (a példánkban 24-féleképpen) kijelölhetjük a 23 üres helyet és ezek mind ugyanolyan (optimális) költségűek. De nemcsak egy mintát veszünk le, hanem sokat. Hogyan tudjuk elérni, hogy azokat a mintákat, amik ugyanazt a variánst tartalmazzák, mindet ugyanúgy illesszük a referenciához?

Természetesen meghatározhatunk valamilyen sztenderdet, hogy hogyan ábrázoljuk a variánsokat. Ekkor minden mintát erre a sztenderdre kell hozni. Különben még ez sem nehéz, az az érzésem, hogy ezt egy viszonylag szép párosító algoritmussal lehet kezelni. Viszont a gyakorlatban nem minden ilyen egyszerű: ha van egy icipici zaj, azaz például a minta string néhány karakterét rosszul határozták meg, úgy a feladat lényege is megváltozik. Hiszen találhatunk mi optimális megoldást, meghatározhatjuk, hogy milyen illesztés eredményezi a minimális összköltséget, a matematikai optimum nagyon messze kerülhet a valós variánstól.

Én most gyakorlatilag egy olyan programot írok, ami még a zajos környezet ellenére is olyan megoldást ad, amilyet szeretnénk. Ez fogja szolgáltatni a bemenetet a következő modulnak. 4000 sor körül tartok és a tesztelések alapján jól fog működni, úgyhogy bizakodó vagyok.

Nagyon élvezetes munka lehet, pont olyan, mint amit annak idején megálmodtál!

Tényleg jó, szeretem a munkámat!

Elképzelhetőnek tartod, hogy egyszer majd mégiscsak visszatérsz az elméleti kutatáshoz?

Várhatóan néhány éven belül hazaköltözünk Magyarországra. Az akadémiával sem szakadt meg teljesen a kapcsolatom, egy cikkünk még nem jelent meg, szabadidőmben a doktori témámmal is foglalkozom valamennyit. Van még néhány elvarratlan szál benne, amit szeretnék befejezni. Szóval ki tudja? Nem valószínű, hogy végül elméleti kutatóként végzem, de nem zárom ki a lehetőségét.

Mihálykó Andrással az interjút Paulovics Zoltán készítette