數學系出身,如何從零到一地開始機器學習

本文由 張戎 發表於 騰訊織雲公衆號前端

前言

導語:做爲一個數學系出身,半路出家開始搞機器學習的人,在學習機器學習的過程當中天然踩了無數的坑,也走過不少本不應走的彎路。因而很想總結一份如何入門機器學習的資料,也算是爲後來人作一點點微小的貢獻。算法

在 2016 年 3 月,隨着 AlphaGo 戰勝了李世乭,人工智能開始大規模的進入人們的視野。不只是互聯網的工程師們很關注人工智能的發展,就連外面的吃瓜羣衆也開始關注人工智能對平常生活的影響。隨着人臉識別能力的日益加強,個性化新聞推薦 App 的橫行天下,TensorFlow 等開源工具被更多的人所知曉,因而就有愈來愈多的人開始逐步的轉行到人工智能的領域,不管是計算機出身的後臺開發人員,電子通訊等工程師,仍是數學物理等傳統理科人士,都有人逐步開始轉行到機器學習的領域。編程

做爲一個轉行的人,天然要介紹一下本身的專業背景。筆者在本科的時候的專業是數學與應用數學,外行人能夠理解爲基礎數學。在博士期間的研究方向是動力系統和分形幾何,所作的仍是基礎數學,和計算機的關係不大。安全

若是有人想了解筆者究竟在作什麼科研的話,能夠參考知乎文章「復動力系統(1)--- Fatou集與Julia集"。至於機器學習的話,在讀書期間基本上也沒接觸過,甚至沒據說過還有這種東西。不過在讀書期間因爲專業須要,C++ 之類的代碼仍是可以寫一些的,在 UVA OJ 上面也留下過本身的足跡。微信

2015年:嘗試轉型

行路難,行路難,多歧路,今安在?網絡

在 2015 年畢業以後機緣巧合,剛好進入騰訊公司從事機器學習的相關工做。不過剛進來的時候壓力也不小,如今回想起來的話,當時走了一些不應走的彎路。用李白的《行路難》中的詩詞來描述當時的心情就是「行路難,行路難,多歧路,今安在?框架

在 2015 年 10 月份,第一次接觸到一個不大不小的項目,那就是 XX 推薦項目。而這個項目是當時組內所接到的第二個推薦項目,當年的推薦系統仍是搭建在大數據集羣上的,徹底沒有任何說明文檔和前端頁面,當時的整個系統和所有流程複雜而繁瑣。不過在接觸這個系統的過程當中,逐步開始學習了 Linux 操做系統的一些簡單命令,SQL 的使用方法。運維

瞭解 SQL 的話其實不僅是經過了這個系統,經過當時的 ADS 值班,幫助業務方提取數據,也把 SQL 的基礎知識進一步的加深了。SQL 的學習的話,在2015年讀過兩本很是不錯的入門教材《SQL基礎教程》與《HIVE編程指南》。Linux 的相關內容閱讀了《Linux 命令行與 Shell 腳本編程大全》以後也就大概有所瞭解了。因而工做了一段時間以後,爲了總結一些常見的 SQL 算法,寫過一篇文章 "HIVE基礎介紹"。機器學習

在作推薦項目的過程當中,除了要使用 SQL 來處理數據,要想作機器學習,還須要瞭解常見的機器學習算法。當年接觸到的第一個機器學習算法就是邏輯迴歸(Logistic Regression),既然提到了機器學習的邏輯迴歸,沒法避免的就是交叉驗證的概念,這個是機器學習中的一個基本概念。工具

經過物品的類別屬性和用戶的基本特徵來構造出新的特徵,例如特徵的內積(inner product)。後來在學習的過程當中逐步添加了特徵的外積和笛卡爾積,除了特徵的交叉以外,還有不少的方法來構造特徵,例如把特徵標準化,歸一化,離散化,二值化等操做。除了構造特徵以外,如何判斷特徵的重要性則是一個很是關鍵的問題。

最多見的方法就是查看訓練好的模型的權重,另外還可使用 Pearson 相關係數和 KL 散度等數學工具來粗糙的判斷特徵是否有效。在此期間也寫過一些文章「交叉驗證」,「特徵工程簡介」,「KL散度」。關於特徵工程,除了閱讀一些必要的書籍以外,最重要的仍是要實踐,只有實踐纔可以讓本身的經驗更加豐富。

