標籤:

假期

首先默默吐槽一下第一輪科研經費的申請竟然沒拿到..比較鬱悶. 不過還好系裡面錢比較多所以假期做科研的經費有保障. 這樣一來假期就可以愉快的科(搬)研(磚)了.

暑假要做的主要是Deep Reinforcement Learning方面的工作. 具體的內容比較類似這兩篇:

Policy Learning with Deep Dynamical Models

A Locally Linear Latent Dynamics Model for Control from Raw Images

簡單地說就是做一個端對端的強化學習Controller. 直接從Raw Pixels學習一個control policy. 理論上講直接從Raw Pixel學會控制說不定是可能的, 問題是在比如無人車系統這種例子當中對於數據的要求巨大, 現在的數據儲備根本不足以這樣學會一個好的Policy. 因此其他工作的集中點主要是用一個比方Autoencoder把視覺數據降維然後在low dimension學會control. 現在大家似乎都特別喜歡用神經網路做一個前端的黑盒子做特徵提取, 然後在後端做有趣的東西. 在同樣的時間和經歷下與其花大部分時間做一個90分的前端不如用DL做一個70分的前端然後把剩餘的時間都花在後端Reinforcement Learning上面 (MDP那一套比如).

然後這個Easter順便把Synergy Graph拿Python重寫了. 前六個月沒有進度因為大部分時候都是對原先Java的Legacy Code修修補補, 然後因為Java很Clumsy很多想法從提出到實現中間的周期相當的長...最後實在沒法忍了我徵詢了導師意見就重寫了. 好玩的是重寫出的代碼速度非常的快, 大概是原先Java的30-40x左右. 我本來的設計是打算演算法的核心Primitive用C++寫然後Controlflow用Boost.Python包裝起來, 但是也是因為時間有限的關係最後放棄了這個想法開始用Numba來用Python寫核心Primitives, 不過我猜這種方式其實會比我用C++寫出來的代碼快因為 1)我不太會寫C++. 2)我寫的C++大概沒有Numbda拿LLVM JIT出來的SIMD code快. 有空會寫一寫這次重新設計Synergy Graph的思路. 這次的設計大量參考了比方說scikit-learn或者Spark MLLib的做法. Synergy Graph是一個Graphical Model因此之前Java裡面的實現是自己做了很多Node Edge這種class來做Primitive. 好處是代碼比較符合論文裡面的描述但是壞處就是很多地方性能根本沒有辦法優化. 我這次用Python寫直接把不必要的OOP去不去掉了因為Python沒有辦法做到Zero Cost Abstraction. 我直接去掉了這些核心直接numpy一波, 前端用一個很簡單的wrapper把Synergy Graph的API給描述一遍. 一個Synergy Graph最後在learning 階段直接是操縱Numpy 的ndarray. 這樣設計充分利用了numpy的速度. (鑒於Python沒有好的JIT, 因此這種設計可以最大程度的保證性能, 這裡的Performance difference估計有100x左右). 結果就是原先多機並行跑一周的部分現在用新的代碼單機3天就可以搞定, 而且測試新的Idea還特別簡單.

推薦閱讀:

烷烴同分異構體個數的計數方法
1-10 轉CS的優勢之一:前置條件少
【原著解讀】丹尼特的《心靈的演化》:兩種奇怪的倒置推理
人類對人工智慧的嚮往和幻象由來已久,那麼,這次有什麼不同?——Yann LeCun上海紐約大學講座及座談精華

TAG:計算機科學 |