Smashing Podcast Episode 33 z Charlie Gerard: Co to jest uczenie maszynowe?
Opublikowany: 2022-03-10W tym odcinku mówimy o uczeniu maszynowym. Do jakiego rodzaju zadań możemy go umieścić w kontekście tworzenia stron internetowych? Aby się tego dowiedzieć, rozmawiałem z ekspertem Charliem Gerardem.
Pokaż notatki
- Praktyczne uczenie maszynowe w JavaScript: TensorFlow.js dla programistów internetowych
- Charlie na Twitterze
- Strona osobista Charliego
Cotygodniowa aktualizacja
- Praktyczne wprowadzenie do wstrzykiwania zależności
napisany przez Jamiego Corkhill - W stronę sieci bez reklam: dywersyfikacja gospodarki online
napisany przez Fredericka O'Brien - Czy sieć powinna ujawniać możliwości sprzętowe?
napisany przez Noama Rosenthal - Jak zarobić więcej pieniędzy na sprzedaży aplikacji Shopify w 2021 roku?
napisane przez Suzanne Scacca - Pierwsze kroki z pakietem GetX w aplikacjach Flutter
napisany przez Kelvina Omereshone
Transkrypcja
Drew McLellan: Jest starszym programistą front-end w Netlify, ekspertem Google Developer w zakresie technologii internetowych i prelegentem Mozilli. W wolnym czasie bada pole interakcji człowiek-komputer i buduje interaktywne prototypy przy użyciu sprzętu, uczenia maszynowego i kreatywnego kodowania. Regularnie przemawia na konferencjach i pisze wpisy na blogach, aby dzielić się tym, czego się nauczyła. A ostatnio jest autorem książki Praktyczne uczenie maszynowe w JavaScript dla Apress.
Drew: Wiemy, że jest ekspertem od front-endu, ale czy kiedyś uciekła z więzienia za pomocą metalowego pilnika, który wyszydełowała ze snów. Moi miażdżący przyjaciele, witajcie, Charlie Gerard. Cześć Charlie. Jak się masz?
Charlie Gerard: Rozwalam.
Drew: Chciałem dzisiaj porozmawiać o uczeniu maszynowym, co może wydawać się trochę dziwnym tematem dla podcastu, który skupia się głównie na tym, jak tworzenie stron internetowych kończy się na przeglądarce. Mam tendencję do myślenia o uczeniu maszynowym jako o czymś, co dzieje się w gigantycznych centrach danych lub laboratoriach z ludźmi w białych fartuchach. W dzisiejszych czasach jest to z pewnością trochę modne słowo. Co właściwie mamy na myśli, kiedy mówimy o uczeniu maszynowym?
Charlie: Więc ogólnie rzecz biorąc, standardową definicją byłoby danie komputerom możliwości generowania przewidywań bez mówienia im, co mają robić. Miejmy nadzieję, że będzie to miało sens, gdy będziemy o tym mówić, ale jest to rodzaj ogólnej definicji rozmowy. Tak naprawdę nie mówisz algorytmom ani modelom, aby szukały pewnych rzeczy. Uczą się na podstawie danych, które im przekazujesz, a następnie mogą generować prognozy.
Drew: Więc zamiast kodować w określonych okolicznościach, tworzysz rodzaj ogólnego przypadku, w którym oprogramowanie może nauczyć się, jak to zrobić samodzielnie?
Charlie: Tak, dokładnie.
Drew: To brzmi trochę przerażająco. To trochę na pograniczu sztucznej inteligencji. Czy musisz być zagorzałym frajerem matematyki lub naukowcem danych, aby to zrobić? A może są tam takie rzeczy, jak ustalone algorytmy i rzeczy, które możesz wywołać, aby zacząć?
Charlie: Tak. Na szczęście nie musisz być zagorzałym maniakiem matematycznym ani naukowcem zajmującym się danymi. W przeciwnym razie zdecydowanie bym o tym nie mówił. Ale istnieją algorytmy, które już zostały opracowane, i dostępne już narzędzia, które pozwalają korzystać z tych algorytmów bez konieczności samodzielnego pisania wszystkiego od zera. Jeśli więc użyjemy ekosystemu front-endu jako porównania, możesz użyć internetowych interfejsów API, takich jak nawigator, aby uzyskać multimedia użytkownika, gdy chcesz mieć dostęp do kamery internetowej lub mikrofonu.
Charlie: I nie musisz wiedzieć, jak to API zostało faktycznie zaimplementowane pod maską. Liczy się to, że wiesz, do czego służy ten interfejs API i jak z niego korzystać, jeśli chcesz. Później możesz zajrzeć do kodu źródłowego swojej ulubionej przeglądarki, aby dowiedzieć się, jak to naprawdę działa, ale tak naprawdę nie jest to przydatne. Może to być przydatne, jeśli później będziesz chciał napisać własny algorytm. Ale szczerze mówiąc, jest bardzo mało prawdopodobne, że będziesz chciał to zrobić.
Drew: OK. Przypomina to trochę sposób, w jaki można napisać CSS, aby pozycjonować element na stronie. Nie obchodzi cię, jak przeglądarka to robi. Po prostu piszesz CSS, a przeglądarka się tym zajmuje.
Charlie: Tak. Kiedy zaczynasz, to przeważnie coś takiego.
Drew: To dobrze. To bardziej mój poziom nauki o danych.
Charlie: Ja też.
Drew: Więc jakie są rodzaje problemów, na które można postawić uczenie maszynowe? Do czego to służy?
Charlie: To zależy od tego, co chcesz zrobić w pierwszej kolejności, ponieważ kiedy chcesz zbudować określoną rzecz, radzę najpierw pomyśleć o rodzaju problemu, którego chcesz się nauczyć, co pomoże ci wybrać algorytm, który chcesz można użyć, aby naprawić lub znaleźć rozwiązanie problemu. Więc ogólnie zacząłbym od zastanowienia się nad rodzajem problemu, który próbuję rozwiązać, a są trzy główne. Myślę, że prawdopodobnie jest ich trochę więcej, ale ogólnie, jeśli chodzi o to, do czego zostałem wyszkolony i co przeczytałem, wymieniono trzy główne.
Charlie: Jeśli chcesz, żebym w to wszedł, to jest uczenie nadzorowane, uczenie się nienadzorowane i uczenie się ze wzmocnieniem. Ty też masz wielu nadzorowanych, ale szczerze mówiąc, nie wiem o tym zbyt wiele, ponieważ udało mi się zbudować moje projekty z trzema pierwszymi.
Drew: Nadzorowany, nienadzorowany i wzmacniany, powiedziałeś?
Charlie: Tak, uczenie się przez wzmacnianie.
Drew: OK. Czym więc jest uczenie nadzorowane? Czy możesz podać nam przykład, co to oznacza?
Charlie: Uczenie nadzorowane polega na tym, że Twój zbiór danych składa się z funkcji i etykiet, które przekazujesz do algorytmu. Jeśli więc weźmiemy przykład, do którego, miejmy nadzieję, większość ludzi będzie w stanie się odnieść, jest to sytuacja, w której masz dom i chcesz go sprzedać, i chcesz dowiedzieć się, za jaką cenę zamierzasz sprzedać swój dom lub samochód, a tak przy okazji, to byłoby to samo. I użyłbyś zestawu danych dotyczących domów w tym samym środowisku lub tego samego typu domów i znając ich cenę na rynku, mógłbyś wykorzystać cechy własnego domu; więc ile pokoi i czy ma ogród i w jakiej okolicy jest? I podobne rzeczy.
Charlie: To są cechy, a etykietą byłaby cena, a używając wszystkich tych zestawów danych o domach już wokół ciebie, możesz użyć algorytmu uczenia maszynowego, który w pewnym sensie nauczy się korelacji między cechami twojego domu i ceny na rynku, aby następnie uzyskać cechy swojego domu i móc wygenerować z tego cenę. Więc najważniejszą rzeczą w uczeniu nadzorowanym jest mnóstwo funkcji i etykieta, dzięki czemu jesteś w stanie faktycznie narysować korelację między nimi.
Drew: W tym przykładzie nakarmiłbyś model ogromnym zestawem danych o domach, gdzie znasz ich cenę, a następnie znasz wszystkie te cechy. Powiedzmy, sypialnie i co masz, na przykład kwadrat, i myślę, że lokalizacja byłaby innym rodzajem rzeczy, którą można wziąć pod uwagę?
Charlie: Tak. Jednym z problemów związanych z uczeniem maszynowym jest to, że możesz mieć wiele funkcji, a niektóre z nich nie będą tak wydajne, jak inne. Na przykład możesz mieć kolor swojego domu, który może nie mieć korelacji z ceną, ale możesz podać kilka cech, a model sam znajdzie korelację między nimi. Możesz następnie dostosować swój zestaw danych, jeśli chcesz, i usunąć kolor, lub zdasz sobie sprawę, że rozmiar ogrodu nie ma znaczenia ani tego typu rzeczy.
Charlie: Ogólnie rzecz biorąc, nawet jeśli wprowadzisz swój zestaw danych do modelu, nie będziesz miał doskonałej prognozy za pierwszym razem. Zwykle poprawiasz kilka różnych rzeczy i widzisz. Dostrajasz go, aż dojdzie do prognozy, która Twoim zdaniem jest całkiem dokładna.
Drew: A kiedy ten model zostanie utworzony, lub powiedzmy, że stworzyłeś go przy użyciu danych z jednego miasta, czy mógłbyś to wziąć i nakarmić… czy musiałbyś wprowadzić dane z innego miasta? Czy byłbyś w stanie go podnieść i użyć w innym miejscu po zakończeniu tego szkolenia, czy jest to wtedy specyficzne dla tego zestawu danych lub jak to działa?
Charlie: Myślę, że byłoby to specyficzne dla zestawu danych. Oznacza to, że możesz stworzyć kolejny zestaw danych w tym samym, powiedzmy formacie. Jeśli masz arkusz kalkulacyjny programu Excel z różnymi kolumnami, możesz zachować tę samą etykietę i funkcje, ale musisz zastąpić je wartościami tego miasta. Ale ogólnie oznacza to, że zebranie zestawu danych również może zająć dużo czasu, ale jeśli już wiesz, co zrobiłeś na przykład dla miasta Paryż, i że struktura zestawu danych jest taka sama, ale podmieniasz wartości, to trochę szybciej i możesz zregenerować model.
Charlie: Nie powinieneś ponownie używać tego samego modelu, jeśli Twoje dane są inne, ponieważ ceny domów w Paryżu są inne niż na przykład w małym mieście w Australii. Więc nie chciałbyś mieć błędnych danych, ponieważ rdzeń twojego zestawu danych na początku nie był dokładnie taki sam.
Drew: Dużo mówimy o modelach z uczeniem maszynowym. Więc model jest czymś w rodzaju końcowego wyniku całej analizy zbioru danych. A następnie jest używany do dalszych prognoz. Taki jest model, tak?
Charlie: Tak, dokładnie tak. Jest to model, więc jest trochę jak funkcja, do której będziesz wprowadzać nowe dane wejściowe, których nigdy wcześniej nie widziano, ale na podstawie tego, czego nauczył się na etapie szkolenia. byłby w stanie wyprowadzić prognozę.
Drew: Tak więc uczenie nadzorowane tworzy ten model predykcyjny na podstawie etykiet na funkcjach. Co to jest nauka nienadzorowana?
Charlie: Więc bez nadzoru to trochę ten sam pomysł, ale usuwasz etykiety. Więc w tym przypadku możesz pomyśleć, że nasz problem ze sprzedażą domu nie byłby tak naprawdę problemem uczenia się bez nadzoru, ponieważ jeśli znasz tylko cechy domów wokół ciebie, ale nie masz ceny jako etykiety, naprawdę nie mogę przewidzieć ceny. Nie będzie nawet wiedział, jaka jest cena.
Charlie: Więc bez nadzoru jest więcej, gdy masz zestaw danych i masz tylko związane z nim funkcje. Możesz razem generować więcej trendów lub klastrów rzeczy. Nie używałbyś uczenia nienadzorowanego, jeśli chcesz uzyskać określony wynik, jeśli masz pewne pytanie, na przykład: „Jaka jest cena tego?” To nie jest dobre wykorzystanie nienadzorowanego, ale to więcej, jeśli chcesz zgrupować jednostki razem, mogą to być ludzie lub takie rzeczy.
Charlie: Zwykle przykładem użycia są rekomendacje, takie jak rekomendacje Amazon lub rekomendacje Spotify, np. „Ludzie tacy jak Ty też tego słuchają” i bardziej chodzi o to, że w tym przypadku funkcje te są… cóż, mają dane o Tobie, aby wiedzieli, czego słuchasz, w jakim kraju zazwyczaj się znajdujesz lub ile razy dziennie czegoś słuchasz? Korzystając z tych funkcji dotyczących ludzi, mogą następnie umieścić Cię w tym samym gronie lub tego samego rodzaju słuchaczy lub tego samego rodzaju ludzi, którzy kupują określone rzeczy na Amazon. A korzystając z tego rodzaju nienadzorowanej nauki, mogą wiedzieć, co Ci reklamować lub co polecić, abyś wysłuchał na podstawie osób takich jak Ty. Więc to bardziej tego rodzaju problemy.
Drew: Okej, więc to wszystko ma teraz dużo większy sens dla mnie jako programisty stron internetowych, ponieważ tego rodzaju zastosowania, o których mówiliśmy, ceny i rekomendacje domów, wyświetlanie reklam i inne rzeczy, na koniec dnia, są to różne rzeczy, z którymi musimy sobie radzić i funkcje, które możemy chcieć umieścić w witrynie lub produkcie, lub co masz. Więc mamy różne rodzaje uczenia się oparte na przedmiotach, które chcemy przewidzieć. Czy są inne rodzaje aplikacji, w których możemy to również umieścić? Czy istnieją dobre przykłady, które stworzyli ludzie, które mogą to wykorzystać?
Charlie: Tak. Jest tak wiele przykładów. Dlatego, gdy mówię o przewidywaniu ceny domu, może to nie jest coś, co dotyczy Ciebie. Może to nie jest tak ekscytujące, ale w rzeczywistości możesz zrobić o wiele więcej. Wokół są naprawdę dobre przykłady. Myślę, że pierwszy, który zobaczyłem, dotyczył dynamicznie generowanych tekstów artystycznych do obrazów. Oczywiście jest to coś, co możesz zrobić sam, dodając obraz do witryny.
Charlie: Ale co, jeśli masz witrynę, która ma naprawdę mnóstwo obrazów i zamiast robić to ręcznie, możesz przesłać każdy obraz do algorytmu uczenia maszynowego, który wygeneruje tekst graficzny o tym, o czym jest ten obraz, i być może jedynym ludzkim krokiem byłoby sprawdzenie, czy jest to poprawne, ale naprawdę pozwoliłoby to skoncentrować się na budowaniu aplikacji.
Charlie: I nadal będziesz udostępniać swoją stronę internetową, umieszczając tekst graficzny do obrazów, ale byłby on w pewnym sensie generowany przez maszynę. To jeden z przykładów, które widziałem na początku, ale masz też prototyp filtrowania treści, które nie są bezpieczne dla pracy. Pomyślałem, że byłoby całkiem dobrze w rozszerzeniu Chrome, możesz mieć rozszerzenie Chrome, które za każdym razem, gdy otwierasz stronę internetową, po prostu sprawdzasz, czy to, co jest na stronie, jest bezpieczną treścią.
Charlie: Na przykład, jeśli masz dzieci używające twojego laptopa lub podobnych rzeczy, możesz po prostu ukryć obrazy lub zastąpić je pandami, jeśli chcesz czy coś takiego. Ale jest to ten rodzaj aplikacji, w którym możesz wykorzystać uczenie maszynowe, aby w pewnym sensie automatycznie robić rzeczy za Ciebie, dzięki czemu nie musisz się martwić o pewne zadania, lub możesz po prostu wykorzystać moc swojego mózgu do robienia innych rzeczy.
Charlie: Ale jest jeszcze bardziej zaawansowany przykład rozpoznawania gestów, przy użyciu kamery internetowej, która komunikowała się wtedy z Amazon Alexa, rozpoznawania głosu i tak dalej. Możesz więc naprawdę połączyć ze sobą wiele różnych technologii z głosem, kamerą internetową i uczeniem maszynowym, aby po prostu rozpoznać i móc wchodzić w interakcje z różnymi technologiami, ale w nowy sposób. Więc to może być naprawdę zabawne.
Drew: To dość fascynujące, ponieważ przyjrzeliśmy się rodzajowi analizy modeli danych jako takich, a teraz myślimy o patrzeniu na zawartość obrazu i analizowaniu zawartości obrazów za pomocą uczenia maszynowego, co jest dość interesujące. Myślę, że jest to rodzaj funkcji, którą ma Facebook, jeśli ktoś opublikuje zdjęcie, które według niego może być krwawe lub przedstawia kontuzję lub coś w tym rodzaju, i to zamazuje, a następnie wystarczy kliknąć, aby je ujawnić. Oczywiście, Facebook nie może mieć zespołów moderatorów, którzy przyglądają się każdemu przesłanemu obrazowi.
Charlie: Mam nadzieję, że nie.
Drew: To byłoby niekończące się zadanie.
Charlie: To też nie jest świetna robota.
Drew: Kiedyś pracowałem nad witryną z bezpłatnymi ogłoszeniami, na której ludzie mogli zamieszczać reklamy. I było w tym dużo umiaru, że nawet ja, jako programista, musiałem się zaangażować, po prostu przeglądając te wszystkie obrazy, mówiąc: „Tak, nie, tak, nie”.
Charlie: Ja też trochę tak zrobiłem. Żałuję, że w tamtym czasie nie było uczenia maszynowego, tylko małego narzędzia, które zrobi to za mnie, a teraz jest. Więc to jest całkiem fajne.
Drew: Tak, to naprawdę świetnie. Myślenie o wejściu na żywo z kamery internetowej i możliwość analizowania tego w czasie rzeczywistym jest całkiem ekscytujące, aby móc wykonywać interakcje oparte na gestach. Czy to…
Charlie: Tak, więc w istocie używa więcej klasyfikacji obrazów, ponieważ twoja kamera internetowa, obraz to zestaw pikseli, ale potem, gdy wykonujesz określone gesty, możesz wytrenować model, aby rozpoznał, że twoja prawa ręka jest uniesiona i może ty kontrolowałby mysz w ten sposób, albo spojrzałby na współrzędne twojej ręki i ekranu, a ty podążałbyś za myszą. Naprawdę możesz robić, co chcesz. Możesz mieć rozpoznawanie kolorów.
Charlie: Możesz robić naprawdę fajne rzeczy. Jeden prototyp, który zbudowałem, z którego w pewnym momencie zrezygnowałem, ale trochę zbudowałem… Chciałem, aby było to rozszerzenie do Chrome, ale to nie zadziałało. Zbudowałem małą aplikację komputerową z Electron. Również w JavaScript, gdzie mogłem przeglądać stronę internetową po prostu przechylając głowę. Więc rozpoznałby, że kiedy przechylam głowę w dół, to przewija się w dół, a kiedy wchodzę w górę, idzie w górę. To były takie małe eksperymenty, w których myślałem: „Cóż, jeśli mogę go następnie zmienić w rozszerzenie Chrome, może być przydatne dla niektórych osób”.
Charlie: Nawet jeśli jesz przed komputerem i czytasz wiadomości, a ja nie chcę, żeby moja klawiatura była brudna, to mogę po prostu przechylić głowę, ale mam nadzieję, że dla ułatwienia faktycznie pomagają ludziom poruszać się po określonych stronach internetowych lub tego typu rzeczach. Dostępnych jest wiele narzędzi i chodzi o pomysł, abyś mógł wymyślić obserwowanie sytuacji wokół ciebie i jak możesz rozwiązać niektóre z tych problemów za pomocą uczenia maszynowego?
Drew: W przypadku uczenia maszynowego często myślimy o językach, Pythonie. Myślę, że to właśnie tam wydaje się, że wiele tego rodzaju rozwoju następuje jako pierwsze. Ale jako programiści stron internetowych, ogólnie jesteśmy bardziej zadowoleni z JavaScript. Czy uczenie maszynowe jest czymś, czego możemy realistycznie oczekiwać. Mam na myśli małe zabawne przykłady to jedno, ale czy rzeczywiście jest to przydatne do prawdziwej pracy w JavaScript?
Charlie: Cóż, myślę, że tak, ale wiem, że większość rzeczy, które robię, to prototypy, ale myślę, że to zależy od sytuacji, w której jesteś w pracy. Istnieją sposoby na wdrożenie uczenia maszynowego jako programista w codziennej pracy. Ale to, co naprawdę podoba mi się w JavaScript, to fakt, że jeśli jesteś już programistą front-end, nie musisz uczyć się nowego ekosystemu, nowego zestawu narzędzi lub nowej składni, nowego języka. Jesteś już w swoim środowisku, w którym pracujesz na co dzień.
Charlie: Zwykle, kiedy uczysz się tego typu rzeczy, musisz zacząć od własnego czasu, jeśli nie jest to twoja codzienna praca, a czas wszystkich jest cenny i nie masz go za dużo. Więc jeśli możesz usunąć pewne bariery i pozostać w tym samym ekosystemie, który znasz, to myślę, że to całkiem nieźle, ale możesz też zacząć… Siła JavaScript polega na tym, że możesz zacząć od zbudowania małego prototypu, aby przekonać ludzi, że może istnieje pomysł, który wymaga zbadania, a dzięki możliwości szybkiego rozkręcenia czegoś w JavaScript możesz sprawdzić, czy Twój pomysł jest słuszny.
Charlie: Wtedy albo możesz uzyskać poparcie od kierownictwa, aby wydać więcej czasu lub więcej pieniędzy, albo możesz potem dać to programistom Pythona, jeśli chcesz zbudować go w Pythonie. Ale dla mnie ta umiejętność szybkiego sprawdzania poprawności pomysłu jest bardzo ważna. Zwłaszcza jeśli pracujesz dla startupu i wszystko idzie szybko i jesteś w stanie pokazać, że warto się nad tym zastanowić, myślę, że to bardzo ważne.
Charlie: A także fakt, że istnieje naprawdę duży ekosystem narzędzi i jest coraz więcej frameworków i zastosowań uczenia maszynowego. W JavaScript nie tylko na stronie internetowej możemy dodać uczenie maszynowe. Jak mówiłem wcześniej, możesz tworzyć rozszerzenia Chrome i aplikacje komputerowe za pomocą Electrona, a aplikacje mobilne za pomocą React Native, a sprzęt i IoT za pomocą frameworków takich jak Johnny-Five.
Charlie: Dzięki językowi, który już znasz, masz dostęp do ogromnego ekosystemu różnych platform, na których możesz przeprowadzić ten sam eksperyment. I myślę, że to dla mnie całkiem niesamowite. I właśnie tam widzę prawdziwą moc uczenia maszynowego w JavaScript. A gdy robi się coraz lepiej, może naprawdę da się to zintegrować z aplikacjami, które budujemy codziennie.
Drew: JavaScript jest wszędzie, prawda?
Charlie: Tak.
Drew: Na dobre lub na złe, jest wszędzie. Kto by tak pomyślał? Brzmi świetnie, ale brzmi też jak sporo pracy. I myślę o zestawach danych i rzeczach, jak u licha zacząć wykonywać tego rodzaju zadania?
Charlie: W tej chwili, przynajmniej z TensorFlow.JS, są trzy rzeczy, które możesz zrobić z frameworkiem. Załóżmy, że najprostszym jest importowanie istniejącego wstępnie wytrenowanego modelu. Jest ich kilka, są różne modele, które zostały wytrenowane z różnymi zestawami danych, i polecam zacząć od tego, ponieważ możesz nauczyć się naprawdę podstaw, jak właściwie korzystać z samego frameworka i co możesz zrobić z tymi modelami.
Charlie: Więc masz pewne modele rozpoznawania obrazów, które zostały wytrenowane z różnymi obrazami. Niektóre z nich są lepsze do rozpoznawania obiektów. Niektóre z nich są lepsze do rozpoznawania ludzi, a dzięki zrozumieniu, jakich modeli użyć, możemy swobodnie budować, co tylko zechcesz, w ramach ograniczeń tego modelu.
Charlie: Ale myślę, że to dobry sposób na rozpoczęcie. Nadal używam wstępnie wytrenowanych modeli do wielu moich eksperymentów, ponieważ po co miałbyś wymyślać koło na nowo, jeśli już tam jest? Po prostu skorzystajmy z otrzymanych narzędzi. Następnie, gdy chcesz pójść, może krok dalej, możesz zrobić coś, co nazywa się uczeniem transferu, kiedy przeszkolisz ważny model. Więc nadal używasz jednego z wcześniej wytrenowanych modeli, ale masz możliwość przeszkolenia go na żywo z własnymi próbkami.
Charlie: Na przykład, jeśli chcesz użyć klasyfikacji obrazów, w której masz różnych ludzi, to może chcesz zrobić klasyfikację gestów. Jeśli twój model, na przykład, jest szkolony z ludźmi, którzy zawsze mają, nie wiem, prawą rękę uniesioną do góry lub coś w tym rodzaju, ale dla twojej aplikacji chcesz lewą rękę, możesz przeszkolić ten model z próbkami lewej ręce, a wtedy miałbyś model, który jest już dość wytrenowany w rozpoznawaniu prawej ręki, ale potem dodałbyś własną próbkę i możesz to dość szybko przeszkolić w przeglądarce, w zależności od ilości nowych danych wejściowych, które mu podasz , zajmuje to trochę czasu, ale w ciągu kilku sekund masz przeszkolony model, który bardzo dobrze rozpoznaje te dwa gesty, których możesz następnie użyć w swojej aplikacji.

