絡(luò)架構(gòu)與實(shí)戰(zhàn)配置指南)
機(jī)器學(xué)習(xí)深度學(xué)習(xí)【免費(fèi)下載鏈接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.項(xiàng)目地址https://gitcode.com/gh_mirrors/do/dopamine點(diǎn)擊查看免費(fèi)下載導(dǎo)讀dopamine.discrete_domains.legacy_networks是 Dopamine 強(qiáng)化學(xué)習(xí)框架中負(fù)責(zé)構(gòu)建離散動(dòng)作域discrete domains價(jià)值網(wǎng)絡(luò)的核心模塊涵蓋了 Atari 2600 上的 Nature DQN、RainbowC51與 Implicit QuantileIQN三大卷積網(wǎng)絡(luò)以及 Cartpole、Acrobot、LunarLander、MountainCar 等 Gym 經(jīng)典環(huán)境的 DQN / Rainbow / Fourier 基網(wǎng)絡(luò)。讀完本文你將掌握這些LegacyKeras 化之前的經(jīng)典架構(gòu)網(wǎng)絡(luò)的設(shè)計(jì)意圖、每個(gè)函數(shù)與類(lèi)的輸入輸出契約、在.gin配置文件中如何引用與參數(shù)化它們以及如何借助maybe_transform_variable_names完成新舊 checkpoint 的變量名映射。模塊定位Legacy 網(wǎng)絡(luò)在 Dopamine 中的角色legacy_networks位于 dopamine/discrete_domains/legacy_networks.py官方 API 文檔將其定義為L(zhǎng)egacy (pre-Keras) network architectures即Keras 化改造之前就存在的網(wǎng)絡(luò)架構(gòu)。雖然命名帶 Legacy但模塊中的網(wǎng)絡(luò)全部以tf.keras.Model/tf.keras.layers.Layer形式重新實(shí)現(xiàn)是 Dopamine TF 分支中 DQN、Rainbow、IQN 三類(lèi)智能體的默認(rèn)價(jià)值網(wǎng)絡(luò)同時(shí)也是 Gym 離散域示例配置的默認(rèn)網(wǎng)絡(luò)來(lái)源。從源碼結(jié)構(gòu)看模塊分為四大塊常量與類(lèi)型別名NATURE_DQN_OBSERVATION_SHAPE、NATURE_DQN_DTYPE、NATURE_DQN_STACK_SIZE三個(gè) Atari 觀測(cè)常量以及從 atari_lib.py 復(fù)用的三個(gè) namedtuple 類(lèi)型DQNNetworkType、RainbowNetworkType、ImplicitQuantileNetworkTypeKeras Atari 卷積網(wǎng)絡(luò)NatureDQNNetwork、RainbowNetwork、ImplicitQuantileNetwork三個(gè)tf.keras.Model類(lèi)通用 Gym 網(wǎng)絡(luò)BasicDiscreteDomainNetwork全連接子網(wǎng)、FourierBasis特征生成器以及 Cartpole / Acrobot / LunarLander / MountainCar 的 DQN、Fourier、Rainbow 網(wǎng)絡(luò)checkpoint 兼容工具maybe_transform_variable_names。三個(gè)輸出類(lèi)型契約namedtuple網(wǎng)絡(luò)統(tǒng)一通過(guò) namedtuple 返回輸出定義于 atari_lib.py類(lèi)型字段適用網(wǎng)絡(luò)DQNNetworkTypeq_valuesDQN 風(fēng)格網(wǎng)絡(luò)RainbowNetworkTypeq_values, logits, probabilitiesRainbow / C51 風(fēng)格網(wǎng)絡(luò)ImplicitQuantileNetworkTypequantile_values, quantilesIQN 網(wǎng)絡(luò)nature_dqn_network、rainbow_network、implicit_quantile_network三個(gè)頂層函數(shù)是這些 namedtuple 與網(wǎng)絡(luò)類(lèi)之間的薄包裝層它們接收network_type參數(shù)即上述某個(gè) namedtuple 類(lèi)型并在前向傳播后把結(jié)果按對(duì)應(yīng)字段重新構(gòu)造返回從而兼容舊式tf.slim風(fēng)格的函數(shù)式調(diào)用約定。Atari 卷積網(wǎng)絡(luò)三件套NatureDQNNetwork經(jīng)典 DQN 卷積網(wǎng)絡(luò)NatureDQNNetwork實(shí)現(xiàn)了 Nature 論文Mnih et al., 2015 的經(jīng)典結(jié)構(gòu)用于計(jì)算智能體的 Q 值構(gòu)造函數(shù)簽名與 atari_lib.py 中的常量一一對(duì)應(yīng)NatureDQNNetwork(num_actions, nameNone)num_actionsint動(dòng)作數(shù)決定輸出層維度namestr網(wǎng)絡(luò)參數(shù)的作用域名稱(chēng)。網(wǎng)絡(luò)結(jié)構(gòu)legacy_networks.py層類(lèi)型參數(shù)說(shuō)明conv1Conv2D32 個(gè) 8×8 卷積核stride 4paddingsame輸入為堆疊的 Atari 幀默認(rèn) 84×84×4conv2Conv2D64 個(gè) 4×4 卷積核stride 2paddingsameconv3Conv2D64 個(gè) 3×3 卷積核stride 1paddingsameflattenFlatten—展平特征圖dense1Dense512 單元ReLUdense2Densenum_actions單元無(wú)激活輸出 Q 值在call()中輸入先被tf.cast轉(zhuǎn)為tf.float32并除以 255 歸一化到[0, 1]最后返回DQNNetworkType(self.dense2(x))。源碼為卷積層統(tǒng)一命名為Conv、全連接層命名為fully_connected注釋明確說(shuō)明這是為了使變量名與 tf.slim 變量名/checkpoint 更接近方便復(fù)用舊 checkpoint。RainbowNetworkC51 分布價(jià)值網(wǎng)絡(luò)RainbowNetwork把 Q 值建模為價(jià)值分布而非標(biāo)量輸出層維度變?yōu)閚um_actions * num_atoms構(gòu)造函數(shù)為RainbowNetwork(num_actions, num_atoms, support, nameNone)num_atomsint價(jià)值分布的桶bucket數(shù)量supporttf.linspaceQ 值分布的支撐點(diǎn)向量。關(guān)鍵差異legacy_networks.py所有層使用VarianceScaling(scale1.0 / np.sqrt(3.0), modefan_in, distributionuniform)初始化器C51 論文推薦的小方差初始化前向計(jì)算中dense2輸出被 reshape 為[-1, num_actions, num_atoms]得到 logits經(jīng) softmax 得概率分布再與支撐點(diǎn)做加權(quán)求和還原 Q 值logits tf.reshape(x, [-1, self.num_actions, self.num_atoms]) probabilities tf.keras.activations.softmax(logits) q_values tf.reduce_sum(self.support * probabilities, axis2) return RainbowNetworkType(q_values, logits, probabilities)ImplicitQuantileNetwork隱分位數(shù)網(wǎng)絡(luò)ImplicitQuantileNetwork實(shí)現(xiàn) Dabney et al. (2018) 的 IQN核心思想是用隨機(jī)采樣的分位數(shù)驅(qū)動(dòng)網(wǎng)絡(luò)輸出構(gòu)造函數(shù)ImplicitQuantileNetwork(num_actions, quantile_embedding_dim, nameNone)quantile_embedding_dimint分位數(shù)輸入的嵌入維度。分位數(shù)流計(jì)算legacy_networks.py卷積三件套 flatten 提取狀態(tài)特征state_net_tiled沿 batch 維復(fù)制num_quantiles份從[0, 1)均勻采樣num_quantiles個(gè)分位數(shù)復(fù)制到quantile_embedding_dim維用cos(i * π * tau)i1..embedding_dim做分位數(shù)嵌入這是論文中的分位數(shù)特征映射通過(guò)延遲創(chuàng)建的dense_quantile層之所以延遲是因?yàn)槠漭敵鰡卧獢?shù)依賴(lài)輸入特征長(zhǎng)度只能在首次前向時(shí)確定與狀態(tài)特征做逐元素相乘再經(jīng)dense1、dense2輸出quantile_values。call()的簽名為call(self, state, num_quantiles)num_quantiles表示每次前向采樣的分位數(shù)個(gè)數(shù)。三個(gè) Atari 網(wǎng)絡(luò)對(duì)應(yīng)的函數(shù)式包裝分別為nature_dqn_network、rainbow_network、implicit_quantile_network見(jiàn) legacy_networks.py它們可被.gin直接引用為legacy_networks.xxx。通用 Gym 網(wǎng)絡(luò)家族除 Atari 外模塊為低維 Gym 環(huán)境提供了三套網(wǎng)絡(luò)族全部通過(guò)gin.configurable暴露給配置系統(tǒng)。BasicDiscreteDomainNetwork帶歸一化的全連接子網(wǎng)BasicDiscreteDomainNetworklegacy_networks.py是 Cartpole / Acrobot / MountainCar 等網(wǎng)絡(luò)的公共內(nèi)層模塊定義為tf.keras.layers.LayerBasicDiscreteDomainNetwork(min_vals, max_vals, num_actions, num_atomsNone, nameNone, activation_fntf.keras.activations.relu)min_vals/max_vals與state同形狀的最值向量用于輸入歸一化傳None則跳過(guò)歸一化如 LunarLandernum_atomsNone為 None 時(shí)構(gòu)造 DQN 風(fēng)格網(wǎng)絡(luò)輸出num_actions否則構(gòu)造 Rainbow 風(fēng)格網(wǎng)絡(luò)輸出num_actions * num_atoms。前向時(shí)輸入被歸一化到[-1, 1]x - self.min_vals x / self.max_vals - self.min_vals x 2.0 * x - 1.0 # Rescale in range [-1, 1]各環(huán)境的歸一化邊界定義在 gym_lib.py環(huán)境min_valsmax_valsCartpole[-2.4, -5.0, -π/12, -2π][2.4, 5.0, π/12, 2π]Acrobot[-1, -1, -1, -1, -5, -5][1, 1, 1, 1, 5, 5]MountainCar[-1.2, -0.07][0.6, 0.07]FourierDQNNetwork 與 FourierBasis線性函數(shù)逼近FourierBasis類(lèi)legacy_networks.py實(shí)現(xiàn)了 Konidaris, Osentoski Thomas (2011) 的Value Function Approximation in Reinforcement Learning using the Fourier Basis。它使用只含余弦項(xiàng)的基函數(shù)因此系數(shù)數(shù)量?jī)H為完整傅里葉逼近的一半通過(guò)itertools.product(range(order1), repeatnvars)生成所有階數(shù)組合的乘數(shù)向量并剔除第一個(gè)全零項(xiàng)對(duì)應(yīng)常數(shù)偏置。特征計(jì)算為def compute_features(self, features): scaled self.scale(features) # 縮放到 [0, 1] return tf.cos(np.pi * tf.matmul(scaled, self.multipliers, transpose_bTrue))FourierDQNNetwork組合 Fourier 特征與無(wú)偏置線性層Dense(num_actions, use_biasFalse)函數(shù)簽名FourierDQNNetwork(min_vals, max_vals, num_actions, fourier_basis_order3, nameNone)由于FourierBasis需要輸入特征維度才能構(gòu)造feature_generator在首次前向時(shí)才延遲創(chuàng)建與dense_quantile同理。Cartpole / Acrobot / LunarLander / MountainCar 具體網(wǎng)絡(luò)類(lèi)基類(lèi)/組成歸一化邊界輸出類(lèi)型CartpoleDQNNetworkBasicDiscreteDomainNetworkCARTPOLE_*DQNNetworkType(q_values)CartpoleFourierDQNNetwork繼承 FourierDQNNetworkCARTPOLE_*DQNNetworkType(q_values)CartpoleRainbowNetworkBasicDiscreteDomainNetwork(num_atoms)CARTPOLE_*RainbowNetworkTypeAcrobotDQNNetworkBasicDiscreteDomainNetworkACROBOT_*DQNNetworkTypeAcrobotFourierDQNNetwork繼承 FourierDQNNetworkACROBOT_*DQNNetworkTypeAcrobotRainbowNetworkBasicDiscreteDomainNetwork(num_atoms)ACROBOT_*RainbowNetworkTypeLunarLanderDQNNetworkBasicDiscreteDomainNetwork(None, None)無(wú)歸一化DQNNetworkTypeMountainCarDQNNetworkBasicDiscreteDomainNetworkMOUNTAINCAR_*DQNNetworkTypeRainbow 風(fēng)格網(wǎng)絡(luò)CartpoleRainbowNetwork、AcrobotRainbowNetwork在call()中重復(fù)同樣的reshape logits → softmax → 支撐點(diǎn)加權(quán)流程見(jiàn) legacy_networks.py與 Atari 版RainbowNetwork一致。對(duì)應(yīng)的函數(shù)式包裝cartpole_dqn_network、cartpole_fourier_dqn_network、cartpole_rainbow_network、acrobot_dqn_network、acrobot_fourier_dqn_network、acrobot_rainbow_network均聲明為gin.configurable函數(shù)簽名示例來(lái)自 fourier_dqn_network.mddopamine.discrete_domains.legacy_networks.fourier_dqn_network( min_vals, max_vals, num_actions, state, fourier_basis_order3 )返回DQN 風(fēng)格智能體的 Q 值或 Rainbow 風(fēng)格智能體的 logits。在 .gin 配置中引用與參數(shù)化網(wǎng)絡(luò)網(wǎng)絡(luò)類(lèi)/函數(shù)均為gin.configurable可直接在.gin文件中按需引用。以 dqn_cartpole.gin 為例import dopamine.discrete_domains.gym_lib import dopamine.discrete_domains.legacy_networks import dopamine.discrete_domains.run_experiment import dopamine.tf.agents.dqn.dqn_agent import dopamine.tf.replay_memory.circular_replay_buffer import gin.tf.external_configurables DQNAgent.observation_shape %gym_lib.CARTPOLE_OBSERVATION_SHAPE DQNAgent.observation_dtype %gym_lib.CARTPOLE_OBSERVATION_DTYPE DQNAgent.stack_size %gym_lib.CARTPOLE_STACK_SIZE DQNAgent.network legacy_networks.CartpoleDQNNetwork DQNAgent.gamma 0.99 DQNAgent.update_horizon 1 DQNAgent.min_replay_history 500 DQNAgent.update_period 4 DQNAgent.target_update_period 100 DQNAgent.epsilon_fn dqn_agent.identity_epsilon DQNAgent.tf_device /gpu:0 # use /cpu:* for non-GPU version DQNAgent.optimizer tf.train.AdamOptimizer() tf.train.AdamOptimizer.learning_rate 0.001 tf.train.AdamOptimizer.epsilon 0.0003125 create_gym_environment.environment_name CartPole create_gym_environment.version v0 create_agent.agent_name dqn Runner.create_environment_fn gym_lib.create_gym_environment Runner.num_iterations 500 Runner.training_steps 1000 Runner.evaluation_steps 1000 Runner.max_steps_per_episode 200 # Default max episode length. WrappedReplayBuffer.replay_capacity 50000 WrappedReplayBuffer.batch_size 128其中DQNAgent.network legacy_networks.CartpoleDQNNetwork即把價(jià)值網(wǎng)絡(luò)替換為本章介紹的 Cartpole 專(zhuān)用 DQN 網(wǎng)絡(luò)。倉(cāng)庫(kù)內(nèi)同類(lèi)配置還包括dqn_acrobot.gin →legacy_networks.AcrobotDQNNetworkdqn_lunarlander.gin →legacy_networks.LunarLanderDQNNetworkdqn_mountaincar.gin →legacy_networks.MountainCarDQNNetworkc51_cartpole.gin →legacy_networks.CartpoleRainbowNetwork并配套R(shí)ainbowAgent.num_atoms 201、RainbowAgent.vmax 100.、replay_scheme uniformc51_acrobot.gin、rainbow_cartpole.gin、rainbow_acrobot.gin → 對(duì)應(yīng)的 Cartpole/Acrobot Rainbow 網(wǎng)絡(luò)而 Atari 場(chǎng)景下dqn_agent.py 與 rainbow_agent.py 在構(gòu)造函數(shù)中默認(rèn)指定networklegacy_networks.NatureDQNNetwork/legacy_networks.RainbowNetwork同時(shí)復(fù)用legacy_networks.NATURE_DQN_OBSERVATION_SHAPE、NATURE_DQN_DTYPE、NATURE_DQN_STACK_SIZE三個(gè)常量implicit_quantile_agent.py 則默認(rèn)使用ImplicitQuantileNetwork。運(yùn)行入口為 dopamine/discrete_domains/train.py可通過(guò)python -m dopamine.discrete_domains.train --base_dir... --gin_files...方式加載上述 gin 配置啟動(dòng)訓(xùn)練。自定義網(wǎng)絡(luò)與 checkpoint 兼容自定義網(wǎng)絡(luò)的實(shí)現(xiàn)約定從 dqn_agent.py 的network參數(shù)文檔可見(jiàn)自定義網(wǎng)絡(luò)的契約tf.Keras.Model期望兩個(gè)參數(shù)num_actions與network_type對(duì)其實(shí)例的調(diào)用將返回一個(gè)網(wǎng)絡(luò)實(shí)例并以legacy_networks.NatureDQNNetwork為示例。即自定義網(wǎng)絡(luò)需要接受與官方網(wǎng)絡(luò)相同的構(gòu)造參數(shù)并在call()中返回對(duì)應(yīng)的 namedtuple 輸出類(lèi)型同時(shí)用gin.configurable裝飾以便配置系統(tǒng)實(shí)例化。maybe_transform_variable_names新舊 checkpoint 變量名映射Keras 化升級(jí)改變了變量命名例如偏置項(xiàng)由bias變?yōu)閎iases、卷積核由kernel變?yōu)閣eightsmaybe_transform_variable_nameslegacy_networks.py用于彌合這一差異gin.configurable(denylist[variables]) def maybe_transform_variable_names(variables, legacy_checkpoint_loadFalse):variables待轉(zhuǎn)換的全部變量列表legacy_checkpoint_loadTrue時(shí)把變量名中的bias → biases、kernel → weights映射為new_names, var字典供tf.compat.v1.train.Saver加載tf.slim時(shí)代保存的舊 checkpoint 到 Keras 模型否則返回None即不做任何映射。該函數(shù)在 dqn_agent.py 中通過(guò)legacy_networks.maybe_transform_variable_names(...)被實(shí)際調(diào)用。結(jié)合模塊中為層統(tǒng)一命名Conv/fully_connected的做法可以推斷出整套兼容鏈路的設(shè)計(jì)意圖讓 Keras 新模型的變量名盡量貼近 tf.slim 舊命名使舊權(quán)重能夠無(wú)損遷移。小結(jié)與選型建議Atari 圖像輸入默認(rèn)選擇NatureDQNNetworkDQN、RainbowNetwork分布價(jià)值或ImplicitQuantileNetwork分位數(shù)價(jià)值三者共享 32/64/64 卷積骨架僅在輸出頭與初始化策略上分道揚(yáng)鑣低維 Gym 觀測(cè)DQN 優(yōu)先用CartpoleDQNNetwork等全連接網(wǎng)絡(luò)若觀測(cè)維度較低、希望用線性函數(shù)逼近快速驗(yàn)證可選用CartpoleFourierDQNNetwork/AcrobotFourierDQNNetworkfourier_basis_order默認(rèn) 3分布價(jià)值算法則對(duì)應(yīng)CartpoleRainbowNetwork/AcrobotRainbowNetwork遷移舊權(quán)重啟用legacy_checkpoint_loadTrue即可自動(dòng)完成bias/biases、kernel/weights的變量名映射。如需深入每個(gè)函數(shù)與類(lèi)的完整簽名和參數(shù)文檔可繼續(xù)查閱 legacy_networks 模塊 API 文檔 及其子頁(yè)面如 nature_dqn_network、rainbow_network、implicit_quantile_network、cartpole_dqn_network 等并對(duì)照源碼 legacy_networks.py 與 atari_lib.py 閱讀實(shí)現(xiàn)細(xì)節(jié)。贊分享機(jī)器學(xué)習(xí)深度學(xué)習(xí)【免費(fèi)下載鏈接】dopamineDopamine is a research framework for fast prototyping of reinforcement learning algorithms.項(xiàng)目地址https://gitcode.com/gh_mirrors/do/dopamine點(diǎn)擊查看免費(fèi)下載相關(guān)推薦LunaTranslator 使用指南視覺(jué)小說(shuō)翻譯從取詞到排障LunaTranslator 使用指南視覺(jué)小說(shuō)翻譯從取詞到排障 玩日文GalGame卡在每句對(duì)話(huà)上LunaTranslator值得一試。這是一款開(kāi)源的視覺(jué)小機(jī)器學(xué)習(xí)深度學(xué)習(xí)AptosCore 網(wǎng)絡(luò)模塊深度解析AptosNet 架構(gòu)、組件與配置指南AptosCore 網(wǎng)絡(luò)模塊深度解析AptosNet 架構(gòu)、組件與配置指南 導(dǎo)讀 AptosNet 是 Aptos 生態(tài)中任意兩個(gè)節(jié)點(diǎn)之間通信的主協(xié)議專(zhuān)門(mén)服區(qū)塊鏈Web3如何用 fuels-rs 的 WalletsConfig 3 步搞定多資產(chǎn)測(cè)試錢(qián)包配置如何用 fuels rs 的 WalletsConfig 3 步搞定多資產(chǎn)測(cè)試錢(qián)包配置 寫(xiě)合約測(cè)試時(shí)你大概率會(huì)遇到這樣的場(chǎng)景一個(gè)用例需要 3 個(gè)錢(qián)包其中每機(jī)器學(xué)習(xí)深度學(xué)習(xí)上一篇Res2Net101_26w_4s.in1k特征提取完全指南解鎖多尺度表示能力下一篇量化技術(shù)深度剖析FineTuningLLMs中的8位與4位量化原理創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考