国产精品毛片久久久久久久 I 欧美操穴 I 欧美成人一级 I 黄网址在线观看 I 美女激情网站 I 久久网av I 超污网站在线观看 I 曰本无码人妻丰满熟妇啪啪 I 国产欧美大片 I 天天草夜夜操 I 干美女少妇 I 日韩美女激情 I 亚洲女同在线 I 老司机激情影院 I 精品国产亚洲一区二区麻豆 I 亚洲天堂五码 I 亚洲产国偷v产偷v自拍涩爱 I 欧洲午夜精品 I 乱人伦精品 I 国产精品欧美一级免费 I 91精品论坛 I 日本视频专区 I 久久理论电影网 I 精品国产亚洲第一区二区三区 I 久久av在线看 I 亚洲综合精品四区 I 久久久国产乱子伦精品 I 午夜人妻久久久久久久久

首頁 保險 > 正文

【環球時快訊】Q-learning解決懸崖問題

Q-learning是一個經典的強化學習算法,是一種基于價值(Value-based)的算法,通過維護和更新一個價值表格(Q表格)進行學習和預測。


【資料圖】

Q-learning是一種off-policy的策略,也就是說,它的行動策略和Q表格的更新策略是不一樣的。

行動時,Q-learning會采用epsilon-greedy的方式嘗試多種可能動作。

更新時,Q-learning會采用潛在收益最大化的動作進行價值更新。

總體來說,Q-learning是一個非常勇敢的策略,在有限動作和有限狀態情況下,它能夠收斂找到全局最優策略。

公眾號算法美食屋后臺回復關鍵詞:torchkeras,獲取本文notebook源代碼~

〇,強化學習基本概念 1, 環境(env)和智能體(agent)

在第n步,agent處于狀態 state(n)中,然后采取行動action(n),env給agent獎勵reward(n+1),同時agent的狀態變成 state(n+1)

---reward(n+1),state(n+1)-->envagent(state)<------action(n)----------

以我們玩一個俄羅斯方塊游戲為例。

環境env就是這個游戲背后的程序,智能體agent就是玩家。

假設現在是第n步,state(n)就是目前游戲所處的狀態,可以表示為一個矩陣,也就是游戲界面每個格子的明暗狀態。

我們可以采取某個 action(n) (向左,向右,向下,變形)。

然后我們會獲得一個獎勵reward(n),即得分。獎勵很多時候是稀疏的,即大部分時候為0,操作很多步才有一個不為0的獎勵。

同時游戲界面發生變化,狀態由 state(n) 變成 state(n+1)。

2, 馬爾科夫交互鏈

env和agent交互作用若干個步驟,到達結束狀態,通常叫做一個episode(片段)。

在俄羅斯方塊游戲的例子中,一局完整的游戲構成一個馬爾科夫交互鏈,叫做一個episode.

之所以叫做馬爾科夫交互鏈,是因為這個過程滿足馬爾科夫假設。

第n+1步驟的狀態state(n+1)和獎勵reward(n+1)只和第n步驟的狀態stage(n)和action(n)有關,而與之前的狀態和action無關。

馬爾科夫假設要求我們在設計state和action的時候,要考慮到所有相關變量。

并且,只要設計出合理的state變量和action變量,任何游戲都可以表示為這樣一個馬爾科夫交互鏈。

3, 獎勵折現公式

為了衡量每個步驟中action的價值,需要將該步驟之后的獎勵,以及未來的全部獎勵按照類似金融學中的折現算法求和。

在俄羅斯方塊游戲的例子中,一個操作action的價值,不僅跟這個操作完成后立刻獲得的獎勵reward有關,還要考慮到這個操作的長遠影響。

但這種長遠影響不太好精確地計算,因為后面獲得的獎勵,不僅跟當前的action有關,還跟后面的操作有關,所以跟當前操作的相關性是小于1的。

作為簡化起見,我們通過類似金融學中現金流折現的方式將未來的獎勵全部折算到當前步驟。折算因子gamma一般取值在0.9~1.0之間。

4, epsilon-greedy 學習策略

訓練時使用epsilon探索,預測時使用greedy貪心。

訓練階段: 以一定epsilon概率選擇隨機動作,以(1-epsilon)選擇最大化Q(s,a)的動作。

