Neuvonta uusille ja nuoremmille tietotieteilijöille

Mitä olisin sanonut itselleni muutama vuosi sitten

Kuvaluotto: Alice Truong

Motivaatio

Kaksi vuotta sitten jaoin kokemukseni tietotekniikan tekemisestä teollisuudessa. Kirjoittamisen oli alun perin tarkoitus olla yksityinen pohdinta itselleni juhlistaakseni kaksivuotista twitterversaariani Twitterissä, mutta julkaisin sen sijaan Mediumissa, koska uskon, että se voisi olla erittäin hyödyllinen monille pyrkiville tietotieteilijöille.

Nopeasti eteenpäin vuoteen 2017, olen työskennellyt Airbnb: llä vähän alle kaksi vuotta ja minusta on tullut äskettäin vanhempi tietotekniikan asiantuntija - alanimike, jota käytetään ilmoittamaan, että henkilö on hankkinut tietyn tason teknisen asiantuntemuksen. Kun pohdin matkaani toistaiseksi ja kuvitellaan mitä seuraavaksi tapahtuu, kirjoitin jälleen muutaman oppitunnin, jotka toivon tuntevani urani aiempina päivinä.

Jos edellinen viestini oli tarkoitettu pyrkivälle tiedemiehille ja ihmisille, jotka ovat täysin uusia alalle, tämä artikkeli on tarkoitettu ihmisille, jotka ovat jo kentällä, mutta ovat vasta aloittamassa. Tavoitteenani on käyttää tätä viestiä muistutuksena itselleni tärkeistä asioista, jotka olen oppinut, mutta myös inspiroida muita heidän aloittaessaan DS-uransa!

Kenen kriittinen polku olet?

Philip Guo, erinomainen akateeminen ja tuottelias bloggaaja, heijasti kokemustaan ​​vuorovaikutuksesta eri mentorien kanssa opiskelijana, harjoittelijana ja tutkijana. Mietinnössään ”Kenen kriittinen polku olet?” Hän esitti seuraavan havainnon:

Jos olisin mentorin kriittisellä tiellä [uran etenemiseen tai saavuttamiseen], niin he taistelisivat kovasti varmistaakseen, että sain apua, jota tarvitsin menestymiseen. Toisaalta, jos en ollut mentorin kriittisellä tiellä, jäin yleensä taistelemaan itselleni. […] Jos pääset jonkun kriittiselle tielle, pakotat hänet sitomaan menestyksen heidän omaan, mikä motivoi heitä nostamaan sinut ylös niin kovaa kuin mahdollista.
Kuvaluotto: The Icefields Parkway // Daniel Han

Tämä työdynamiikka on melko intuitiivista, ja toivon, että olisin sisällyttänyt sen aiemmin urani aikana valittaessa projekteja, ryhmiä tai edes arvioidessani, mitkä mentorit tai yritykset työskentelevät.

Esimerkiksi, Twitterissä ollessani, olin aina halunnut oppia lisää koneoppimisesta, mutta tiimini, huolimatta siitä, että se oli hyvin tietopohjaista, tarvitsi suurelta osin tiedemiehiä keskittymään kokeiden suunnitteluun ja tuoteanalytiikkaan. Ponnisteluistani huolimatta minusta on usein ollut vaikeaa mennä naimisiin tämän älyllisen halun kanssa ryhmäni kriittisissä projekteissa.

Seurauksena saavuessani Airbnb: hen tein tietoisen päätöksen keskittyä liittymään projektiin / tiimiin, jossa ML on kriittinen menestykselleen. Työskentelin yhdessä päällikköni kanssa löytääkseni muutamia lupaavia mahdollisuuksia, joista yksi on mallintaa Airbnb: n luetteloiden elinkaaren arvoa (LTV).

Tämä projekti ei ollut kriittinen paitsi liiketoimintamme menestykselle myös urani kehittämiselle. Olen oppinut niin paljon koneellisten koneiden oppimismallien työnkulusta laaja-alaisesti, ja ei ollut muuta parempaa tapaa kuin oppia konkreettisten yritysongelmien ratkaisemisen yhteydessä.

