閱讀685 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ICML2016 TUTORIAL參會分享


image


本次ICML會議的tutorial安排在主會前一天。這次tutorial內容非常豐富,有微軟亞研的hekaiming(已經跳去facebook)介紹深度殘差網絡,也有deepmind的david silver介紹強化學習,還有一係列優化相關的topic等等。筆者選取了深度殘差網絡,隨機梯度,深度強化學習三個topic,下麵簡單做一下與會分享:


He Kaiming FACEBOOK

相關介紹鏈接 https://kaiminghe.com/icml16tutorial/index.html。

He kaiming在這個tutorial中重點介紹了他們組最近提出的深度殘差網絡。在深度學習過程中,我們習慣把層數加深來獲得更深的網絡結構和更強的表達能力,但是層數加深往往會給模型參數優化帶來困難,讓整個結構不可學習。He等人的工作是設計了一套簡單清晰的結構框架使得更深的網絡可學習,從之前最深的22層網絡進行著層數的革命提升到實際可用的100層以上。

從可學習性維度來看,層數的不同我們的設計也需要有相應的變化:如果層數小於5層,那麼一般的bp可以直接使用;如果層數大於10層,那麼就需要考慮一些初始化,或者batch數據規範化的方式來處理;如果層數大於30層,有效的刪減鏈接是一種方式;如果大於100層,需要引入identity skip connection;大於1000層的方法還在研究當中。

對於初始化和batch數據規範化這裏做一個簡單的介紹,在Lecun et al 1998 “Efficient Backprop”一文最先提出。從線性激勵函數出發,我們知道輸出的方差實際上是正比於輸入的方差,正比值和權重的方差有關,為了避免隨著層數增加的梯度彌散現象,可以設定權重的方差初始化為1,如果是relu函數需要相應的調整。Batch數據規範化,把每層的輸入按照零均值單位方差進行規範化,輸出要做一下相應的調整,這樣也是在一定程度上避免梯度彌散的問題,從實際效果上來講可以加速訓練,對初始化不敏感等。

image


但是對於構建更加深層的網絡,初始化和batch數據規範化還不夠,更深層可能會帶來更高的訓練誤差,說明可學習性成為一個問題。但是反過來看,更深的網絡擁有更大的解空間,相對於較淺層的網絡,不應該訓練誤差都更大,因為即使新增加的層設計成單位層也應該可以達到和原來淺層網絡一樣的結構,所以困難主要集中在層數變深之後優化的困難。

基於此,He等人設計了residual net網絡。傳統結構中我們希望通過兩層網絡由輸入x得到輸出H(x),在residual net中,我們希望引入一個單位映射,使得H(x) = F(x) + x。這樣設計的好處是兩層結構學習的是殘差F(x),複雜的網絡不用學習完整的表達H(x),隻用學習殘差即可。當優化時,借助於單位映射,深層的loss可以很容易的傳導到淺層。從另外一個維度來講,引入單位映射,我們在優化時有能力忽略掉一些層。

image


基於100多層的網絡,作者進一步從表示,優化,泛化能力三個層麵探討了深度殘差網絡的未來。從表達能力維度來看,殘差網絡並沒有新增任何優點,但是可以使得模型變深;從優化維度來看,殘差網絡的重點突破在於使得正反向傳播彌散問題得到緩解;從泛化能力來看,殘差網絡雖然沒有明顯的優點但是又深又瘦的網絡結構會讓泛化能力更好。

而如果要把100層的網絡擴展到1000層以上,需要圍繞單位映射好好做文章。如果是H(x) = F(x) + x這樣的結構,那麼X_L = x_l + \sum_{i=l}{L-1} F(x_i),不同層之間的傳導非常平滑,最後的輸出可以認為是一個加性模型,而反過來如果不是殘差網絡,那麼輸入到輸出是一個乘性模型,對於正反向傳播都會帶來問題。基於此,He等人指出對於正反向傳播,不能設計乘性模型來阻礙傳播,單位映射和加性模型的設計成為必然。

image


筆者很認可He等人在深度殘差網絡設計中的思想。隨著模型進一步go deeper,我們的模型設計需要圍繞兩個方麵具體展開:

表達能力,這一塊具體看是否捕捉了數據的性質,深度殘差網絡基於的cnn基本building block已經把這一點考慮進來,而對於我們用戶數據,結構上的設計還存在很大空間;

優化能力,這一塊看模型是否能真正的被學習到,一個複雜不可學的模型不如一個簡單可學習的模型,residual網絡通過傳導上的優化可以去解決梯度彌散的問題,這樣的邏輯應該可以處理所有涉及反向傳播的網絡結構優化。


Leon Bottou (Facebook AI Research), Frank E. Curtis (Lehigh University), and Jorge Nocedal (Northwestern University)

這個talk主要介紹的是隨機梯度法在大規模機器學習問題裏麵的應用,相關文章已經在arxiv上貼出來https://arxiv.org/abs/1606.04838。這個talk具體從三個方麵展開,a. 隨機梯度的概括,b. 理論分析,c. 二階方法和減少噪聲。

1.sg方法的概括
隨機梯度法(SG方法)的思路,簡單理解就是每次挑選一個樣本計算梯度,然後更新權重。傳統的batch learning方法是過一下所有的樣本計算所有樣本梯度的平均值,再更新權重。從效率層麵來看,sg方法要更加優越,但從收斂性角度來看,sg方法相對於梯度下降法是sublinear的收斂速度。


image


2.從理論維度來看sg方法
隨機梯度法的理論分析主要集中其收斂性證明,以及收斂到最優值的可能性。這一塊主要偏於純優化理論分析,如果感興趣可以深入文章仔細看一下推導。下麵分享一些結論:對於凸目標固定步長和步長減小的情況下,sg方法得到的收斂點和最優值之間的gap存在一個上界。而對於dnn所涉及的非凸優化問題,這裏的理論集中在前k次迭代梯度模的期望是有上界的,且對於步長減小的情況,要到達收斂,需要步長一階級數發善,二階級數收斂。

對於大規模learning的問題,作者分析了batch方法和sg方法在收斂性,達到一定誤差情況下所需要的迭代時間上的差異。同時他們也指出,由於通訊,同步成本的一些問題,對於分布式計算也許sg並不是一個很好的方案。


image


3.sg方法的改進
對於隨機梯度法存在兩個方麵的擴展:1、從noise reduction的角度能否向batch learning方法借鑒;2、選取的方向上麵能否引入二階信息。具體來說,隨機梯度法要減少每次僅采用單個樣本計算梯度的noise,可以從動態采樣,梯度累積,迭代平均等方麵優化。梯度累積方法的思路是引入之前存儲的全局梯度信息來修正由單個batch計算梯度得到的方向,例如svrg,saga方法。

SVRG方法會記錄所有樣本對應的梯度,然後每次挑選一個樣本確定更新方向的時候,計算這個樣本對應的梯度,然後更新的量等於全部的梯度加上當前這個樣本梯度減去曆史這個樣本的梯度,在一個batch樣本全部過一遍後,更新一下整體基準的w並計算其對於所有樣本的梯度。

SAGA算法是采用一個table記錄所有樣本的梯度,然後每次隨機挑選的樣本會把其對應的梯度更新,然後整體上使用所有樣本的平均梯度去更新。迭代平均的方法是直接使用過去k步w的平均值作為下一步的w。

選取的方向引入二階信息是說不僅單計算梯度,也可以使用牛頓法和擬牛頓法計算更新方向,比如lbfgs要應用於隨機梯度的情況中,需要考慮逼近的hessian矩陣是一個降采樣的hessian矩陣。


image


筆者認為sg算法目前在dnn優化,大樣本優化上應用較廣,但是我們目前的方案確實在並行處理維度上考慮的較少,同時對sg方法在采樣噪聲上的考慮也較少。最近sg方法在降低噪聲問題有了不少紮實的工作,例如svrg,saga方法的深入方法和理論研究。結合主會上最新的研究進展,降樣本噪聲的隨機梯度優化方法在理論上也有了一些不錯的進展,建議接下來我們可以跟進一下具體方法,可能對我們的整體算法優化有明顯的效率提升。


