如何將深度學習與你正在做的事情相結合?
前言
人工智能是目前各行各業(yè)最火熱的技術,如果說前兩年是『互聯(lián)網(wǎng)+』,那么這兩年一定是『AI+』,利用深度學習的技術,給各行各業(yè)賦能,并提高效率,是企業(yè)智能化的一個方向。
從AI的結合方向來說,一般有2種,一種是行業(yè)結合,例如量化投資和智能投顧。
量化投資,量化投資就是利用計算機技術并且采用一定的數(shù)學模型去實踐投資理念,實現(xiàn)投資策略的過程。它能嚴格執(zhí)行投資策略,這樣可以克服人性的弱點,如貪婪、恐懼、僥幸心理,也可以克服認知偏差。并且對海量數(shù)據(jù)的多角度觀察,能快速跟蹤市場,擴展投資機會。
在比如,AI與教育,國內(nèi)的幾家在線教育機構都有涉獵。英語流利說,用語音識別的方法,來判斷用戶的發(fā)音是否準確;乂學教育,將高中小學的題目,依據(jù)語義識別,將題目背后的知識點挖掘出來,用來診斷用戶對一道題的不會做,究竟是哪些知識點不會,可能涉及到的小初高的各個知識點,分別列出,方便針對性的練習;小猿搜題利用OCR技術,獲取題目的文本資料,最后對題目在數(shù)據(jù)庫中及知識點中做匹配。
另一種是技術結合,這里的技術指的是互聯(lián)網(wǎng)企業(yè)從業(yè)人員的各個角色,例如運維、開發(fā)、運營、搜索、推薦等。也是我們這里主要介紹的內(nèi)容。這里可以做的事情很多,一般是一些重復性工作,有一定規(guī)律,但是這種規(guī)律不容易用規(guī)則描述,都可以嘗試用深度學習的方法來賦能。
當然,深度學習或者機器學習在上面兩種結合的情況下獲得成功案例,離不開這幾大要素:
- 數(shù)據(jù)
- 標注
- 工具(算法和系統(tǒng))
- 應用場景
我們也逐個來展開。最后介紹深度學習中遇到的幾個挑戰(zhàn),以及解決的思路。
一、如何將深度學習與你正在做的事情相結合
智能運維
運維的發(fā)展目前經(jīng)歷了從基于規(guī)則到基于學習的。運維面臨的最大挑戰(zhàn)就是:在互聯(lián)網(wǎng)公司很難人工指定規(guī)則。在一個較大的企業(yè)中,它的特點如下:
規(guī)模大:
- 100多個產(chǎn)品線
- 上萬個模塊
- 幾十萬臺服務器
- 百萬級KPI監(jiān)控
變化快:
- 每天上萬個軟件更新
- 互聯(lián)網(wǎng)從業(yè)員工流動性強
那么在運維中,都有哪些場景,可以嘗試引入機器學習的算法呢?
場景一:事故的根因分析(RCA)
自動挖掘模塊報警事件之間的關聯(lián)關系,這需要對大量的事故單和項目流程進行學習,從而達到自動根因定位
場景二:自動檢測PV異常
主要是學習PV的變化曲線,標注出異常點;當數(shù)據(jù)量不足時,也可以人為模擬一些日志,制造異常的峰谷值。
場景三:自動分析性能瓶頸并提出優(yōu)化建議
場景四:自動關聯(lián)KPI異常與版本上線
KPIs(Key Performance Indicators)是用來衡量服務性能的關鍵指標。服務器的異常行為包括潛在的風險、故障、bugs、攻擊等。而KPI異常檢測是指在KPI時序曲線上識別異常行為,并進行診斷和修復。
場景五:自動評估軟件更新對應用的影響(PV、網(wǎng)卡吞吐率、內(nèi)存利用率)
場景六:從線上事故報告單中提取有價值的信息
現(xiàn)在事故報告單在公司里都有相對固定的格式,可以用NLP技術+關鍵詞提取+命名實體識別等對事故報告單結合PV、KPI等指標進行分析。
上述情景下這幾大要素的解決:
- 數(shù)據(jù):海量日志作為特征數(shù)據(jù)。
- 標注:格式化的線上事故單、事故報告。
- 算法:運維人員向算法開發(fā)人員描述運維異常,開發(fā)人員負責構建異常檢測系統(tǒng)和檢測器。
- 應用:運維人員可以設計、部署、使用、并受益于智能運維系統(tǒng),形成有效閉環(huán)。
同時,如果我們把關注的那些KPI,如果抽象成時序數(shù)據(jù),跟電商的銷售數(shù)據(jù),跟游戲的KPI指標沒有本質(zhì)的區(qū)別,因此,如何結合行業(yè),也可以做一些智能的銷售預測,游戲在線峰值監(jiān)控等。如果抽象成算法層面,可能都有很好的應用場景,但是如果在算法層面進行更多投入,可以跳出運維本身到智能運營這塊。
智能運營
微信自動化運營工具及微信讀群助手。
場景一:微信讀群助手:每天群過多,大多數(shù)群處于『消息免打擾』的狀態(tài),希望智能的讀取群中的有用信息,生成每日群消息日報。
數(shù)據(jù)及標注:有很多hook的方式可以獲取到個人的所有群的消息。對群消息進行人為的劃分,實際上抽象為『有用』和『無用』的二分類問題。
例如,在『人工智能』的相關群中,對討論AI相關的聊天,劃分為『有用』,而『呵呵』或者表情,劃分為『無用』。在『吉他彈唱』相關的群里,將吉他相關的聊天以及分享文章劃分為『有用』,其他劃分為『無用』。
模型及算法,可以參考利用深度學習進行情感分析的論文以及開源項目。例如:
https://github.com/yala/introdeeplearning
但是,聊天不同于陳述。這背后涉及到一個本質(zhì)的區(qū)別——“是否有交互”。一旦涉及到交互,情感分析(sentiment analysis)評判標準的復雜度就要上升不止一個數(shù)量級了。
原因第一是大部分隱藏信息不出現(xiàn)在文本里,第二是交互對話信息的跳躍,這導致LSTM的記憶其實作用不是太大。
一些方式可以利用NLU語義理解,從文本中抽取重要的實體和意圖,作為特征加入到學習中,并且加上一套規(guī)則,結合用戶的建模模型再對這個聊天交互的『作用』進行判別。
場景二:微信自動化運營工具:如果你是一個B端,如何同時管理多個用戶群。除了目前的第三方工具的微信群的消息轉(zhuǎn)發(fā)功能,其實有很多地方都可以引入智能管理。
例如,群內(nèi)用戶發(fā)廣告問題,可以抽象為二分類問題,利用NLP等技術對廣告進行識別。
再如,我們可以抓取分析群內(nèi)用戶的歷史消息行為,分析他們的職業(yè)、年齡等信息,使用深度學習對用戶畫像標簽進行建模。
參考文獻:
http://www.aclweb.org/anthology/W15-1705
這樣,在用戶數(shù)極大的情況下,希望能篩選出最可能消費產(chǎn)品的潛在用戶。
智能測試
智能測試分為兩種,一種是采用智能化的手段對線上產(chǎn)品做測試,另一種就是本身對深度學習模型引入深度學習的方法進行測試。
場景一:比如新上線一個功能,從UI界面的操作角度,可以有自動化的測試流程。順次執(zhí)行界面上的各個功能,統(tǒng)計是否達到預期。再比如對各種API接口的測試,對傳入接口的參數(shù)依次做校驗,以及對結果數(shù)據(jù)是否達到預期進行測試。目前在這個領域,還在觀察智能化引入的地方,也和大家多多交流。
場景二:用來測試深度學習系統(tǒng)的工具,例如DeepXplore,一個測試深度學習系統(tǒng)的白箱框架。它的主要作用在于:(1)可以生成輸入,生成盡可能不同的異常case,測試深度學習系統(tǒng)邏輯的不同部分;(2)不去人工干預的情況下,識別深度學習系統(tǒng)的不正確行為。并且利用多個有類似功能的深度學習系統(tǒng)作為交叉引證,因此避免了對錯誤行為的手動檢查。
參考文獻:
https://arxiv.org/abs/1705.06640
其他領域例如化學、制藥工程與深度學習相結合
這種結合可以發(fā)生在從宏觀到微觀的多個層面:
例如上面這幅圖,是使用SVM和決策樹來發(fā)現(xiàn)無機-有機雜化材料,并且登上了Nature的封面。
在宏觀上,例如在新藥合成上,通常通過對藥物分子化合物庫的學習來找到有意義的藥物分子結構。各種機器學習方法可以被用來預測化合物的毒理性,如急性毒性、皮膚敏感性以及各種慢性毒性,如致癌性、致畸性、對各種臟器的毒性等等。
到微觀層面,就和理論化學相關。比如將藥物分子抽象為圖,它的原子是節(jié)點,鍵是邊,利用分子的對稱性來預測分子的性質(zhì)。
文獻參考:《Neural Message Passing for Quantum Chemistry》
將深度學習的方法引入化學,實際上是一種統(tǒng)計代替解析的思想。例如,在自然語言處理領域,最初的方法是像編程語言一樣,寫語法規(guī)則做語法分析然后得到語法樹再做下一步考慮。后來采用基于統(tǒng)計的方法——不考慮一個詞A到底是什么成分,只看這個詞A出現(xiàn)在另一個詞B后面的概率有多大。化學也是類似,不再去使用DFT求薛定諤方程的近似解,而是基于累積的現(xiàn)象,用統(tǒng)計的方法,來預測分子的性質(zhì)。
幾大要素的解決:
數(shù)據(jù)及標注:即表示化合物的方法。例如毒理性,遇上一條記錄一條,量不是很大。描述化合物的方法,有很多現(xiàn)成的軟件,比如PaDEL,這些描述符會計算化合物的一些結構信息,比如包含幾個芳香環(huán),有幾個sp2雜化的碳原子之類的,也會計算化合物的電荷分布還有極性等性質(zhì)。
搜索和推薦
目前,推薦和搜索中引入強化學習是非常有效的手段。強化學習,目前分類可以有以下幾種: 有根據(jù)獎賞最大化的不同,是基于概率(Policy_based),直接輸出下一步要采取的各種動作的概率, 然后根據(jù)概率采取行動;還是基于價值(Value_based)的方法輸出則是所有動作的價值, 我們會根據(jù)最高價值來選著動作。
有根據(jù)狀態(tài)更新策略來劃分的,比如是一個回合再進行更新,還是每進行一個動作就去更新。
主要建模方法為,把搜索/推薦系統(tǒng)看作智能體(Agent)、把用戶看做環(huán)境(Environment),則商品的推薦問題可以被視為典型的順序決策問題。Agent每一次排序策略的選擇可以看成一次試錯(Trial-and-Error),把用戶的反饋,點擊成交等作為從環(huán)境獲得的獎賞。在這種反復不斷地試錯過程中,Agent將逐步學習到最優(yōu)的排序策略,最大化累計獎賞。
例如在推薦商品的場景中,利用用戶前幾個狀態(tài)下的點擊、下單、收藏等行為,來推薦出當前狀態(tài)下的商品列表。
參考文獻:
視覺與行業(yè)結合
視覺和電商行業(yè)結合,已經(jīng)有一些落地的產(chǎn)品應用。例如,陌上花科技對視頻和直播平臺,做實時的貼圖廣告、互動;瑪隆科技做時尚的智能搜索,可以上傳服裝圖片,找到含有相似服裝的圖片。Amazon Go也是利用視覺技術,鋪設線下的無人超市。視覺和行業(yè)結合的點也非常多。
那么在AI+的過程中,我們會面臨哪些問題,以及如何解決呢?
二、深度學習面臨的4個挑戰(zhàn)及遞進解決方案
標注數(shù)據(jù)量較小
目前標注數(shù)據(jù)是非常昂貴的,尤其當數(shù)據(jù)量很大的時候。因此,如何從無標注數(shù)據(jù)或者盡可能需要少的標注數(shù)據(jù)里學習,一個途徑就是利用生成式對抗網(wǎng)絡,以及對偶學習的思路。
很多AI領域的任務,例如機器翻譯(中英對譯)、語音識別和語音合成,圖像描述和圖像生成,問題回答和問題生成等,都是對稱的任務。
而對偶學習的思路在于,用兩個神經(jīng)網(wǎng)絡分別對對稱任務進行學習,用學習的結果和源數(shù)據(jù)的相似性大小來進行訓練。
另一個途徑就是做一些自動標注工具。用一些標注數(shù)據(jù)先訓練一個自動標注模型,盡管準確度可以不是很高。用這個自動標注工具來對剩余的大批量數(shù)據(jù)進行標注,最后加入人工審核校對的過程。
模型本身太大,如何應用在移動端以及盡量不損失精度
目前在手持設備上采用AI模型是前沿趨勢。這就衍生出了很多加速計算的方向,其中重要的兩個方向是對內(nèi)存空間和速度的優(yōu)化。采用的方式一是精簡模型,既可以節(jié)省內(nèi)存空間,也可以加快計算速度;二是加快框架的執(zhí)行速度,影響框架執(zhí)行速度主要有兩方面的因素,即模型的復雜度和每一步的計算速度。
精簡模型主要是使用更低的權重精度,如量化(quantization)或權重剪枝(weight pruning)。剪枝是指剪小權重的連接,把所有權值連接低于一個閾值的連接從網(wǎng)絡里移除。
而加速框架的執(zhí)行速度一般不會影響模型的參數(shù),是試圖優(yōu)化矩陣之間的通用乘法(GEMM)運算,因此會同時影響卷積層(卷積層的計算是先對數(shù)據(jù)進行im2col運算,再進行GEMM運算)和全連接層。
量化(quantitative),這里不是指金融上的量化交易,而是指離散化。量化是一個總括術語,是用比32位浮點數(shù)更少的空間來存儲和運行模型,并且TensorFlow量化的實現(xiàn)屏蔽了存儲和運行細節(jié)。
神經(jīng)網(wǎng)絡訓練時要求速度和準確率,訓練通常在GPU上進行,所以使用浮點數(shù)影響不大。但是在預測階段,使用浮點數(shù)會影響速度。量化可以在加快速度的同時,保持較高的精度。
量化網(wǎng)絡的動機主要有兩個。最初的動機是減小模型文件的大小。模型文件往往占據(jù)很大的磁盤空間,例如,ImageNet上訓練出的幾個模型每個都接近200 MB,模型中存儲的是分布在大量層中的權值。在存儲模型的時候用8位整數(shù),模型大小可以縮小為原來32位的25%左右。在加載模型后運算時轉(zhuǎn)換回32位浮點數(shù),這樣已有的浮點計算代碼無需改動即可正常運行。
量化的另一個動機是降低預測過程需要的計算資源。這在嵌入式和移動端非常有意義,能夠更快地運行模型,功耗更低。從體系架構的角度來說,8位的訪問次數(shù)要比32位多,在讀取8位整數(shù)時只需要32位浮點數(shù)的1/4的內(nèi)存帶寬,例如,在32位內(nèi)存帶寬的情況下,8位整數(shù)可以一次訪問4個,32位浮點數(shù)只能1次訪問1個。而且使用SIMD指令,可以在一個時鐘周期里實現(xiàn)更多的計算。另一方面,8位對嵌入式設備的利用更充分,因為很多嵌入式芯片都是8位、16位的,如單片機、數(shù)字信號處理器(DSP芯片),8位可以充分利用這些。
此外,神經(jīng)網(wǎng)絡對于噪聲的健壯性很強,因為量化會帶來精度損失(這種損失可以認為是一種噪聲),并不會危害到整體結果的準確度。
那能否用低精度格式來直接訓練呢?答案是,大多數(shù)情況下是不能的。因為在訓練時,盡管前向傳播能夠順利進行,但往往反向傳播中需要計算梯度。例如,梯度是0.2,使用浮點數(shù)可以很好地表示,而整數(shù)就不能很好地表示,這會導致梯度消失。因此需要使用高于8位的值來計算梯度。因此,正如在本節(jié)一開始介紹的那樣,在移動端訓練模型的思路往往是,在PC上正常訓練好浮點數(shù)模型,然后直接將模型轉(zhuǎn)換成8位,移動端是使用8位的模型來執(zhí)行預測的過程。
如何從小樣本中有效學習
深度學習往往需要大量數(shù)據(jù),當數(shù)據(jù)量不足,或者數(shù)據(jù)不足以覆蓋所有場景時,往往就要把深度學習、知識圖譜、邏輯推理、符號學習等結合起來,將人類已有的一些先驗知識結合神經(jīng)網(wǎng)絡進行訓練。
例如,《Label-Free Supervision of Neural Networks with Physics and Domain Knowledge》中介紹的『用物理和特定領域知識讓神經(jīng)網(wǎng)絡進行不帶標簽的監(jiān)督學習』,在視頻中把運動的枕頭的軌跡檢測出來。結合物質(zhì)知識,枕頭運動的軌跡應該是二次型的拋物線,這樣就減少林要大量地對視頻的每一幀枕頭運動軌跡進行標注。
數(shù)據(jù)稀疏
數(shù)據(jù)稀疏性很多場景下面臨的調(diào)整,尤其是個性化推薦系統(tǒng)中,待處理的推薦系統(tǒng)規(guī)模越來越大,用戶和商品數(shù)目動輒百千萬計,兩個用戶之間選擇的重疊非常少,用戶對商品的消費、點擊、評論行為更是稀少。數(shù)據(jù)非常稀疏,使得絕大部分基于關聯(lián)分析的算法(譬如協(xié)同過濾)效果都不好。
因此,一般會用一些特征提取、或者對用戶和商品進行聚類的方法。亞馬遜的 DSSTNE(https://github.com/amznlabs/amazon-dsstne)是專門針對稀疏場景下的開源深度學習框架。在稀疏場景下,DSSTNE的運算速度比其他深度學習庫快得多,推薦問題及不少自然語言理解任務都屬于這個領域。
最后,歡迎大家提出自己領域中的問題,一起交流AI的解決方案。