2020年註定是不平凡的一年。由於疫情影響,我們迎來了年後第一場線上技術活動,本次課程在線實時觀看人數120人次,同時有40+小夥伴在線與老師進行了交流答疑。下面就讓我們一起來回顧本次課程的精彩內容。
本次活動的嘉賓簡介
江岸青
(牛肉咖喱飯)
早稻田大學博士 機器學習領域研究人員
下面正式進入到活動回顧吧~
PART1 :強化學習簡介
從人的成長過程中來對比強化學習,人的成長會經歷嘗試探索、反饋總結、學習成長的過程。早在20世紀六七十年代,就有科學家將人的這種成長經歷歸納為馬爾可夫決策過程(MDP)。
Agent相當於大腦,Action是行為,Enviroment環境,Reword在反饋。
PART2 :強化學習整體應用領域
上圖是強化應用整體的應用領域,從最核心到最外圈,核心的就是算法部分,最核心就是agent、action、enviroment、reward的一個循環,在這個循環之外,knowledge就是給強化學習baseknowledge的基本信息,包括model and planning。怎麼構建reward,怎麼去評價價值函數value function,以及我們強化學習的執行策略policy是怎麼樣的?這是我們算法的一個細節部分,同樣我們也可以用一些算法來輔助我們強化學習更高效準確的運行,比如一些非監督學習,能夠讓我們環境理解的更好;比如attention and memory一些回放機制可以幫助我們讓強化學習獲得一些性能上的提升;比如multi-agent RL是可以幫我們實現一個多目標多代理的執行,有效的幫我們提高強化學習的運行速度的。最外層就是我們強化學習的一些應用模塊。
PART3 :強化學習的應用
強化學習的主要應用領域集中在智慧交通、遊戲、集群資源管理、廣告、材料學、個性化推薦、機器人、量化投資八個。
第一個是智能交通,主要分兩個領域,一個是社區政府,一個是商業公司。如滴滴智能派單,智能紅綠燈等。通過強化學習做智能調度系統。這裡準備了兩篇論文,一個是滴滴智能派單的,一個是在智能紅綠燈方面的應用。
第二是化學材料領域,在材料的設計渲染方面和材料挑選還是比較強大的,當然材料製備上還要需要更多科研人員努力。
第三是推薦系統,像京東,淘寶這些APP根據用戶不同喜好,推薦一些不同的東西,通過用戶畫像這些推薦一些用戶想要的東西。但是有些問題,當你買了一次東西,他會不斷為你推送。強化學習做些自動化設置,當你不買的時候,可以有效規避這種推送,幫助我們優化推薦系統。
第四是遊戲領域,如OpenAI在遊戲上的應用,騰訊在王者榮耀等上也有應用。
第五是量化投資領域,應用於量化投資領域分析。
PART4 :構建強化學習的要素
構建強化學習主要是三要素AGENT、ENV、REWARD。
【1】AGENT
如果Agent放在我們深度強化學習中,它代表網絡。在傳統強化學習中,它代表一個策略。比如說Q-Learning,它其實一個Q-Table的執行,它其實就是打了一張表格出來,在某一個狀態下它走了一個什麼樣的步驟得了多少分。然後不斷更新表格的同時不斷去選擇更新的一個邏輯。那麼現在通過深度學習,有了Deep-Q-Learning(DGM)的模型,我們使用了多個網絡代替了Q-Table。
【2】Env環境模塊
如果大家比較注重做強化學習算法上的研究,就會用到baseline,比如GYM,Unity。還有很多科研人員或企業用戶,他們需要通過自己企業內部的環境去搭建環境,有一個TF.Agent,TF.Enviroment模塊。
【3】Reward回報函數
我個人認為Agent和Enviroment是你能不能構建這個強化學習算法,至於這個算法能不能收斂reward,90%情況下reward函數比較重要的。
PART5 :常見強化學習算法
Q-Learning、DQN、DDQN、DQN-RNN、DDPG,TD3,PPO,PPO-RNN,SAC(soft actor critic)它們本身是大同小異的。
PART6 :強化學習的環境
一個是OpenAI的GYM,一個是Unity,做手遊經常使用的,接下來是真實環境,最後是自定義環境。
PART7 :強化學習的回報
回報函數是比較重要的,尤其是幫助大家落實強化學習算法是比較有用的。
【1】稀疏回報問題
人是如何走到迷宮的終點呢?
如果這個迷宮是9x9的,我們可以很容易走到終點。如果是1000x1000的?如果我們通過隨機或強制算法去走,那麼這就不叫強化學習,叫做DA-Star算法。對於我們強化學習來說,你沒走到終點,reward就一直是0,模型永遠都沒有正回報。路徑規劃永遠也得不到想要的路徑。
如何避免稀疏回報呢?
我們可以給模型一點甜頭,在預估當中越接近答案,你給他一些小回報,雖然沒辦法知道正確距離,但是可以給他個絕對距離,這樣可以減少稀疏回報的問題。還有一個稀疏回報場景,是自動駕駛領域,當你的模型訓練的非常好,當你車子可以7x24小時運行500天,你也不能保證你的車子在任何環境下都是安全的。當你算法在99.9%以上後,你越接近0.1%,就會出現稀疏負回報,你不知道0.1%的問題。
【2】貪婪、膽怯、魯莽,我們叫做異常行為
我們還是以迷宮為例,離終點近的區設為正的,離終點越近,回報越大。這時候你會發現,如果走的路徑點是死路,會一直卡在那裡,不會再去找其他路徑,這樣就是一個貪婪異常。膽怯是我們走同樣的路徑,中途有個陷阱,小車掉進陷阱,下次走到陷阱會一直在那裡徘徊。魯莽還是以自動駕駛為例,回報沒有做好,靠撞牆繞過彎道,整體時間是靠反彈加速的,撞牆過彎速度快,實際速度慢,這樣強化學習就會給你推薦撞牆的路線。
PART8 :TensorFlow強化學習庫
TF-Agents工作模式,下圖是整個TF-Agent的工作流。
整體的TF-Agents使用方法的好處實際上實現了一個多線程的方法,我們訓練的時候開兩條線路,一個去訓練,一個去測試。包括前面提到的強化學習算法,在TF-Agents裡都有很好支持。
PART9 :構建一個簡單TF-Agents
【a】導入依賴
import tensorflow as tftf.compat.v1.enable_v2_behavior() from tf_agents.agents.ddpg import critic_networkfrom tf_agents.agents.sac import sac_agentfrom tf_agents.drivers import dynamic_step_driverfrom tf_agents.environments import suite_pybulletfrom tf_agents.environments import tf_py_environmentfrom tf_agents.eval import metric_utilsfrom tf_agents.metrics import tf_metricsfrom tf_agents.networks import actor_distribution_networkfrom tf_agents.networks import normal_projection_networkfrom tf_agents.policies import greedy_policyfrom tf_agents.policies import random_tf_policyfrom tf_agents.replay_buffers import tf_uniform_replay_bufferfrom tf_agents.trajectories import trajectoryfrom tf_agents.utils import commontf_py_enviroment 可以將gym轉成agent可以使用的環境。normal_project_net網絡導入。通過greedy_policy,random_tf_policy去導入貪婪的模塊。
【b】建立環境
env_name = 'CartPole-v0'env = suit_gym.load(env_name)【c】Agent
fc_layer_params = (100,) q_net = q_network.QNetwork( train_env.observation_spec(),train_env.action_spec(),fc_layer_params=fc_layer_params) optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate=learning_rate) train_step_counter = tf.Variable(0) agent = dqn_agent.DqnAgent( train_env.time_step_spec(), train_env.action_spec(), q_network=q_net, optimizer=optimizer,td_errors_loss_fn=common.element_wise_squared_loss,train_step_counter=train_step_counter) agent.initialize()【d】Metics評價指標
def compute_avg_return(environment, policy, num_episodes=10): total_return = 0.0 for _ in range(num_episodes): time_step = environment.reset() episode_return = 0.0 while not time_step.is_last(): action_step = policy.action(time_step) time_step = environment.step(action_step.action) episode_return += time_step.reward total_return += episode_return avg_return = total_return / num_episodes return avg_return.numpy()[0]【e】Train訓練
agent.train = common.function(agent.train) agent.train_step_counter.assign(0) avg_return = compute_avg_return(eval_env, agent.policy, num_eval_episodes)returns = [avg_return]
for _ in range(num_iterations): for _ in range(collect_steps_per_iteration): collect_step(train_env, agent.collect_policy, replay_buffer) experience, unused_info = next(iterator) train_loss = agent.train(experience).loss step = agent.train_step_counter.numpy() if step % log_interval == 0: print('step = {0}: loss = {1}'.format(step, train_loss)) if step % eval_interval == 0: avg_return = compute_avg_return(eval_env, agent.policy, num_eval_episodes) print('step = {0}: Average Return = {1}'.format(step, avg_return)) returns.append(avg_return)
****** CODELAB 實戰 ******
資源路徑:https://github.com/tensorflow/agents
註:對於不能使用CodeLab的,可以去往資源路徑下的docs目錄下去下載,這些notebook在Windows和Mac下有些是不能跑的,Windows可以使用WSL的環境,notebook存在一些依賴包。Mac還不支持進行深度學習搭建。
DQN Tutorial.ipynb操作
a.安裝必要的依賴包,tf-agents是需要tensorflow-probability支持的。
b.定義強化學習需要使用的參數
c.導入Enviroment
d.列印觀察,定義模型時,模型會返回怎樣的觀測值是很重要的,
e.Agent定義網絡,TensorFlow有很多Agent的支持。可以將神經元調到128,神經元放大,可以得到更多結果。
f.選擇Policy
g.Replay Buffer幫助我們加速訓練
h.Data Collection設置數據的一個過程
i.Train 訓練過程
****** Q & A ******
在老師經常的演講中,大家通過互動文檔踴躍發起了很多問題,我們精心挑選出幾位同學的回答,送上我們超讚的互動禮品:「力扣90天經典會員」還請獲得獎品的小夥伴及時在TF微信群裡聯繫我們兌換!
牛寶華:聽說支持AMD顯卡了,但是ROCM只能在Linux上用,請問Mac電腦用什麼方式搭建環境好呢?希望能用GPU加速。
A:ROCM只能在Linux上用,Mac對於AMD根本沒有想要支持,能夠用來跑機器學習的Mac基本要20W。沒有必要到Mac上去做這些事情,你要學習的話可以去自己去配置一臺支持的桌上型電腦來做。
葉云:(1)深度強化學習的話,個人弄臺電腦寫點場景,譬如 40 個點 200 個人的車輛調度系統,大概需要什麼配置?
(2)強化學習和遺傳算法有沒有什麼淵源?感覺評價函數、算子、環境等等,有些相似。
A:(1)這個取決於你的enviroment設計的複雜度來的。單CPU應該可以做到的,與調度系統的邊界條件有關以及算法有關。
(2)強化學習是從零開始一遍遍試,以某個起點開始在一個方向去試出結果;而遺傳算法,是在global裡面去統計,得出一個好的結果。強化學習本質上是在解決一個過程,但是解決問題上是類似的,的確有許多相似點。
Michael Ding:TensorFlow 和 Pytorch 各自的優點與對比,以及適合的應用場景介紹。
A:TensorFlow 和 Pytorch 本質上是做的一樣的事,Pytorch 在剛出來時人性上是挺好的,但是TensorFlow在2.0上,在整體性上,是超過Pytorch的,TensorFlow的社區也可能優於Pytorch,上海有 GDG 😊 TFUG 兩個。對於很多技術人員,很多人還是需要社區去幫助他們去了解學習。
Q:離散Action空間和連續Action空間,在Loss定義上有什麼區別,要注意什麼?
A:在Loss定義上是有區別的,如果像走迷宮就是離散空間的Action,擺杆就是一個連續Action,如果是一個連續Action,你可以將它人為分類。分出來的類,不同階段你給他不同的Action,這是第一種,給他不同reward,給他不同action;另外一種就是在離散空間上給它離散reward,就會給出連續的action,還有就是神經網絡上的神經元輸出。一個輸出是類別的輸出0和1,另外一個是action連續空間,可能要變成一些連續的action去輸出。
****** 資源獲取 ******
大家可以通過以下相關資源連結去深入學習本次課程以及尋找更詳細的問題答案。
1、PPT連結(包含相關論文連結)
本公眾號後臺回復 「3.28TF」 即可獲取本次活動的課程資源
2、課程回放連結:https://space.bilibili.com/385799388
3、TensorFlow新特性連結:https://mp.weixin.qq.com/s/YcvIp1cpGsAfsZm2rerxmg
4、點擊文末【在看】,並在文末留言,寫下你對本次活動的感想,我們將在精選留言中抽取5名小夥伴,送上力扣會員兌換碼!
Google Developer Groups 谷歌開發者社區,是谷歌開發者部門發起的全球項目,面向對 Google 和開源技術感興趣的人群而存在的公益性開發者社區。GDG Shanghai 創立於 2009 年,是全球 GDG 社區中最活躍和知名的技術社區之一,每年舉辦 30 – 50 場大大小小的科技活動,每年影響十幾萬以上海為中心輻射長三角地帶的開發者及科技從業人員。
社區中的各位組織者均是來自各個行業有著本職工作的網際網路從業者,我們需要更多新鮮血液的加入!如果你對谷歌技術感興趣,業餘時間可調配,認同社區的價值觀,願意為社區做出貢獻,歡迎加入我們成為社區志願者!
志願者加入方式:關註上海 GDG 公眾號:GDG_Shanghai,回覆:志願者。
社區成員加入方式:請發郵件至以下郵箱
gdg-shanghai+subscribe@googlegroups.com