当前位置: 首页 > news >正文

国外做网站wordpress搜索页制作

国外做网站,wordpress搜索页制作,西安学校网站建设,网络营销专业就业方向参考视频#xff1a;#x1f4fa;王树森教授深度强化学习 前言#xff1a; 最近在学习深度强化学习#xff0c;学的一知半解#x1f622;#x1f622;#x1f622;#xff0c;这是我的笔记#xff0c;欢迎和我一起学习交流~ 这篇博客目前还相对比较乱#xff0c;后面…参考视频王树森教授深度强化学习 前言 最近在学习深度强化学习学的一知半解这是我的笔记欢迎和我一起学习交流~ 这篇博客目前还相对比较乱后面有时间会整理一次~ 由于 CSDN 目前有单篇博客字数限制故分成两篇博客来展示 这是第二篇 第一篇在这里深度强化学习 ①DRL 文章目录 9. 高估问题9.1 Bootstrapping9.2 高估问题9.2.1 高估原因9.2.2 高估的解决方案9.2.3 Target Network1. 过程2. 更新 w − w^- w− 9.2.4 Double DQN 10. Dueling Network10.1 Optimal advantage function10.2 搭建 Dueling Network10.3 训练10.4 不唯一问题 11. Policy gradient with Baseline11.1 证明11.2 蒙特卡洛近似11.3 baseline 的选择 12. REINFORCE with Baseline12.1 推导12.2 网络搭建1. 策略网络2. 状态价值网络3. 参数共享4. 更新策略网络5. 更新价值网络6.总览 13. Advantage Actor-CriticA2C13.2 推导13.1 训练 14. 连续控制14.1 Deterministic Policy GradientDPG确定策略梯度1. TD 算法更新价值网络2. 用确定策略梯度更新策略网络3. 用 Target Networks 对价值网络的训练进行改进 14.2 随机策略和确定策略对比14.3 用随机策略做连续控制1. 构造策略网络2. 网络搭建3. 训练4. 计算策略梯度 15. Trust Region Policy Optimization(TRPO置信域策略优化)15.1 Trust Region置信域15.2 Trust region algorithms置信域算法15.3 推导目标函数15.4 TRPO1. Approximation2. Maximization 16. Multi-Agent Reinforcement Learning多智能体强化学习16.1 Settings常见设定16.2 Terminologies16.3 Convergence收敛问题16.4 agents 之间的通信方式1. 去中心化2. 中心化3. 中心化训练去中心化执行 9. 高估问题 9.1 Bootstrapping Bootstrapping自举。在强化学习中指的是用一个估算去更新同类的估算 在 TD 更新 DQN 的过程中TD target 本身部分基于 DQN 在 t1 时刻的预测而 TD target 又参与了梯度的计算此时为了更新 DQN 在 t 时刻做出的估计用到了 DQN 在 t1 时刻做出的预测即用一个估计值去更新它本身 9.2 高估问题 9.2.1 高估原因 用 TD 训练 DQN会导致 DQN 高估真实的动作价值。 TD target 的计算中最大化 max ⁡ a Q ( s t 1 , a ; w ) \max_{a}Q(s_{t1},a;w) maxa​Q(st1​,a;w) 会让得到的 TD target 大于真实的动作价值那么 DQN 也会高估 Bootstrapping若当前 DQN 已经出现高估下一轮 TD target 也会高估进一步推高了 DQN 的输出高估传播 TD target 用到了 DQN 在 t1 时刻的估计值用 TD target 来更新 DQN 在 t 时刻的估计即用 DQN 来更新 DQN 自己自举。若 t1 时刻 DQN 已经高估了动作价值然后对这个 DQN 进行了最大化进一步推高了价值估计计算 TD target 的时候用到了这个高估的值然后更新 DQN这样的话高估又被传播到了 DQN让 DQN 的高估变得更严重 一旦 DQN 被高估那么高估会不断被反馈到 DQN 自己让 DQN 的高估越来越严重 DQN 对价值的高估是非均匀的非均匀高估会让 DQN 的高估越来越严重最终选择出来的最优动作也不是最优的 9.2.2 高估的解决方案 避免 Bootstrapping不要用 DQN 自己算出来的 TD target 来更新 DQN而是用另一个神经网络来计算 TD tartgettarget network用 double DQN 来缓解最大化造成的高估 9.2.3 Target Network 两个神经网络结构相同参数不同用途不同 DQN Q ( s , a ; w − ) Q(s,a;w^-) Q(s,a;w−) 用来控制 agent并且收集经验transition Target Network Q ( s , a ; w − ) Q(s,a;w^-) Q(s,a;w−)用来计算 TD Target y t r t γ ⋅ max ⁡ a Q ( s t 1 , a ; w − ) y_tr_t\gamma \cdot \max_a Q(s_{t1},a;w^-) yt​rt​γ⋅maxa​Q(st1​,a;w−) 1. 过程 使用 transition ( s t , a t , r t , s t 1 ) (s_t,a_t,r_t,s_{t1}) (st​,at​,rt​,st1​) 更新 DQN 参数 w 计算 TD target y t r t γ ∗ max ⁡ a Q ( s t 1 , a ; w − ) y_tr_t\gamma*\max_a Q(s_{t1},a;w^-) yt​rt​γ∗maxa​Q(st1​,a;w−) 计算 TD error δ t Q ( s t , a t ; w ) − y t \delta_tQ(s_t,a_t;w)-y_t δt​Q(st​,at​;w)−yt​ 更新参数 w ← w − α ∗ δ t ∗ ∂ Q ( s t , a t ; w ) ∂ w w \leftarrow w-\alpha*\delta_t*\frac{\partial Q(s_t,a_t;w)}{\partial w} w←w−α∗δt​∗∂w∂Q(st​,at​;w)​ 2. 更新 w − w^- w− 方式1 w − ← w . w^- \leftarrow w. w−←w.方式2 w − ← τ ⋅ w ( 1 − τ ) ⋅ w − . w^- \leftarrow \tau \cdot w(1-\tau)\cdot w^-. w−←τ⋅w(1−τ)⋅w−. Target Network 可以减少 DQN 高估的程度让 DQN 表现更好但无法避免高估因为还有最大化操作仍然会让 TD target 大于真实价值此外Target Network 会用到 DQN 的参数无法独立于 DQN无法完全避免 Bootstrapping 9.2.4 Double DQN 选择最优动作时使用 DQN计算 TD Target 时使用 Target Network可以大幅提高性能缓解高估问题。 可以一定程度缓解高估问题的原因 计算最优动作使用的是 DQN a ⋆ a r g m a x a Q ( s t 1 , a ; w ) a^\starargmax_aQ(s_{t1},a;w) a⋆argmaxa​Q(st1​,a;w) 计算 TD target 使用的是 target network y t r t γ ∗ Q ( s t 1 , a ⋆ ; w − ) y_tr_t\gamma*Q(s_{t1},a^\star;w^-) yt​rt​γ∗Q(st1​,a⋆;w−) 从该不等式便能看出原因 Q ( s t 1 , a ⋆ ; w − ) ≤ max ⁡ a Q ( s t 1 , a ; w − ) . Q(s_{t1},a^\star;w^-)\le \max_aQ(s_{t1},a;w^-). Q(st1​,a⋆;w−)≤maxa​Q(st1​,a;w−). Double DQN 做出的估计更小缓解了高估问题 10. Dueling Network 对神经网络结构的改进 10.1 Optimal advantage function A ⋆ ( s , a ) Q ⋆ ( s , a ) − V ⋆ ( s ) . A^\star(s,a)Q^\star(s,a)-V^\star(s). A⋆(s,a)Q⋆(s,a)−V⋆(s). 动作 a 相对于 baseline V ⋆ V^\star V⋆ 的优势 理论性质推导 定理1 V ⋆ ( s ) max ⁡ a Q ⋆ ( s , a ) . V^\star(s)\max_aQ^\star(s,a). V⋆(s)amax​Q⋆(s,a). 给最优优势函数两边同时关于 a 求最大值即 max ⁡ a A ⋆ ( s , a ) max ⁡ a Q ⋆ ( s , a ) − V ⋆ ( s ) 0. \begin{aligned} \max_aA^\star(s,a) \max_aQ^\star(s,a)-V^\star(s)\\ 0. \end{aligned} amax​A⋆(s,a)​amax​Q⋆(s,a)−V⋆(s)0.​ 然后对优势函数的定义公式进行变换得到定理2 Q ⋆ ( s , a ) V ⋆ ( s ) A ⋆ ( s , a ) − max ⁡ a A ⋆ ( s , a ) . Q^\star(s,a)V^\star(s)A^\star(s,a)-\max_aA^\star(s,a). Q⋆(s,a)V⋆(s)A⋆(s,a)−amax​A⋆(s,a). 10.2 搭建 Dueling Network 用神经网络 A ( s , a ; w A ) A(s,a;w^A) A(s,a;wA) 来近似优势函数 A ⋆ ( s , a ) A^\star(s,a) A⋆(s,a)输出一个向量 网络结构 #mermaid-svg-NO2Hkj0bGRzNt291 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 .error-icon{fill:#552222;}#mermaid-svg-NO2Hkj0bGRzNt291 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NO2Hkj0bGRzNt291 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NO2Hkj0bGRzNt291 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NO2Hkj0bGRzNt291 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NO2Hkj0bGRzNt291 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NO2Hkj0bGRzNt291 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NO2Hkj0bGRzNt291 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NO2Hkj0bGRzNt291 .marker.cross{stroke:#333333;}#mermaid-svg-NO2Hkj0bGRzNt291 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NO2Hkj0bGRzNt291 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 .cluster-label text{fill:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 .cluster-label span{color:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 .label text,#mermaid-svg-NO2Hkj0bGRzNt291 span{fill:#333;color:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 .node rect,#mermaid-svg-NO2Hkj0bGRzNt291 .node circle,#mermaid-svg-NO2Hkj0bGRzNt291 .node ellipse,#mermaid-svg-NO2Hkj0bGRzNt291 .node polygon,#mermaid-svg-NO2Hkj0bGRzNt291 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NO2Hkj0bGRzNt291 .node .label{text-align:center;}#mermaid-svg-NO2Hkj0bGRzNt291 .node.clickable{cursor:pointer;}#mermaid-svg-NO2Hkj0bGRzNt291 .arrowheadPath{fill:#333333;}#mermaid-svg-NO2Hkj0bGRzNt291 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NO2Hkj0bGRzNt291 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NO2Hkj0bGRzNt291 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NO2Hkj0bGRzNt291 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NO2Hkj0bGRzNt291 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NO2Hkj0bGRzNt291 .cluster text{fill:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 .cluster span{color:#333;}#mermaid-svg-NO2Hkj0bGRzNt291 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NO2Hkj0bGRzNt291 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态s Conv 全连接层 对所有动作的打分,输出向量 用另一个神经网络 V ( s ; w V ) V(s;w^V) V(s;wV) 来近似最优状态价值函数 V ⋆ ( s ) V^\star(s) V⋆(s)输出对状态 s 的打分(输出一个实数) 这两个神经网络可以共享卷积层的参数 #mermaid-svg-OQTdJYSdViEPHaz5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 .error-icon{fill:#552222;}#mermaid-svg-OQTdJYSdViEPHaz5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OQTdJYSdViEPHaz5 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-OQTdJYSdViEPHaz5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OQTdJYSdViEPHaz5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OQTdJYSdViEPHaz5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OQTdJYSdViEPHaz5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OQTdJYSdViEPHaz5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OQTdJYSdViEPHaz5 .marker.cross{stroke:#333333;}#mermaid-svg-OQTdJYSdViEPHaz5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OQTdJYSdViEPHaz5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 .cluster-label text{fill:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 .cluster-label span{color:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 .label text,#mermaid-svg-OQTdJYSdViEPHaz5 span{fill:#333;color:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 .node rect,#mermaid-svg-OQTdJYSdViEPHaz5 .node circle,#mermaid-svg-OQTdJYSdViEPHaz5 .node ellipse,#mermaid-svg-OQTdJYSdViEPHaz5 .node polygon,#mermaid-svg-OQTdJYSdViEPHaz5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OQTdJYSdViEPHaz5 .node .label{text-align:center;}#mermaid-svg-OQTdJYSdViEPHaz5 .node.clickable{cursor:pointer;}#mermaid-svg-OQTdJYSdViEPHaz5 .arrowheadPath{fill:#333333;}#mermaid-svg-OQTdJYSdViEPHaz5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OQTdJYSdViEPHaz5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OQTdJYSdViEPHaz5 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-OQTdJYSdViEPHaz5 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-OQTdJYSdViEPHaz5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OQTdJYSdViEPHaz5 .cluster text{fill:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 .cluster span{color:#333;}#mermaid-svg-OQTdJYSdViEPHaz5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OQTdJYSdViEPHaz5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态s Conv 全连接层 对状态 s 的打分,输出实数 将定理2 中的 V ⋆ V^\star V⋆ 和 A ⋆ A^\star A⋆ 替换得 Q ( s , a ; w A , w V ) V ( s ; w V ) A ( s , a ; w A ) − max ⁡ a A ( s , a ; w A ) . Q(s,a;w^A,w^V)V(s;w^V)A(s,a;w^A)-\max_aA(s,a;w^A). Q(s,a;wA,wV)V(s;wV)A(s,a;wA)−amax​A(s,a;wA). 将上式 Q ( s , a ; w A , w V ) Q(s,a;w^A,w^V) Q(s,a;wA,wV) 称为 Dueling Network是 对最优动作价值函数的近似故可以用来控制 agent它的输入、输出和 DQN 完全一样功能也一样 #mermaid-svg-hgDGLlu5fOu7kI9h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h .error-icon{fill:#552222;}#mermaid-svg-hgDGLlu5fOu7kI9h .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hgDGLlu5fOu7kI9h .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hgDGLlu5fOu7kI9h .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hgDGLlu5fOu7kI9h .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hgDGLlu5fOu7kI9h .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hgDGLlu5fOu7kI9h .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hgDGLlu5fOu7kI9h .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hgDGLlu5fOu7kI9h .marker.cross{stroke:#333333;}#mermaid-svg-hgDGLlu5fOu7kI9h svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hgDGLlu5fOu7kI9h .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h .cluster-label text{fill:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h .cluster-label span{color:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h .label text,#mermaid-svg-hgDGLlu5fOu7kI9h span{fill:#333;color:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h .node rect,#mermaid-svg-hgDGLlu5fOu7kI9h .node circle,#mermaid-svg-hgDGLlu5fOu7kI9h .node ellipse,#mermaid-svg-hgDGLlu5fOu7kI9h .node polygon,#mermaid-svg-hgDGLlu5fOu7kI9h .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hgDGLlu5fOu7kI9h .node .label{text-align:center;}#mermaid-svg-hgDGLlu5fOu7kI9h .node.clickable{cursor:pointer;}#mermaid-svg-hgDGLlu5fOu7kI9h .arrowheadPath{fill:#333333;}#mermaid-svg-hgDGLlu5fOu7kI9h .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hgDGLlu5fOu7kI9h .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hgDGLlu5fOu7kI9h .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hgDGLlu5fOu7kI9h .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hgDGLlu5fOu7kI9h .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hgDGLlu5fOu7kI9h .cluster text{fill:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h .cluster span{color:#333;}#mermaid-svg-hgDGLlu5fOu7kI9h div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hgDGLlu5fOu7kI9h :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态s 多个Conv 多个全连接层1 对所有动作的打分,输出向量 多个全连接层2 对状态s的打分,输出实数 将对状态的分数分别加到每一个动作的分数上,并减去最大动作分数 对每个动作的打分 10.3 训练 用 Q-Learning 来学习参数 w学习过程和 DQN 一样 优先经验回放、Double DQN、Multi-step TD target 等对 TD 的优化都可以用来训练 Dueling network 10.4 不唯一问题 定理2 中加上 − max ⁡ a A ⋆ ( s , a ) -\max_aA^\star(s,a) −maxa​A⋆(s,a) 的原因是为了解决 Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 分解的不唯一性。 在训练过程中若神经网络 V 和 A 上下波动波动幅度相同方向相反则 Dueling Network 的输出毫无差别但两个神经网络都在上下波动都不稳定。在加入最大化项之后即时两个网络上下波动幅度相同方向相反但最终的 Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 就发生了变化。 实际中将最大化换为均值 − m e a n a A ( s , a ; w A ) -mean_aA(s,a;w^A) −meana​A(s,a;wA) 效果更好更稳定 11. Policy gradient with Baseline 往策略学习中加入 baseline可以降低方差让收敛更快 baseline 是一个函数 b可以是任何东西但不能依赖于动作 A 11.1 证明 E A ∼ π [ b ⋅ ∂ l n π ( A ∣ s ; θ ) ∂ θ ] b ⋅ E A ∼ π [ ∂ l n π ( A ∣ s ; θ ) ∂ θ ] b ⋅ ∑ a π ( a ∣ s ; θ ) ⋅ [ 1 π ( a ∣ s ; θ ) ⋅ ∂ π ( a ∣ s ; θ ) ∂ θ ] b ⋅ ∑ a ∂ π ( a ∣ s ; θ ) ∂ θ b ⋅ ∂ ∑ a π ( a ∣ s ; θ ) ∂ θ b ⋅ ∂ 1 ∂ θ 0. \begin{aligned} E_{A\sim\pi}[b\cdot\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}] b\cdot E_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}]\\ b\cdot \sum_a\pi(a|s;\theta)\cdot[\frac{1}{\pi(a|s;\theta)}\cdot\frac{\partial \pi(a|s;\theta)}{\partial\theta}]\\ b\cdot \sum_a\frac{\partial \pi(a|s;\theta)}{\partial\theta}\\ b\cdot \frac{\partial \sum_a \pi(a|s;\theta)}{\partial\theta}\\ b\cdot\frac{\partial 1}{\partial \theta}\\ 0. \end{aligned} EA∼π​[b⋅∂θ∂lnπ(A∣s;θ)​]​b⋅EA∼π​[∂θ∂lnπ(A∣s;θ)​]b⋅a∑​π(a∣s;θ)⋅[π(a∣s;θ)1​⋅∂θ∂π(a∣s;θ)​]b⋅a∑​∂θ∂π(a∣s;θ)​b⋅∂θ∂∑a​π(a∣s;θ)​b⋅∂θ∂1​0.​ 策略梯度 ∂ V π ( s ; θ ) ∂ θ E A ∼ π [ ∂ l n π ( A ∣ s ; θ ) ∂ θ ∗ Q π ( s , A ) ] E A ∼ π [ ∂ l n π ( A ∣ s ; θ ) ∂ θ ∗ Q π ( s , A ) ] − E A ∼ π [ b ⋅ ∂ l n π ( A ∣ s ; θ ) ∂ θ ] E A ∼ π [ ∂ l n π ( A ∣ s ; θ ) ∂ θ ∗ ( Q π ( s , A ) − b ) ] \begin{aligned} \frac{\partial V_\pi(s;\theta)}{\partial \theta} E_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}*Q_\pi(s,A)]\\ E_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}*Q_\pi(s,A)]-E_{A\sim\pi}[b\cdot\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}]\\ E_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}*(Q_\pi(s,A)-b)] \end{aligned} ∂θ∂Vπ​(s;θ)​​EA∼π​[∂θ∂lnπ(A∣s;θ)​∗Qπ​(s,A)]EA∼π​[∂θ∂lnπ(A∣s;θ)​∗Qπ​(s,A)]−EA∼π​[b⋅∂θ∂lnπ(A∣s;θ)​]EA∼π​[∂θ∂lnπ(A∣s;θ)​∗(Qπ​(s,A)−b)]​ 可得若 baseline b 与动作 A t A_t At​ 无关则策略梯度可以写为带 baseline 的形式b 不会影响正确性不管 b 是什么都不会影响正确性得到的期望一样。 为什么要用 b 算法中真正用的策略梯度不是上面的公式而是对上式的蒙特卡洛近似b 不会影响期望但会影响蒙特卡洛近似若选择的 b 接近 Q π Q_\pi Qπ​那么 b 会让其蒙特卡洛近似的方差降低算法收敛会更快 11.2 蒙特卡洛近似 将 E A ∼ π [ ∂ l n π ( A ∣ s ; θ ) ∂ θ ∗ ( Q π ( s , A ) − b ) ] E_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}*(Q_\pi(s,A)-b)] EA∼π​[∂θ∂lnπ(A∣s;θ)​∗(Qπ​(s,A)−b)] 记为 g ( A t ) g(A_t) g(At​)期望是关于 A t A_t At​ 求的 A t A_t At​ 的概率密度函数是策略网络 π \pi π a t ∼ π ( ⋅ ∣ s t ; θ ) a_t\sim\pi(\cdot|s_t;\theta) at​∼π(⋅∣st​;θ)根据 π \pi π 做随机抽样得到动作 a t a_t at​计算 g ( a t ) g(a_t) g(at​)(随机梯度)就是期望的蒙特卡洛近似是策略梯度的无偏估计 用随机梯度上升更新 θ \theta θ. θ ← θ β ⋅ g ( a t ) \theta \leftarrow \theta \beta\cdot g(a_t) θ←θβ⋅g(at​)让状态价值变大 11.3 baseline 的选择 b 0 b0 b0 得到标准的策略梯度 b V π ( s t ) bV_\pi(s_t) bVπ​(st​) 因为 V π ( s t ) V_\pi(s_t) Vπ​(st​) 很接近 Q π ( s t , A t ) Q_\pi(s_t,A_t) Qπ​(st​,At​) 12. REINFORCE with Baseline 12.1 推导 g ( a t ) ∂ l n π ( a t ∣ s t ; θ ) ∂ θ ∗ ( Q π ( s t , a t ) − V π ( s t ) ) g(a_t)\frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta}*(Q_\pi(s_t,a_t)-V_\pi(s_t)) g(at​)∂θ∂lnπ(at​∣st​;θ)​∗(Qπ​(st​,at​)−Vπ​(st​)) 公式中 Q π Q_\pi Qπ​ 和 V π V_\pi Vπ​ 都不知道 Q π ( s t , a t ) E [ U t ∣ s t , a t ] Q_\pi(s_t,a_t)E[U_t|s_t,a_t] Qπ​(st​,at​)E[Ut​∣st​,at​]用观测到的 u t u_t ut​ 近似 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ​(st​,at​)(REINFORCE 算法) 从 t 时刻开始一直到游戏结束观测到的轨迹 s t , a t , r t , . . . , s n , a n , r n s_t,a_t,r_t,...,s_n,a_n,r_n st​,at​,rt​,...,sn​,an​,rn​从 t 时刻开始所有的奖励加权求和得到回报 u t ∑ i t n γ i − t ⋅ r i u_t\sum_{it}^{n}\gamma^{i-t}\cdot r_i ut​∑itn​γi−t⋅ri​即为动作价值 Q π Q_\pi Qπ​ 的无偏估计 V π V_\pi Vπ​ 可以用神经网络 v ( s ; w ) v(s;w) v(s;w) 近似 则近似的策略梯度为 ∂ V π ( s t ) ∂ θ ≈ g ( a t ) ≈ ∂ l n π ( a t ∣ s t ; θ ) ∂ θ ⋅ ( u t − v ( s t ; w ) ) ] . \begin{aligned} \frac{\partial V_\pi(s_t)}{\partial \theta} \approx g(a_t)\\ \approx \frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta} \cdot(u_t-v(s_t;w))]. \end{aligned} ∂θ∂Vπ​(st​)​​≈g(at​)≈∂θ∂lnπ(at​∣st​;θ)​⋅(ut​−v(st​;w))].​ 共三次近似 用蒙特卡洛近似期望将策略梯度近似为随机梯度 g ( a t ) g(a_t) g(at​)将动作价值 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ​(st​,at​) 用回报 u t u_t ut​ 近似将状态价值函数 V π V_\pi Vπ​ 用神经网络 v ( s ; w ) v(s;w) v(s;w) 近似 策略网络用来控制 agent价值网络起辅助作用作为 baseline帮助训练策略网络 12.2 网络搭建 1. 策略网络 #mermaid-svg-oTFGQMpFalfqenwJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oTFGQMpFalfqenwJ .error-icon{fill:#552222;}#mermaid-svg-oTFGQMpFalfqenwJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oTFGQMpFalfqenwJ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-oTFGQMpFalfqenwJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oTFGQMpFalfqenwJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oTFGQMpFalfqenwJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oTFGQMpFalfqenwJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oTFGQMpFalfqenwJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oTFGQMpFalfqenwJ .marker.cross{stroke:#333333;}#mermaid-svg-oTFGQMpFalfqenwJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oTFGQMpFalfqenwJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oTFGQMpFalfqenwJ .cluster-label text{fill:#333;}#mermaid-svg-oTFGQMpFalfqenwJ .cluster-label span{color:#333;}#mermaid-svg-oTFGQMpFalfqenwJ .label text,#mermaid-svg-oTFGQMpFalfqenwJ span{fill:#333;color:#333;}#mermaid-svg-oTFGQMpFalfqenwJ .node rect,#mermaid-svg-oTFGQMpFalfqenwJ .node circle,#mermaid-svg-oTFGQMpFalfqenwJ .node ellipse,#mermaid-svg-oTFGQMpFalfqenwJ .node polygon,#mermaid-svg-oTFGQMpFalfqenwJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oTFGQMpFalfqenwJ .node .label{text-align:center;}#mermaid-svg-oTFGQMpFalfqenwJ .node.clickable{cursor:pointer;}#mermaid-svg-oTFGQMpFalfqenwJ .arrowheadPath{fill:#333333;}#mermaid-svg-oTFGQMpFalfqenwJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oTFGQMpFalfqenwJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oTFGQMpFalfqenwJ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-oTFGQMpFalfqenwJ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-oTFGQMpFalfqenwJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oTFGQMpFalfqenwJ .cluster text{fill:#333;}#mermaid-svg-oTFGQMpFalfqenwJ .cluster span{color:#333;}#mermaid-svg-oTFGQMpFalfqenwJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oTFGQMpFalfqenwJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态 s Conv Dense Softmax 输出每个动作的概率 2. 状态价值网络 #mermaid-svg-7kxoalAHWlSilVRy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7kxoalAHWlSilVRy .error-icon{fill:#552222;}#mermaid-svg-7kxoalAHWlSilVRy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7kxoalAHWlSilVRy .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-7kxoalAHWlSilVRy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7kxoalAHWlSilVRy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7kxoalAHWlSilVRy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7kxoalAHWlSilVRy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7kxoalAHWlSilVRy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7kxoalAHWlSilVRy .marker.cross{stroke:#333333;}#mermaid-svg-7kxoalAHWlSilVRy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7kxoalAHWlSilVRy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7kxoalAHWlSilVRy .cluster-label text{fill:#333;}#mermaid-svg-7kxoalAHWlSilVRy .cluster-label span{color:#333;}#mermaid-svg-7kxoalAHWlSilVRy .label text,#mermaid-svg-7kxoalAHWlSilVRy span{fill:#333;color:#333;}#mermaid-svg-7kxoalAHWlSilVRy .node rect,#mermaid-svg-7kxoalAHWlSilVRy .node circle,#mermaid-svg-7kxoalAHWlSilVRy .node ellipse,#mermaid-svg-7kxoalAHWlSilVRy .node polygon,#mermaid-svg-7kxoalAHWlSilVRy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7kxoalAHWlSilVRy .node .label{text-align:center;}#mermaid-svg-7kxoalAHWlSilVRy .node.clickable{cursor:pointer;}#mermaid-svg-7kxoalAHWlSilVRy .arrowheadPath{fill:#333333;}#mermaid-svg-7kxoalAHWlSilVRy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7kxoalAHWlSilVRy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7kxoalAHWlSilVRy .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-7kxoalAHWlSilVRy .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-7kxoalAHWlSilVRy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7kxoalAHWlSilVRy .cluster text{fill:#333;}#mermaid-svg-7kxoalAHWlSilVRy .cluster span{color:#333;}#mermaid-svg-7kxoalAHWlSilVRy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7kxoalAHWlSilVRy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态 s Conv Dense 输出状态 s 的分数 3. 参数共享 #mermaid-svg-09PYvu2mL5KbXMoq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-09PYvu2mL5KbXMoq .error-icon{fill:#552222;}#mermaid-svg-09PYvu2mL5KbXMoq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-09PYvu2mL5KbXMoq .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-09PYvu2mL5KbXMoq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-09PYvu2mL5KbXMoq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-09PYvu2mL5KbXMoq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-09PYvu2mL5KbXMoq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-09PYvu2mL5KbXMoq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-09PYvu2mL5KbXMoq .marker.cross{stroke:#333333;}#mermaid-svg-09PYvu2mL5KbXMoq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-09PYvu2mL5KbXMoq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-09PYvu2mL5KbXMoq .cluster-label text{fill:#333;}#mermaid-svg-09PYvu2mL5KbXMoq .cluster-label span{color:#333;}#mermaid-svg-09PYvu2mL5KbXMoq .label text,#mermaid-svg-09PYvu2mL5KbXMoq span{fill:#333;color:#333;}#mermaid-svg-09PYvu2mL5KbXMoq .node rect,#mermaid-svg-09PYvu2mL5KbXMoq .node circle,#mermaid-svg-09PYvu2mL5KbXMoq .node ellipse,#mermaid-svg-09PYvu2mL5KbXMoq .node polygon,#mermaid-svg-09PYvu2mL5KbXMoq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-09PYvu2mL5KbXMoq .node .label{text-align:center;}#mermaid-svg-09PYvu2mL5KbXMoq .node.clickable{cursor:pointer;}#mermaid-svg-09PYvu2mL5KbXMoq .arrowheadPath{fill:#333333;}#mermaid-svg-09PYvu2mL5KbXMoq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-09PYvu2mL5KbXMoq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-09PYvu2mL5KbXMoq .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-09PYvu2mL5KbXMoq .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-09PYvu2mL5KbXMoq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-09PYvu2mL5KbXMoq .cluster text{fill:#333;}#mermaid-svg-09PYvu2mL5KbXMoq .cluster span{color:#333;}#mermaid-svg-09PYvu2mL5KbXMoq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-09PYvu2mL5KbXMoq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态 s Conv Dense1 Softmax 输出每个动作的概率 Dense2 输出状态 s 的分数 4. 更新策略网络 θ ← θ β ⋅ ∂ l n π ( a t ∣ s t ; θ ) ∂ θ ⋅ ( u t − v ( s t ; w ) ) θ ← θ β ⋅ δ t ⋅ ∂ l n π ( a t ∣ s t ; θ ) ∂ θ \theta \leftarrow \theta\beta \cdot \frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta} \cdot(u_t-v(s_t;w))\\ \theta \leftarrow \theta\beta \cdot \delta_t \cdot \frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta}\\ θ←θβ⋅∂θ∂lnπ(at​∣st​;θ)​⋅(ut​−v(st​;w))θ←θβ⋅δt​⋅∂θ∂lnπ(at​∣st​;θ)​ 将价值网络的预测与真实观测 u t u_t ut​ 的差记为 − δ t -\delta_t −δt​ 5. 更新价值网络 用神经网络 v ( s t ; w ) v(s_t;w) v(st​;w) 近似函数 V π ( s t ) E [ U t ∣ s t ] . V_\pi(s_t)E[U_t|s_t]. Vπ​(st​)E[Ut​∣st​]. 预测误差 δ t v ( s t ; w ) − u t \delta_tv(s_t;w)-u_t δt​v(st​;w)−ut​梯度 ∂ δ t 2 / 2 ∂ w δ t ⋅ ∂ v ( s t ; w ) ∂ w \frac{\partial \delta_t^2/2}{\partial w}\delta_t \cdot \frac{\partial v(s_t;w)}{\partial w} ∂w∂δt2​/2​δt​⋅∂w∂v(st​;w)​梯度下降 w ← w − α ⋅ δ t ⋅ ∂ v ( s t ; w ) ∂ w w\leftarrow w-\alpha \cdot \delta_t \cdot \frac{\partial v(s_t;w)}{\partial w} w←w−α⋅δt​⋅∂w∂v(st​;w)​ 6.总览 从开始到一直到结束的所有 transition用所有观测到的奖励计算回报 Return u t ∑ i t n γ i − t ⋅ r i . u_t\sum_{it}^{n}\gamma^{i-t}\cdot r_i. ut​∑itn​γi−t⋅ri​.Error δ t v ( s t ; w ) − u t . \delta_tv(s_t;w)-u_t. δt​v(st​;w)−ut​.用策略梯度更新策略网络 θ ← θ β ⋅ δ t ⋅ ∂ l n π ( a t ∣ s t ; θ ) ∂ θ . \theta \leftarrow \theta\beta \cdot \delta_t \cdot \frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta}. θ←θβ⋅δt​⋅∂θ∂lnπ(at​∣st​;θ)​.更新价值网络 w ← w − α ⋅ δ t ⋅ ∂ v ( s t ; w ) ∂ w w\leftarrow w-\alpha \cdot \delta_t \cdot \frac{\partial v(s_t;w)}{\partial w} w←w−α⋅δt​⋅∂w∂v(st​;w)​ 13. Advantage Actor-CriticA2C 将 baseline 应用在 Actor-Critic 中 Actor 策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ) 近似策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s)控制 agent 运动 Critic 价值网络 v ( s ; w ) v(s;w) v(s;w) 近似状态价值函数 V π ( s ) V_\pi(s) Vπ​(s)评价状态 s 的好坏 #mermaid-svg-ulxqKgPqGORRUl6b {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ulxqKgPqGORRUl6b .error-icon{fill:#552222;}#mermaid-svg-ulxqKgPqGORRUl6b .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ulxqKgPqGORRUl6b .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ulxqKgPqGORRUl6b .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ulxqKgPqGORRUl6b .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ulxqKgPqGORRUl6b .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ulxqKgPqGORRUl6b .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ulxqKgPqGORRUl6b .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ulxqKgPqGORRUl6b .marker.cross{stroke:#333333;}#mermaid-svg-ulxqKgPqGORRUl6b svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ulxqKgPqGORRUl6b .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ulxqKgPqGORRUl6b .cluster-label text{fill:#333;}#mermaid-svg-ulxqKgPqGORRUl6b .cluster-label span{color:#333;}#mermaid-svg-ulxqKgPqGORRUl6b .label text,#mermaid-svg-ulxqKgPqGORRUl6b span{fill:#333;color:#333;}#mermaid-svg-ulxqKgPqGORRUl6b .node rect,#mermaid-svg-ulxqKgPqGORRUl6b .node circle,#mermaid-svg-ulxqKgPqGORRUl6b .node ellipse,#mermaid-svg-ulxqKgPqGORRUl6b .node polygon,#mermaid-svg-ulxqKgPqGORRUl6b .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ulxqKgPqGORRUl6b .node .label{text-align:center;}#mermaid-svg-ulxqKgPqGORRUl6b .node.clickable{cursor:pointer;}#mermaid-svg-ulxqKgPqGORRUl6b .arrowheadPath{fill:#333333;}#mermaid-svg-ulxqKgPqGORRUl6b .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ulxqKgPqGORRUl6b .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ulxqKgPqGORRUl6b .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ulxqKgPqGORRUl6b .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ulxqKgPqGORRUl6b .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ulxqKgPqGORRUl6b .cluster text{fill:#333;}#mermaid-svg-ulxqKgPqGORRUl6b .cluster span{color:#333;}#mermaid-svg-ulxqKgPqGORRUl6b div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ulxqKgPqGORRUl6b :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态 s Conv Dense1 Softmax 输出每个动作的概率 Dense2 输出状态 s 的分数 13.2 推导 定理1 Q π ( s t , a t ) E S t 1 , A t 1 [ R t γ ⋅ Q π ( S t 1 , A t 1 ) ] E S t 1 [ R t γ ⋅ E A t 1 [ Q π ( S t 1 , A t 1 ) ] ] E S t 1 [ R t γ ⋅ V π ( S t 1 ) ] . \begin{aligned} Q_\pi(s_t,a_t) E_{S_{t1},A_{t1}}[R_t\gamma \cdot Q_\pi(S_{t1},A_{t1})]\\ E_{S_{t1}}[R_t\gamma \cdot E_{A_{t1}}[Q_\pi(S_{t1},A_{t1})]]\\ E_{S_{t1}}[R_t\gamma \cdot V_\pi(S_{t1})]. \end{aligned} Qπ​(st​,at​)​ESt1​,At1​​[Rt​γ⋅Qπ​(St1​,At1​)]ESt1​​[Rt​γ⋅EAt1​​[Qπ​(St1​,At1​)]]ESt1​​[Rt​γ⋅Vπ​(St1​)].​ 蒙特卡洛近似 Q π ( s t , a t ) ≈ r t γ ⋅ V π ( s t 1 ) Q_\pi(s_t,a_t)\approx r_t \gamma \cdot V_{\pi}(s_{t1}) Qπ​(st​,at​)≈rt​γ⋅Vπ​(st1​) 定理2 V π ( s t ) E A t [ Q π ( s t , A t ) ] E A t [ E S t 1 [ R t γ ⋅ V π ( S t 1 ) ] ] E A t , S t 1 [ R t γ ⋅ V π ( S t 1 ) ] \begin{aligned} V_\pi(s_t) E_{A_t}[Q_\pi(s_t,A_t)]\\ E_{A_t}[E_{S_{t1}}[R_t\gamma \cdot V_\pi(S_{t1})]]\\ E_{A_t,S_{t1}}[R_t\gamma \cdot V_\pi(S_{t1})] \end{aligned} Vπ​(st​)​EAt​​[Qπ​(st​,At​)]EAt​​[ESt1​​[Rt​γ⋅Vπ​(St1​)]]EAt​,St1​​[Rt​γ⋅Vπ​(St1​)]​ 蒙特卡洛近似 V π ( s t ) ≈ r t γ ⋅ V π ( s t 1 ) V_\pi(s_t)\approx r_t \gamma \cdot V_{\pi}(s_{t1}) Vπ​(st​)≈rt​γ⋅Vπ​(st1​) 对策略梯度的近似 g ( a t ) ≈ ∂ l n π ( a t ∣ s t ; θ ) ∂ θ ⋅ ( r t γ ⋅ v ( s t 1 ; w ) − v ( s t ; w ) ) . g(a_t)\approx \frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta} \cdot(r_t\gamma \cdot v(s_{t1};w)-v(s_t;w)). g(at​)≈∂θ∂lnπ(at​∣st​;θ)​⋅(rt​γ⋅v(st1​;w)−v(st​;w)). 右边括号内的值即为优势advantage即价值网络对动作 at 的评价若 at 很好那么左边比右边大两者之差是正值若 at 不好两者之差就是负的两者之差可以反映出来 at 带来的优势。 13.1 训练 训练策略网络需要用到状态 s、动作 a、价值网络提供的优势训练价值网络需要状态 s 和奖励 r 观测到一个 transiton s t , a t , r t , s t 1 s_t,a_t,r_t,s_{t1} st​,at​,rt​,st1​TD target y t r t γ ⋅ v ( s t 1 ; w ) y_tr_t\gamma \cdot v(s_{t1};w) yt​rt​γ⋅v(st1​;w)TD error δ t v ( s t ; w ) − y t \delta_tv(s_t;w)-y_t δt​v(st​;w)−yt​更新策略网络 θ ← θ − β ⋅ δ t ⋅ ∂ l n π ( a t ∣ s t ; θ ) ∂ θ \theta \leftarrow \theta - \beta \cdot \delta_t \cdot \frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta} θ←θ−β⋅δt​⋅∂θ∂lnπ(at​∣st​;θ)​更新价值网络 w ← w − α ⋅ δ t ⋅ ∂ v ( s t ; w ) ∂ w w\leftarrow w-\alpha \cdot \delta_t \cdot \frac{\partial v(s_t;w)}{\partial w} w←w−α⋅δt​⋅∂w∂v(st​;w)​ 将 A2C 改为多步 TD Target m 个连续的 transition ( s t i , a t i , r t i , s t i 1 ) {(s_{ti},a_{ti},r_{ti},s_{ti1})} (sti​,ati​,rti​,sti1​)TD target y t ∑ i 0 m − 1 γ i ⋅ r t i γ m ⋅ c ( s t m ; w ) . y_t\sum_{i0}^{m-1}\gamma^i \cdot r_{ti}\gamma^{m}\cdot c(s_{tm};w). yt​∑i0m−1​γi⋅rti​γm⋅c(stm​;w).后续步骤和原本的 A2C 一样 REINFORCE with baseline 和 A2C 对比 神经网络结构完全一样REINFORCE 是 A2C 的一种特例A2C 的价值网络用来评价 actor 的表现REINFORCE 中的价值网络仅仅是 baseline不会评价动作好坏降低随机梯度造成的方差A2C 的 y t y_t yt​ 是部分基于真实观测部分基于价值网络的估计REINFORCE 是完全基于真实观测来计算 14. 连续控制 不能直接将 DQN 用于连续控制问题连续控制中有无穷多种动作而 DQN 的输出是每个动作的打分。DQN 和策略网络都不能直接用于连续控制。 要将DQN 或策略网络用于连续控制就需要将连续空间离散化空间维度越高离散化后的动作就越多指数增长会造成维度灾难动作数量变多之后导致训练困难DQN 或策略网络的结果都不会很好因次离散化只适合自由度很小的问题。 14.1 Deterministic Policy GradientDPG确定策略梯度 DPG 是一种 Actor-Critic 方法 #mermaid-svg-QD1te6bWQuECqPfK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QD1te6bWQuECqPfK .error-icon{fill:#552222;}#mermaid-svg-QD1te6bWQuECqPfK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QD1te6bWQuECqPfK .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-QD1te6bWQuECqPfK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QD1te6bWQuECqPfK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QD1te6bWQuECqPfK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QD1te6bWQuECqPfK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QD1te6bWQuECqPfK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QD1te6bWQuECqPfK .marker.cross{stroke:#333333;}#mermaid-svg-QD1te6bWQuECqPfK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QD1te6bWQuECqPfK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QD1te6bWQuECqPfK .cluster-label text{fill:#333;}#mermaid-svg-QD1te6bWQuECqPfK .cluster-label span{color:#333;}#mermaid-svg-QD1te6bWQuECqPfK .label text,#mermaid-svg-QD1te6bWQuECqPfK span{fill:#333;color:#333;}#mermaid-svg-QD1te6bWQuECqPfK .node rect,#mermaid-svg-QD1te6bWQuECqPfK .node circle,#mermaid-svg-QD1te6bWQuECqPfK .node ellipse,#mermaid-svg-QD1te6bWQuECqPfK .node polygon,#mermaid-svg-QD1te6bWQuECqPfK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QD1te6bWQuECqPfK .node .label{text-align:center;}#mermaid-svg-QD1te6bWQuECqPfK .node.clickable{cursor:pointer;}#mermaid-svg-QD1te6bWQuECqPfK .arrowheadPath{fill:#333333;}#mermaid-svg-QD1te6bWQuECqPfK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QD1te6bWQuECqPfK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QD1te6bWQuECqPfK .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-QD1te6bWQuECqPfK .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-QD1te6bWQuECqPfK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QD1te6bWQuECqPfK .cluster text{fill:#333;}#mermaid-svg-QD1te6bWQuECqPfK .cluster span{color:#333;}#mermaid-svg-QD1te6bWQuECqPfK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QD1te6bWQuECqPfK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 状态 s Value Network Policy Network 得到动作 a 得到价值value 策略网络Actor控制 agent 运动根据状态 s 做出决策 a输出直接是要执行的动作故为 Deterministic价值网络Critic基于状态 s 给动作 a 打分从而指导策略网络改进 策略网络 a π ( s ; θ ) . a\pi(s;\theta). aπ(s;θ). 价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 1. TD 算法更新价值网络 transition ( s t , a t , r t , s t 1 ) (s_t,a_t,r_t,s_{t1}) (st​,at​,rt​,st1​) 价值网络在 t 时刻的预测 q t q ( s t , a t ; w ) q_t q(s_t,a_t;w) qt​q(st​,at​;w) 价值网络在 t1 时刻的预测 q t 1 q ( s t 1 , a t 1 ′ ; w ) , a t 1 ′ π ( s t 1 ; θ ) . q_{t1} q(s_{t1},a_{t1}^{};w),\ a^{}_{t1}\pi(s_{t1};\theta). qt1​q(st1​,at1′​;w), at1′​π(st1​;θ). ( a t 1 ′ 不执行只是用于更新价值网络 ) (a_{t1}^{}不执行只是用于更新价值网络) (at1′​不执行只是用于更新价值网络) TD error δ t q t − ( r t γ ⋅ q t 1 ) . \delta_tq_t-(r_t\gamma \cdot q_{t1}). δt​qt​−(rt​γ⋅qt1​). 更新参数 w ← w − α ⋅ δ t ⋅ ∂ q ( s t , a t ; w ) ∂ w w\leftarrow w-\alpha \cdot \delta_t \cdot \frac{\partial q(s_t,a_t;w)}{\partial w} w←w−α⋅δt​⋅∂w∂q(st​,at​;w)​ 2. 用确定策略梯度更新策略网络 和之前的策略梯度有所差异 价值网络评价动作 a 的好坏从而指导策略网络进行改进让价值网络的输出越大越好。在输入状态 s 固定且价值网络固定的情况下影响价值网络的输出 value 的因素就只有策略网络要更新策略网络使得 value 变大故计算 q ( s , a ; w ) q(s,a;w) q(s,a;w) 关于 θ \theta θ 的梯度梯度上升更新策略网络使得价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 的输出 value 变大这个梯度即为 ”确定策略梯度DPG“ g ∂ q ( s , π ( s ; θ ) ; w ) ∂ θ ∂ a ∂ θ ⋅ ∂ q ( s , a ; w ) ∂ a g\frac{\partial q(s,\pi(s;\theta);w)}{\partial \theta}\frac{\partial a}{\partial \theta} \cdot \frac{\partial q(s,a;w)}{\partial a} g∂θ∂q(s,π(s;θ);w)​∂θ∂a​⋅∂a∂q(s,a;w)​梯度上升更新 θ \theta θ θ ← θ β ⋅ g \theta \leftarrow \theta \beta \cdot g θ←θβ⋅g。 3. 用 Target Networks 对价值网络的训练进行改进 在更新价值网络的时候TD target 一部分是真实观测 r t r_t rt​另一部分是价值网络自己的预测 q t 1 q_{t1} qt1​ q t q_t qt​ 要接近 TD target存在 Bootstrapping 问题可能高估也可能低估。 可以用 Target Networks 改进。 策略网络做出决策 a π ( s ; θ ) a\pi(s;\theta) aπ(s;θ)用确定策略梯度更新策略网络 θ ← θ β ⋅ ∂ a ∂ θ ⋅ ∂ q ( s , a ; w ) ∂ a \theta \leftarrow \theta \beta \cdot \frac{\partial a}{\partial \theta} \cdot \frac{\partial q(s,a;w)}{\partial a} θ←θβ⋅∂θ∂a​⋅∂a∂q(s,a;w)​价值网络计算 t 时刻价值 q t q ( s , a ; w ) . q_tq(s,a;w). qt​q(s,a;w).用 Target Network π ( s ; θ − ) , q ( s , a ; w − ) \pi(s;\theta^-), \ q(s,a;w^-) π(s;θ−), q(s,a;w−) 计算 t1 时刻的价值 q t 1 q_{t1} qt1​TD error δ t q t − ( r t γ ⋅ q t 1 ) . \delta_tq_t-(r_t\gamma \cdot q_{t1}). δt​qt​−(rt​γ⋅qt1​).更新价值网络 w ← w − α ⋅ δ t ⋅ ∂ q ( s , a ; w ) ∂ w w\leftarrow w-\alpha \cdot \delta_t \cdot \frac{\partial q(s,a;w)}{\partial w} w←w−α⋅δt​⋅∂w∂q(s,a;w)​ 更新 target networks 设置超参 τ ∈ ( 0 , 1 ) . \tau\in(0,1). τ∈(0,1). 更新参数 w − ← τ ⋅ w ( 1 − τ ) ⋅ w − . w^-\leftarrow \tau \cdot w (1-\tau)\cdot w^ -. w−←τ⋅w(1−τ)⋅w−. θ − ← τ ⋅ θ ( 1 − τ ) ⋅ θ − \theta^-\leftarrow \tau \cdot \theta(1-\tau)\cdot\theta^- θ−←τ⋅θ(1−τ)⋅θ− target networks 的参数依赖于价值网络和策略不能避免 Bootstrapping但在一定程度上有所缓解。 其他改进方式 Experience replayMulti-step TD target 14.2 随机策略和确定策略对比 Stochastic PolicyDeterministic PolicyPolicy$\pi(as;\theta)$Output动作空间的概率分布要执行的动作Control在动作空间的概率分布中随机抽样得到要执行的动作使用输出的动作Application主要用于离散控制连续控制 14.3 用随机策略做连续控制 1. 构造策略网络 若动作 a 是 d 维向量用 μ \mu μ、 σ \sigma σ 分别表示计算均值和标准差的函数输入状态 s输出为 d 维向量 u i u_i ui​ 和 σ i \sigma_i σi​ 分别表示 μ ( s ) \mu(s) μ(s)、 σ ( s ) \sigma(s) σ(s) 输出的第 i 个元素用正态分布 N ( μ i , σ i 2 ) N(\mu_i,\sigma_i^2) N(μi​,σi2​) 的概率密度函数作为策略函数。 π ( a ∣ s ) ∏ i 1 d 1 6.28 σ i ⋅ e x p ( − ( a i − μ i ) 2 2 σ i 2 ) . \pi(a|s)\prod_{i1}^{d}\frac{1}{\sqrt {6.28} \sigma_i} \cdot exp(-\frac{(a_i-\mu_i)^2}{2\sigma_i^2}). π(a∣s)i1∏d​6.28 ​σi​1​⋅exp(−2σi2​(ai​−μi​)2​). 此时并不知道 μ \mu μ、 σ \sigma σ 这两个函数具体形式故策略函数 π \pi π 还不知道。 用神经网络来做函数近似用 μ ( s ; θ μ ) \mu(s;\theta^\mu) μ(s;θμ) 近似 μ \mu μ对于 σ \sigma σ最好不要直接近似而是近似方差的对数用神经网络 ρ ( s ; θ ρ ) \rho(s;\theta^\rho) ρ(s;θρ) 近似 ρ \rho ρ其中 ρ i l n σ i 2 , i 1 , . . . , d . \rho_iln\ \sigma_i^2, i1,...,d. ρi​ln σi2​,i1,...,d. 2. 网络搭建 #mermaid-svg-dXdxeqbDooixDvDU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dXdxeqbDooixDvDU .error-icon{fill:#552222;}#mermaid-svg-dXdxeqbDooixDvDU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dXdxeqbDooixDvDU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-dXdxeqbDooixDvDU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dXdxeqbDooixDvDU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dXdxeqbDooixDvDU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dXdxeqbDooixDvDU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dXdxeqbDooixDvDU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dXdxeqbDooixDvDU .marker.cross{stroke:#333333;}#mermaid-svg-dXdxeqbDooixDvDU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dXdxeqbDooixDvDU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dXdxeqbDooixDvDU .cluster-label text{fill:#333;}#mermaid-svg-dXdxeqbDooixDvDU .cluster-label span{color:#333;}#mermaid-svg-dXdxeqbDooixDvDU .label text,#mermaid-svg-dXdxeqbDooixDvDU span{fill:#333;color:#333;}#mermaid-svg-dXdxeqbDooixDvDU .node rect,#mermaid-svg-dXdxeqbDooixDvDU .node circle,#mermaid-svg-dXdxeqbDooixDvDU .node ellipse,#mermaid-svg-dXdxeqbDooixDvDU .node polygon,#mermaid-svg-dXdxeqbDooixDvDU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dXdxeqbDooixDvDU .node .label{text-align:center;}#mermaid-svg-dXdxeqbDooixDvDU .node.clickable{cursor:pointer;}#mermaid-svg-dXdxeqbDooixDvDU .arrowheadPath{fill:#333333;}#mermaid-svg-dXdxeqbDooixDvDU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dXdxeqbDooixDvDU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dXdxeqbDooixDvDU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-dXdxeqbDooixDvDU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-dXdxeqbDooixDvDU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dXdxeqbDooixDvDU .cluster text{fill:#333;}#mermaid-svg-dXdxeqbDooixDvDU .cluster span{color:#333;}#mermaid-svg-dXdxeqbDooixDvDU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dXdxeqbDooixDvDU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态s Conv Dense1 μ函数 Dense2 ρ函数 用这个网络计算均值和方差的对数 μ ^ μ ( s ; θ μ ) ρ ^ ρ ( s ; θ ρ ) . \hat\mu\mu(s;\theta^\mu)\\ \hat\rho\rho(s;\theta^\rho). μ^​μ(s;θμ)ρ^​ρ(s;θρ). 计算方差 σ ^ i 2 e x p ( ρ ^ i ) , i 1 , . . . , d . \hat\sigma_i^2exp(\hat\rho_i),i1,...,d. σ^i2​exp(ρ^​i​),i1,...,d. 现在知道了方差和均值这个正态分布也就知道了 a i ∼ N ( μ ^ i , σ ^ i 2 ) a_i\sim N(\hat\mu_i,\hat\sigma_i^2) ai​∼N(μ^​i​,σ^i2​)即可进行随机抽样。每次观测到状态 s让神经网络计算均值和方差随机生成动作 a让 agent 执行动作即可控制 agent 运动。 3. 训练 为了计算策略梯度需要搭建辅助神经网络然后用策略梯度方法来训练策略网络。 l n π ( a ∣ s ; θ μ , θ ρ ) ∑ i 1 d [ − l n σ i − ( a i − μ i ) 2 2 σ i 2 ] c o n s t ∑ i 1 d [ − ρ i 2 − ( a i − μ i ) 2 2 ⋅ e x p ( ρ i ) ] c o n s t l n π ( a ∣ s ; θ ) ln \pi(a|s;\theta^\mu,\theta^\rho)\sum_{i1}^{d}[-ln\ \sigma_i-\frac{(a_i-\mu_i)^2}{2\sigma_i^2}]const\sum_{i1}^{d}[-\frac{\rho_i}{2}-\frac{(a_i-\mu_i)^2}{2\cdot exp(\rho_i)}]constln\ \pi(a|s;\theta) lnπ(a∣s;θμ,θρ)∑i1d​[−ln σi​−2σi2​(ai​−μi​)2​]const∑i1d​[−2ρi​​−2⋅exp(ρi​)(ai​−μi​)2​]constln π(a∣s;θ) 将辅助神经网络记为 f ( s , a ; θ ) ∑ i 1 d [ − ρ i 2 − ( a i − μ i ) 2 2 ⋅ e x p ( ρ i ) ] f(s,a;\theta)\sum_{i1}^{d}[-\frac{\rho_i}{2}-\frac{(a_i-\mu_i)^2}{2\cdot exp(\rho_i)}] f(s,a;θ)∑i1d​[−2ρi​​−2⋅exp(ρi​)(ai​−μi​)2​]是 μ \mu μ、 ρ \rho ρ、 a a a 的函数将三者映射到一个实数即为 辅助神经网络的输出反向传播可以计算梯度 ∂ f ∂ θ \frac{\partial f}{\partial \theta} ∂θ∂f​. 网络结构如下 #mermaid-svg-xxvXORpGqBXGcwcd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xxvXORpGqBXGcwcd .error-icon{fill:#552222;}#mermaid-svg-xxvXORpGqBXGcwcd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xxvXORpGqBXGcwcd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-xxvXORpGqBXGcwcd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xxvXORpGqBXGcwcd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xxvXORpGqBXGcwcd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xxvXORpGqBXGcwcd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xxvXORpGqBXGcwcd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xxvXORpGqBXGcwcd .marker.cross{stroke:#333333;}#mermaid-svg-xxvXORpGqBXGcwcd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xxvXORpGqBXGcwcd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xxvXORpGqBXGcwcd .cluster-label text{fill:#333;}#mermaid-svg-xxvXORpGqBXGcwcd .cluster-label span{color:#333;}#mermaid-svg-xxvXORpGqBXGcwcd .label text,#mermaid-svg-xxvXORpGqBXGcwcd span{fill:#333;color:#333;}#mermaid-svg-xxvXORpGqBXGcwcd .node rect,#mermaid-svg-xxvXORpGqBXGcwcd .node circle,#mermaid-svg-xxvXORpGqBXGcwcd .node ellipse,#mermaid-svg-xxvXORpGqBXGcwcd .node polygon,#mermaid-svg-xxvXORpGqBXGcwcd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xxvXORpGqBXGcwcd .node .label{text-align:center;}#mermaid-svg-xxvXORpGqBXGcwcd .node.clickable{cursor:pointer;}#mermaid-svg-xxvXORpGqBXGcwcd .arrowheadPath{fill:#333333;}#mermaid-svg-xxvXORpGqBXGcwcd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xxvXORpGqBXGcwcd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xxvXORpGqBXGcwcd .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-xxvXORpGqBXGcwcd .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-xxvXORpGqBXGcwcd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xxvXORpGqBXGcwcd .cluster text{fill:#333;}#mermaid-svg-xxvXORpGqBXGcwcd .cluster span{color:#333;}#mermaid-svg-xxvXORpGqBXGcwcd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xxvXORpGqBXGcwcd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入状态s Conv Dense1 μ函数 辅助网络f的输出 Dense2 ρ函数 动作a 小结用神经网络来做函数近似用 μ ( s ; θ μ ) \mu(s;\theta^\mu) μ(s;θμ) 近似 μ \mu μ对于 σ \sigma σ知道了方差和均值也就知道了策略网络从而控制 agent 运动辅助神经网络用于训练 ∂ f ∂ θ \frac{\partial f}{\partial \theta} ∂θ∂f​ 计算策略梯度。 4. 计算策略梯度 随机策略梯度 g ( a ) ∂ l n π ( a ∣ s ; θ ) ∂ θ ∗ Q π ( s , a ) ∂ f ( s , a ; θ ) ∂ θ ⋅ Q π ( s , a ) . g(a)\frac{\partial ln \pi(a|s;\theta)}{\partial \theta}*Q_\pi(s,a)\frac{\partial f(s,a;\theta)}{\partial \theta} \cdot Q_\pi(s,a). g(a)∂θ∂lnπ(a∣s;θ)​∗Qπ​(s,a)∂θ∂f(s,a;θ)​⋅Qπ​(s,a). ∂ f ( s , a ; θ ) ∂ θ \frac{\partial f(s,a;\theta)}{\partial \theta} ∂θ∂f(s,a;θ)​ 这一项可以直接计算梯度 Q π ( s , a ) Q_\pi(s,a) Qπ​(s,a) 未知需要近似。 可以使用 REINFORCE 或 Actor-Critic 方法用前者的话使用蒙特卡洛近似用观测到的 u t u_t ut​ 来近似。 更新网络 θ ← θ β ⋅ ∂ f ( s , a ; θ ) ∂ θ ⋅ u t \theta\leftarrow \theta\beta \cdot \frac{\partial f(s,a;\theta)}{\partial \theta} \cdot u_t θ←θβ⋅∂θ∂f(s,a;θ)​⋅ut​ 用 Actor-Critic使用神经网络价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 近似 Q π Q_\pi Qπ​。 更新网络 θ ← θ β ⋅ ∂ f ( s , a ; θ ) ∂ θ ⋅ q ( s , a ; w ) \theta\leftarrow \theta\beta \cdot \frac{\partial f(s,a;\theta)}{\partial \theta} \cdot q(s,a;w) θ←θβ⋅∂θ∂f(s,a;θ)​⋅q(s,a;w) 价值网络用 TD 算法来学习 15. Trust Region Policy Optimization(TRPO置信域策略优化) 和之前的策略梯度相比计算量更大但是表现更稳定收敛更快 15.1 Trust Region置信域 问题寻找一个 θ \theta θ θ ⋆ a r g m a x θ J ( θ ) \theta^\starargmax_\theta\ J(\theta) θ⋆argmaxθ​ J(θ) 梯度上升 计算梯度 g ∂ J ( θ ) ∂ θ ∣ θ θ o l d g\frac{\partial\ J(\theta)}{\partial\ \theta}|_{\theta\theta_{old}} g∂ θ∂ J(θ)​∣θθold​​梯度上升 θ n e w ← θ o l d α ⋅ g \theta_{new}\leftarrow \theta_{old}\alpha \cdot g θnew​←θold​α⋅g 随机梯度上升 有些情况下梯度算不出来如 J ( θ ) E S [ V ( S ; θ ) ] J(\theta)E_S[V(S;\theta)] J(θ)ES​[V(S;θ)]求期望需要定积分但积分可能算不出来可以用随机梯度期望的蒙特卡洛近似代替梯度即随机梯度上升。 关于 S 做随机抽样观测到 s然后求梯度 g ∂ V ( s ; θ ) ∂ θ ∣ θ θ o l d g\frac{\partial\ V(s;\theta)}{\partial\ \theta}|_{\theta\theta_{old}} g∂ θ∂ V(s;θ)​∣θθold​​g 是随机梯度是对目标函数梯度的蒙特卡洛近似梯度上升 θ n e w ← θ o l d α ⋅ g \theta_{new}\leftarrow \theta_{old}\alpha \cdot g θnew​←θold​α⋅g 有 θ o l d \theta_{old} θold​ 的邻域 N ( θ o l d ) { θ ∣ ∥ θ − θ o l d ∥ 2 ≤ Δ } N(\theta_{old})\{\theta|\parallel \theta-\theta_{old}\parallel_2\le\Delta\} N(θold​){θ∣∥θ−θold​∥2​≤Δ}若有一个函数 L ( θ ∣ θ o l d ) L(\theta|\theta_{old}) L(θ∣θold​) 在该邻域内非常接近目标函数 J ( θ ) J(\theta) J(θ)那么这个邻域就叫做置信域。 15.2 Trust region algorithms置信域算法 在置信域上人为构造的函数 L 非常接近目标函数 J因此可以用 L 代替 J在该置信域上寻找 L 的最大值最大化 L 的点也可以使得 J 变大 置信域算法核心步骤重复 近似。 给定旧的变量 θ o l d \theta_{old} θold​构造函数 L使得 L 可以在 θ o l d \theta_{old} θold​ 的邻域内近似 J。 构造 L 的方法如 J 的二阶泰勒展开J 的蒙特卡洛近似等。 最大化。 在置信域中搜索 L 的最大值找到一个新的 θ n e w \theta_{new} θnew​ θ n e w ← a r g m a x θ ∈ N ( θ o l d ) L ( θ ∣ θ o l d ) \theta_{new}\leftarrow argmax_{\theta\in N(\theta_{old})}L(\theta|\theta_{old}) θnew​←argmaxθ∈N(θold​)​L(θ∣θold​) 通常让置信域的半径逐渐变小 15.3 推导目标函数 状态价值函数 V π ( s ) ∑ a π ( a ∣ s ; θ ) ⋅ Q π ( s , a ) ∑ a π ( a ∣ s ; θ o l d ) ⋅ π ( a ∣ s ; θ ) π ( a ∣ s ; θ o l d ) ⋅ Q π ( s , a ) E A ∼ π ( ⋅ ∣ s ; θ o l d ) [ π ( A ∣ s ; θ ) π ( A ∣ s ; θ o l d ) ⋅ Q π ( s , A ) ] \begin{aligned} V_{\pi}(s) \sum_a\pi(a|s;\theta)\cdot Q_\pi(s,a)\\ \sum_a\pi(a|s;\theta_{old})\cdot \frac{\pi(a|s;\theta)}{\pi(a|s;\theta_{old})} \cdot Q_\pi(s,a)\\ E_{A\sim\pi(\cdot|s;\theta_{old})}[\frac{\pi(A|s;\theta)}{\pi(A|s;\theta_{old})} \cdot Q_\pi(s,A)] \end{aligned} Vπ​(s)​a∑​π(a∣s;θ)⋅Qπ​(s,a)a∑​π(a∣s;θold​)⋅π(a∣s;θold​)π(a∣s;θ)​⋅Qπ​(s,a)EA∼π(⋅∣s;θold​)​[π(A∣s;θold​)π(A∣s;θ)​⋅Qπ​(s,A)]​ 目标函数 J J ( θ ) E S [ V π ( S ) ] E S [ E A [ π ( A ∣ s ; θ ) π ( A ∣ s ; θ o l d ) ⋅ Q π ( s , A ) ] ] E S , A [ π ( A ∣ s ; θ ) π ( A ∣ s ; θ o l d ) ⋅ Q π ( s , A ) ] \begin{aligned} J(\theta) E_S[V_\pi(S)]\\ E_S[E_{A}[\frac{\pi(A|s;\theta)}{\pi(A|s;\theta_{old})} \cdot Q_\pi(s,A)]]\\ E_{S,A}[\frac{\pi(A|s;\theta)}{\pi(A|s;\theta_{old})} \cdot Q_\pi(s,A)] \end{aligned} J(θ)​ES​[Vπ​(S)]ES​[EA​[π(A∣s;θold​)π(A∣s;θ)​⋅Qπ​(s,A)]]ES,A​[π(A∣s;θold​)π(A∣s;θ)​⋅Qπ​(s,A)]​ 15.4 TRPO 策略梯度算法快但表现不稳定。TRPO 稳定观测到同样数量的奖励TRPO 可以训练出更好的策略网络 对超参的设置比较敏感学习率的设置对结果影响很大 策略梯度算法的随机性很大算法波动很大 1. Approximation 目标函数 J 中随机变量状态 S 的随机性来自于状态转移agent 实际观测到的状态可以看作是从环境中随机抽样得到的。 对 J 做蒙特卡洛近似从环境抽随机抽样得到状态 s从策略网络 π \pi π 中随机抽样得到动作 a。让 agent 和环境交互得到一条轨迹 s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s n , a n , r n . s_1,a_1,r_1,s_2,a_2,r_2,...,s_n,a_n,r_n. s1​,a1​,r1​,s2​,a2​,r2​,...,sn​,an​,rn​. 则基于 n 个观测值对 J 的蒙特卡洛近似为 L ( θ ∣ θ o l d ) 1 n ∑ i 1 n π ( a i ∣ s i ; θ ) π ( a i ∣ s i ; θ o l d ) ⋅ Q π ( s i , a i ) . L(\theta|\theta_{old})\frac{1}{n}\sum_{i1}^{n}\frac{\pi(a_i|s_i;\theta)}{\pi(a_i|s_i;\theta_{old})} \cdot Q_\pi(s_i,a_i). L(θ∣θold​)n1​i1∑n​π(ai​∣si​;θold​)π(ai​∣si​;θ)​⋅Qπ​(si​,ai​). 对 Q π Q_\pi Qπ​ 做近似基于观测到的轨迹计算折扣回报 u i r i γ ⋅ r i 1 γ 2 ⋅ r i 2 . . . γ n − i ⋅ r n u_ir_i\gamma \cdot r_{i1}\gamma^2\cdot r_{i2} ...\gamma^{n-i}\cdot r_n ui​ri​γ⋅ri1​γ2⋅ri2​...γn−i⋅rn​用其作为 Q π Q_\pi Qπ​ 的蒙特卡洛近似。则可得 L ~ ( θ ∣ θ o l d ) 1 n ∑ i 1 n π ( a i ∣ s i ; θ ) π ( a i ∣ s i ; θ o l d ) ⋅ u i \tilde L(\theta|\theta_{old})\frac{1}{n}\sum_{i1}^{n}\frac{\pi(a_i|s_i;\theta)}{\pi(a_i|s_i;\theta_{old})} \cdot u_i L~(θ∣θold​)n1​i1∑n​π(ai​∣si​;θold​)π(ai​∣si​;θ)​⋅ui​ 2. Maximization 即时近似做的不好或者最大化做的不好新的解 θ n e w \theta_{new} θnew​ 也不会离 θ o l d \theta_{old} θold​ 太远。 在置信域 N ( θ o l d ) N(\theta_{old}) N(θold​) 中求最大化找到 θ n e w \theta_{new} θnew​ θ n e w ← a r g m a x θ L ~ ( θ ∣ θ o l d ) ; s . t . θ ∈ N ( θ o l d ) . \theta_{new}\leftarrow argmax_{\theta}\tilde L(\theta|\theta_{old});\ s.t.\ \theta\in N(\theta_{old}). θnew​←argmaxθ​L~(θ∣θold​); s.t. θ∈N(θold​). 要让新的解离原本的 θ \theta θ 不要太远需要衡量两者之间的距离。 方式1 ∥ θ − θ o l d ∥ ≤ Δ . \parallel\theta-\theta_{old}\parallel\le\Delta. ∥θ−θold​∥≤Δ.方式2 1 n ∑ i 1 n K L [ π ( ⋅ ∣ s i ; θ o l d ) ∣ ∣ π ( ⋅ ∣ s i ; θ ) ] Δ . \frac{1}{n}\sum_{i1}^{n}KL[\pi(\cdot|s_i;\theta_{old})||\pi(\cdot|s_i;\theta)]\lt\Delta. n1​∑i1n​KL[π(⋅∣si​;θold​)∣∣π(⋅∣si​;θ)]Δ. 16. Multi-Agent Reinforcement Learning多智能体强化学习 16.1 Settings常见设定 Fully cooperation完全合作 agents 的利益一致获得的奖励相同有共同的目标协同完成某个任务 Fully competitive完全竞争 一方的收益是另一方的损失零和博弈、机器人格斗 Mixed Cooperative competitive合作竞争的混合 机器人足球中球队内部合作球队间竞争 Self-interested利己主义 每个 agent 只想最大化自身利益至于其他 agent 的利益是否受损或收益并不心股票交易系统 16.2 Terminologies n 个 agentS 是状态Ai 表示第 i 个 agent 的动作。状态转移函数为 p ( s ′ ∣ s , a 1 , . . . a n ) P ( S ′ s ′ ∣ S s , A 1 a 1 , . . . , A n a n ) p(s^{}|s,a^1,...a^n)P(S^{}s^{}|Ss,A^1a^1,...,A^na^n) p(s′∣s,a1,...an)P(S′s′∣Ss,A1a1,...,Anan). 下一个状态 S’受所有 agents 的动作的影响即每个 agents 都会影响下一个状态从而相互影响。 奖励 Ri 表示第 i 个agent 获得的奖励 合作关系中 R 1 R 2 . . . R n . R^1R^2...R^n. R1R2...Rn. 竞争中 R 1 ∝ − R 2 R^1 \propto -R^2 R1∝−R2 R i R^i Ri 不仅取决于自己的动作也取决去其他 agents 的动作 R t i R_t^i Rti​ 是第 i 个 agent 在 t 时刻的奖励依赖于当前的状态 S t S_t St​ 和其他 agent 的动作 A t 1 , A t 2 , . . . A t n A_t^1,A_t^2,...A_t^n At1​,At2​,...Atn​ 回报 第 i 个 agent 在时间 t 获得的回报从时间 t 开始第 i 个 agent 在未来获得的奖励总和 U t i R t i R t 1 i . . . U_t^iR_t^iR_{t1}^i... Uti​Rti​Rt1i​... 折扣回报 U t i R t i γ ⋅ R t 1 i γ 2 ⋅ R t 2 i . . . U_t^iR_t^i\gamma \cdot R_{t1}^i\gamma^2 \cdot R_{t2}^i... Uti​Rti​γ⋅Rt1i​γ2⋅Rt2i​...依赖于未来所有的状态 { S t , S t 1 , S t 2 , . . . } \{S_t,S_{t1},S_{t2},...\} {St​,St1​,St2​,...} 以及未来所有的动作 { A t i , A t 1 i , A t 2 i , . . . } \{A_t^i,A_{t1}^i,A_{t2}^i,...\} {Ati​,At1i​,At2i​,...} 策略网络 每个 agent 都有自己的策略网络 π ( a i ∣ s ; θ i ) \pi(a^i|s;\theta^i) π(ai∣s;θi) 有的场景下策略网络是可以相同的(可互换如无人驾驶汽车 θ 1 θ 2 θ 3 . . . \theta^1\theta^2\theta^3... θ1θ2θ3... 足球机器人中策略网络参数不能互换因为每个 agent 担任的角色可能不同 状态价值函数 V i ( s t ; θ 1 , . . . , θ n ) E [ U t i ∣ S t s t ] V^i(s_t;\theta^1,...,\theta^n)E[U_t^i|S_ts_t] Vi(st​;θ1,...,θn)E[Uti​∣St​st​] 在当前状态 S t S_t St​ 已经可以被观测到时用期望消除掉除 S t S_t St​ 之外的所有状态和所有 agent 的动作那么状态价值函数就只与 S t S_t St​ 有关。 任何一个 agent 的动作 A t j ∼ π ( ⋅ ∣ s t ; θ j ) A_t^j \sim \pi(\cdot|s_t;\theta^j) Atj​∼π(⋅∣st​;θj) 都会对状态价值函数产生影响。如果一个 agent 的策略网络发生变化那么所有 agent 的状态价值函数都会发生变化 16.3 Convergence收敛问题 无法通过改进策略来获得更大的期望回报即所有 agent 都已经找不到更好的策略已经收敛可以终止训练。 单个 agent 的情况下若 J ( θ ) J(\theta) J(θ) 停止增长则说明网络收敛多个 agent 的情况下判断收敛需要用到 Nash Equilibrium。 Nash Equilibrium当所有 agent 都不改变策略的情况下任意一个 agent 单独改变策略不会让自己的回报更高。 multi-agent 的强化学习比较困难直接用 single-agent 的学习算法来进行学习效果并不好。 各个 agent 的目标函数都不一样因为只和自己的策略网络参数有关自己更新自己的参数忽略了 agent 之间的关系以及交互可能不能收敛一个 agent 策略的更新会导致所有 agent 的目标函数发生变化因为有可能一个 agent 策略已经达到最优但是由于另一个 agent 策略的改变导致前一个 agent 的目标函数发生变化那么前一个 agent 也得继续更新。 16.4 agents 之间的通信方式 Fully decentralized去中心化 每个 agent 都是独立的独立和环境交互用自己的观测和奖励更新自己的策略训练和执行都是独立进行的agents 相互之间没有通信。 Fully centralized完全中心化 所有 agents 都将信息传送给中央控制器中央控制器知道所有 agents 的观测、动作、奖励agent 上没有策略网络自己不做决策只执行指令决策都是由中央做的。 Centralized training with decentralized execution中心化训练 去中心化执行 每个 agents 有自己的策略网络训练时有中央控制器会收集所有 agents 的观测、动作和奖励中央控制器帮助 agents 训练策略网络训练结束后每个 agent 根据自己的策略网络进行决策不用再和中央控制器通信。 Partial observation不完全观测每个 agent i 只能观测到局部状态 o i o^i oi并不能看到全局状态 sMulti-agent 通常假设是不完全观测。 Full observation完全观测每个 agent 都能观测到全局状态】 1. 去中心化 Actor-Critic π ( a i ∣ o i ; θ i ) \pi(a^i|o^i;\theta^i) π(ai∣oi;θi) q ( o i , a i ; w i ) q(o^i,a^i;w^i) q(oi,ai;wi) 2. 中心化 不论是训练还是真正执行的时候策略网络都在中央控制器中。 训练时每个 agent 将自己的观测和奖励传给中央控制器中央控制器将决策传递给每个 agentagent 执行动作和环境交互中央控制器用所有的观测、奖励、动作来训练策略网络 。 执行时中央控制上训练出的每个 agent 的策略网络参数不同决策只能由中央控制器来做。每个 agent 将自己的观测传递给中央控制器中央控制器根据全局观测做出决策传递给每个 agent 应该执行的动作 优点知道全局的信息可以帮助所有 agent 做出更好的决策 缺点速度慢无法做到实时决策 Actor-Critic π ( a i ∣ o ; θ i ) \pi(a^i|o;\theta^i) π(ai∣o;θi) q ( o , a ; w i ) q(o,a;w^i) q(o,a;wi) 3. 中心化训练去中心化执行 训练时由中央控制器帮助 agent 训练策略网络结束训练后由每个 agent 独立和环境交互用自己的策略网络基于自己的局部观测进行决策。 Actor-Critic 每个 agent 上面都有一个自己的策略网络 π ( a i ∣ o i ; θ i ) \pi(a^i|o^i;\theta^i) π(ai∣oi;θi)中央控制器上有一个价值网络 q ( o , a ; w i ) q(o,a;w^i) q(o,a;wi)。 中心化训练中央控制器知道所有 agent 的观测、奖励、动作价值网络输入所有的动作和状态 去中心化执行完成训练后不再需要中央控制器及其上面的价值网络每个 agent 独立决策。 π ( a i ∣ o i ; θ i ) \pi(a^i|o^i;\theta^i) π(ai∣oi;θi) q ( o , a ; w i ) q(o,a;w^i) q(o,a;wi)
http://www.tj-hxxt.cn/news/229147.html