Epäilemättä minulla oli onni löytää projekti, joka sopi yhteen pyrkimysteni kanssa ja jossa halusin rakentaa taitojani. Uskon, että kehys projektimme valitsemiseksi mentoriemme kriittisillä poluilla voi tehdä meistä yhä ”onnekasempia” ajan myötä sovittamaan pyrkimyksetmme oikeisiin töihin.

Oppinut periaate: Meillä kaikilla on taitoja, joita haluamme kehittää, ja älyllisiä etuja, joita haluaisimme harjoittaa. On tärkeää arvioida, kuinka hyvin pyrkimyksemme vastaavat ympäristön kriittisiä polkuja. Löydämme projekteja, ryhmiä ja yrityksiä, joiden kriittinen polku vastaa parhaiten omaasi.

Oikeiden työkalujen valitseminen ongelmaan

Ennen Airbnb: tä olin koodaa R- ja dplyr-kirjoituksia suurimman osan työelämästäni. Aloitettuaan LTV-projektin tajusin pian, että toimite ei ollut pala analyysikoodia, vaan tuotannon koneoppimismenetelmä. Koska on paljon helpompaa rakentaa monimutkaisia ​​putkistoja ilmavirtaan Pythonin avulla, jouduin dilemmaan - pitäisikö minun vaihtaa R: sta Pythoniin?

Kuvalähde: quickmeme.com (R: n tai Pythonin lisäksi Excel on myös vakava haastaja )

Tämä osoittautuu tietojen tutkijoiden keskuudessa hyvin yleiseksi kysymykseksi, koska monet kamppailivat päättääkseen, minkä kielen valita. Minulle on selvästi siirtymiskustannukset, kun he ovat sitoutuneet toiseen tai toiseen. Kävin läpi etuja ja haittoja ymmärtääkseni kompromissit, mutta mitä enemmän ajattelin sitä, sitä enemmän jouduin päätöksenhalvauksen ansaan. (Tässä on viihdyttävä keskustelu, joka osoittaa tämän käsitteen). Lopulta pakenin tämän halvaantumisen jälkeen lukeessani tämän vastauksen Redditissä:

Sen sijaan, että mietit, mitä ohjelmointikieliä opitaan, ajattele, mikä kieli tarjoaa sinulle oikean verkkotunnuskohtaisen kielen (DSL), joka sopii ongelmiin.

Työkalun tarkoituksenmukaisuus on aina asiayhteydestä riippuvainen ja ongelmakohtainen. Kyse ei ole siitä, pitäisikö minun oppia Python, vaan siitä, onko Python oikea työkalu työhön. Tässä on muutama esimerkki saadaksesi lisätietoja tästä seikasta:

  • Jos tavoitteesi on käyttää uusimpia, huippuluokan tilastomenetelmiä, R on todennäköisesti parempi valinta. Miksi? Koska statistikot ja statistikot rakentavat R: n. Nykyään akateemikot julkaisevat tutkimuksensa paitsi lehtien lisäksi myös R-paketteina. Joka viikko CRAN: lla on saatavana monia mielenkiintoisia uusia R-paketteja, kuten tämä.
  • Toisaalta Python sopii erinomaisesti tuotantotietoputkien rakentamiseen, koska se on yleiskäyttöinen ohjelmointikieli. Esimerkiksi scikit-oppimismallin voi helposti kääriä Python UDF: n avulla jakamaan pisteyttämistä Hivessä, orkestroimaan monimutkaisella logiikalla varustettuja Airflow DAG -sovelluksia tai kirjoittamaan Flask-verkkosovelluksen esittelemään mallin tuloksia selaimessa.

Erityistä projektia varten minun piti rakentaa tuotantokoneoppimisputki, ja elämäni olisi paljon helpompaa, jos tekisin sen Pythonissa. Lopulta kääritin hihat ja otin vastaan ​​tämän uuden haasteen!

Oppinut periaate: Sen sijaan, että kiinnität vain yhtä tekniikkaa tai ohjelmointikieltä, kysy itseltäsi, mikä on paras työkalu- tai tekniikkakokonaisuus, joka auttaa sinua ratkaisemaan ongelmasi? Keskity ongelmanratkaisuun, ja työkalut tulevat luonnollisesti.

