與查理杰拉德一起粉碎播客第 33 集:什麼是機器學習?
已發表: 2022-03-10在這一集中,我們談論的是機器學習。 我們可以將它放在 Web 開發環境中的哪些任務? 我與專家查理杰拉德交談以找出答案。
顯示註釋
- JavaScript 中的實用機器學習:面向 Web 開發人員的 TensorFlow.js
- 查理在推特上
- 查理的個人網站
每週更新
- 依賴注入實用介紹
由傑米·科克希爾撰寫 - 邁向無廣告網絡:使在線經濟多樣化
弗雷德里克·奧布萊恩 (Frederick O'Brien) 撰寫 - Web 是否應該公開硬件功能?
諾姆·羅森塔爾 (Noam Rosenthal) 撰寫 - 如何在 2021 年通過銷售 Shopify 應用程序賺更多錢
作者:蘇珊娜·斯卡卡 - Flutter 應用程序中的 GetX 包入門
由開爾文·奧默雷肖內撰寫
成績單
Drew McLellan:她是 Netlify 的高級前端開發人員、Web 技術方面的 Google Developer 專家和 Mozilla 技術發言人。 業餘時間,她探索人機交互領域,並利用硬件、機器學習和創意編碼構建交互原型。 她經常在會議上發表演講並撰寫博客文章來分享她學到的東西。 最近,他是 Apress 的 JavaScript 中的實用機器學習一書的作者。
Drew:所以我們知道她是一名前端專家,但她是否曾經使用她夢寐以求的金屬文件越獄。 我的好朋友,請歡迎,查理杰拉德。 嗨查理。 你好嗎?
查理杰拉德:我在砸。
Drew:我今天想和你談談機器學習,對於一個主要關注 Web 開發的瀏覽器端的播客來說,這似乎有點奇怪。 我傾向於認為機器學習是在大型數據中心或實驗室中發生的事情,人們穿著白大褂。 這些天來,這絕對是一種流行語。 當我們說機器學習時,我們到底是什麼意思?
查理:所以一般來說,標准定義是讓計算機能夠在不被告知要做什麼的情況下生成預測。 希望當我們繼續談論它時這將是有意義的,但這是一種通用的對話定義。 你並沒有真正告訴算法或模型去搜索某些東西。 他們通過您提供的數據進行學習,然後可以生成預測。
Drew:因此,您不必為某些情況專門編寫代碼,而是創建一個通用案例,讓軟件可以學習如何自己做這些事情?
查理:是的,沒錯。
德魯:這聽起來有點令人毛骨悚然。 這有點接近人工智能的一面。 您是否需要成為鐵桿數學書呆子或數據科學家才能做到這一點? 或者是否有一些東西,比如已經建立的算法和你可以調用的東西來開始?
查理:是的。 幸運的是,您不需要成為鐵桿數學書呆子或數據科學家。 否則,我絕對不會談論這個。 但是有些算法已經被弄清楚了,並且已經可用的工具允許您使用這些算法,而無需自己從頭開始編寫所有內容。 因此,如果我們使用前端生態系統作為比較,您可以使用 Web API,例如當您想要訪問網絡攝像頭或麥克風時獲取用戶媒體。
查理:而且你不必知道這個 API 是如何在底層實現的。 重要的是,如果您願意,您知道這個 API 的用途以及如何使用它。 然後稍後你可以去查看你最喜歡的瀏覽器的源代碼,以了解它是如何工作的,但它實際上並沒有什麼用處。 如果您以後想編寫自己的算法,它會很有用。 但老實說,您不太可能想要這樣做。
德魯:好的。 所以這有點像你可以編寫 CSS 來在頁面上定位元素的方式。 您不在乎瀏覽器實際上是如何做到的。 您只需編寫一些 CSS,瀏覽器就會處理它。
查理:是的。 當你開始時,它大多是這樣的。
德魯:那很好。 這更像是我的數據科學水平。
查理:我也是。
Drew:那麼您可以將機器學習用於解決哪些問題? 它對什麼樣的事情有好處?
查理:這首先取決於你想做什麼,因為當你想構建某個東西時,我建議首先考慮你想學習的問題類型,然後幫助你選擇適合你的算法可以用來修復或找到解決您的問題的方法。 所以總的來說,我會首先考慮我要解決的問題類型,主要有三個。 我認為可能還有更多,但總的來說,對於我受過訓練的內容和我讀過的內容,主要提到了三個。
查理:如果你想讓我進入這個,有監督學習、無監督學習和強化學習。 你也有這麼多的監督,但老實說,我真的不太了解它,因為我已經能夠用前三個項目來構建我的項目。
德魯:有監督、無監督和強化,你說的是什麼?
查理:是的,強化學習。
德魯:好的。 那麼什麼是監督學習? 你能給我們舉個例子來說明這意味著什麼嗎?
查理:監督學習,當你的數據集由特徵和標籤組成時,你將其提供給算法。 因此,如果我們舉一個希望大多數人都能理解的例子,那就是,如果你有一所房子並且你想賣掉它,你想弄清楚你要以什麼價格賣掉你的房子或你的房子。車,實際上,順便說一句,這將是同一件事。 並且您將使用相同環境或相同類型房屋的房屋數據集,並了解其在市場上的價格,您將能夠使用自己房屋的特徵; 那麼有多少房間,有花園,在哪個社區? 諸如此類的事情。
查理:這些是特徵,標籤是價格,使用你周圍的所有這些房屋數據集,你可以使用機器學習算法來學習房屋特徵之間的相關性和市場上的價格,然後得到你的房子的特點,並能夠從中產生價格。 所以最重要的是在監督學習中,你有一堆特徵和一個標籤,所以你實際上能夠在兩者之間畫出相關性。
德魯:你會,在這個例子中,你會向模型提供大量關於房屋的數據,你知道它們的價格,然後你就會知道它們的所有這些特徵。 說臥室,你有什麼,比如平方英尺,我猜位置可能是另一種考慮因素?
查理:是的。 因此,機器學習的問題之一是您可以擁有很多功能,而其中一些功能實際上也不會像其他功能那樣高效。 因此,例如,您可能擁有房屋的顏色,實際上可能與價格沒有相關性,但是您可以提供一堆特徵,模型本身會發現兩者之間的相關性。 然後,您可以根據需要調整數據集並刪除顏色,或者您意識到花園的大小無關緊要或類似的事情。
查理:所以一般來說,即使你將數據集提供給模型,第一次也不會有完美的預測。 通常你調整一些不同的東西,你會看到。 您可以對其進行微調,直到得出您認為非常準確的預測。
Drew:然後,一旦創建了該模型,或者說您使用來自一個城市的數據創建了它,您是否可以將其獲取並提供給它……您是否需要提供來自另一個城市的數據? 培訓完成後,您是否能夠將其拾取並在其他地方使用,或者它是否特定於該數據集或如何工作?
查理:我認為這將是特定於數據集的。 所以這意味著您可以創建另一個具有相同格式的數據集。 如果您有一個包含不同列的 Excel 電子表格,您將能夠保留相同的標籤和特徵,但您必須將其替換為該城市的值。 但總的來說,這意味著收集數據集也可能需要很多時間,但是如果你已經知道你為巴黎市做了什麼,並且你的數據集的結構是相同的,但是您替換值,它會更快一些,您可以重新生成模型。
查理:你不應該重複使用相同的模型,如果你的數據不同,例如,巴黎的房屋價格與澳大利亞的一個小城市不同。 所以你不會想要有錯誤的數據,因為你的數據集的核心一開始並不完全相同。
德魯:我們談論了很多關於機器學習的模型。 所以模型有點像數據集所有分析的最終結果。 然後它被用來進行後續的預測。 模型是這樣的,是嗎?
查理:是的,就是這樣。 這是一個模型,所以它有點像一個函數,你將向它提供以前從未見過的新輸入,但基於它在訓練步驟中學到的知識。 它將能夠輸出預測。
德魯:所以監督學習,然後它根據特徵標籤製作這個預測模型。 什麼是無監督學習?
查理:所以無監督是一個有點相同的概念,但是你去掉了標籤。 所以在這種情況下,你可以認為我們賣房子的問題,不會是真正的無監督學習問題,因為如果你只知道你周圍房子的特徵,但你沒有價格作為標籤,你無法真正預測價格。 它甚至不知道價格是多少。
查理:所以當你有一組數據並且你只有關於它的特徵時,無監督更多。 您可以一起生成更多趨勢或事物集群。 如果你想要一個特定的輸出,如果你有一個特定的問題,比如“這個價格是多少?”,你就不會使用無監督學習。 這並不是無監督的一個很好的用途,但更重要的是,如果你想將實體聚集在一起,它可能是人或類似的東西。
查理:所以通常情況下,一個用例是亞馬遜推薦或 Spotify 推薦之類的推薦,比如,“像你這樣的人也會聽這個”,而且更多的是在這種情況下,功能的位置是……嗯,他們有關於你的數據,所以他們知道你聽什麼,你通常在哪個國家,或者你一天聽多少次? 因此,使用這些關於人的特徵,他們可以將你放在同一個集群或同類型的聽眾,或者在亞馬遜上購買某些東西的同類型的人中。 使用這種無監督學習,他們可以根據像你這樣的人知道向你做廣告或推薦你應該聽的內容。 所以更多的是這樣的問題。
德魯:好的,所以這一切對我現在作為一名網絡開發人員來說更有意義,因為我們討論過的這些用途,房屋定價和推薦以及在一天結束時提供廣告和東西,這些是我們必須處理的各種事情,以及我們可能希望將其放入網站或產品中的功能,或者您擁有的東西。 因此,我們得到了基於我們希望預測的主題的不同類型的學習。 還有其他類型的應用程序我們也可以使用它嗎? 有沒有人們創造的可以使用這個的好例子?
查理:是的。 有很多例子。 這就是為什麼,當我談到預測房子的價格時,也許這與你無關。 也許這並不那麼令人興奮,但實際上你可以做的還有很多。 周圍確實有很好的例子。 我認為我看到的第一個是圍繞動態生成的圖像藝術文本。 所以當然,當您將圖像添加到站點時,您可以自己做一些事情。
查理:但是,如果你的網站實際上有大量圖像,而不是手動操作,你可以將每張圖像輸入機器學習算法,它會生成一個與該圖像有關的藝術文本,並且也許唯一的人工步驟是驗證這是否正確,但它確實可以讓您將時間集中在構建應用程序上。
查理:你仍然可以通過為圖像添加藝術文本來使你的網站易於訪問,但它會是由機器生成的。 這是我開始研究時看到的示例之一,但您也有一個過濾對工作內容不安全的原型。 而且我認為這在 Chrome 擴展程序中實際上會非常好,您可以擁有一個 Chrome 擴展程序,每次打開網頁時,您只需檢查頁面上的內容是否是安全的內容。
查理:例如,如果你有孩子使用你的筆記本電腦或類似的東西,那麼你可以隱藏圖像或用熊貓替換這些圖像,如果你願意的話。 但在這種應用程序中,您可以使用機器學習自動為您做事,這樣您就不必擔心某些任務,或者您可以只用腦力做其他事情。
查理:但還有更高級的手勢識別示例,使用與亞馬遜 Alexa 通信的網絡攝像頭和語音識別以及所有這些東西。 因此,您可以真正將許多不同的技術與語音、網絡攝像頭和機器學習結合在一起,以實現識別並能夠以一種新的方式與不同的技術進行交互。 所以它真的很有趣。
Drew:這很有趣,因為我們已經研究過分析數據模型本身,現在我們正在考慮查看圖像內容並使用機器學習分析圖像內容,這非常有趣。 我想這就是 Facebook 的功能,如果有人發布了一張他們認為可能是血腥或顯示受傷或其他東西的照片,並且它會模糊它,然後你只需點擊即可顯示它。 顯然,Facebook 不能讓版主團隊查看上傳的每張圖片。
查理:我希望他們不會。
德魯:那將是一項無止境的任務。
查理:那也不是什麼好工作。
Drew:我曾經在一個免費的廣告網站上工作,人們可以在那裡發布廣告。 這其中涉及到很多節制,即使是我,作為 Web 開發人員,也必須參與其中,只是通過,看著所有這些圖像說,“是的,不,是的,不。”
查理:我也做了一點。 我希望當時有機器學習,只是一個小實用工具來為我做這件事,現在它就在那裡。 所以這很酷。
德魯:是的,這真的很棒。 考慮來自網絡攝像頭的實時輸入並能夠對其進行實時分析是非常令人興奮的,這樣您就可以進行基於手勢的交互。 就是它…
查理:是的,所以它的核心實際上使用了更多的圖像分類,因為你的網絡攝像頭,圖像是一組像素,但是當你做出某些手勢時,你可以訓練一個模型來識別你的右手舉起,也許你會像這樣控制鼠標,或者它會查看你的手和屏幕的坐標,然後你會跟隨鼠標。 你真的可以為所欲為。 你可能有顏色識別。
查理:你可以做一些非常有趣的事情。 一個我構建的原型,在某些時候我有點放棄了,但我構建了一點……我希望它是一個 Chrome 擴展,但是沒有用。 我用 Electron 構建了一個小桌面應用程序。 同樣在 JavaScript 中,我只需傾斜我的頭就可以瀏覽網頁。 所以它會認識到,當我低下頭時,它會向下滾動,當我向上時,它會向上滾動。 正是這些小實驗,我在想,“好吧,如果我能把它變成一個 Chrome 擴展程序,它可能對某些人有用。”
查理:即使你只是在電腦前吃飯,看新聞,我不希望我的鍵盤弄髒,我也可以歪著頭,但也希望,為了方便,可以實際上可以幫助人們瀏覽某些網頁或類似的東西。 有很多可用的工具,它是關於你可以想出觀察周圍情況的想法,以及如何使用機器學習解決其中的一些問題?
Drew:對於機器學習,我們經常會想到語言,Python。 我認為這就是很多發展似乎首先發生的地方。 但是作為 Web 開發人員,我們顯然更習慣於使用 JavaScript。 機器學習是我們可以實際期望做的事情嗎? 我的意思是有趣的小例子是一回事,但它對 JavaScript 的實際工作真的有用嗎?
查理:嗯,我的意思是,我想是的,但是我知道我所做的大部分事情都是原型,但我認為這取決於你在工作中所處的情況。 作為一名開發人員,有多種方法可以在您的日常工作中實施機器學習。 但是我真正喜歡 JavaScript 的一點是,如果你已經是一名前端開發人員,那麼你不必去學習新的生態系統或一套新的工具或一種新的語法、一種新的語言。 你已經在你每天工作的環境中了。
查理:通常當你學習這類東西時,你必須從自己的時間開始,如果這不是你的日常工作,每個人的時間都很寶貴,而你沒有那麼多時間。 因此,如果您可以消除一些障礙並留在您所知道的同一個生態系統中,那麼我認為這非常好,但您也可以開始...... JavaScript 的力量在於,您可以從構建一個小原型開始,讓人們相信也許有一個想法需要調查,並且通過能夠在 JavaScript 中快速啟動某些東西,您可以驗證您的想法是否正確。
查理:那麼要么你可以得到領導層的支持,花更多的時間或更多的錢,或者如果你想用 Python 構建它,你可以把它交給 Python 開發人員。 但對我來說,這種快速驗證想法的能力非常重要。 特別是,如果你為一家初創公司工作,並且一切進展順利,並且你能夠證明這是值得研究的東西,我認為這非常重要。
查理:還有一個事實,那就是確實有一個很大的工俱生態系統,並且有越來越多的機器學習框架和應用程序。 在 JavaScript 中,我們不僅可以在網頁上添加機器學習。 正如我之前所說,您可以使用 Electron 構建 Chrome 擴展程序和桌面應用程序,使用 React Native 構建移動應用程序,以及使用 Johnny-Five 等框架構建硬件和物聯網。
查理:所以使用你已經知道的語言,你實際上可以訪問一個由不同平台組成的巨大生態系統,你可以在這些平台上運行相同的實驗。 我認為,對我來說,這非常了不起。 這就是我看到在 JavaScript 中進行機器學習的真正力量的地方。 隨著它變得更好,也許你可以真正將它集成到我們每天構建的應用程序中。
Drew: JavaScript 無處不在,不是嗎?
查理:是的。
德魯:無論好壞,它無處不在。 有誰會想過? 這聽起來不錯,但聽起來也需要做很多工作。 我想到了數據集和事情,你到底是怎麼開始做這些任務的?
Charlie:目前,至少對於 TensorFlow.JS,您可以使用該框架做三件事。 假設最簡單的方法是導入現有的預訓練模型。 所以其中有一些,不同的模型已經用不同的數據集進行了訓練,我建議從這個開始,因為你可以學習如何實際使用框架本身的真正基礎知識,以及你能做什麼與這些模型。
查理:所以你有一些用不同圖像訓練過的圖像識別模型。 其中一些更適合對象識別。 其中一些更適合人們的識別,並且通過了解要使用的模型,我們可以在該模型的約束下自由地構建您想要的任何東西。
查理:但我認為,這是一個很好的開始方式。 我仍然在我的很多實驗中使用預訓練模型,因為它也是,如果它已經存在,你為什麼要重新發明輪子? 讓我們使用提供的工具。 然後當你想更進一步時,你可以做所謂的遷移學習,當你重新訓練一個重要的模型時。 因此,您仍然使用其中一種預訓練模型,但隨後您有機會使用自己的樣本重新訓練它。
查理:例如,如果你想在有不同人的情況下使用圖像分類,那麼你可能想做手勢分類。 例如,如果你的模型是由那些總是右手舉起的人訓練的,我不知道,但是對於你的應用程序,你想要左手,你可以用你的左手樣本重新訓練那個模型手,然後你會得到一個已經訓練有素的模型來識別右手,但是你會添加你自己的樣本,你可以在瀏覽器中很快地重新訓練它,這取決於你給它的新輸入數據的數量,這需要一些時間,但在幾秒鐘內,您就有了一個經過重新訓練的模型,該模型非常擅長識別這兩個手勢,然後您可以在您的應用程序中使用這些手勢。
查理:所以這通常是第二步。 然後第三步稍微複雜一點,就是在瀏覽器中進行所有操作。 因此,您從頭開始編寫自己的模型,然後在瀏覽器中對其進行訓練,然後您就可以真正訓練、運行和生成模型,一切都在瀏覽器中進行。 但總的來說,我見過的唯一應用是構建可視化。 當您想要可視化正在訓練的模型的過程以及它所採取的步驟數、所花費的時間,並且您可以看到準確度上升或下降,具體取決於您選擇的特徵和您調整的參數.
Charlie:所以我並沒有真正使用過那個,因為我還沒有找到我想要構建的應用程序,但是僅使用預訓練模型或使用我自己的樣本重新訓練它的兩個第一步是我個人見過的地方。 我玩得很開心。
Drew:所以通常情況下是預先創建模型,就像離線一樣,然後瀏覽器使用該訓練好的模型,或者可能會添加一點點,它會進行一點點再訓練,但是通常,該模型將在用戶瀏覽器中投入使用之前建立嗎?
查理:總的來說,是的。 那麼你絕對可以創建自己的模型。 如果你這樣做,我不建議在瀏覽器中訓練它,但你也可以在 NodeJS 中進行訓練。 如果你知道,一點點 NodeJS。 我確實創建了自己的模型,但我通常在 NodeJS 中運行它,因為它的性能更高一些。 然後我使用我在瀏覽器中創建的生成模型。
Drew:有哪些工具可以用 JavaScript 做到這一點? 您提到了 TensorFlow JS,但那是什麼,那在哪裡? 是來自谷歌嗎?
查理:是的。 起初谷歌在 Python 中使用了 TensorFlow 工具,而現在,在過去,可能是幾年,或者更多時間,他們製作了 JavaScript 版本,所以它傾向於與 JS 一起使用。 但也有 ML5 JS,它在上面有點抽象。 因此,如果您有點困惑,或者如果 TensorFlow JS 對於他們在文檔中使用的一些詞彙表看起來有點嚇人,您可以使用具有大部分相同功能的 ML5 JS,但假設 API 或語法是對初學者更友好一點。
查理:你可以從 ML5 開始,看看你是否喜歡機器學習,或者你是否考慮過一個很酷的應用程序,然後如果你在 ML5 中有一些障礙或者框架沒有你想做的某些事情,你如果需要,可以繼續使用 TensorFlow JS。 如果你真的對真正編寫自己的代碼不感興趣,而只是想使用已經存在的工具,那麼亞馬遜、谷歌和微軟也提供了一些 API 來進行圖像識別或語音識別。 因此,如果您對查看它可以做什麼更感興趣,但又不想花太多時間編寫代碼,您可以 ping 一些 API 並嘗試他們的一些工具。
德魯:這很有趣。 因此,您可以使用瀏覽器從網絡攝像頭或麥克風或您擁有的其他設備中獲取輸入,然後將其發送給亞馬遜、微軟或其他任何公司,然後讓他們完成艱苦的工作?
查理:是的。
德魯:然後你就會從結果中受益。
查理:沒錯。
德魯:這聽起來像是一個很好的、誘人的方式來開始這些想法。 聽起來不錯,但是我們可以在前端應用它來解決哪些問題? 我們已經討論了一些小事情,但是我們還有其他方法可以使用它嗎?
查理:有很多方法。 如果我從圖像分類開始,是的,你可以。 您可以使用來自網絡或手機網絡攝像頭的圖像。 如果你只是在手機上使用你的網站,你可以拍照和識別物體,然後……有黃色的垃圾桶,綠色的,這取決於國家。 它們有不同的顏色,但有時我不太擅長知道實際扔東西的地方,所以你可以構建這樣的小工具,live 可以識別你面前的兩個物體,然後對它們進行分類,你可以構建某些東西,比如這。
查理:否則,你有文本分類,今年早些時候,我使用其中一個 TensorFlow GS 模型來查看寫在 GitHub 問題和 GitHub PRs 上的評論,然後分類並說,“嘿,如果它是有毒評論,那麼你有一個小機器人說,“嘿,也許你不應該寫這個,”或者,“小心,它有點有毒。 我們希望這是一個安全的空間。””所以你可以使用這樣的文本分類。
查理:如果你願意的話,有聲音分類,當蘋果發布他們的新手錶 OS 時,他們有一些東西可以識別流水的聲音,告訴人們在 COVID 大流行中洗手 20 秒,但你可以做到在 JavaScript 中也是如此。 真正有趣的是,我正在觀看一些視頻,我想,“哦,我知道如何在 JavaScript 中做到這一點。”
查理:我做了一個小原型。 我不知道它是否可以在 Apple Watch 上運行。 可能是。 我沒有,但我知道它可以在我的手機和筆記本電腦上運行。 然後這也可以為其他人開始一些想法,我的一個朋友 Ramon Huidobro 在 Twitter 上@hola_soy_milk。 今年他參加了很多在線會議。 他的問題之一是,當他為某人鼓掌時,他沒有時間在聊天中添加拍手錶情符號。 而他想要做的是聽他拍手的聲音,這會在聊天中自動發送拍手錶情符號。
查理:如果你想要一個在你的日常工作中真正更有用的應用程序,那就是這樣的小事,那就是預測預取。 這也是在前端使用機器學習來查看您網站的分析。 因此,通常會在哪些頁面之後查看哪些頁面,以及諸如此類的事情。 您可以根據最有可能訪問的頁面提前預取資源。 這是我這一年來一直想要研究的東西,但我沒有時間,但這可以讓你真正提高頁面的性能和用戶體驗。 而且您不需要請求不需要的資源,因此可以真正改進,這也是機器學習的應用。
查理:所以你可以做一些有趣的事情,或者你可以做更多有用的事情,但是沒有錯誤的應用程序,可能有錯誤的應用程序。 我收回它,但我只是說,如果你真的開始了,從一些有趣的事情開始並沒有錯,然後我可以提出一些你可以在工作中做的事情的想法好吧。
德魯:我想這裡真正有用的是知道這些事情是可能的。 實際上只是創造性的解決問題的方法,我們可以自己做。 傳統上,我們通過審核用戶提交的內容來構建東西,這相當原始,我們基本上必須讓人類查看內容並做出決定。 但是在那個例子中,通過機器學習,我們可以把更多的東西交給我們,然後讓人類看看邊緣情況,例如,沒有令人信服的匹配的事情。
德魯:當然會這樣,開發那個東西並讓它到位需要一點時間,但是你會想到不讓人類手動檢查東西的節省。 隨著技術的進步,您認為這將在未來用於什麼用途?
查理:對我來說,也許在未來,我認為隨著模型的加載變得更小,它們的性能更高,我們可能會改進它們訓練的數據集。 我希望能夠看到更有幫助的工具。 我的意思是,就個人而言,我對可以在微控制器上運行以構建東西的微型機器學習模型感興趣。 但如果我們更多地停留在前端世界,我希望可能會有更好的語音識別,因為我覺得我們已經習慣了用觸控板或鍵盤來瀏覽網頁,但目前,仍然有語音識別,但它並不總是非常準確,或者它對口音不准確,例如。 而且我希望隨著我們開發更好的模型,較小的人不會害怕將其添加到他們的網站,因為它不會嚴重影響性能。
查理:我對在預測預取等方面使用機器學習很感興趣,這樣我們就可以構建更智能的網站,從而改善一系列體驗,因為對於用戶來說,這會更好,因為頁面加載速度更快,因此性能一般您的網站,它是更好的。 但也讓我們說,如果我們考慮可持續性,不請求無用的資源也有助於減少您網站的碳足跡。 但是還有機器學習模型的碳足跡。 那不是很好。 所以也許我們不要談論這個。 我想,對於未來,我只是希望擁有性能更高或更小的模型,以便人們更有可能嘗試一下,因為讓人們進入這個領域的障礙會更少,但讓我們看看。
Drew:在開始機器學習項目之前,我們是否應該了解已知的限制和約束?
查理:是的。 有。 我認為,無論你是用 JavaScript 還是 Python 來做,都有限制。 我認為,如果您確實想要構建一些非常定制的東西,並且沒有預先訓練的模型,那麼限制之一是您可能需要大量數據,而並非每個人都有。 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.
德魯:是的。 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?
查理:記得找點樂子。 今天我們談了很多有趣的東西,然後是實用的東西,但如果你願意研究這個,記得要玩得開心,不管你決定建造什麼。