Charlie: Więc to jest jak zwykle drugi krok. A trzeci krok, który jest nieco bardziej złożony, polega na tym, że robisz wszystko w przeglądarce. Więc piszesz swój własny model od podstaw i trenujesz go w przeglądarce i naprawdę trenujesz, uruchamiasz i generujesz model, wszystko w przeglądarce. Ale ogólnie jedyną aplikacją, jaką widziałem w tym celu, jest budowanie wizualizacji. Gdy chcesz zwizualizować proces trenowania modelu i liczbę kroków, które wykonuje, jak długo to trwa, możesz zobaczyć, jak dokładność rośnie lub maleje, w zależności od wybranych funkcji i parametrów, które dostosowujesz .
Charlie: Więc tak naprawdę nie bawiłem się tym, ponieważ nie znalazłem dla siebie aplikacji, z którą chciałem budować, ale dwa pierwsze kroki, aby użyć tylko wstępnie wytrenowanego modelu lub przeszkolić go z własnymi próbkami, to gdzie osobiście widziałem. Dobrze się przy tym bawiłem.
Drew: Zazwyczaj będzie to przypadek wcześniejszego utworzenia modelu, jakby w trybie offline, a następnie przeglądarka użyje tego wytrenowanego modelu, a może trochę go doda, trochę przeszkoli, ale ogólnie rzecz biorąc, ten model zostanie ustanowiony przed wprowadzeniem go do użytku w przeglądarce użytkownika?
Charlie: Ogólnie tak. Wtedy na pewno możesz stworzyć swój własny model. Jeśli to robisz, nie polecałbym trenować w przeglądarce, ale możesz to zrobić również w NodeJS. Jeśli wiesz, trochę NodeJS. Zdecydowanie stworzyłem własne modele, ale zwykle uruchamiam je w NodeJS, ponieważ jest nieco bardziej wydajny. A potem korzystam z wygenerowanego modelu, który stworzyłem wtedy w przeglądarce.
Drew: Jakie narzędzia są dostępne, aby to zrobić z JavaScriptem? Wspomniałeś o TensorFlow JS, ale co to jest, gdzie to jest? Czy to od Google?
Charlie: Tak. Na początku Google miał narzędzie TensorFlow w Pythonie, a teraz, od kilku lat, może trochę więcej, stworzyli wersję JavaScript, więc zwykle płynie z JS. Ale jest też ML5 JS, który jest trochę abstrakcją na wierzchu. Więc jeśli jesteś trochę zdezorientowany lub jeśli TensorFlow JS wygląda trochę przerażająco z niektórymi słownictwem używanym w dokumentacji, możesz użyć ML5 JS, który ma większość tych samych funkcji, ale powiedzmy, że API lub składnia są trochę bardziej przyjazny dla początkujących.
Charlie: Możesz zacząć od ML5, zobaczyć, czy lubisz uczenie maszynowe, czy myślisz o fajnej aplikacji, a potem, jeśli masz jakieś blokery w ML5 lub framework nie ma pewnych rzeczy, które chcesz zrobić, ty możesz następnie przejść do TensorFlow JS, jeśli chcesz. A jeśli naprawdę nie jesteś zainteresowany pisaniem własnego kodu, ale po prostu chcesz użyć narzędzi, które już tam są, istnieje kilka interfejsów API od Amazon, Google i Microsoft do rozpoznawania obrazu lub rozpoznawania głosu. Jeśli więc bardziej interesuje Cię to, co może zrobić, ale nie chcesz spędzać zbyt wiele czasu na pisaniu kodu, możesz wysłać ping do niektórych interfejsów API i wypróbować również niektóre z ich narzędzi.
Drew: To całkiem interesujące. Więc może możesz użyć przeglądarki, aby przechwycić dane wejściowe z kamery internetowej lub mikrofonu lub co masz, a następnie wysłać je do Amazona, Microsoftu lub kogokolwiek innego, a następnie pozwolić im wykonać ciężką pracę?
Charlie: Tak.
Drew: A potem po prostu korzystasz z wyników.
Charlie: Dokładnie.
Drew: To brzmi jak fajny, kuszący sposób na rozpoczęcie pracy z pomysłami. Brzmi świetnie, ale do jakich problemów możemy to zastosować we frontendzie? Rozmawialiśmy o kilku drobiazgach, ale czy są inne sposoby, w jakie moglibyśmy to wykorzystać?
Charlie: Jest wiele sposobów. Jeśli zacznę od klasyfikacji obrazów, tak, możesz. Możesz użyć obrazów z Internetu lub z kamery internetowej w telefonie. Jeśli po prostu korzystasz ze swojej strony internetowej na telefonie i możesz robić zdjęcia i rozpoznawać przedmioty, i albo to robisz… Mała rzecz, którą zbudowałem, dotyczyła recyklingu, gdzie jeśli tak naprawdę nie wiem, gdzie umieścić określone przedmioty w jakim koszu, my mieć żółty pojemnik, zielony, to zależy od kraju. Mają różne kolory, ale czasami nie wiem, gdzie właściwie rzucać przedmiotami, aby można było zbudować takie małe narzędzia, na żywo rozpoznaje dwa obiekty przed tobą, a następnie je klasyfikuje i możesz budować pewne rzeczy, takie jak ten.
Charlie: W przeciwnym razie masz klasyfikację tekstu, w której na początku tego roku użyłem jednego z modeli TensorFlow GS, aby przejrzeć napisane komentarze, problemy z GitHub i GitHub PR, aby następnie sklasyfikować i powiedzieć: „Hej, jeśli to toksyczny komentarz, to masz małego robota, który mówi: „Hej, może nie powinieneś był tego pisać” lub „Uważaj, to trochę toksyczne. Chcemy, aby była to bezpieczna przestrzeń”. Możesz więc użyć takiej klasyfikacji tekstu.
Charlie: Istnieje klasyfikacja dźwięku, jeśli chcesz, kiedy Apple wypuściło swój nowy zegarek, OS, mieli coś, co rozpoznało dźwięk płynącej wody, aby powiedzieć ludziom, aby myli ręce przez 20 sekund podczas pandemii COVID, ale możesz to zrobić to również w JavaScript. I to, co było naprawdę interesujące, oglądałem niektóre filmy i pomyślałem: „Och, wiem, jak to zrobić w JavaScript”.
Charlie: I zbudowałem mały prototyp. Nie wiem, czy działa na zegarku Apple. Być może. Nie mam, ale wiem, że działa na moim telefonie i laptopie. I to może zapoczątkować kilka pomysłów również dla innych ludzi, gdzie mój przyjaciel, Ramon Huidobro, @hola_soy_milk na Twitterze. W tym roku brał udział w wielu konferencjach internetowych. A jednym z jego problemów jest to, że kiedy klaszcze, żeby kogoś klaskać, nie ma czasu, aby dodać emoji klaskania również na czacie. A to, co chciał zrobić, to słuchać dźwięku jego klaśnięć, a to automatycznie wyśle emotikony klaskania na czacie.
Charlie: I to takie drobiazgi, że jeśli chcesz, może aplikacja naprawdę bardziej przydatna w twojej codziennej pracy polega na predykcyjnym pobieraniu z wyprzedzeniem. To także wykorzystanie uczenia maszynowego w interfejsie użytkownika, gdy patrzy się na analitykę Twojej witryny. Więc które strony są zwykle przeglądane po jakich i tego typu rzeczy. Możesz z wyprzedzeniem pobierać zasoby na podstawie strony, która najprawdopodobniej zostanie później odwiedzona. To jest coś, czemu chciałem się przyjrzeć przez cały rok, ale nie miałem czasu, ale to pozwala naprawdę poprawić wydajność i UX Twojej strony. I nie wymagasz zasobów, których nie będziesz potrzebować, więc to może naprawdę poprawić, a to jest również zastosowanie uczenia maszynowego.
Charlie: Więc możesz robić fajne rzeczy, albo możesz robić bardziej przydatne rzeczy, ale nie ma złej aplikacji, mogą być złe aplikacje. Cofam to, ale mówię tylko, że jeśli naprawdę zaczynasz, nie ma nic złego w zaczynaniu od czegoś fajnego, a potem mogę podkręcić kilka pomysłów na coś, co możesz zrobić w pracy jako dobrze.
Drew: Myślę, że naprawdę użyteczną rzeczą jest wiedza, że takie rzeczy są możliwe. A właściwie tylko kreatywne sposoby rozwiązywania problemów, które możemy zrobić sami. Tradycyjnie budowaliśmy rzeczy poprzez moderację treści przesyłanych przez użytkowników i było to dość prymitywne i zasadniczo musieliśmy kazać ludziom patrzeć na rzeczy i podejmować decyzje w ich sprawie. Ale mając dostęp do uczenia maszynowego, w tym przykładzie, moglibyśmy przekazać więcej tego, a następnie po prostu pozwolić ludziom przyjrzeć się skrajnym przypadkom, na przykład rzeczom, które nie pasują do siebie przekonująco.
Drew: Oczywiście, że tak będzie, jest trochę czasu z góry, aby rozwinąć tę rzecz i wprowadzić ją na miejsce, ale potem myślisz o oszczędnościach wynikających z braku ludzi ręcznie sprawdzających rzeczy. Do jakich rzeczy można to wykorzystać w przyszłości, gdy technologia się poprawi?
Charlie: Dla mnie, być może w przyszłości, myślę, że modele stają się mniejsze do załadowania i stają się bardziej wydajne, a my prawdopodobnie ulepszamy zestawy danych, z którymi są szkolone. Mam nadzieję, że będę mógł zobaczyć narzędzia, które są bardziej pomocne. Osobiście jestem zainteresowany tymi małymi modelami uczenia maszynowego, które mogą działać na mikrokontrolerach, aby budować różne rzeczy. Ale jeśli pozostaniemy w świecie front-endu, mam nadzieję, że może lepiej rozpoznawać głos, ponieważ wydaje mi się, że jesteśmy przyzwyczajeni do poruszania się po sieci za pomocą trackpada lub klawiatury, ale w tej chwili wciąż jest rozpoznawanie głosu, ale nie zawsze jest bardzo dokładne lub na przykład nie jest dokładne z akcentami. Mam nadzieję, że gdy będziemy rozwijać lepsze modele, mniejsi ludzie nie będą się tak bać dodawać go do swojej witryny, ponieważ nie wpłynie to tak źle na wydajność.
Charlie: Interesuje mnie wykorzystanie uczenia maszynowego do takich rzeczy, jak predyktywne pobieranie z wyprzedzeniem, abyśmy mogli tworzyć inteligentniejsze witryny internetowe, które poprawiają wrażenia w całym spektrum, ponieważ dla użytkowników jest to lepsze, ponieważ strona ładuje się szybciej, a zatem ogólnie wydajność witryny, jest lepszy. Ale powiedzmy też, że jeśli myślimy o zrównoważonym rozwoju, to nie proszenie o bezużyteczne zasoby pomaga również w zmniejszaniu śladu węglowego Twojej witryny. Ale jest też ślad węglowy modeli uczenia maszynowego. To nie jest dobre. Więc może nie rozmawiajmy o tym. Myślę o przyszłości, mam tylko nadzieję, że będę miał modele, które są może bardziej wydajne lub mniejsze, aby ludzie byli bardziej skłonni spróbować, ponieważ powiedzmy, że będzie mniej blokerów dla ludzi, którzy w to wchodzą , ale zobaczmy.
Drew: Czy istnieją znane ograniczenia i ograniczenia, o których powinniśmy wiedzieć przed rozpoczęciem projektu uczenia maszynowego?
Charlie: Tak. Są. Myślę, że bez względu na to, czy robisz to w JavaScript czy Pythonie, istnieją ograniczenia. Myślę, że jeśli chcesz zbudować coś, co jest bardzo dostosowane, do czego nie ma wstępnie wytrenowanego modelu, jednym z ograniczeń jest to, że możesz potrzebować całkiem dużo danych, a nie każdy je posiada. 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: Tak. 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: Pamiętaj o zabawie. Dużo rozmawialiśmy dzisiaj o fajnych rzeczach, a potem o rzeczach praktycznych, ale jeśli chcesz się temu przyjrzeć, pamiętaj, aby dobrze się bawić, bez względu na to, co zdecydujesz się zbudować.