保定市住房保障和城乡建设局网站,做网站后台需要写代码吗,最新一周新闻,汉化主题WordpressDQN作为DRL的开山之作#xff0c;DeepMind的DQN可以说是每一个入坑深度增强学习的同学必了解的第一个算法了吧。先前#xff0c;将RL和DL结合存在以下挑战#xff1a;1.deep learning算法需要大量的labeled data#xff0c;RL学到的reward 大都是稀疏、带噪声并且有延迟的(…DQN作为DRL的开山之作DeepMind的DQN可以说是每一个入坑深度增强学习的同学必了解的第一个算法了吧。先前将RL和DL结合存在以下挑战1.deep learning算法需要大量的labeled dataRL学到的reward 大都是稀疏、带噪声并且有延迟的(延迟是指action 和导致的reward之间)2.DL假设样本独立而RL前后state状态相关3.DL假设分布固定而RL在学习新的行为时数据分布会变化。DQN通过Q-Learning使用reward来构造标签、使用经验池等方法解决了这些问题。基于Q-learning 确定Loss FunctionQ-learning 更新公式为DQN 的 loss functionDQN使用随机梯度下降更新参数,为啥要把targetnet单独拎出来呢后续会说的。experience replayDQN 使用exprience replay解决instablity的问题把每个时间步agent与环境交互得到的转移样本存储在buffer中并被随机抽取。通过这种方式去除了数据之前的相关性并且缓和了数据分布的差异。TargetNet为了减少 和 目标 之间的相关性从而提高稳定性.2015年版的DQN加入了另一个网络——作为targetnet,它和 参数分离每次参数更新只更新 而的参数保持不变,并且周期性的将的参数复制给。此时loss function变为DQN算法伪代码double DQN在标准的Q-learning,和DQN中参数是这么更新的max操作使得估计的值函数比值函数的真实值大。如果是均匀的过估计找到的最优策略是不会变的不会对我们的目标造成影响。但实际上过估计的误差在不同的states和actions下是不同的这就会影响到我们找到最佳策略了。为了减少overestimationvan Hasselt et al.(2016)提出Double DQN(D-DQN)。利用DQN中的target network,将selection 和 evelation 解藕。使用Behavior Network选择出value最大的action用target network来估计它的值被更改为PS 论文中有对两个数学定理的详细证明感兴趣的同学可以看哦Prioritized Experience Replay在前面的方法中experience replay都是均匀随机采样但实际上不同样本的重要性显然是不同的。举个例子在强化学习初期replay memory中除了直接和目标相关的state-action pair 有正值大部分的value都为0大量的从zero-value state 到 另一个 zero-value state 的transitions更新导致很低效。Moore Atkeson, 1993 提出Prioritized Sweeping优先选择value改变了的state。具体算法如下prioritized sweeping但Prioritized sweeping 主要用在model based planning。Schaul et al. (2016)提出了Prioritized Experience Replay。Prioritizing TD-Error用 TD-error来规定优先学习的程度. 如果越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级越高。通过存储transition,及其每次回放更新得到的最新的TD-error将TD-error绝对值最大的transition从 memory 中进行回放。然后对该transition进行Q-learning的更新并根据TD-error,更新其优先级。而对于没有已知TD-error的新进入memory的transition将其放到最大优先级的行列以确保所有的经验至少被回放一次。Stochastic Prioritizationgreedy TD-error prioritization有以下问题1.那些TD-error很小的transition 将很长时间不被replay.2.对noise spikes 敏感。最终算法会集中在一个小子集里面。初始TD-error很高的transitions会经常被重放缺失多样性会导致over-fitting。作者提出了一种介于均匀随机采样和贪心优先之间的随机采样方法transition 的采样概率为其中是的优先级。这样即使是最低优先级的transition被采样到的概率也不为0.的设定有多种方法。第一种是成比例优先。.用来防止transitions的TD-error为0后不再被回放。具体实现中使用名为sum-tree的树型数据结构。它的每个叶子节点保存了 transition priorities父节点存储了孩子节点值之和这样头节点的值就是所有叶子结点的总和。采样一个大小为的minibatch时range被均分为个ranges每个ranges均匀采样这样各种的transitions都有被采样到。第二种是。是transition 根据它的在replay memory中的rank。这种方法对异常值更加不敏感因此更为鲁棒。作者最终使用了基于array的二叉堆实现的优先队列来存储transitions。Importance SamplingPrioritized replay 改变了分布因此引入了bias。为了消除bias作者使用了importance-sampling(IS) weightsQ-learning更新中的替换为并出于stability的原因用将权值正则化。Prioritized SweepingDueling Network Architectures for Deep Reinforcement LearningWang et al. (2016b)在网络结构上做了创新这种新的网络结构能够更容易的与当前和未来的RL算法相结合。作者引入了advantage function。关注的是state的值关注的是这个状态下动作的重要性。估计的是在这一状态下选择某一动作的价值。因为在某些状态下无论做什么动作对下一个状态都没有太大影响而这种方法可以单独学习状态本身的价值。dueling network architecture.png如上图作者将原来的DQN最后的一条全联接层一分为二一个用来估计value functions,一个用来估计advantage function。最后将两条流聚合成输出Q function。相应的Q function变为和是两个全联接层分支的参数 那为什么要减去呢。这是因为给定一个Q我们无法给出一个唯一的V和A(拥有两个变量的一个方程式当然有无穷多解)。为了解决这一问题作者强制让被选择的动作的advantage为0即。这样在实际应用中作者用均值代替了最大值操作即这样可以缩小 Q 值的范围去除多余的自由度且期望值为0,提高算法稳定性Distributional value function强化学习一般是对智体收到的随机return的期望进行建模但实际上这些随机return的分布——value distribution是非常有用的。It’s already evident from our empirical results that the distributional perspective leads to better, more stable reinforcement learningBellemare et al. (2017)提出贝尔曼方程的一个变体实际上可以预测所有可能的结果而不用对它们进行平均 —— distributional Bellman’s equation具体算法如下categorical algorithm网络结构上的改变传统的DQN最后一层全联接层输出的是维向量表示当前状态下每一个动作的价值的估计。Categorical DQN 输出的是维表示的是表示的是 N 个动作在 M 个价值分布的支撑上的概率。def _network_template(self, state):Builds a convolutional network that outputs Q-value distributions.Args:state: tf.Tensor, contains the agents current state.Returns:net: _network_type object containing the tensors output by the network.weights_initializer slim.variance_scaling_initializer(factor1.0 / np.sqrt(3.0), modeFAN_IN, uniformTrue)net tf.cast(state, tf.float32)net tf.div(net, 255.)net slim.conv2d(net, 32, [8, 8], stride4, weights_initializerweights_initializer)net slim.conv2d(net, 64, [4, 4], stride2, weights_initializerweights_initializer)net slim.conv2d(net, 64, [3, 3], stride1, weights_initializerweights_initializer)net slim.flatten(net)net slim.fully_connected(net, 512, weights_initializerweights_initializer)net slim.fully_connected(net,self.num_actions * self._num_atoms,activation_fnNone,weights_initializerweights_initializer)logits tf.reshape(net, [-1, self.num_actions, self._num_atoms])probabilities tf.contrib.layers.softmax(logits)q_values tf.reduce_sum(self._support * probabilities, axis2)return self._get_network_type()(q_values, logits, probabilities)orz其实这篇论文我看了代码才懂了算法流程但是并不能完全理解有大佬可以解释一哈吗??未完待续A3Casynchronous advantage actor-critic (A3C) [Mnih et al.(2016)] (https://arxiv.org/pdf/1602.01783.pdf)并不属于value-based算法这里提到它一是因为DeepMind 在投给AAAI 2018的论文Rainbow: Combining Improvements in Deep Reinforcement Learning中使用了A3C中的multi-step learning。论文中最为出彩的地方在于在多个环境副本上并行地异步执行多个agent不同的agent采用不同的策略经历不同的state有不同的transition,不但有助于探索加快速度而且使得时间上数据的相关性很小起到稳定学习过程的作用。因此不需要使用又费计算又费资源的experience replay这样就可以使用on-policy RL 方法。算法有一个global network,和若干个agent大概的步骤过程是1.agent 将global network的参数pull过来2.agent与环境互动n-step或遇到terminal state 提前终止3.agent计算loss得到梯度4.把梯度 push 给global network用梯度更新global network的参数然后reset自己回到第一步A3C, each actor-learner thread, based on Mnih et al. (2016)Noisy DQNFortunato et al. (2018)提出在参数中加入噪声代替-greedy增加模型的探索能力。Noisynet举个例子设神经网络的一个linear layer 为那么加入噪声后为是均值为0的噪声和都是可学习的参数。设 为有两种噪声产生方法a.Independent Gaussian noise为每一个权值和偏差都设定一个独立噪声。在这种情况下若输入x是q维、输出y是p维那么就需要p*qq个b. Factorised Gaussian noise:通过将分解大大减少了需要的噪声数量只需要qp个即可。和的计算公式为这里作者将设为NoisyNet 的loss function 为梯度为作者使用蒙特卡洛方法近似上面的梯度得到