Oppimisprojektin rakentaminen

Vaikka en ole aiemmin käyttänyt Pythonia tietojenkäsittelytyöhön, pelasin kielellä eri ominaisuuksilla. En kuitenkaan koskaan oikeasti oppinut Python-perusteita. Seurauksena olen peloissani, kun koodi oli järjestetty luokkiin, ja mietin aina, mihin __init__.py: tä käytettiin.

Oppiaksesi perusteet oikein tällä kertaa, otin inspiraatiota Anders Ericssonin tutkimuksesta tietoisesta käytännöstä:

Tarkoitettu harjoittelu on toimintaa, jonka tyypillisesti opettaja on suunnitellut yksilöllisen suorituksen tiettyjen näkökohtien tehokkaaksi parantamiseksi.

Koska olin oma opettajani, tohtori Ericssonin näkemykset olivat erittäin hyödyllisiä. Esimerkiksi aloitin ”oppimisprojektini” kuratoimalla joukon materiaaleja, jotka olivat eniten merkityksellisiä ML: n tekemisessä Pythonissa. Tämä prosessi kesti muutaman viikon, kunnes pääsin henkilökohtaiseen opetussuunnitelmaan. Testatin stressaantuneesti tätä opetussuunnitelmaa pyytämällä kokeneita Pythonistasia tarkistamaan suunnitelmani. Kaikkien tämän esityön tarkoituksena oli varmistaa, että olen oikealla oppimispolulla.

Tässä on välähdys henkilökohtaiseen opetussuunnitelmaani

Kun minulla oli selkeästi määritelty opetussuunnitelma, käytin seuraavia strategioita harjoittaakseen tietoisesti työtä:

  • Harjoittele toistuvasti: Pakotin itseni tekemään arkipäivän, ei-kriittisiä analyysejä Pythonissa R.: n sijasta. Tämä veti aluksi tuottavuuteni, mutta pakotti minut tutustumaan pandoiden perussovellusliittymään ilman taakkaa, että tarvitsin noudata kiireellistä määräaikaa.
  • Luo palautussilmukka: Löysin mahdollisuuksia tarkistaa muiden ihmisten koodi ja korjata tarvittaessa pienet virheet. Yritin esimerkiksi ymmärtää, kuinka sisäiset Python-kirjastomme on suunniteltu ennen niiden käyttöä. Kun kirjoitin omaa koodia, yritin myös reagoida sen useita kertoja ja tehdä siitä paremmin luettavissa kaikille.
  • Opi chunkingilla ja muistamalla: Joka viikon loppuun mennessä kirjoitin viikoittaisesta etenemisestäni, joka sisälsi tärkeät resurssit, joita opiskelin kyseisellä viikolla, opitut käsitteet ja kaikki suuret otot kyseisen viikon aikana. Muistuttamalla oppimani materiaalit, pystyin sisällyttämään käsitteet paremmin.

Hitaasti ja vähitellen paranin joka viikko. Se ei todellakaan ollut helppoa: toisinaan minun piti etsiä perussyntaksia sekä R: stä että Pythonista, koska vaihtelin edestakaisin näiden kahden kielen välillä. Pidin kuitenkin pitämään mielessä, että tämä on pitkäaikainen sijoitus ja että osingot maksetaan, kun sukellin ML-projektiin.

Oppinut periaate: Monien kenttäkokeiden tukemana, ennen sukellusta projektiin, edeltäminen antaa sinulle mahdollisuuden harjoitella tietoisemmin. Toistaminen, paloittelu, muistaminen ja palautteen saaminen ovat hyödyllisiä tehtäviä oppimisen vahvistamiseksi.

Yhteistyö kokeneiden tietotieteilijöiden kanssa

Yksi tietoisen harjoituksen keskeisistä aineosista on oikea-aikaisen ja toimivan palautteen saaminen. Mikään mahtava urheilija, muusikko tai matemaatikko ei pysty saavuttamaan suuruutta ilman valmennusta tai kohdennettua palautetta.

