【活動回顧】用TensorFlow做強化學習

2021-03-06 GDG

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 common

tf_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

相關焦點

  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    1新智元推薦【新智元導讀】知乎專欄強化學習大講堂作者郭憲博士開講《強化學習從入門到進階》,我們為您節選了其中的第二節《基於gym和tensorflow的強化學習算法實現》,希望對您有所幫助。同時,由郭憲博士等擔任授課教師的深度強化學習國慶集訓營也將於 10 月 2 日— 6 日在北京舉辦。
  • TensorFlow學習
    TensorFlow學習0.導語1.Session會話控制(兩種打開模式)2.Tensorflow使用Variable3.Placeholder 傳入值4.激勵函數(activate function)5.定義添加神經層的函數6.建造神經網絡7.matplotlib 可視化8.學習文章TensorFlow學習0.導語本周將會陸續更新莫凡python配套視頻的自己學習筆記
  • 基於TensorFlow的深度學習實戰
    圖像、視頻、文本、音頻等領域的問題,都可以通過深度學習解決。TensorFlow可以用於實現前述所有應用。TensorFlow很快成為GitHub上用戶最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕鬆的用其來搭建、測試和部署機器學習應用。上面是一個TensorFlow的示意圖。
  • 詳解深度強化學習展現TensorFlow 2.0新特性(代碼)
    因此博主Roman Ring寫了一篇概述性的文章,通過實現深度強化學習算法來具體的展示了TensorFlow 2.0的特性。正所謂實踐出真知。TensorFlow 2.0的特性公布已經有一段時間了,但很多人對此應當還是一頭霧水。
  • MIT 深度學習基礎教程:七個基本框架TensorFlow代碼實戰
    具體包括前饋神經網絡、卷積神經網絡、循環神經網絡、編解碼模型、自編碼模型、生成對抗網絡和深度強化學習,七個常見系列,附詳細代碼實戰。以下是麻省理工學院課程6.S094的深度學習基礎課程連結:https://deeplearning.mit.edu/代碼連結:https://github.com/lexfridman/mit-deep-learning深度學習是表徵學習:從數據中自動形成有用的表徵。
  • TensorFlow 中文資源全集,學習路徑推薦
    /GitHub:https://github.com/tensorflow安裝教程中文安裝教程Mac安裝:http://www.cnblogs.com/tensorflownews/p/7298646.htmlubuntu 16.04 安裝 tensorflow-gpu:http://www.tensorflownews.com/2017/09/02/tensorflow-gpu-install-ubuntu
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    她在 Insight 工作的時候,在安卓系統上用 TensorFlow 部署了一個 WaveNet 模型。本文詳細介紹了部署和實現過程。對於個人和公司來說,存在許多狀況是更希望在本地設備上做深度學習推斷的:想像一下當你在旅行途中沒有可靠的網際網路連結時,或是要處理傳輸數據到雲服務的隱私問題和延遲問題時。
  • TensorFlow極速入門
    熱衷於深度學習技術的探索,對新事物有著強烈的好奇心。一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • 帶你入門機器學習與TensorFlow2.x
    在後續的文章中將深入講解用Tensorflow2.x訓練各種模型,以及利用模型完成相關的工作。從學習方法上來分,機器學習算法可以分為有監督學習(如分類問題)、無監督學習(如聚類問題)、半監督學習、集成學習、深度學習、強化學習等。傳統的機器學習算法在指紋識別、基於Haar的人臉檢測、基於HoG特徵的物體檢測等領域的應用基本達到了商業化的要求或者特定場景的商業化水平,但每前進一步都異常艱難,直到深度學習算法的出現。
  • tensorflow機器學習模型的跨平臺上線
    ,這個方法當然也適用於tensorflow生成的模型,但是由於tensorflow模型往往較大,使用無法優化的PMML文件大多數時候很笨拙,因此本文我們專門討論下tensorflow機器學習模型的跨平臺上線的方法。
  • tensorflow安裝教程
    tensorflow是谷歌開源的人工智慧庫,有最完善的生態支持。是進行人工智慧領域開發和科研的必備工具。本文在windows10下,藉助anaconda建立成功進入tf2.0環境conda activate tf2.0安裝tensorflow2.0 pip install tensorflow==2.0.0-beta1下載的東西挺多,多等一會,最後成功如下命令行運行python,執行import
  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    今年,TensorFlow 發布了面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js。在大會上午的 Keynote 中,谷歌大腦負責人 Jeff Dean、TensorFlow 總監 Rajat Monga 等人圍繞 TensorFlow 做了表現、流行度等方面的介紹。
  • TensorFlow安裝與卷積模型
    1:Tensorflow 安裝:首先目前已學習的方法中有兩種方法可用於安裝TensorFlow:一是pip,二是Anaconda。另外 TensorFlow還有cpu和Gpu兩個版本。使用pip安裝1)下載安裝Python 2)打開windows的命令行窗口,安裝CPU版本pip installtensorflow安裝GPU版本Pip install tensorflow-gpu之後驗證是否安裝了 TensorFlow 可以嘗試一下代碼>>> importtensorflow
  • 令人困惑的TensorFlow!
    掌握好這些概念之後,用 TensorFlow 進行深度學習就會變得直觀易懂。目標受眾本教程適用於那些在編程和機器學習方面有一定經驗,並想要學習 TensorFlow 的人。但我們用 Python 操作 TensorFlow 時,我們用 Pyhton 代碼做的第一件事就是構建計算圖。一旦完成,我們做的第二件事就是與它進行交互(啟動 TensorFlow 的「會話」)。但重要的是,要記住計算圖不在變量內部;而是處在全局命名空間中。
  • 可能是史上最全的Tensorflow學習資源匯總
    本篇文章將為大家總結Tensorflow純乾貨學習資源,非常適合新手學習,建議大家收藏。想要學習更多的Tensorflow知識,歡迎點擊上方藍字,關注我們的微信公眾號。 ,一步步帶你從入門到精通,是初學者學習Tensorflow的最佳教程。
  • TensorFlow 安裝詳解
    目的是讓機器(這裡指計算機)如何模擬或者實現人類的學習行為。就像我們讀小學,讀初中,讀高中... 讓機器學習的話可能需要 1 小時,因為機器效率很高。二、TensorFlow 介紹標語:TensorFlow 是一個用於人工智慧的開源神器什麼是 TensorFlow 呢?
  • TensorFlow圖像分類教程
    深度學習需要大量的訓練數據,因此,我們需要大量已分類的花朵圖像。值得慶幸的是,另外一個模型在圖像收集和分類這方面做得非常出色,所以我們使用這個帶有腳本的已分類數據集,它有現成且完全訓練過的圖像分類模型,重新訓練模型的最後幾層以達到我們想要的結果,這種技術稱為遷移學習。
  • 玩轉TensorFlow?你需要知道這30功能
    11)KerasKeras 如今直接集成在 TF 中,也就是 tf.keras。這意味著,如果不想使用低階的模型,那仍然可以用高階 API 的用戶友好性來實現圖形+模型的構建。2.0 版本將會有更多的功能!網址:https://www.tensorflow.org/guide/keras
  • TensorFlow應用實戰 | TensorFlow基礎知識
    dtypeTensorFlow.datatype listhttps://www.tensorflow.org/api_docs/python/tf/DType# -*- coding: UTF-8 -*-# 引入tensorflowimport tensorflow as tf# 設置了gpu加速提示信息太多了,設置日誌等級屏蔽一些import osos.environ['TF_CPP_MIN_LOG_LEVEL']='2'# 創建兩個常量 Tensor.第一個為