昨天和人聊了一下,對方不是資訊出身的,最近在學習深度學習,我對資料探勘、類神經網路也是略懂略懂,Python的scikit、pandas、numpy等等package也弄過;R相關的套件也學習過。扯遠了,回來說說網頁相關的。之前說到瀏覽器裡的JS越來越強大,除了存取相機資源,GPU、陀螺儀也已經可能存取了。GPU運算資源在當前類神經網路計算上,是很吃重的一個部分,使不使用GPU在運算時間上差異很大。CPU和GPU各有不同特性,但簡單來說GPU原本是被設計用來處理圖形的。Google將自家開發的類神經網路框架移植到了瀏覽器裡的JS,這讓瀏覽器有了深度學習的能力。這個JS的框架叫做**[Tensorflow.js]**,API設計上盡可能保持與Python一致,本人也改過一點東西來玩玩,但今天過沒機會分享,以後有機會再補。
類神經網路的框架當然不只Tensorflow,除此之外,也有不少建立在此之上,在此我也就不多說了(一個是我涉略沒到那麼深;另一個是還是回頭來說說現代網頁技術吧)。
官網可以先去看看,之後會介紹幾個DEMO。所以,瀏覽器能做類神經網路有什麼好處?首先他能夠了解訓練出來的模型,甚至加以訓練;不過我覺得最大的優勢在於將運算過程放到了客戶端,除了降低了伺服器端的處理負擔,網路需求可能也降低。比如說一張照片的內容,可以先在終端(end device)處理,之後可能就只需要回傳文字資料。此外,因為是在本地執行的,也可能保護一部份隱私內容,至少伺服器看不到原始照片。
但是,類神經網路很吃運算資源的,每一個神經元都是一個計算過程,雖然也有一些壓縮方式,也逐漸有了應用在行動裝置的方案,不過還剛起步,耗電量可能還是個待解決問題。附帶一提,這幾天不是用桌電,在聊天過程我帶他玩玩了等下介紹的玩意兒,筆電的風扇沒多久就起飛。
說真的,目前我還是不認為類神經網路是一般人玩得起的,要不就真的只是玩玩,要不是學習。對於學習類神經網路,Tensorflow Playground是個值得玩玩的資源。
類神經網路的神經元、輸入層、輸出層、隱藏層、問題分佈等等都做了很簡單易懂的可視化(可能還是需要一點基礎就是),每個神經元的Activation、問題類型和一些參數都可以設定。越複雜的神經網路可以適應越多環境,但相對也會需要訓練比較久。
反正是玩玩而已,直接來看看別人做的DEMO來了解瀏覽器到底可以做到什麼事情吧!(以下兩個除了網路下載資源以外,所有運算都於瀏覽器內部)
Emoji Scavenger Hunt是在現實中,利用設備相機尋找顯示圖案的真實物品。這是一個使用模型來做影像辨識的例子。最重要的幾個部分包含:載入相關模組(Tensorflow.js);下載已經訓練好的模型;開啟相機資源;將相片丟入模型得到結果,並以結果去判斷遊戲是否過關。這之外還包含了資料的前處理、後處理,還有遊戲邏輯。簡單說這是一個直接在瀏覽器裡使用模型來做電腦視覺的例子。
小精靈遊戲也有段日子了,不知道有多少人知道哈,不過前幾年在愚人節的Google Map還有相關遊戲,也出過電影,我想應該算是眾所皆知的遊戲了吧。這個小精靈玩法有點不一樣,它需要先學習前後左右指令的圖形。怎麼學習?就是用相機告訴他什麼是前進、什麼是轉彎。訓練完後才能玩遊戲,沒訓練好還可能判斷錯誤(根本在訓練小狗吧!來,坐下、握手)。
訓練模型和使用模型都可以在瀏覽器裡做了,真強大。不過目前多數訓練幾乎都是用叢集架構來玩,不知道會不會以後連瀏覽器都可以搞叢集......
Google在今年Google I/O上有蠻多東西的。雖然網頁技術一向變動都蠻快的,但不知道是不是近幾年投入的人特別多,今年的變動有夠大。(儘管仔細去看有些東西討論的也有好幾年)