Yksi yleinen piirre, jonka olen havainnut ihmisiltä, ​​joilla on vahva kasvuajattelu, on, että he eivät yleensä häpeä tunnustaa sitä, mitä he eivät tiedä, ja he pyytävät jatkuvasti palautetta.

Kun katson taaksepäin omaan akateemiseen ja ammatilliseen uraani toistaiseksi, olen aiemmin sensuroinut monta kertaa itsekysymyksiäni, koska en halunnut vaikuttaa kyvyttömältä. Ajan myötä tajusin kuitenkin, että tämä asenne oli melko haitallista - pitkällä aikavälillä suurin osa itsesensuurista on menetetty oppimismahdollisuuksista eikä häpeästä.

Kuvalähde: edutopia - On tärkeää, että meillä on kasvuajattelu!

Ennen tätä hanketta minulla oli hyvin vähän kokemusta koneoppimallien tuotannosta. Niistä monista päätöksistä, jotka tein projektia varten, yksi parhaista päätöksistä oli julistaa aikaisin ja häpeättömästi yhteistyökumppaneilleni, että tiedän hyvin vähän ML-infrastruktuurista, mutta haluaisin oppia. Lupasin heille, että kun muuttuin tietoisemmiksi, teen itsestäni hyötyä joukkueelle.

Tämä osoittautui aika hyväksi strategiaksi, koska ihmiset yleensä rakastavat jakaa tietonsa, etenkin kun he tietävät, että heidän mentorointinsa hyötyvät lopulta itselleen. Alla on muutamia esimerkkejä, joita en olisi oppinut niin nopeasti ilman kumppaneideni ohjausta:

  • Scikit-Learn Pipelines: Yhteistyökumppani ehdotti minulle, että voin tehdä koodistani modulaarisemman ottamalla käyttöön Sklearn'sin putkirakenteen. Pohjimmiltaan putkilinjat määrittelevät datasiirtosarjan, joka on yhdenmukainen koulutuksen ja pisteytysten välillä. Tämä työkalu teki koodistani puhtaamman, uudelleenkäytettävän ja helpommin yhteensopivan tuotantomallien kanssa.
  • Mallidiagnostiikka: Koska ennustusongelmamme liittyy ajallisesti, yhteistyökumppanini opetti minulle, että tyypillinen ristiinvalidointi ei toimi, koska voimme joutua vaaraan ennustaa menneisyyttä tulevaisuuden tietojen avulla. Sen sijaan parempi menetelmä olisi käyttää aikasarjojen ristivalidointia. Olen oppinut myös erilaisia ​​diagnoositekniikoita, kuten hissikaaviota ja monia muita arviointimittareita, kuten SMAPE.
  • Koneoppimisinfrastruktuuri: Olen oppinut ML infra-insinöörien avulla pakettiriippuvuuden hallintaan virtualenv-laitteiden avulla, kuinka sarjoittaa malleja peittauksen avulla ja miten malli voidaan tarjota pisteet-ajankohtana käyttämällä Python UDF -sovelluksia. Kaikki nämä ovat tietotekniikan taitoja, joita en tiennyt ennen.

Kun oppin lisää uusia konsepteja, pystyin paitsi soveltamaan niitä omaan projektiini, myös ponnistelemaan keskusteleviin keskusteluihin koneoppimisinfrastruktuuritiimin kanssa, jotta he voisivat rakentaa parempia ML-työkaluja tietotekijöille. Tämä luo hyveellisen syklin, koska minulle jaettu tieto teki minusta paremman kumppanin ja yhteistyökumppanin.

Oppinut periaate: Pitkällä aikavälillä suurin osa itsesensuurista on menetetty oppimismahdollisuuksista eikä häpeästä. Ilmoita varhain ja häpeämättä halua oppia ja tee itsestäsi hyötyä muuttuessasi paremmaksi.

Opetus ja evankeliointi

Kun pääsin lähemmäksi mallini tuotantoon, huomasin, että monet hankkimani taidot voivat olla erittäin arvokkaita muille ryhmämme tietotekijöille. Ollessani vuosien ajan jatko-opiskelijaohjaajana tiesin aina olevani intohimoinen opettamiseen ja opin aina enemmän aiheesta, kun minusta tuli opettaja. Richard Feynman, myöhäinen fysiikan Nobel-palkinnon saaja ja ilmiömäinen opettaja, puhui näkemyksestään opettamiseen:

Caltechin tiedekunnan jäsen pyysi kerran Richard Feynmania selittämään, miksi puolet hiukkaset noudattavat Fermi Diracin tilastoja. Haasteeseen vastatessaan hän sanoi: ”Aion valmistaa siitä fuksi-luennon.” Mutta muutamaa päivää myöhemmin hän kertoi tiedekunnan jäsenelle: “Tiedätkö, en voinut tehdä sitä. En voinut vähentää sitä fuksi-tasolle. Tämä tarkoittaa, että emme todellakaan ymmärrä sitä. "

Tämä oli todella inspiroivaa - jos et voi pienentää aihetta sen ytimeen ja tehdä siitä muiden saatavilla, se tarkoittaa, että et oikein ymmärrä sitä. Tietäen, että näiden taitojen opettaminen voi parantaa ymmärrystäni, etsin mahdollisuuksia dokumentoida huolellisesti mallin toteutukset, antaa oppilounaita ja rohkaista muita kokeilemaan työkaluja. Tämä oli voittajavoitto, koska evankeliointi lisää tietoisuutta, joka ternillä auttaa ohjaamaan työkalujen käyttöönottoa koko joukkueessa.

Syyskuun lopusta lähtien olen aloittanut yhteistyön sisäisen Data University -tiimimme kanssa valmistellaksesi sarjasarjan sisäisistä ML-työkaluista. En ole aivan varma, mihin tämä menee, mutta olen erittäin innoissani lisäämällä ML-koulutusta Airbnb: llä.

Lopuksi lopetan tämän osan twiitillä Hadley Wickhamilta:

Oppinut periaate: Opettaminen on paras tapa testata ymmärrystä aiheesta ja paras tapa parantaa taitojasi. Kun opit jotain arvokasta, jaa se muiden kanssa. Sinun ei aina tarvitse luoda uutta ohjelmistoa, joka selittää, kuinka olemassa olevat työkalut voivat olla myös erittäin arvokkaita.

Vaiheessa K, ajattele vaiheesi K + 1

Keskittymällä omiin suoritteihini, yhteistyöhön ML-infrastruktuuritiimin kanssa, lopulta opettaen ja antamalla muille tietotekijöille mahdollisuus oppia lisää ML-työkaluista, olen todella iloinen siitä, että alkuperäisen projektini laajuus oli paljon suurempi kuin muutama kuukausi sitten. Mutta tosin en koskaan odottanut tätä ensi sijassa.

Kun pohdin tämän projektin kehitystä, yksi asia, joka oli erilainen kuin aikaisemmat projektini, oli se, että minulla oli aina pieni tyytymättömyys nykyiseen tilanteeseen ja halusin aina tehdä siitä hieman parempaa. Kaikkein kaunimmin tapa luonnehtia tätä on Claude Shannonin esseestä:

Kuvalähde: Kirjakansi aiheesta
”Siellä on ajatus tyytymättömyydestä. Tällä en tarkoita pessimististä tyytymättömyyttä maailmaan - emme pidä siitä, miten asiat ovat - tarkoitan rakentavaa tyytymättömyyttä. Ajatus voitaisiin ilmaista sanoilla: Tämä on OK, mutta mielestäni asiat voitaisiin tehdä paremmin. Mielestäni tähän on sopivampi tapa. Mielestäni asioita voitaisiin parantaa hieman. Toisin sanoen, jatkuvasti lievää ärsytystä, kun asiat eivät näytä aivan oikeilta; ja mielestäni nykypäivän tyytymättömyys on avain liikkeellepaneva voima hyvissä tutkijoissa. "