在作推薦系統的時候,以前都是經過邏輯迴歸算法(Logistic Regression)離線地把模型的權重算好,而後導入線上系統,再進行實時的計算和打分。除了離線的算法以外,在 2015 年的 12 月份瞭解到了可以在線學習的 FTRL 算法。調研了以後在 2016 年初在組內進行了分享,同時在 zr9558.com 上面分享了本身的總結,最近把該文章轉移到本身的微信公衆號上「Follow the Regularized Leader」。

在作 XX 推薦項目的過程當中,瞭解到了數據纔是整個機器學習項目的基石,若是數據的質量不佳,那就須要進行數據的預處理,甚至推進開發人員去解決數據上報的問題。一般來講,要想作好一個推薦項目,除了特徵工程和算法以外,最重要的就是數據的核對。當時的經驗是須要覈對多方的數據,那就是算法離線計算出來的結果,線上計算出來的結果,真實產品中所展現的結果這三方的數據必需要徹底一致,一旦不一致,就須要覆盤覈查,而不是繼續推動項目。在此期間,踩過無數的數據的坑,所以獲得的經驗就是必定要反覆的核查數據。

2016:從零到一

站在巨人的肩膀上,才能看得更遠。-—學習推薦系統

站在巨人的肩膀上,才能看得更遠。」到了 2016 年的 2 月份,除了 XX 推薦項目的首頁個性化調優算法以外,還開啓了另一個小項目,嘗試開啓首頁的 tab,那就是針對不一樣的用戶推薦不一樣的物品。這個小項目簡單一點的作法就是使用 ItemCF 或者熱傳導傳播的算法,在用戶收聽過某個節目以後,就給用戶推薦類似的節目。

這種場景其實在工業界早就有了成功的案例,也不算是一個新的場景。就比如與用戶在某電商網站上看中了某本書,而後就被推薦了其餘的相關書籍。以前也寫過一篇推薦系統的簡單算法「物質擴散算法」,推薦給你們參考一下。至於 ItemCF 和熱傳導算法的相關內容,會在後續的 Blog 中持續完善。

「讀書千遍,其義自見。」在使用整個推薦系統的過程當中,筆者只是大概知道了整個系統是如何搭建而成的。而要總體的瞭解機器學習的相關算法,光作項目則是遠遠不夠的。在作推薦業務的這段時間,周志華老師的教材《機器學習》在2016年初上市,因而花了一些時間來閱讀這本書籍。可是我的感受這本書難度不大,只是須要另一本書結合着看纔可以體會其中的精妙之處,那就是《機器學習實戰》。在《機器學習實戰》中,不只有機器學習相關算法的原理描述,還有詳細的源代碼,這足以讓每個初學者重新手到入門了。

路漫漫其修遠兮,吾將上下而求索

說到從零到一,其實指的是在這一年體驗瞭如何從零到一地作一個新業務。到了 2016 年的時候,爲了把機器學習引入業務安全領域,在部門內部成立了 XX 項目組,這個項目在部門內部其實並無作過大規模的嘗試,也並無成功的經驗,甚至也沒有一個合適的系統讓人使用,並且安全業務和推薦業務基本上不是一回事。

由於對於推薦系統而言,給用戶的推薦是否準確決定了 CTR 是否達標,可是對於安全系統而言,要想上線打擊黑產的話,準確率則須要 99% 以上才行。以前的推薦系統用得最多的算法就是邏輯迴歸,並且會存儲物品和用戶的兩類特徵,其他的算法主要仍是 ItemCF 和熱傳導算法。這就致使了當時作 XX 項目的時候,以前的技術方案並不可用,須要基於業務安全的實際場景來從新搭建一套框架體系。

可是當時作安全項目的時候並無實際的業務經驗,並且暫定的計劃是基於 XX1 和 XX2 兩個業務來進行試點機器學習。爲了作好這個項目,一開始筆者調研了幾家號稱作機器學習+安全的初創公司,其中調研的最多的就是 XX 這家公司,由於他們家發表了一篇文章,裏面介紹了機器學習如何應用在業務安全上,那就是搭建一套無監督+有監督+人工打標籤的對抗體系。筆者仍是總結了當時兩三個月所學的異常點檢測算法,文章的連接以下:「異常點檢測算法(一)」,「異常點檢測算法(二)」,「異常點檢測算法(三)」,「異常點檢測算法綜述」。