預測階段: 貪心策略,直接選擇最大化Q(s,a)的動作。

為了讓模型去探索更優策略,我們在訓練過程中會允許模型以一定的概率去實施隨機動作,以便評估不同動作的價值。

這樣也能夠讓模型對狀態動作空間進行更分散的采樣,學到的結果也會更加魯棒。

但在測試過程,為了獲得更好的結果,我們應該采用預期價值最大的動作。

5, Q表格軟更新

獎勵折現公式對每個action的價值的計算方法是一種粗糙的估計算法。

不同的step或者不同的episode中,按照獎勵折現公式對相同state下相同action價值的評估的結果可能差異很大。

為了保持學習過程的穩定性,讓Q值不會過分受到某次評估的影響,我們采用一種軟更新的方式。

也就是我們在更新Q表格的時候,只讓Q值朝著折現公式計算結果靠近一點點(縮小差值),而不是直接調整為折現公式的計算結果。

這樣,我們最終的Q表格中action的價值結果相當是許多次不同episode不同step下獎勵折現公式計算結果的某種平均值。

一,準備環境

gym是一個常用的強化學習測試環境,可以用make創建環境。

env具有reset,step,render幾個方法。

懸崖問題

環境設計如下:

環境一共有48個state狀態。

其中T為目標位置,到達目標位置游戲結束。

10個用C表示的為懸崖,掉入懸崖會拉回到起始位置。

智能體設計如下:

智能體有4種動作action,0表示往上,1往右,2往下,3往左。

reward設計如下:

智能體每走一步都會有-1的reward。

這個問題希望訓練一個能夠盡可能快的從起始位置到達目標位置T的智能體Agent。

importgymimportnumpyasnpimporttimeimportmatplotlibimportmatplotlib.pyplotaspltfromIPythonimportdisplayprint("gym.__version__=",gym.__version__)%matplotlibinline#可視化函數:defshow_state(env,step,info=""):plt.figure(num=0,dpi=180)plt.clf()plt.imshow(env.render())plt.title("Step:%d%s"%(step,info))plt.axis("off")display.clear_output(wait=True)display.display(plt.gcf())env=gym.make("CliffWalking-v0",render_mode="rgb_array")#0up,1right,2down,3leftenv.reset()forstepinrange(20):time.sleep(0.2)action=np.random.randint(0,4)obs,reward,done,truncated,info=env.step(action)#env.render()show_state(env,step=step)#print("step{}:action{},obs{},reward{},done{},truncated{},info{}".format(\#step,action,obs,reward,done,truncated,info))display.clear_output(wait=True)

我們先來看看沒有訓練模型,按照隨機的方式會怎么走。

二,定義Agent

importtorchfromtorchimportnnclassQAgent(nn.Module):def__init__(self,obs_n,act_n,learning_rate=0.01,gamma=0.9,e_greed=0.1):super().__init__()self.act_n=act_n#動作維度,有幾個動作可選self.lr=learning_rate#學習率self.gamma=gamma#reward的衰減率self.epsilon=e_greed#按一定概率隨機選動作self.Q=nn.Parameter(torch.zeros((obs_n,act_n)),requires_grad=False)#根據輸入觀察值,采樣輸出的動作值,帶探索defsample(self,obs):ifnp.random.uniform(0,1)<(1.0-self.epsilon):#根據table的Q值選動作action=self.predict(obs)else:action=np.random.choice(self.act_n)#有一定概率隨機探索選取一個動作returnaction#根據輸入觀察值,預測輸出的動作值defforward(self,obs):Q_list=self.Q[obs,:]maxQ=Q_list.max()action_list=torch.where(Q_list==maxQ)[0].tolist()#maxQ可能對應多個actionaction=np.random.choice(action_list)returnaction@torch.no_grad()defpredict(self,obs):self.eval()returnself.forward(obs)#學習方法,也就是更新Q-table的方法deflearn(self,obs,action,reward,next_obs,done):"""on-policyobs:交互前的obs,s_taction:本次交互選擇的action,a_treward:本次動作獲得的獎勵rnext_obs:本次交互后的obs,s_t+1next_action:根據當前Q表格,針對next_obs會選擇的動作,a_t+1done:episode是否結束"""predict_Q=self.Q[obs,action]ifdone:target_Q=reward#沒有下一個狀態了else:target_Q=reward+self.gamma*self.Q[next_obs,:].max()#Q-learningself.Q[obs,action]+=self.lr*(target_Q-predict_Q)#修正q

