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