一名前端工程師的機器學習之旅

IT大咖說發表於2019-03-02

一名前端工程師的機器學習之旅

內容來源:2017年6月24日,美登科技前端架構師鄧鋆在“騰訊Web前端大會 TFC 2017”進行《一名前端工程師的機器學習之旅》演講分享。IT 大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。

閱讀字數:1980 | 4分鐘閱讀

嘉賓演講視訊地址:suo.im/4OHKqQ

摘要

美登科技前端工程師鄧鋆分享自己的機器學習之旅心路歷程。

未來的前端

多元輸入。現有的輸入從最早的鍵盤滑鼠到現在的觸屏,以後可能會是語音和手勢。

另外一個方面就是因人而異。我認為多年以後,可能每個使用者看到同一個產品的互動都是不一樣的。在人工智慧面前,我們要做的事情不再是一個產品,也許會為每一個使用者創造一個新的產品,用最適應這個使用者的方式去改造他的體驗。

以及資訊層次豐富。資訊應該有一種層次化的表達,應該跟隨人的注意力和一些細節的動作主動把一些資訊展示出來,而其它的資訊更多是保留在背後,在整個應用中作為一個暫時沒有接觸到的部分。但是當你需要它的時候,它能夠第一時間跳到你面前。

還有就是VR和AR。通過近幾年反覆的推廣,這兩個技術已經是開始小有成果的狀態了。但什麼時候前端使用者互動之間能被這兩個技術所顛覆,目前仍是未知數。

五分鐘搞懂機器學習

人工智慧在近幾年的突破巨大,主要體現在幾個方面。第一個是硬體的突破,第二個是演算法的突破,第三個是大資料的儲存。這三件事促使了現在機器學習的領域一次又一次大的爆炸。

機器學習是什麼

機器學習賦予了計算機“不需要特定的程式設計而能夠自行學習”的能力,通過訓練來解決特定的簡單問題。

傳統程式設計與機器學習

傳統程式設計最開始是人類去發現需求,然後人類把需求轉化成一個抽象的設計。要實現它必須要有客戶端各種程式和服務端巨大的庫,在此基礎之上再去做相應的開發,逐步分解並解決每一個子問題。最後還需要人或者機器來進行測試。而真正交給機器去做的一步只有執行,其它步驟都是需要人工進行操作的。

在機器學習的方式下,首先假設要解決一個特定的問題,第一個步驟還是瞭解需求,可以預見將來有一天機器能夠去發現人類的需求,然後機器去找尋需求的規律。機器自動通過大量的資料、實驗,找到這些事情相互的關聯,這個過程是完全沒有人工參與的。我們只是設定了網路結構和目標函式,除此之外的思考過程都是機器完成的,機器會自己在事後在驗證它的方式。由於機器需要吃掉大量的資料,所以人類需要準備資料。最後由機器完成執行,人類輔助機器做測試與糾錯。

淺層學習

如上圖所示,右邊區域是我們的問題,黃色區域裡面有很多的點是我們所收集到的資料,背景色是我們找到的解。這幅圖展現的就是通過淺層學習找到了問題的解。但是淺層學習有一個巨大的缺點就是特徵需要人工提前做抽取和處理。

深度學習

一名前端工程師的機器學習之旅

深度學習從結構上和淺層學習有巨大的區別,我們引入了很多hidden layers。如圖所示,在一次乘法、一次加法、一次取極值之後,到最後輸出結果。深度學習就是這樣一個公式。

資料很重要

一名前端工程師的機器學習之旅

硬體最大的變化就是對GPU的使用越來越頻繁。人工智慧深度學習的函式、公式內部涉及的是大量的浮點運算。這些函式在GPU出現之後,有大量的浮點運算就交給GPU。事實上,深度學習在GPU上的執行效率可能是在CPU上的30~50倍。GPU也給機器學習帶來了巨大的促進作用。

我們的嘗試

千里之行始於足下,我們的第一個目標是想要知道使用者喜歡多大的字型,這是一個很簡單同時也很有用的事。不同年齡使用者喜歡的字型大小都是不一樣的,老年人比較喜歡偏大的字型,但是年輕人或使用電腦顯示器的會傾向於使用小的字型。這個就是機器學習很擅長解決的預測。

怎麼做

第一步是資料的採集。先要有大量的資料,什麼使用者喜歡多大的字型。第二步就是訓練,把之前採集到的資料通過機器學習的方式去訓練,讓這個網路擁有根據新使用者的特徵能判斷出使用者喜歡多大字型的能力。還有服務,就是把它最終用到應用內,對前端開放,讓前端程式能夠得到這些使用者資訊。再然後就是實際的把這些東西做到前端應用上去。

常用函式與網路結構

預測服務我們通常會用softmax,要判斷一個使用者屬於哪個類別,使用softmax來對它進行預測。

在沒有預先知道有幾個類別的時候,可以使用k-means讓機器學習告訴我們是怎樣的情況,指定分類的數量,然後機器學習自動幫助我們完成分類。

t-SNE是一個很好的降維方式。降維有一個很大的作用就是資料視覺化,我們能直觀地看到這些資料的分佈。另一個作用是尋找最近點的命令。

CNN用於處理機器視覺,RNN和LTSM是做流式處理。

DeepQ Learning是近年來機器學習的一個熱點,當機器有幾種選擇的時候,它會盡量讓機器去預測哪個選擇最好,然後看這個選擇是否和機器預測的一樣。這就意味著當我們要解決這類問題的時候,不需要預先準備測試資料,這個演算法可以自己學習。

一些奇奇怪怪的優化

預訓練與組合網路。預訓練是機器學習中很重要的部分,當你需要解決的問題有些複雜的時候,可以預訓練網路的部分組合,這樣可以大幅提高網路的訓練速度。

還有就是規則化調整與網路簡化,以及極端偏見和理性仲裁者。

實際業務

實際上我們接下來準備去探索一些其它的事情,比如語義搜尋、功能推薦、智慧推薦、流失防止和催化轉化,以及自動化相容性測試。

值得一提的是谷歌釋出了deeplearn.js,正式拉開了在前端做機器學習的工業化序幕。

今天的分享就到這裡,謝謝大家!


相關文章