在 2016 年末的時候,提及來也是機緣巧合,有的同事看到了我在 2016 年 11 月份發表的文章,就來找筆者探討了一下如何構建遊戲 AI。當時筆者對遊戲AI的應用場景幾乎不瞭解,只知道 DeepMind 作出了 AlphaGo,在 2013 年使用了深度神經網絡玩 Atari 遊戲。在12月份花費了必定的時間研究了強化學習和深度學習,也搭建過簡單的 DQN 網絡進行強化學習的訓練。經過幾回的接觸和交流以後總算 2017 年 1 月份作出一個簡單的遊戲 AI,經過機器學習也可以進行遊戲 AI 的自主學習。雖然不在遊戲部門,可是經過這件事情,筆者對遊戲 AI 也產生了濃厚的興趣,撰寫過兩篇文章「強化學習與泛函分析」,「深度學習與強化學習」。

2017 年:再整旗鼓

在作平常項目的同時,在 2017 年也接觸量子計算。在後續幾個月的工做中,持續調研了量子計算的基礎知識,一些量子機器學習的技術方案,寫了兩篇文章「量子計算(一)」,「量子計算(二)」介紹了量子計算的基礎概念和技巧。

三十功名塵與土,八千里路雲和月

提到再整旗鼓,其實指的是在 2017 年再次從零到一的作全新的項目。到了 2017 年 7 月份,隨着業務安全的機器學習框架已經逐漸完善,XX 項目也快走到了尾聲,因而就又有了新的項目到了本身的手裏,那就是織雲智能運維項目。運營中心這邊還在探索和起步階段,業界的 智能運維(AIOPS) 的提出也是在2017年才逐步開始,那就是從手工運維,自動化運維,逐步走向人工智能運維的階段,也就是所謂的 AIOPS。只有這樣,運營中心纔有可能實現真正的咖啡運維階段。

正式接觸到運維項目是 2017 年 8 月份,從跟業務運維同窗的溝通狀況來看,當時有幾個業務的痛點和難點。例如:織雲Monitor 時間序列的異常檢測,哈勃的根因分析,織雲ROOT 系統的根源分析,故障排查,成本優化等項目。在 AIOPS 人員短缺,而且學術界並不怎麼研究這類技術方案的前提下,如何在運維中開展機器學習那就是一個巨大的難題。就像當年有神盾系統,不管怎麼作均可以輕鬆的接入其他推薦業務,而且也有相對成熟的內部經驗,學術界和工業界都有無數成功的案例。可是智能運維這一塊,在 2017 年才被推廣出來,以前都是手工運維和 DevOps 的一些內容。因而,如何儘快搭建一套可以在部門內使用的智能運維體系就成了一個巨大的挑戰。面臨的難題基本上有如下幾點:

  1. 歷史包袱沉重

  2. AIOPS 人員短缺

  3. 沒有成熟的系統框架

在這種狀況下,外部引進技術是不可能了,只可以靠自研,合做的同事主要是業務運維和運營開發。當時第一個接觸的智能運維項目就是哈勃的多維下鑽分析,其業務場景就是一旦發現了成功率等指標下跌以後,須要從多維的指標中精準的發現異常,例如從運營商,省份,手機等指標中發現致使成功率下跌的緣由,這就是經典的根因分析。這一塊在調研以後發現,主要幾篇文章能夠參考,綜合考慮了以後撰寫了一份資料,那就是「根因分析的探索」。PS:除了哈勃多維下鑽以外,我的感受在 BI 智能商業分析中,其實也能夠是這類方法來智能的發現「爲何DAU下跌?」「爲何收入沒有達到預期」等問題。

除了哈勃多維下鑽以外,織雲Monitor 的時間序列異常檢測算法則是更爲棘手的項目。以前的 Monitor 異常檢測算法,就是靠開發人員根據曲線的特色設定三個閾值(最大值,最小值,波動率)來進行異常檢測。這樣的結果就是準確率不許,覆蓋率不夠,人力成本巨大。在上百萬條曲線都須要進行異常檢測的時候,每一條曲線都須要人工配置閾值是徹底不合理的。因而,致使的結果就是每週都須要有人值班,有了問題還不必定可以及時發現。而對於時間序列算法,你們一般可以想到的就是 ARIMA 算法,深度學習的 RNN 與 LSTM 算法,Facebook 近期開源的 Prophet 工具。這些方法筆者都調研過,而且將來會撰寫相關的文章介紹 ARIMA,RNN,Prophet 的使用,歡迎你們交流。

其實以上的幾種時間序列預測和異常檢測算法,主要仍是基於單條時間序列來作的,並且基本上是針對那些比較平穩,具備歷史規律的時間序列來進行操做的。若是針對每一條曲線都單獨搭建一個時間序列模型的話,那和閾值檢測沒有任何的區別,人力成本依舊巨大。並且在 織雲Monitor 的實際場景下,這些時間序列異常檢測模型都有着自身的缺陷,沒法作到「百萬條KPI曲線一人挑」的效果。