En missään nimessä ole pätevä tiedemies (vaikka se on jollain tavoin nimityksessäni), mutta uskon, että pienen tyytymättömyyden luonnehdinta kuvaa melko sitä, pystytkö laajentamaan projektisi vaikutusta. Koko projektin ajan, kun olen vaiheessa K, aloin luonnollisesti miettiä, mitä tehdä vaiheelle K + 1 ja sen jälkeen:

  • Kohdasta "En osaa rakentaa tuotantomallia, haluaisin selvittää kuinka" sanoihin "Minusta työkaluja voidaan parantaa, tässä on kipupisteitäni, ehdotuksia ja palautetta työkalujen parantamiseksi", kehitin uudelleen itseni asiakkaasta kumppaniksi ML: n infrastruktuuritiimin kanssa.
  • Alkaen "anna minun oppia työkaluja, jotta voin olla siinä hyvä" ja "teemme nämä työkalut helpommin käytettäväksi kaikille muille ML: stä kiinnostuneille tietotieteilijöille", muotoilein itseni kumppaniksi evankelioijaksi.

Mielestäni tämä ajattelutapa on erittäin hyödyllinen - käytä hyvää makuasi ja vähäistä tyytymättömyyttä polttaaksesi kehitystäsi pysyvyydellä. Katson kuitenkin, että tätä tyytymättömyyttä ei voida valmistaa, ja se voi johtua vain työskentelystä huolehtimassasi ongelmassa, joka vie viimeiseen kohtaan.

Oppinut periaate: Kiinnitä huomiota sisäiseen tyytymättömyyteesi projektiin työskennellessäsi. Nämä ovat vihjeitä kuinka voit parantaa ja skaalata projektiasi seuraavalle tasolle.

Erottelevia ajatuksia: Sinä ja työsi

Äskettäin tapasin Richard Hammingin luennon, joka on amerikkalainen matemaatikko, joka on tunnettu monista tieteellisistä panoksistaan, kuten Hammingin koodi ja Hammingin etäisyys. Luennon otsikko oli Sinä Ja Tutkimukseni, jossa tohtori Hamming sanoi, että sen voidaan hyvin nimetä uudeksi nimeksi "Sinä ja urasi".

Kun hän kertoi tarinansa, erotin muutamia tärkeitä seikkoja.

Jos tekemäsi ei ole tärkeää, ei todennäköisesti ole tärkeää, miksi teet sen? Sinun on työskenneltävä tärkeiden ongelmien parissa. Vietin perjantai-iltapäivän vuosia ajatellessani alani tärkeitä ongelmia [joka on 10% työaikastani].
Haluan varoittaa sinua tärkeistä ongelmista, tärkeys ei ole seuraus, jotkut ongelmat eivät ole tärkeitä, koska et ole saanut hyökkäystä. Ongelman merkitys riippuu suurelta osin siitä, onko sinulla tapa hyökätä ongelmaan.
Koko tämän kurssin yritän opettaa sinulle jotain tyyliä ja makua, joten sinulla on mahdollisuus hankaluuteen, kun ongelma on oikein, mikä ongelma on oikea, miten jatkaa. Oikea ongelma oikeaan aikaan oikealla tavalla laskee, eikä mikään muu ole tärkeä. Ei mitään.

Kun tohtori Hamming puhuu tärkeydestä, hän tarkoittaa ongelmia, jotka ovat sinulle tärkeitä. Hänelle se oli tieteellinen ongelma, ja monille meistä se saattaa olla jotain erilaista. Hän puhui myös hyökkäyssuunnitelman tärkeydestä. Jos sinulla ei ole suunnitelmaa, ongelmalla ei ole väliä, riippumatta siitä, mitkä ovat sen seuraukset. Viimeiseksi hän mainitsi tekevän sen omalla yksilöllisellä tyylilläsi ja maullasi.

Hänen baarinsa hienon työn tekemiseksi on erittäin korkea, mutta sitä kannattaa jatkaa. Kun löydät tärkeän ongelmasi, yrität luonnollisesti tehdä siitä paremman ja tehdä siitä entistä vaikuttavamman; löydät tapoja opettaa muille sen merkityksestä; käytät aikaa oppiaksesi muilta hienoilta ihmisiltä ja rakentamaan käsityösi.

Mikä on sinulle tärkeä ongelma, joka on kriittisellä polullasi?

Haluan kiittää Jason Goodmania ja Tim Kwania viestin tarkistamisesta ja palautteen antamisesta