Smashing Podcast Episodul 33 cu Charlie Gerard: Ce este învățarea automată?
Publicat: 2022-03-10În acest episod, vorbim despre Machine Learning. Ce fel de sarcini îl putem pune într-un context de dezvoltare web? Am vorbit cu expertul Charlie Gerard pentru a afla.
Afișați note
- Învățare automată practică în JavaScript: TensorFlow.js pentru dezvoltatori web
- Charlie pe Twitter
- Site-ul personal al lui Charlie
Actualizare săptămânală
- O introducere practică la injectarea dependenței
scris de Jamie Corkhill - Către un web fără reclame: diversificarea economiei online
scris de Frederick O'Brien - Ar trebui Web-ul să expună capabilitățile hardware?
scris de Noam Rosenthal - Cum să câștigi mai mulți bani vânzând aplicații Shopify în 2021
scris de Suzanne Scacca - Noțiuni introductive cu pachetul GetX în aplicațiile Flutter
scris de Kelvin Omereshone
Transcriere
Drew McLellan: Este un dezvoltator front-end senior la Netlify, un dezvoltator Google expert în tehnologii web și un difuzor de tehnologie Mozilla. În timpul liber, ea explorează domeniul interacțiunii umane cu computerul și construiește prototipuri interactive folosind hardware-ul, învățarea automată și codificarea creativă. Vorbește în mod regulat la conferințe și scrie postări pe blog pentru a împărtăși lucrurile pe care le învață. Și cel mai recent, este autorul cărții Practical Machine Learning în JavaScript pentru Apress.
Drew: Deci știm că este o expertă în front-end, dar a scăpat odată din închisoare folosind o pilă de metal pe care o croșetase din vise. Prietenii mei zdrobitori, vă rog bun venit, Charlie Gerard. Bună Charlie. Ce mai faci?
Charlie Gerard: Sunt zdrobitor.
Drew: Am vrut să vă vorbesc astăzi despre învățarea automată, care ar putea părea un subiect puțin ciudat pentru un podcast care se concentrează în principal pe tipul de browser al dezvoltării web. Tind să cred că învățarea automată este ceva ce se întâmplă în centre de date gigantice sau laboratoare cu oameni cu haine albe. Este cu siguranță un fel de cuvânt la modă în zilele noastre. La ce naiba ne referim de fapt când spunem machine learning?
Charlie: Deci, în general, definiția standard ar fi aceea că oferă computerelor capacitatea de a genera predicții fără să li se spună ce să facă. Sperăm că acest lucru va avea sens când vom continua să vorbim despre asta, dar acesta este genul de definiție generică a conversației. Nu le spui cu adevărat algoritmilor sau modelelor să meargă să caute anumite lucruri. Ei învață prin datele pe care le oferi și apoi poate genera predicții.
Drew: Deci, în loc să trebuiască să codificați în mod specific pentru anumite circumstanțe, creați un caz generic în care software-ul poate învăța cum să facă aceste lucruri singur?
Charlie: Da, exact.
Drew: Sună aproape puțin înfiorător. Este oarecum aproape de acea parte a inteligenței artificiale a lucrurilor. Trebuie să fii un tocilar de matematică sau un cercetător de date pentru a face asta? Sau există lucruri acolo, cum ar fi algoritmi stabiliți și lucruri pe care le puteți apela pentru a începe?
Charlie: Da. Din fericire, nu trebuie să fii un tocilar de matematică sau un cercetător de date. Altfel, cu siguranță nu aș vorbi despre asta. Dar există algoritmi care au fost deja descoperiți și instrumente deja disponibile care vă permit să utilizați acești algoritmi fără a fi nevoie să scrieți totul de la zero. Deci, dacă folosim ecosistemul front-end ca o comparație, puteți folosi API-uri web, cum ar fi navigatorul, pentru a obține conținut media pentru utilizatori atunci când doriți să aveți acces la camera web sau la microfon.
Charlie: Și nu trebuie să știi cum a fost implementat de fapt acel API sub capotă. Ceea ce contează este că știi pentru ce este bun acest API și cum să-l folosești, dacă vrei. Apoi, mai târziu, puteți căuta codul sursă al browserului dumneavoastră preferat pentru a ști cum funcționează cu adevărat, dar nu este util în primul rând. Și poate fi util dacă doriți să scrieți propriul algoritm mai târziu. Dar, ca să fiu sincer, este foarte puțin probabil să vrei să faci asta.
Drew: Bine. Așadar, este un pic ca modul în care poți scrie CSS pentru a poziționa un element pe o pagină. Nu-ți pasă cum face browserul de fapt asta. Doar scrieți niște CSS și browserul se ocupă de el.
Charlie: Da. Când începi, este în mare parte așa ceva.
Drew: Asta e bine. Acesta este mai mult nivelul meu de știință a datelor.
Charlie: Și eu.
Drew: Așadar, care sunt genul de probleme cărora le puteți pune învățarea automată? Pentru ce fel de lucruri este bun?
Charlie: Depinde ce vrei să faci în primul rând, pentru că atunci când vrei să construiești un anumit lucru, aș sfătui să te gândești mai întâi la tipul de problemă pe care vrei să o înveți, care te va ajuta apoi să alegi un algoritm pe care îl ai poate folosi pentru a remedia sau pentru a găsi o soluție la problema dvs. Deci, în general, aș începe prin a mă gândi la tipul de problemă pe care încerc să o rezolv și sunt trei principale. Cred că probabil că sunt ceva mai multe, dar în general, pentru ceea ce am fost instruit să fac și ceea ce am citit, sunt trei principale care sunt menționate.
Charlie: Dacă vrei să intru în asta, există învățare supravegheată, învățare nesupravegheată și învățare prin întărire. Ai și tu atât de mulți supravegheați, dar sincer să fiu, nu știu prea multe despre asta pentru că am reușit să-mi construiesc proiectele cu primele trei.
Drew: Supravegheat, nesupravegheat și întărire, ai spus?
Charlie: Da, învățare prin întărire.
Drew: Bine. Deci, ce este învățarea supravegheată? Ne poți da un exemplu despre ce înseamnă asta?
Charlie: Învățare supravegheată, este atunci când setul tău de date este format din caracteristici și etichete și îl introduci într-un algoritm. Deci, dacă luăm un exemplu la care sperăm că majoritatea oamenilor se vor putea raporta, acesta este, dacă ai o casă și vrei să o vinzi și vrei să-ți dai seama la ce preț vei vinde casa ta sau mașină, de fapt, apropo, ar fi același lucru. Și ați folosi un set de date de case din același mediu sau același tip de case și cunoscând prețul lor pe piață, ați putea folosi caracteristicile propriei case; deci câte camere și are grădină și în ce cartier este? Și lucruri de genul ăsta.
Charlie: Acestea sunt caracteristicile și eticheta ar fi prețul și, folosind toate aceste seturi de date ale caselor deja din jurul tău, poți folosi un algoritm de învățare automată care va învăța cumva corelația dintre caracteristicile casei tale. și prețurile de pe piață, pentru a obține apoi caracteristicile casei tale și a putea genera un preț din asta. Deci, cel mai important lucru este în învățarea supravegheată, aveți o grămadă de caracteristici și o etichetă, de asemenea, astfel încât să puteți face o corelație între cele două.
Drew: Ai, ai alimenta modelul cu un set vast de date despre case în acest exemplu, unde le cunoști prețul și apoi știi toate aceste caracteristici despre ele. Spuneți dormitoare și ce aveți, cum ar fi metri pătrați, și cred că locația ar fi un alt fel de lucru care ar putea fi luat în considerare?
Charlie: Da. Deci, una dintre problemele învățării automate este că puteți avea o mulțime de funcții, iar unele dintre ele nu vor fi de fapt la fel de eficiente ca altele. Deci ai putea avea, de exemplu, culoarea casei tale, s-ar putea de fapt să nu aibă nicio corelație cu prețul, dar poți da o grămadă de caracteristici și modelul va găsi în sine corelație între cele două. Puteți apoi să vă modificați setul de date, dacă doriți, și să eliminați culoarea, sau vă puteți da seama că dimensiunea grădinii nu contează sau lucruri de genul acesta.
Charlie: Așadar, în general, chiar dacă vă alimentați setul de date la un model, nu veți avea o predicție perfectă de prima dată. De obicei, modifici câteva lucruri diferite și vezi. Îl cam modifici până când ajunge la o predicție pe care o crezi destul de exactă.
Drew: Și apoi, odată ce modelul este creat, sau spuneți că l-ați creat folosind date dintr-un oraș, ați putea să-l luați și să-l alimentați... ați avea nevoie să-l furnizați cu date dintr-un alt oraș? Ați putea să-l ridicați și să-l utilizați în altă parte odată ce antrenamentul este finalizat sau este atunci specific acelui set de date sau cum ar funcționa?
Charlie: Cred că ar fi specific setului de date. Deci înseamnă că puteți crea un alt set de date cu același format, să spunem. Dacă aveți o foaie de calcul Excel cu coloane diferite, ați putea păstra aceeași etichetă și caracteristici, dar ar trebui să o înlocuiți cu valorile orașului respectiv. Dar, în general, înseamnă că strângerea setului de date poate dura și mult timp, dar dacă știi deja ce ai făcut pentru orașul Paris, de exemplu, și că structura setului tău de date este aceeași, dar inlocuiesti valorile, e ceva mai rapid si poti regenera modelul.
Charlie: Nu ar trebui să refolosiți același model, dacă datele dvs. sunt diferite pentru că prețurile caselor din Paris sunt diferite față de un oraș mic din Australia, de exemplu. Deci, nu ați dori să aveți date greșite, deoarece nucleul setului dvs. de date la început nu a fost exact același.
Drew: Vorbim mult despre modele cu învățare automată. Deci modelul este un fel ca rezultatul final al tuturor analizei setului de date. Și apoi este folosit pentru a face predicții ulterioare. Cam asta este modelul, da?
Charlie: Da, exact asta. Este un model, așa că este un pic ca o funcție căreia îi vei alimenta intrări noi pe care nu le-a mai văzut niciodată, dar pe baza a ceea ce a învățat la pasul de antrenament. ar fi capabil să scoată o predicție.
Drew: Deci învățare supravegheată, apoi face acest model predictiv din etichete pe caracteristici. Ce este învățarea nesupravegheată?
Charlie: Deci nesupravegheat este un pic din același concept, dar eliminați etichetele. Deci, în acest caz, puteți crede că problema noastră de a vinde o casă, nu ar fi chiar o problemă de învățare nesupravegheată, pentru că dacă știi doar caracteristici despre casele din jurul tău, dar nu ai un preț ca etichetă, nu prea pot prezice un preț. Nici nu va ști ce este un preț.
Charlie: Deci nesupravegheat este mai mult atunci când ai un set de date și ai doar caracteristici despre el. Puteți genera mai multe tendințe sau grupuri de lucruri împreună. Nu ați folosi învățarea nesupravegheată dacă doriți un anumit rezultat, dacă aveți o anumită întrebare, cum ar fi „Care este prețul asta?” Nu este o utilizare foarte bună a nesupravegheat, dar mai mult, dacă doriți să grupați entități împreună, ar putea fi oameni sau lucruri de genul acesta.
Charlie: Deci, de obicei, un caz de utilizare pentru asta sunt recomandări precum recomandările Amazon sau recomandările Spotify, cum ar fi „Oamenii ca tine ascultă și asta”, și este mai mult în jurul că funcțiile în acest caz ar fi... ei bine, au date despre tine, astfel încât să știe ce asculți, în ce țară te afli de obicei sau de câte ori pe zi asculți ceva? Deci, folosind aceste funcții despre oameni, ei vă pot pune apoi în același grup sau același tip de ascultători sau același tip de oameni care cumpără anumite lucruri de pe Amazon. Și folosind acest tip de învățare nesupravegheată, ei pot ști ce să-ți facă reclamă sau ce să recomande pe care ar trebui să-l asculți în funcție de oameni ca tine. Deci sunt mai degrabă astfel de probleme.
Drew: Bine, deci toate acestea au mult mai mult sens pentru mine acum, în calitate de dezvoltator web, pentru că aceste tipuri de utilizări despre care am vorbit, prețurile casei și recomandările și difuzarea de reclame și lucruri, la sfârșitul zilei, acestea sunt tot felul de lucruri cu care trebuie să ne confruntăm și caracteristici pe care am putea dori să le punem într-un site sau într-un produs, sau ce aveți. Deci avem diferitele tipuri de învățare bazate pe materie pe care căutăm să le prezicem. Există și alte tipuri de aplicații cu care putem pune și asta? Există un fel de exemple bune pe care le-au creat oamenii care ar putea folosi asta?
Charlie: Da. Sunt atât de multe exemple. De aceea, când vorbesc despre prezicerea prețului unei case, poate că nu este ceva care ține de tine. Poate că nu este chiar atât de interesant, dar de fapt sunt multe de făcut. Există exemple foarte bune în jur. Cred că primul pe care l-am văzut a fost în jurul unor texte de artă generate dinamic pentru imagini. Deci, desigur, este ceva pe care îl puteți face singur atunci când adăugați o imagine pe un site.
Charlie: Dar dacă ai un site care are de fapt o mulțime de imagini și, în loc să faci manual, ai putea alimenta fiecare imagine la un algoritm de învățare automată și ar genera un text artistic despre ceea ce este vorba despre acea imagine și poate singurul pas uman ar fi să verifici dacă acest lucru este corect, dar chiar ți-ar permite să-ți concentrezi timpul pe construirea aplicației.
Charlie: Și încă ți-ai face site-ul accesibil dacă ai text artistic pentru imagini, dar ar fi cam generat de o mașină. Deci, acesta este unul dintre exemplele pe care le-am văzut când am început în asta, dar aveți și un prototip de filtrare care nu este sigur pentru conținutul de lucru. Și mă gândeam că ar fi de fapt destul de bine într-o extensie Chrome, ai putea avea o extensie Chrome care de fiecare dată când deschideți o pagină web, să verificați doar dacă ceea ce este pe pagină este un fel de conținut sigur.
Charlie: De exemplu, dacă aveți copii care vă folosesc laptopul sau lucruri de genul ăsta, puteți pur și simplu să ascundeți imaginile sau să înlocuiți aceste imagini cu panda, dacă doriți sau așa ceva. Dar este acel gen de aplicație în care poți folosi învățarea automată pentru a face ceva automat pentru tine, astfel încât să nu fii nevoit să-ți faci griji cu privire la anumite sarcini sau să-ți folosești pur și simplu puterea creierului pentru a face alte lucruri.
Charlie: Dar există și mai avansat cu un exemplu de recunoaștere a gesturilor, folosind camera web care comunica atunci cu Amazon Alexa și recunoașterea vocii și toate chestiile astea. Deci, puteți îmbina o mulțime de tehnologii diferite cu voce și cameră web și învățarea automată pentru doar recunoaștere și pentru a putea interacționa cu diferite tehnologii, dar într-un mod nou. Deci poate deveni destul de distractiv.
Drew: Este destul de fascinant, pentru că ne-am uitat la un fel de analiză a modelelor de date ca atare, iar acum ne gândim să analizăm conținutul imaginilor și să analizăm conținutul imaginilor folosind învățarea automată, ceea ce este destul de interesant. Bănuiesc că acesta este genul de caracteristică pe care îl are Facebook, dacă cineva postează o imagine pe care o crede că ar putea fi sângeroasă sau care arată o rănire sau ceva, și o estompează, apoi trebuie doar să dai clic pentru a o dezvălui. Așa ceva, evident, Facebook nu poate avea echipe de moderatori care se uită la fiecare imagine care este încărcată.
Charlie: Sper că nu.
Drew: Ar fi o sarcină nesfârșită.
Charlie: Nici asta nu este o treabă grozavă.
Drew: Obișnuiam să lucrez la un site web de anunțuri gratuite unde oamenii puteau posta anunțuri. Și a fost multă moderație implicată în asta, în care chiar și eu, ca dezvoltator web, a trebuit să mă implic, doar parcurgând, uitându-mă la toate aceste imagini spunând: „Da, nu, da, nu”.
Charlie: Și eu am făcut asta puțin. Mi-aș dori ca la acel moment să fi existat învățarea automată, doar un mic instrument utilitar doar pentru a face asta pentru mine, iar acum este acolo. Deci e destul de misto.
Drew: Da, e foarte grozav. Și este destul de interesant să te gândești la intrarea live de la o cameră web și să poți analiza asta în timp real, astfel încât să poți face interacțiuni bazate pe gesturi. Este asta…
Charlie: Da, deci, în esență, folosește mai multă clasificare a imaginilor, pentru că camera ta, o imagine este un set de pixeli, dar apoi, pe măsură ce faci anumite gesturi, poți antrena un model să recunoască că mâna ta dreaptă este ridicată și poate că tu ar controla mouse-ul astfel, sau s-ar uita la coordonatele mâinii tale și a ecranului, iar tu ai urmări mouse-ul. Ai putea face cu adevărat orice vrei. Poate ai putea avea recunoașterea culorilor.
Charlie: Poți să faci lucruri foarte distractive. Un prototip pe care l-am construit, la care am renunțat la asta la un moment dat, dar am construit puțin... Am vrut să fie o extensie Chrome, dar nu a funcționat. Am construit o mică aplicație desktop cu Electron. De asemenea, în JavaScript, unde aș putea să răsfoiesc o pagină web doar înclinând capul. Așa că ar recunoaște că atunci când îmi înclin capul în jos, apoi derulează în jos, iar când urc în sus, urcă. Erau doar aceste mici experimente în care mă gândeam: „Ei bine, dacă o pot transforma apoi într-o extensie Chrome, ar putea fi utilă pentru unii oameni”.
Charlie: Chiar dacă doar mănânci în fața computerului și citești știrile și nu vreau ca tastatura mea să fie murdară, atunci pot doar să-mi înclin capul, dar, de asemenea, sper că, pentru accesibilitate, ar putea ajuta de fapt oamenii să navigheze pe anumite pagini web sau lucruri de genul acesta. Există o mulțime de instrumente disponibile și este vorba despre ideea că poți veni cu observarea situației din jurul tău și cum ai putea rezolva unele dintre aceste probleme cu utilizarea învățării automate?
Drew: Pentru învățarea automată, ne gândim adesea la limbi, Python. Cred că acolo par să se întâmple mai întâi o mare parte din acest tip de dezvoltare. Dar, ca dezvoltatori web, suntem în mod evident mai confortabil cu JavaScript în general. Învățarea automată este ceva ce ne putem aștepta în mod realist să facem. Vreau să spun că exemplele mici distractive sunt un lucru, dar este de fapt util pentru munca reală în JavaScript?
Charlie: Ei bine, vreau să spun, cred că da, dar apoi știu că majoritatea lucrurilor pe care le fac sunt prototipuri, dar cred că atunci depinde de situația în care te afli la serviciu. Există modalități de a implementa învățarea automată ca dezvoltator în munca ta de zi cu zi. Dar ceea ce îmi place foarte mult la JavaScript este faptul că, dacă ești deja un dezvoltator front-end, nu trebuie să mergi să înveți un nou ecosistem sau un nou set de instrumente sau o nouă sintaxă, un nou limbaj. Ești deja în mediul tău în care lucrezi în fiecare zi.
Charlie: De obicei, când înveți astfel de lucruri, trebuie să începi cu timpul tău, dacă nu este treaba ta de zi cu zi și timpul tuturor este prețios și nu ai atât de mult din el. Deci, dacă puteți elimina unele bariere și rămâneți în același ecosistem pe care îl cunoașteți, atunci cred că este destul de bine, dar și puteți începe... puterea pentru mine a JavaScript este că puteți începe prin a construi un mic prototip pentru a convinge oamenii că poate că există o idee care trebuie investigată și, prin posibilitatea de a crea ceva rapid în JavaScript, puteți valida că ideea dvs. este corectă.
Charlie: Atunci fie poți obține acceptarea de la conducere pentru a cheltui mai mult timp sau mai mulți bani, fie îi poți oferi apoi dezvoltatorilor Python, dacă vrei să-l construiești în Python. Dar pentru mine, această capacitate de a valida rapid o idee este super importantă. În special, poate dacă lucrezi pentru un startup și totul merge rapid și poți să arăți că este ceva ce merită să cercetezi, cred că este destul de important.
Charlie: Și, de asemenea, faptul că există într-adevăr un ecosistem mare de instrumente și există tot mai multe cadre și aplicații ale învățării automate. În JavaScript, nu numai pe o pagină web putem adăuga învățarea automată. După cum spuneam înainte, puteți crea extensii Chrome și aplicații desktop cu Electron și aplicații mobile cu React Native și hardware și IoT cu cadre precum Johnny-Five.
Charlie: Deci, cu limbajul pe care îl cunoașteți deja, aveți de fapt acces la un ecosistem uriaș de platforme diferite pe care puteți rula cam același experiment. Și cred că, pentru mine, asta este destul de uimitor. Și aici văd puterea reală a învățării automate în JavaScript. Și pe măsură ce se îmbunătățește, poate îl puteți integra cu adevărat în aplicațiile pe care le construim zilnic.
Drew: JavaScript este peste tot, nu-i așa?
Charlie: Da.
Drew: La bine și la rău, este peste tot. Cine ar fi crezut asta? Sună grozav, dar sună și ca multă muncă. Și mă gândesc la seturile de date și la lucruri, cum naiba începi să faci astfel de sarcini?
Charlie: În acest moment, cel puțin cu TensorFlow.JS, există trei lucruri pe care le puteți face cu cadrul. Și să presupunem că cel mai simplu este importarea unui model pre-antrenat existent. Deci, există câteva dintre ele, există diferite modele care au fost antrenate cu diferite seturi de date și aș recomanda să începeți cu asta pentru că puteți învăța cu adevărat elementele de bază despre cum să utilizați chiar și cadrul în sine și ce puteți face cu aceste modele.
Charlie: Deci aveți anumite modele de recunoaștere a imaginilor care au fost antrenate cu imagini diferite. Unele dintre ele sunt mai bune pentru recunoașterea obiectelor. Unele dintre ele sunt mai bune pentru recunoașterea oamenilor și, înțelegând ce modele să folosim, putem fi apoi liberi să construim orice doriți în constrângerea modelului respectiv.
Charlie: Dar cred că pentru mine este o modalitate bună de a începe. Folosesc în continuare modele pre-antrenate pentru multe dintre experimentele mele pentru că, de asemenea, de ce ai reinventa roata dacă este deja acolo? Să folosim doar instrumentele care au fost date. Apoi, când vrei să mergi, poate cu un pas mai departe, poți face ceea ce se numește transfer learning, când recalești un model important. Deci folosești în continuare unul dintre modelele pre-antrenate, dar apoi ți se oferă posibilitatea de a-l reinstrui live cu propriile mostre.
Charlie: De exemplu, dacă ai vrut să folosești o clasificare a imaginilor în care ai diferiți oameni, atunci vrei să faci o clasificare prin gesturi, poate. Dacă modelul tău, de exemplu, este antrenat cu oameni care au întotdeauna, nu știu, mâna dreaptă sus sau ceva de genul ăsta, dar pentru aplicația ta, vrei mâna stângă, ai putea reeduca acel model cu mostrele tale din stânga. mâna, și atunci ai avea un model care este deja destul de antrenat să recunoască mâna dreaptă, dar apoi ai adăuga propriul eșantion și îl poți reînnoi destul de repede în browser, în funcție de cantitatea de date de intrare noi pe care i-o dai , durează puțin, dar în câteva secunde ai un model reantrenat care se pricepe foarte bine la recunoașterea acestor două gesturi pe care apoi le poți folosi, în aplicația ta.
Charlie: Deci este ca de obicei al doilea pas. Și apoi un al treilea pas care este puțin mai complex este atunci când faci totul în browser. Deci îți scrii propriul model de la zero și îl antrenezi în browser și chiar antrenezi și rulezi și generezi modelul, totul în browser. Dar, în general, singura aplicație pe care am văzut-o pentru aceasta este construirea de vizualizări. Când doriți să vizualizați procesul de antrenament al unui model și numărul de pași pe care îi parcurge, cât timp durează și puteți vedea precizia crescând sau în jos, în funcție de caracteristicile pe care le alegeți și de parametrii pe care îi modificați .
Charlie: Așa că nu m-am jucat cu adevărat cu acesta pentru că nu am găsit o aplicație pentru mine cu care să vreau să construiesc, dar primii doi pași de a folosi doar modelul pre-antrenat sau de a-l reinstrui cu propriile mele mostre sunt unde am vazut personal. M-am distrat cu asta.
Drew: Deci, de obicei, va fi un caz de creare a modelului în prealabil, un fel de offline, și apoi browserul folosește acel model antrenat, sau poate adaugă puțin la, face un pic de reinstruire, dar în general, modelul respectiv va fi stabilit înainte de a fi utilizat în browserul utilizatorului?
Charlie: În general, da. Atunci cu siguranță vă puteți crea propriul model. Dacă o faci, nu aș recomanda să-l antrenezi în browser, dar o poți face și în NodeJS. Dacă știți, un pic de NodeJS. Cu siguranță mi-am creat propriile modele, dar de obicei îl rulez în NodeJS pentru că este puțin mai performant. Și apoi folosesc modelul generat pe care l-am creat atunci în browser.
Drew: Ce instrumente sunt disponibile pentru a face acest lucru cu JavaScript? Ai menționat TensorFlow JS, dar ce este asta, unde este? Este de la Google?
Charlie: Da. La început, Google avea instrumentul TensorFlow în Python, iar acum, în trecut, poate câțiva ani, poate puțin mai mult, au făcut versiunea JavaScript, așa că tinde să curgă cu JS. Dar există și ML5 JS, care este puțin o abstractizare pe deasupra. Deci, dacă sunteți puțin confuz sau dacă TensorFlow JS arată puțin înfricoșător cu o parte din vocabularul pe care îl folosesc în documentația lor, puteți utiliza ML5 JS care are cele mai multe dintre aceleași caracteristici, dar să spunem că API-ul sau Sintaxa este puțin mai prietenos pentru începători.
Charlie: Poți să începi cu ML5, să vezi dacă îți place învățarea automată sau dacă te gândești la o aplicație grozavă și apoi dacă ai niște blocante în ML5 sau framework-ul nu are anumite lucruri pe care vrei să le faci, puteți trece apoi la TensorFlow JS dacă doriți. Și dacă într-adevăr nu sunteți interesat să vă scrieți propriul cod, dar doriți doar să utilizați instrumente care există deja, există unele API-uri de la Amazon, Google și Microsoft pentru a face și recunoașterea imaginii sau recunoașterea vocii. Deci, dacă sunteți mai interesat să vedeți ce poate face, dar nu doriți să petreceți prea mult timp scriind codul, puteți trimite ping la unele API-uri și puteți încerca și unele dintre instrumentele lor.
Drew: Este destul de interesant. Așa că ați putea utiliza browserul pentru a capta intrarea de la o cameră web sau un microfon sau ce aveți, și apoi să le trimiteți la Amazon, Microsoft sau oricine altcineva și apoi să le lăsați să facă treaba grea?
Charlie: Da.
Drew: Și atunci doar beneficiezi de rezultate.
Charlie: Exact.
Drew: Sună ca o modalitate drăguță și tentantă doar de a începe cu ideile. Sună grozav, dar la ce probleme putem aplica asta în front-end? Am vorbit despre câteva lucruri mici, dar există alte moduri în care am putea folosi acest lucru?
Charlie: Există o mulțime de moduri. Dacă încep cu clasificarea imaginilor, da ai putea. Puteți folosi imagini de pe web sau de pe camera web de pe telefon. Dacă îți folosești site-ul web pe telefon și poți face fotografii și recunoaște obiecte, și fie faci... Un lucru mic pe care l-am construit a fost în jurul reciclării, unde dacă nu știu cu adevărat unde să pun anumite obiecte în ce coș, noi au coșul galben, verde, depinde de țări. Au culori diferite, dar uneori nu mă pricep prea bine să știu unde să arunc lucrurile, astfel încât să poți construi unelte mici de genul acesta, live poate recunoaște două obiecte în fața ta și apoi le clasifică și poți construi anumite lucruri precum acest.
Charlie: În caz contrar, aveți o clasificare a textului în care, la începutul acestui an, am folosit unul dintre modelele TensorFlow GS pentru a analiza comentariile scrise, problemele GitHub și PR-urile GitHub pentru a clasifica apoi și a spune: „Hei, dacă este un comentariu toxic, atunci ai un bot mic care spune: „Hei, poate nu ar fi trebuit să scrii asta” sau „Ai grijă, este puțin toxic. Ne dorim ca acesta să fie un spațiu sigur.” Deci, puteți utiliza clasificarea textului așa.
Charlie: Există o clasificare a sunetului, dacă vrei, unde, atunci când Apple și-a lansat noul ceas, OS, aveau ceva să recunoască sunetul apei curgătoare, să spună oamenilor să se spele pe mâini timp de 20 de secunde cu pandemia de COVID, dar poți face. asta si in JavaScript. Și că lucrul care a fost cu adevărat interesant, mă uitam la unele dintre videoclipuri și mi-am spus: „Oh, știu cum să fac asta în JavaScript.”
Charlie: Și am construit un mic prototip. Nu stiu daca merge pe Apple Watch. Pot fi. Nu am unul, dar știu că rulează pe telefon și pe laptop. Și apoi asta poate începe câteva idei și pentru alți oameni, unde un prieten de-al meu, Ramon Huidobro, @hola_soy_milk pe Twitter. A participat la o mulțime de conferințe online anul acesta. Și una dintre problemele lui este că atunci când aplaudă pentru a aplauda pe cineva, atunci nu are timp să adauge și emoji-ul aplauda pe chat. Și ceea ce voia să facă este să asculte sunetul din palmele lui și asta ar trimite automat emoji-uri din palme în chat.
Charlie: Și sunt lucruri mici de genul acesta pe care, dacă vrei, poate o aplicație cu adevărat mai utilă în munca ta de zi cu zi este în jurul preluării predictive. Acest lucru înseamnă, de asemenea, utilizarea învățării automate în partea frontală, unde se uită la analiza site-ului dvs. Deci ce pagini sunt de obicei privite după care și lucruri de genul acesta. Puteți preleva resurse în avans pe baza paginii care este cel mai probabil să fie vizitată după. Este ceva pe care mi-am dorit să mă uit în tot acest an, dar nu am avut timp, dar care vă permite să îmbunătățiți cu adevărat performanța și UX-ul paginii dvs. Și nu solicitați resurse de care nu veți avea nevoie, astfel încât acestea să se poată îmbunătăți cu adevărat, și aceasta este, de asemenea, o aplicație a învățării automate.
Charlie: Deci poți face lucruri distractive sau poți face lucruri mai utile, dar nu există nicio aplicație greșită, pot fi aplicații greșite. O retrag, dar spun doar că, dacă începi cu adevărat în asta, nu este nimic în neregulă să începi cu ceva distractiv, iar apoi pot să răspund câteva idei despre ceva ce poți face la serviciu ca bine.
Drew: Cred că lucrul cu adevărat util aici este să știi că aceste lucruri sunt posibile. Și de fapt doar modalități creative de a rezolva problemele pe care le putem face singuri. În mod tradițional, am construit lucrurile prin moderarea conținutului trimis de utilizatori și a fost destul de primitiv și, practic, a trebuit să punem ființele umane să se uite la lucruri și să ia decizii în acest sens. Dar, cu acces la învățarea automată, în acel exemplu, am putea preda mai mult din asta și apoi să-i punem pe oameni să se uite la cazurile marginale, de exemplu, lucruri care nu au o potrivire convingătoare.
Drew: Bineînțeles că așa va fi atunci, este puțin timp înainte pentru a dezvolta acel lucru și a-l pune în aplicare, dar apoi te gândești la economiile de a nu avea ființe umane să verifice manual lucrurile. Pentru ce lucruri puteți vedea că va fi folosit în viitor pe măsură ce tehnologia se îmbunătățește?
Charlie: Pentru mine, poate în viitor, cred că pe măsură ce modelele devin mai mici de încărcat și devin mai performante și probabil că îmbunătățim seturile de date cu care sunt antrenați. Sper să pot vedea instrumente care sunt mai utile. Adică, personal, sunt interesat de acele mici modele de învățare automată care pot rula pe microcontrolere pentru a construi lucruri. Dar dacă rămânem mai mult în lumea front-end, sper că poate o recunoaștere a vocii poate fi mai bună, deoarece simt că suntem obișnuiți să navigăm pe web cu un track pad sau o tastatură, dar în acest moment există încă o recunoaștere a vocii, dar nu este întotdeauna super precisă sau nu este exactă cu accente, de exemplu. Și sper că, pe măsură ce dezvoltăm modele mai bune, oamenii mai mici nu vor fi atât de speriați să le adauge pe site-ul lor, deoarece nu va afecta performanța atât de rău.
Charlie: Sunt interesat să folosesc învățarea automată în chestii precum preluarea anticipată predictivă, astfel încât să putem construi site-uri web mai inteligente, care să îmbunătățească experiența pe un spectru, pentru că pentru utilizatori, este mai bine pentru că pagina se va încărca mai repede, prin urmare performanța în general de site-ul dvs., este mai bine. Dar, de asemenea, să spunem, dacă ne gândim la durabilitate, a nu solicita resurse inutile ajută, de asemenea, amprenta de carbon a site-ului tău. Dar mai există și amprenta de carbon a modelelor de învățare automată. Asta nu e foarte bine. Deci poate să nu mai vorbim despre asta. Aș crede că pentru viitor, sper doar să am modele care sunt poate mai performante sau mai mici, astfel încât oamenii să aibă mai multe șanse să încerce, pentru că să spunem că vor fi mai puțini blocanți pentru ca oamenii să intre în asta. , dar să vedem.
Drew: Există limitări și constrângeri cunoscute de care ar trebui să fim conștienți înainte de a ne lansa într-un proiect de învățare automată?
Charlie: Da. Sunt. Cred că, indiferent dacă o faci în JavaScript sau Python, există limite. Cred că dacă vrei să construiești ceva, care este foarte personalizat, pentru care nu există un model pre-antrenat, una dintre limite este că s-ar putea să ai nevoie de destul de multe date și nu toată lumea are asta. So if you're doing something on your own as a side project, and you can't find the data set, it would actually take you quite a long time to get one that would allow you to generate good predictions. You can build a small data set, but you will not be able to push it to production or something if you don't actually have a data set that's consistent enough. So I think the amount of data that you need, training the models can take a lot of time.
Charlie: That depends on the amount of data that you feed it, but depending on the application that you want to will build it with, you have to be aware that it can take a lot of time. I remember when I got started and I was doing it in Python and I wanted to… I forgot what I wanted to do, but my model was running for, it was training for eight hours. And at the end it told me that it failed because of something. And I was like, “You're telling me that at the end, after eight hours,” so it can be a bit frustrating and it can still be experimental and you have to be comfortable with it not being a pure science, not everything is always accurate.
Charlie: At the moment, as some of the models are still, they can be a few megabytes, if you are building something that you know, is most likely going to be seen on a mobile screen, you might want to take into consideration that, well, you don't want to load all that data over 4G network. You might want to warn people that they should be on Wi-Fi or the battery use, or the type of phones can't really handle all of this as well. And then more seriously in terms of liability, you do have to understand why your model predicted certain things. And that can be difficult because the model is a black box. It's a function that you don't really know what's inside. You know what it predicted and based on what you're building, if it makes certain decisions about, I don't know, who gets a loan or who goes to prison, based on whatever, you want to be able to explain how you got to that decision.
Charlie: If you decided to use machine learning to kind of abstract some of the work, so it wouldn't be done by people. That can be quite dangerous, so you have to know what you're doing, and in the end, just remember that it's not perfect. I think people sometimes assume that because we talk about artificial intelligence is just as smart as people, but no, it's still computers. It's still data that is given to them and they make up some predictions and somehow we just trust it, which is scary. But yeah, that's some of the limitations.
Drew: Da. I guess it may seem like it's intelligent, but it is still artificial. There've been some quite high profile cases in recent times particularly around some of the machine learning stuff with image recognition that have raised issues of bias in machine learning, for example, a model only detecting humans if they have light skin. Are there ethical considerations that we should be making here?
Charlie: To me, that sounds like a really interesting side of machine learning. And that's also why, before I was saying that, remember that it's not perfect. Sometimes I feel like people think that the machine just happens to be right and know all the things by itself, but it's still something that we program. And when an algorithm products or generates a biased result, the algorithm just generated things based on the data that it was given before. So an algorithm itself or a model is not going to know the difference in society between light-skinned people or dark-skinned people. It doesn't know and it doesn't care. The only thing that it knows is that I got given pictures of certain people and I'm just going to generate based on what I know.
Charlie: And the data set that is given to the algorithm is in general generated by us, by people. Maybe it's not the developer using the model, but at some point somebody put together a data set. And I think it's important to remember that we are responsible for making sure that the predictions generated are as fair as possible and as unbiased as possible. And that creates interesting questions then, because then you can go into, “Well, what is fair for people?” or if we think about my example of the GitHub action that I created to look at toxic comments, well, maybe what I think is toxic is not the same thing as what other people think is toxic.
Charlie: It's interesting. There's a really interesting collection of videos by MIT media lab around the ethics and governance of artificial intelligence, and I find that fascinating because it's not about telling people, “Oh, you're a bad person because you used in algorithm that's biased,” or, “You're a bad person because you produced a model that's biased.” Its more about raising certain questions and helping you realize, “Well, actually, maybe I could be better,” because that surface that, “Yes, I forgot to add diverse people to my data set. Let me fix that.” It's not really about say, “Let's not use that model ever again.” Just retrain it. Realize that, “Oh, I forgot this. I can retrain it and we can make it better.” And that's something that I definitely think is interesting.
Charlie: And you have companies really trying to improve on that. When the issue of Google who was translating certain neutral languages into gendered languages, and all of a sudden engineer was male and cook was female. Now they know they've really reworked on that and it's a lot more unbiased and they use the 'they' pronoun as well. They also really try to make it better, but then you have also weird stuff where I think IBM had created a data set called Diversity in Faces, that was supposed to be one of the very few that I said that actually had a diverse spectrum of people. But when I tried to find it to use it, it's not available anymore. So I'm like, “Oh, you had this good initiative. You try to do better than a lot of other people, and now people are going to actually use it.” I don't know, but I think the question is really fascinating because he can really help us improve. And then we improve the tool as well that we're using.
Drew: I guess it pays just to be really careful to be balanced and be diverse when selecting data for training models. I guess that's what it comes down to, isn't it?
Charlie: Yeah. Well, I mean, you're building a tool for the public, in general, right? If it's a tool that everybody can use, so it should reflect everybody really, or you should be really clear and say, “This tool can only be used by these people because the model was trained that way, but it's not really what we should do.” I understand that sometimes it if you've never thought about it, it can be I don't know, you can see it as a burden. I hate that people would think of it that way, but it's also, if you spent all this time, maybe writing your own algorithm or generating your own model and doing all of this work, you can't tell me that finding a diverse data set is the hardest part. I don't think it would be. So I'm hopeful, and I think as more people raise concerns about this, and I think people are watching this space, which is really good because if companies don't do it, they'll do it if we tell them that it's not right. And if you want the adoption of machine learning models, you have to make sure that everybody can use them.
Drew: Of the various tools that are available for doing machine learning in JavaScript, you've worked a lot with TensorFlow JS and you've written a book about it. Tell us about your book.
Charlie: Yes, I did. I did write a book this year about TensorFlow JS. So to help JavaScript developers learn more about machine learning and understand it better. And I think the main goal of this book was to help people dive into machine learning, but making it less scary, because I know that at first I thought about machine learning as this big thing, completely different from the web development that I would never understand anything about. I didn't think that I would have to write my own algorithms and really understand math. And as I've dived into this over the past two and a half years, I realized that it's not really like that. And I was hoping that writing this book could help people realize as well that they can do it and what can be done.
Charlie: And there's also a few projects that you can really put in practice what you're learning, but it was really aimed at people who haven't really looked into ML yet, or who just are curious to learn more. I'm not really diving into the algorithms like the source code of the algorithms, but it's really more telling people, trying to understand what an algorithm does and which one to use and for what. A bit of what we just talked about, but it's explaining contents in a clear way, so hopefully it's less scary and people want to hopefully dive a bit more into it.
Drew: So it's called Practical Machine Learning In JavaScript and is available from Apress, and we'll link it up in the show notes. So I've been learning all about machine learning today. What have you been learning about lately, Charlie?
Charlie: Let's say a thing that I'm diving into that is related to machine learning or I will use machine learning with it, but it's digital signal processing that I want to use with machine learning. As we've talked about the fact that machine learning needs a lot of data, if you want to build your own models, sometimes you have to filter your data to actually get the right prediction. And if we think about it, let's think about noise canceling headphones. In your day-to-day life, you have a lot of noise around you. Let's say you're trying to watch a video on the train and there's people talking around you, and there's a sound of the train. And what you want to focus on is the sound of the video.
Charlie: With digital signal processing, that would be a little bit like your noise canceling headphones, where there's some noise around that you don't care about. So there's some data that you don't want to listen to, and the noise canceling headphones allow you to focus on the sound coming from the video on your phone, so that you can really truly listen and focus on that. What I'm doing with digital signal processing is that I have a bunch of data from a piece of hardware, like an Arduino, but I know that there's a lot of it that I might not care about. I want to filter out the things that I don't care about, so that then I can feed that to a model and get better predictions about gestures or things like that. So you have your data signal that you can either transform or filter.
Charlie: It's like when you use the web API to get sound from your microphone, you can either see the arrays of numbers on your dev tools, or you can transform it into a spectrogram to see the picture of the sound. And that's a little bit of that. To have a better prediction for gestures based on hardware data, I can transform that signal. I've been wanting to do this for a couple of years, but it's something that I know nothing about. It takes time to learn, but now that I know a bit more about the machine learning side, I can learn the digital processing side and I'm getting there. I like this moment where I'm like, “Oh, I start to get it because I spent all this time on it.” And yeah, that's, that's really interesting. I'm going to have you going a bit.
Drew: Charlie you're such a nerd. If you dear listener would like to hear more from Charlie, you can find her on Twitter, where she's @devdevcharlie and her personal website includes links to lots of our experiments and projects, and it's really worth checking out at charliegerard.dev. Her book Practical Machine Learning In JavaScript is available now, and we'll link to that in the show notes. Thanks for joining us today. Charlie, did you have any parting words?
Charlie: Amintește-ți să te distrezi puțin. Am vorbit mult astăzi despre lucruri distractive și apoi lucruri practice, dar dacă ești dispus să te uiți la asta, amintește-ți să te distrezi puțin, indiferent ce decideți să construiți.