因而在經歷了不少調研以後,咱們創新性地提出了一個技術方案,成功的作到了「百萬條曲線」的異常檢測就用幾個模型搞定。那就是無監督學習的方案加上有監督學習的方案,第一層咱們使用無監督算法過濾掉大部分的異常,第二層咱們使用了有監督的算法來提高準確率和召回率。

在時間序列異常檢測的各種算法中,一般的論文裏面都是針對某一類時間序列,使用某一類模型,效果能夠達到最優。可是在咱們的應用場景下,見過的曲線千奇百怪,筆者都說不清楚有多少曲線的形狀,所以只用某一類時間序列的模型是絕對不可取的。可是,在學習機器學習的過程當中,有一種集成學習的辦法,那就是把多個模型的結果做爲特徵,使用這些特徵來訓練一個較爲通用的模型,從而對全部的 織雲Monitor 時間序列進行異常檢測。這一類方法筆者總結過,那就是「時間序列簡介(一)」,最終咱們作到了「百萬條曲線一人挑」,成功去掉了制定閾值的業務效果。

走向將來

亦餘心之所善兮,雖九死其猶未悔。

在轉行的過程當中,筆者也走過彎路,體會過排查數據問題所帶來的痛苦,經歷過業務指標達成所帶來的喜悅,感覺過如何從零到一搭建一套系統。在此撰寫一篇文章來記錄筆者這兩年多的成長經歷,但願可以盡微薄之力幫助到那些有志向轉行來作機器學習的人。從這兩年作項目的經從來看,要想從零到一地作好項目,在一開始就必需要有一個好的規劃,而後一步一步的根據項目的進展調整前進的方向。可是若是沒有一個足夠的知識積累,就很難找到合適的前進方向。

亦餘心之所善兮,雖九死其猶未悔。」在某些時候會有人爲了短時間的利益而放棄了一個長遠的目標,可是若是要讓本身走得更遠,最佳的方案是讓本身和團隊一塊兒成長,最好的是你們都擁有一個長遠的目標,不能由於一些微小的波動而聽任本身。同時,若是團隊或我的急於求成,每每會致使失敗,而堅持不懈的學習則是作科研和開展工做的不二法門。

詩人陸游曾經教育過他的後輩:「汝果欲學詩,功夫在詩外」。意思是說,若是你想真正地寫出好的詩詞,就要在生活上下功夫,去體驗生活的酸甜苦辣,而不是抱着一本詩詞歌賦來反覆閱讀。

若是看過天龍八部的人就知道,鳩摩智當時上少林寺去挑戰,在少林高僧面前展現出本身所學的少林七十二絕技,諸多少林高僧無不大驚失色。而當時的虛竹在旁邊觀戰,就對少林高僧們說:「鳩摩智所耍的招數雖然是少林絕技,可是本質上倒是使用小無相功催動出來的。雖然招數相同,可是卻用的道家的內力。」爲何少林的高僧們沒有看出來鳩摩智武功的關鍵之處呢,那是由於少林高僧們在練功的時候,一直抱着武學祕籍在修煉,一生練到頭了也就13門絕技。

其實從鳩摩智的我的修煉來看,修練武學的關鍵並不在武學祕籍裏。沒有找到關鍵的佛經,沒有找到運功的法門,不管抱着武學祕籍修煉多少年,終究與別人有着本質上的差距。

筆者在 SNG 社交網絡運營部的這兩年多,用過推薦項目,作過安全項目,正在作運維項目,也算是部門內惟一一個(不知道是否準確)作過三種項目的人,使用過推薦系統,從零到一搭建過兩個系統。目前筆者的我的興趣集中在 AIOPS 這個場景下,由於筆者相信在業務運維這個傳統領域,機器學習必定有着本身的用武之地。相信在不久的未來,AIOPS 將會在運維上面的各個場景落地,真正的走向咖啡運維。

文中說起的筆者總結文章可參考筆者我的公衆號:數學人生

做者介紹

張戎:騰訊機器學習研究員,畢業於新加坡國立大學數學專業,獲博士學位。目前致力於研究人工智能在推薦系統,業務安全系統,智能運維繫統上的使用,如:織雲 Monitor 智能監控系統。

歡迎你們關注騰訊織雲微信公衆號(TencentCOC),第一時間獲取更多運維技術實踐乾貨哦~

相關文章
相關標籤/搜索