我們創建一下env和agent.

#使用gym創建懸崖環境env=gym.make("CliffWalking-v0")#0up,1right,2down,3left#創建一個agent實例,輸入超參數agent=QAgent(obs_n=env.observation_space.n,act_n=env.action_space.n,learning_rate=0.1,gamma=0.9,e_greed=0.1)

三,訓練Agent

下面我們將套用torchkeras的訓練模版來對Agent進行訓練。

由于強化學習問題與常用的監督學習范式有很大的差異,所以我們對torchkeras的訓練模版在

StepRunner, EpochRunner這2個層級上都有少量的修改。

classDataLoader:def__init__(self,env,agent,stage="train"):self.env=envself.agent=agentself.stage=stagedef__iter__(self):obs,info=self.env.reset()#重置環境,重新開一局(即開始新的一個episode)action=self.agent.sample(obs)#根據算法選擇一個動作whileTrue:next_obs,reward,done,_,_=self.env.step(action)#與環境進行一個交互ifself.stage=="train":next_action=self.agent.sample(next_obs)#訓練階段使用探索-利用策略else:next_action=self.agent.predict(next_obs)#驗證階段使用模型預測結果yieldobs,action,reward,next_obs,doneaction=next_actionobs=next_obsifdone:breakdl_train=DataLoader(env,agent,stage="train")dl_train.size=1000dl_val=DataLoader(env,agent,stage="val")dl_val.size=200

importsys,datetimefromtqdmimporttqdmimportnumpyasnpfromaccelerateimportAcceleratorfromtorchkerasimportKerasModelimportpandasaspdfromtorchkeras.utilsimportis_jupyter,colorfulfromcopyimportdeepcopyclassStepRunner:def__init__(self,net,loss_fn,accelerator=None,stage="train",metrics_dict=None,optimizer=None,lr_scheduler=None):self.net,self.loss_fn,self.metrics_dict,self.stage=net,loss_fn,metrics_dict,stageself.optimizer,self.lr_scheduler=optimizer,lr_schedulerself.accelerator=acceleratorifacceleratorisnotNoneelseAccelerator()def__call__(self,batch):obs,action,reward,next_obs,done=batch#backward()ifself.stage=="train":self.net.learn(obs,action,reward,next_obs,done)#losses(orplainmetric)step_losses={self.stage+"_reward":reward,self.stage+"_done":1.0ifdoneelse0.0}#metrics(statefulmetric)step_metrics={}ifself.stage=="train":step_metrics["lr"]=self.net.lrreturnstep_losses,step_metricsclassEpochRunner:def__init__(self,steprunner,quiet=False):self.steprunner=steprunnerself.stage=steprunner.stageself.accelerator=steprunner.acceleratorself.net=steprunner.netself.quiet=quietdef__call__(self,dataloader):dataloader.agent=self.netn=dataloader.sizeifhasattr(dataloader,"size")elselen(dataloader)loop=tqdm(enumerate(dataloader,start=1),total=n,file=sys.stdout,disable=notself.accelerator.is_local_main_processorself.quiet,ncols=100)epoch_losses={}forstep,batchinloop:step_losses,step_metrics=self.steprunner(batch)step_log=dict(step_losses,**step_metrics)fork,vinstep_losses.items():epoch_losses[k]=epoch_losses.get(k,0.0)+vifstep_log[self.stage+"_done"]<1andstep0.5orstep==n:epoch_metrics=step_metricsepoch_metrics.update({self.stage+"_"+name:metric_fn.compute().item()forname,metric_fninself.steprunner.metrics_dict.items()})epoch_losses={k:vfork,vinepoch_losses.items()}epoch_log=dict(epoch_losses,**epoch_metrics)epoch_log[self.stage+"_step"]=steploop.set_postfix(**epoch_log)forname,metric_fninself.steprunner.metrics_dict.items():metric_fn.reset()loop.close()else:breakreturnepoch_logKerasModel.StepRunner=StepRunnerKerasModel.EpochRunner=EpochRunner