相关文章:

  • 营销网站建设哪里好薇wordpress分享qq
  • 长春高铁站数据分析网页
  • 解决wordpress更改新域名后网站不能访问的问题wordpress 调取页面缩略图
  • 南京网站制作网页河北省最新消息
  • 政务公开加强网站规范化建设python基础教程第4版pdf
  • 免费企业网站怎么做做壁画在哪个网站
  • 网站建设的可行性分析网站如何做mip
  • 网站建设礼品海阳网网站
  • 怎么做直播网站超管wordpress加一个字段
  • 深圳网站优化方案微信营销的模式有哪些
  • 简要说明网站建设的步骤塘下网站建设
  • 天津建设集团网站wordpress免费汉化企业主题
  • 那里有做像美团的网站的wordpress 制作网页
  • 兰州优化网站排名重庆网站建设冒号
  • 自己有了域名 怎么做网站搜多多搜索引擎入口
  • 室内设计网站平面案例太原百度快速优化排名
  • 做旅游网站的开题报告怎么做网页的搜索功能
  • 公司做个网站好还是做公众号好给教育类做网站
  • 网站开发维护公司经营范围seo技术优化服务
  • 手机做推广比较好的网站有哪些北京代理记账财务公司
  • 用jsp做电影网站的界面保定哪里有做网站的
  • 网站建设交流qq带会员中心WordPress免费主题
  • 哪有专业做网站在线logo设计免费生成器
  • 两个人能用的一个公司做网站吗wordpress后台菜单如何修改
  • 吉安手机网站建设国内很多网站不是响应式
  • 口碑好的唐山网站建设外贸企业网站
  • 站长工具网站提交长沙人才招聘网最新招聘2022
  • iis7.5怎么做网站佛山网站建设公司 华欣世纪
  • 制作复杂的企业网站首页广州三大代运营公司
  • 织梦做公司网站要钱吗腾冲市住房和城乡建设局网站