David Silver Google DeepMind

強化學習是一套通用的目標決策框架:在任何一個狀態,用戶可以采取一個行動,行動會影響用戶未來的狀態,並獲得一個回報,目標是選擇合適的行動最大化未來的收益。而深度學習是一套通用的表示學習框架。我們可以采用rl來定義目標,dl提供具體的表示方法,處理玩遊戲,探索,控製,交互等問題。

在rl領域我們重點描述三點,觀測的狀態,采取的行動,獲取的回報。對於這三點,我們采用策略來描述用戶的行為函數,用價值函數來評估每一個狀態和行為,用模型來建模表示環境。其中策略函數是狀態到行為的映射,價值函數是對未來回報的預測,而Q-value函數描述的是狀態s時采用行動a得到的預期全部回報。

image


通常rl的方法分為三種:

  • value-based RL,希望得到每個狀態下最優的Q-value function;
  • policy-based RL,希望能夠直接獲得最優的策略;
  • model-based RL,希望建模環境。這三種方法都可以引入deep nn來做表示,使用sgd方法優化損失函數。


image


Value-based方法又稱為Q函數學習。我們直接把狀態和行為當作輸入,把回報當作輸出構建Q網絡,學習到的最優Q函數應該滿足Bellman方程,采用sgd方法最小化mse。在采用神經網絡描述Q函數的時候要注意兩點:

樣本之間的相關性,
非平穩狀態的target。

具體atari遊戲中,DQN是直接把遊戲的圖片作為輸入(可以認為是狀態),然後輸出是不同操作對應的Q函數值,當然基於DQN的擴展也有一些工作,例如Double DQN方法修改了最後優化的目標函數,將選擇action和評價action的網絡參數w分開;Prioritised replay,在priority隊列裏麵根據DQN誤差存儲experience;Dueling network,這個工作獲得了ICML2016的best paper,具體思路就是把Q網絡拆分為價值函數(和行為無關)和優勢函數兩個部分。基於此,deepmind構建了名為Gorila的一套RL學習的框架並應用到google的推薦係統。

image


Policy based的方法則需要學習等到最優的策略函數。我們將策略函數用深度網絡來表示,目標函數為預期的整體收益,采用sgd方法進行整體網絡優化。

Actor-Critic算法是其中一個經典方法,首先評估Q函數,給定近似最優策略我們可以得到一個近似的Q函數,然後帶入Q函數我們進一步優化策略網絡。針對Actor-Critic的升級也有一些方法,例如A3C,其並不是直接估計Q函數,而是先估計狀態函數,從狀態函數出發估計Q函數,策略網絡參數和Q函數部分的優化分開。

在解決連續動作空間的問題時,DPG方法是一個不錯的解法,具體思路分為3個方麵:

  • 采用experience replay的方法構建數據集;
  • Critic部分采用DQN;
  • Actor策略函數優化沿著優化Q的方向進行。

對於有多個agent 的遊戲中,FSP方法考慮不同agent的策略,學習平均意義上的最優response。

image

對於直接建模環境的方法目前仍然存在一些挑戰,研究進展不大。

筆者認為RL特別是RL和DL的結合接下來會成為機器學習領域的一個熱點。當我們將目光投向真實世界時,我們麵對的問題不在隻是純粹的預測,分類,聚類問題。RL區別於傳統的機器學習問題有幾點不同:1、回報滯後;2、序列決策,不同狀態采取的決策不一樣,同時也會影響下一階段的狀態,整個序列決策的過程是相互聯係的,而不是互相獨立的。在這個過程中,參數化的方法,dl的引入隻是具體的實現手段。我們要應用RL到我們的具體業務之中,需要有準確的切入點,不能生搬硬套。怎樣更好的找到業務和技術的結合點,需要大家一起集思廣益碰撞出火花。

原文鏈接

最後更新:2017-06-28 17:32:36

  上一篇:go  百度外賣如何做到前端開發配置化
  下一篇:go  DB2 的REORG_學習(1)_REORG INDEXES/TABLE Command