keras_model=KerasModel(net=agent,loss_fn=None)dfhistory=keras_model.fit(train_data=dl_train,val_data=dl_val,epochs=600,ckpt_path="checkpoint.pt",patience=500,monitor="val_reward",mode="max",callbacks=None,quiet=True,plot=True,cpu=True)

dfhistory["val_reward"].max()

-13.0

keras_model.load_ckpt("checkpoint.pt")agent=keras_model.net

四,測試Agent

deftest_agent(env,agent):total_reward=0obs,info=env.reset()step=0whileTrue:action=agent.predict(obs)#greedynext_obs,reward,done,_,_=env.step(action)total_reward+=rewardobs=next_obstime.sleep(0.5)show_state(env,step)step+=1ifdone:breakplt.close()returntotal_reward

#全部訓練結束,查看算法效果env=gym.make("CliffWalking-v0",render_mode="rgb_array")#0up,1right,2down,3lefttest_reward=test_agent(env,agent)print("testreward=%.1f"%(test_reward))

test reward = -13.0

可以看到,訓練完成后,這個agent非常機智地在懸崖邊上走了一個最優路線,但卻沒有掉到懸崖里去。

五,保存Agent

torch.save(keras_model.net.state_dict(),"best_ckpt.pt")

公眾號算法美食屋后臺回復關鍵詞:torchkeras,獲取本文notebook源代碼以及更多有趣范例。

關鍵詞:

最近更新

關于本站 管理團隊 版權申明 網站地圖 聯系合作 招聘信息

Copyright © 2005-2023 創投網 - www.zhigu.net.cn All rights reserved
聯系我們:39 60 29 14 2@qq.com
皖ICP備2022009963號-3

主站蜘蛛池模板: av女优天堂在线观看 | 国产自在线 | 国产凹凸在线一区二区 | 337p亚洲日本中国大胆69 | 88久久精品无码一区二区毛片 | 久久综合给合久久狠狠狠97色69 | 久久激情影院 | 青青在线免费视频 | 亚洲精品国产品国语在线app | 三上悠亚福利一区二区 | 18禁成年无码免费网站 | 亚洲精品丝袜 | 四川丰满少妇被弄到高潮 | 无码人妻丰满熟妇啪啪区日韩久久 | 久9视频这里只有精品 | 国产日韩av在线播放 | 午夜国人精品av免费看 | 欧美一区二区在线视频观看 | 日韩欧美一区在线观看 | 亚洲精品国产精品国自产在线 | 日韩中文一区二区三区 | 久久久久久婷 | 蜜桃av久久久一区二区三区麻豆 | 伊人精品久久久大香线蕉 | 粉嫩av一区二区三区免费观看喜好 | 亚洲国产精品久久久天堂不卡海量 | 国产成视频在线观看 | 在线免费视频你懂的 | 午夜视频在线观看免费完整版 | 亚洲国产精品丝袜国产自在线 | 欧美xxxx欧美精品 | 夜夜操操 | 国产福利久久久 | 日本一区二区专线 | 色综合网天天综合色中文 | 日本私人vps一夜爽毛片 | 亚州性无码不卡免费视频 | 少妇人妻av毛片在线看 | 黄色天天影视 | 国产免费久久精品99久久 | 毛片手机在线观看 | 欧美日韩中文字幕视频 | 韩日a级片 | 中文字幕奈奈美抱公侵犯 | 色香蕉网站| 日韩欧美中文字幕综合 | 欧美人与动xxxxz0oz视频 | 亚洲成人黄色在线 | 干美女网站 | 亚洲第二色 | 人妻少妇久久久久久97人妻 | 国产一区二区精品久久岳 | 成在人线av无码免费看网站 | 亚洲人成在线影院 | 另类αv欧美另类aⅴ | 日韩中文字幕av在线 | 亚洲精品久久久www 国产精品亚洲专区无码电影 | 字幕网最新入口 | 加勒比久久综合网天天 | 主站蜘蛛池模板: 蛛词}| 黄色大片在线免费看 | 日韩有码专区 | 成人亚洲欧美 | 欧洲极品女同videoso | 国产精品18禁污污网站 | 日本老妇与子交尾hd | 综合精品欧美日韩国产在线 | 激情小说区 | 粉嫩av | 在线观看国产亚洲视频免费 | 色欲av蜜桃一区二区三 | av边做边流奶水无码免费 | 六月丁香婷婷在线 | 国产三级三级三级精品8ⅰ区 | 成在人线av无码免观看麻豆 | 五月网站 | 国产又粗又大又爽又免费 | 91麻豆精产国品一二三产区区 | 97性潮久久久久久久久动漫 | 久久无码专区国产精品s | 26uuu欧美日本 | 欧美综合日韩 | 欧美一区二区视频在线观看 | 国产妇女乱码一区二区三区 | 日韩区欧美国产区在线观看 | 超碰人人超 | 国91精品久久久久9999不卡 | 午夜有码 | 粉嫩粉嫩一区性色av片 | 亚洲国产另类精品 | 欧洲在线一区 | 四虎成人欧美精品在永久在线 | 婷婷成人亚洲综合国产xv88 | 国语对白99 | 国产91在线播放九色000 | 国产精品网站入口 | 人人插人人 | 狠狠色狠狠色狠狠五月 | 欧美精品中文字幕亚洲专区 | 成人免费视频无码专区 | 国产丝袜久久 | 欧美三级 欧美一级 | 成人特级毛片 | 五码亚洲 | 尹人香蕉99久久综合网站 | 久久毛片网 | 日韩视频一区二区三区在线观看 | 久久亚洲精品久久国产一区二区 | 中文字幕亚洲综合小综合在线 | www国产网站 | 国产私人影院 | 亚洲欧美日韩免费 | 秋霞鲁丝片av无码中文字幕 | 西西人体444www大胆无码视频 | 新超碰在线 | 91av视频在线免费观看 | 一本到在线观看视频 | 国内精品久久人妻无码妲己影院 | 日本无遮羞调教打屁股网站 | 主站蜘蛛池模板: 蛛词}| 国产做a爱片久久毛片a片 | 亚洲午夜精品福利 | 亚洲电影天堂av2017 | 一本加勒比hezyo无码专区 | 色综合视频一区二区三区 | 色猫av| 知否之乱淫h侵犯h文 | 91国内自产精华天堂 | 男女一进一出超猛烈的视频不遮挡在线观看 | 精品国产香蕉伊思人在线 | 无码免费的毛片基地 | 成人午夜精品一区二区三区 | a级毛片高清免费视频 | 亚洲第一av网 | 青青免费 | 高清同性男毛片 | 色网站女女| 日韩精品a片一区二区三区妖精 | 天天躁日日躁狠狠躁喷水软件 | 超碰97免费| 国产又黄又硬又湿又黄演员表 | 日本人妖一区二区 | 国产xxxx视频在线 | 亚洲一区二区三区波多野结衣 | 97操操操 | 97超碰伊人 | 亚洲国产超清无码专区 | 中文字幕人妻中文av不卡专区 | 蜜桃成人在线视频 | 日本免费无遮挡毛片的意义 | 中文文字幕中文字幕在线中文乱码 | 麻豆精品人妻一区二区三区蜜桃 | 国产亚洲精品久久久美女18黄 | 亚洲aⅴ在线无码播放毛片一线天 | 国产成人综合久久二区 | 日日干日日插 | 天堂中文а√在线官网 | 久久天天躁夜夜躁狠狠躁综合 | 亚洲妇女无套内射精 | 免费在线观看小视频 | 全部毛片永久免费看 | 亚洲熟妇中文字幕曰产无码 | 天堂视频免费 | 特级毛片在线观看 | 伊人夜夜躁av伊人久久 | 九色porny丨国产首页在线 | 老熟妇午夜毛片一区二区三区 | 波多野结衣在线精品视频 | 国产人成看黄久久久久久久久 | 色欲av亚洲一区无码少妇 | 嫩草一二三 | 另类激情综合网 | 亚洲无人区一卡2卡三卡 | 日本午夜免费啪视频在线 | 91视频久久久 | 神马久久久久久久久 | 强伦人妻一区二区三区视频18 | 中文字幕在线免费观看 | 亚洲人成网站在线在线观看 | 主站蜘蛛池模板: 蛛词}| 午夜视频网站在线观看 | 国产精品一区二区av不卡 | 久久色播| 婷婷狠狠操 | 天天影视综合 | 看片国产 | 欧美日韩亚洲综合在线 | 亚洲妓女综合网99 | 9.1成人看片 | 99精品视频一区二区三区 | 国产精品久久久久久久久久不蜜月 | 久久99精品国产麻豆宅宅 | 影音先锋每日av色资源站 | av小四郎在线观看 | 久久婷婷av | 精品少妇人妻av免费久久久 | 亚洲一区网 | 熟女毛多熟妇人妻在线视频 | 少妇高潮zzzzzzzy一avhd | www五月天 | 中文字幕第十五页 | 狼人伊人干 | 加勒比色综合久久久久久久久 | 国产成人一区二区无码不卡在线 | 欧美爱爱视频网站 | 99超碰在线观看 | 67pao国产成视频永久免费 | 午夜琪琪 | 丁香婷婷深情五月亚洲 | 日韩不卡中文字幕 | 99国产在线视频 | 国产天堂123在线观看 | 久久性网 | 91精品视频在线看 | 女人夜夜春高潮爽a∨片 | 中国妇女做爰视频 | va婷婷| 中文字幕在线视频第一页 | 少妇与公做了夜伦理69 | 国产中文区3幕区2021 | 91精品婷婷国产综合久久性色 | 伊人久久大香线蕉av色婷婷色 | 日本aⅴ写真网站免费 | 日韩无人区码卡二卡1卡2卡网站 | 图片区 小说区 区 亚洲五月 | 欧美国产激情二区三区 | 国产在线日韩 | 国产免费无遮挡吸乳视频下载 | 久久a热| 天堂av在线免费观看 | 欧美男男大粗吊1069 | 亚洲色欲网熟女少妇 | 人人妻人人澡人人爽 | 亚洲国产欧美在线人成大黄瓜 | 情侣做性视频在线播放 | 亚洲精品久久久中文字幕痴女 | www.91插插插 | 国产又粗又猛又爽又黄的视频先 | 亚洲aaaa级特黄毛片 | 主站蜘蛛池模板: 蛛词}| 免费看无码午夜福利片 | 中文字幕久久久久人妻 | 天天色影网 | 无码专区亚洲制服丝袜 | 国产精品黄页免费高清在线观看 | 九九视频精品在线观看 | 国产精品偷乱一区二区三区 | 亚洲啪| 午夜观看 | 风韵饥渴少妇在线观看 | 亚洲在线精品 | 在线美女av | 三个男人添一个女人p的视频 | 一本一道波多野结衣一区二区 | 91av片 | 国产av在线www污污污十八禁 | 伊人情人色综合网站 | 日韩中文字幕无砖 | 亚洲中文字幕在线精品2021 | 在线亚洲天堂 | 欧美成人aaa片一区国产精品 | 青青青青国产免费线在线观看 | 激情六月婷婷 | 又粗又大又黄又爽的免费视频 | 一边摸一边叫床一边爽av免费 | 四虎亚洲中文字幕无码永久 | 久久在线免费观看 | 国产精品色视频 | av现场 | 国产欧美日韩视频一区二区三区 | 草久久久久久 | 婷婷视频网站 | 国产av无码专区亚洲aⅴ | 无人在线观看的免费高清视频 | 少妇真人直播免费视频 | 日产国产欧美视频一区精品 | 亚洲特黄视频 | 免费看久久妇女高潮a | 亚洲色偷偷偷鲁精品 | 国产一区二区麻豆 | 久久精品久久久精品美女 | 亚洲国产日韩欧美在线 | 香蕉视频国产在线观看 | 热99re6久精品国产首页青柠 | 国产日产欧产精品精品浪潮 | 在线高清亚洲精品二区 | 日本欧美久久久免费播放网 | www.亚洲综合 | 亚洲无圣光 | 韩日a级片 | 精品国产国语对白久久免费 | 蜜桃av噜噜一区二区三区 | 国产视频自拍一区 | 欧美色图视频在线 | 亚洲三级免费观看 | 人妻夜夜爽天天爽一区二区 | 天天操夜夜操狠狠操 | 老司机午夜永久免费影院 | 四虎国产精|