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

摄影网站设计代码西宁做网站最好的公司哪家好

摄影网站设计代码,西宁做网站最好的公司哪家好,外贸seo网站大全,开设赌场罪 网站开发CS 224R 离线强化学习#xff1a;第二部分 课程介绍请看第一节内容 课程回顾 离线强化学习、数据约束和保守性 离线强化学习旨在利用离线数据#xff0c;重复使用离线数据是有益的。其关键挑战是由于 π β \pi_\beta πβ​ 和 π θ \pi_\theta πθ​ 之间的偏移导致…CS 224R 离线强化学习第二部分 课程介绍请看第一节内容 课程回顾 离线强化学习、数据约束和保守性 离线强化学习旨在利用离线数据重复使用离线数据是有益的。其关键挑战是由于 π β \pi_\beta πβ​ 和 π θ \pi_\theta πθ​ 之间的偏移导致对Q值的高估。 有两种方法来约束数据 通过显式建模 π β \pi_\beta πβ​ 来约束数据 直观但在实践中通常过于保守 通过惩罚Q值来隐式约束数据 简单实践中效果良好但需要调整 α \alpha α 参数 轨迹拼接允许离线强化学习方法改进模仿学习的效果。 为什么要使用离线强化学习而不是模仿学习 离线数据可能并不是最优的。离线强化学习可以利用奖励信息来超越行为策略的表现。好的离线强化学习方法可以拼接良好的行为。回顾模仿方法无法超越专家。 离线强化学习方法可以学习从 s 1 s_1 s1​ 到 s 9 s_9 s9​ 的策略。 再探模仿学习在离线强化学习中的应用 加权模仿学习 如果我们有奖励标签是否只模仿好的轨迹 过滤行为克隆Filtered Behavior Cloning 按回报对轨迹排序过滤数据集以包含前 k % k\% k% 的数据模仿过滤后的数据集 r ( τ ) ∑ ( s t , a t ) ∈ τ r ( s t , a t ) D ~ : { τ ∣ r ( τ ) η } max ⁡ π ∑ ( s , a ) ∈ D ~ log ⁡ π ( a ∣ s ) \begin{aligned} r(\tau) \sum_{(s_t,a_t)\in\tau} r(s_t, a_t) \\ \tilde{D} : \{\tau \mid r(\tau) \eta\} \\ \max_\pi \sum_{(s,a)\in \tilde{D}} \log \pi(a \mid s) \end{aligned} r(τ)D~πmax​​(st​,at​)∈τ∑​r(st​,at​):{τ∣r(τ)η}(s,a)∈D~∑​logπ(a∣s)​ 这是一种非常原始的利用奖励信息的方法因此是一个很好的测试基准。 更好的加权模仿学习方法是什么我们能否根据动作的优劣来加权每个转移 如何衡量一个动作的优劣回想一下优势函数 A A A。 θ ← arg ⁡ max ⁡ θ E s , a ∼ D [ log ⁡ π θ ( a ∣ s ) exp ⁡ ( A ( s , a ) ) ] \theta \leftarrow \arg\max_\theta \mathbb{E}_{s,a\sim D} [\log \pi_\theta(a \mid s)\exp(A(s, a))] θ←argθmax​Es,a∼D​[logπθ​(a∣s)exp(A(s,a))] 关键问题如何估计优势函数 优势加权回归Advantage-Weighted Regression, AWR AWR算法如下 拟合价值函数 V ^ π β ( s ) ← arg ⁡ min ⁡ V E ( s , a ) ∼ D [ ( R s , a − V ( s ) ) 2 ] \hat{V}_{\pi_\beta}(s) \leftarrow \arg\min_V \mathbb{E}_{(s,a)\sim D} \left[ \left(R_{s,a} - V(s)\right)^2 \right] V^πβ​​(s)←argVmin​E(s,a)∼D​[(Rs,a​−V(s))2] 训练策略 π ^ ← arg ⁡ max ⁡ π E s , a ∼ D [ log ⁡ π ( a ∣ s ) exp ⁡ ( 1 α ( R s , a − V ^ π β ( s ) ) ) ] \hat{\pi} \leftarrow \arg\max_\pi \mathbb{E}_{s,a\sim D} \left[ \log \pi(a \mid s)\exp \left(\frac{1}{\alpha} \left(R_{s,a} - \hat{V}_{\pi_\beta}(s)\right)\right) \right] π^←argπmax​Es,a∼D​[logπ(a∣s)exp(α1​(Rs,a​−V^πβ​​(s)))] 其中 α \alpha α 是超参数。 优点 避免查询或训练任何分布外OOD的动作简单 缺点 蒙特卡洛估计有噪声假设策略弱于 A ^ π β \hat{A}_{\pi_\beta} A^πβ​​ 参考文献 Peng, Kumar, Zhang, Levine. Advantage-Weighted Regression. ArXiv’19. 是否可以使用时间差分TD更新而不是蒙特卡洛来估计优势函数 估计Q函数 min ⁡ Q E ( s , a , s ′ ) ∼ D [ ( Q ( s , a ) − ( r γ E a ′ ∼ π ( ⋅ ∣ s ) [ Q ( s ′ , a ′ ) ] ) ) 2 ] \min_Q \mathbb{E}_{(s,a,s)\sim D} \left[ \left(Q(s, a) - \left(r \gamma\mathbb{E}_{a\sim\pi(\cdot|s)}[Q(s, a)]\right)\right)^2 \right] Qmin​E(s,a,s′)∼D​[(Q(s,a)−(rγEa′∼π(⋅∣s)​[Q(s′,a′)]))2] 估计优势函数 A ^ π ( s , a ) Q ^ π ( s , a ) − E a ˉ ∼ π ( ⋅ ∣ s ) [ Q ^ π ( s , a ˉ ) ] \hat{A}_\pi(s, a) \hat{Q}_\pi(s, a) - \mathbb{E}_{\bar{a}\sim\pi(\cdot|s)}[\hat{Q}_\pi(s, \bar{a})] A^π​(s,a)Q^​π​(s,a)−Eaˉ∼π(⋅∣s)​[Q^​π​(s,aˉ)] 这被称为优势加权行动者-评论家Advantage Weighted Actor Critic。 像之前一样更新策略 π ^ ← arg ⁡ max ⁡ π E s , a ∼ D [ log ⁡ π ( a ∣ s ) exp ⁡ ( 1 α A ^ π ( s , a ) ) ] \hat{\pi} \leftarrow \arg\max_\pi \mathbb{E}_{s,a\sim D} \left[ \log \pi(a \mid s)\exp \left(\frac{1}{\alpha}\hat{A}_\pi(s, a)\right) \right] π^←argπmax​Es,a∼D​[logπ(a∣s)exp(α1​A^π​(s,a))] 可能出现的问题 可能会查询OOD动作策略仍然只在数据中的动作上训练 参考文献 Nair, Gupta, Dalal, Levine. AWAC. ArXiv’20.Wang et al. Critic Regularized Regression. NeurIPS’20. 隐式Q学习Implicit Q-Learning, IQL 我们想使用TD更新来估计优势函数而不查询OOD动作。 SARSA更新 Q ^ π β ← arg ⁡ min ⁡ Q E ( s , a , s ′ , a ′ ) ∼ D [ ( Q ( s , a ) − ( r γ Q ( s ′ , a ′ ) ) ) 2 ] \hat{Q}_{\pi_\beta} \leftarrow \arg\min_Q \mathbb{E}_{(s,a,s,a)\sim D} \left[ \left(Q(s, a) - \left(r \gamma Q(s, a)\right)\right)^2 \right] Q^​πβ​​←argQmin​E(s,a,s′,a′)∼D​[(Q(s,a)−(rγQ(s′,a′)))2] 这给出了 V π β ( s ′ ) V_{\pi_\beta}(s) Vπβ​​(s′) 的样本。 我们能否估计一个比 π β \pi_\beta πβ​ 更好的策略的Q函数 IQL算法如下 用expectile损失拟合Q函数 Q ^ ( s , a ) ← arg ⁡ min ⁡ Q E ( s , a , s ′ ) ∼ D [ ( Q ( s , a ) − ( r γ V ^ ( s ′ ) ) ) 2 ] \hat{Q}(s, a) \leftarrow \arg\min_Q \mathbb{E}_{(s,a,s)\sim D} \left[ \left(Q(s, a) - \left(r \gamma \hat{V}(s)\right)\right)^2 \right] Q^​(s,a)←argQmin​E(s,a,s′)∼D​[(Q(s,a)−(rγV^(s′)))2] 用expectile损失拟合V函数 V ^ ( s ) ← arg ⁡ min ⁡ V E ( s , a ) ∼ D [ ℓ τ 2 ( V ( s ) − Q ^ ( s , a ) ) ] \hat{V}(s) \leftarrow \arg\min_V \mathbb{E}_{(s,a)\sim D} \left[ \ell_\tau^2 \left(V(s) - \hat{Q}(s, a)\right) \right] V^(s)←argVmin​E(s,a)∼D​[ℓτ2​(V(s)−Q^​(s,a))] 其中 ℓ τ 2 \ell_\tau^2 ℓτ2​ 是assymetric MSE损失 τ 0.5 \tau 0.5 τ0.5。 用AWR提取策略 π ^ ← arg ⁡ max ⁡ π E s , a ∼ D [ log ⁡ π ( a ∣ s ) exp ⁡ ( 1 α ( Q ^ ( s , a ) − V ^ ( s ) ) ) ] \hat{\pi} \leftarrow \arg\max_\pi \mathbb{E}_{s,a\sim D} \left[ \log \pi(a \mid s)\exp \left(\frac{1}{\alpha} \left(\hat{Q}(s, a) - \hat{V}(s)\right)\right) \right] π^←argπmax​Es,a∼D​[logπ(a∣s)exp(α1​(Q^​(s,a)−V^(s)))] 优点 无需查询OOD动作解耦行动者和评论家训练计算速度快策略仍然只在数据中的动作上训练 参考文献 Kostrikov, Nair, Levine. Implicit Q-Learning. ICLR’22. 条件模仿学习 回顾过滤行为克隆Filtered Behavior Cloning如果我们有奖励标签是否只模仿好的轨迹 对于某些数据集过滤的行为克隆实际上可以很好地工作。但如果我们觉得丢弃数据不好怎么办 回报条件策略Return-Conditioned Policies 也称为倒置强化学习Upside-Down RL、奖励条件策略Reward-Conditioned Policies、决策变换器Decision Transformers。 模仿整个数据集 max ⁡ π ∑ ( s , a ) ∈ D log ⁡ π ( a ∣ s , R s , a ) \max_\pi \sum_{(s,a)\in D} \log \pi(a \mid s, R_{s,a}) πmax​(s,a)∈D∑​logπ(a∣s,Rs,a​) 将策略以经验回报为条件。 优点 在测试时传入高回报可以使用序列模型 缺点 策略将学会模仿好的和差的行为以及介于两者之间的所有行为 问题这种方法可以进行数据拼接吗 问题什么时候序列模型会有帮助 参考文献 Kumar et al. Reward-Conditioned Policies. ArXiv’19.Srivastava et al. Upside-Down RL. ArXiv’19.Chen*, Lu* et al. Decision Transformer. ArXiv’21. 离线评估和超参数调整 使用离线数据集 D D D 训练策略 π θ \pi_\theta πθ​。策略 π θ \pi_\theta πθ​ 有多好 真实目标 max ⁡ θ ∑ t E s t ∼ d π θ ( ⋅ ) , a t ∼ π θ ( ⋅ ∣ s t ) [ r ( s t , a t ) ] \max_\theta \sum_t \mathbb{E}_{s_t\sim d_{\pi_\theta}(\cdot),a_t\sim\pi_\theta(\cdot|s_t)} [r(s_t, a_t)] θmax​t∑​Est​∼dπθ​​(⋅),at​∼πθ​(⋅∣st​)​[r(st​,at​)] 这被称为离线策略评估Offline Policy Evaluation。 策略 π θ 1 \pi_{\theta_1} πθ1​​ 是否比策略 π θ 2 \pi_{\theta_2} πθ2​​ 更好 遗憾的是没有通用、可靠的离线评估方法。这对模仿学习也是如此。 策略 在真实世界中执行策略 准确但可能代价高昂、有风险不再是纯粹的离线考虑使用在线数据 在高保真模拟器或模型中评估 可能足以比较策略开发模拟器很困难 有时可以使用启发式方法 容易且便宜不可靠不通用 例如对CQL使用启发式方法进行早停观察Q值平均峰值下降之前的情况。 参考文献 Kumar*, Singh*, Tian, Finn, Levine. A Workflow for Offline Model-Free Robotic Reinforcement Learning. CoRL’21. 应用案例 案例1在LinkedIn上优化发送通知给用户的策略 目标最大化每周活跃用户WAU和点击率CTR同时最小化通知量。 参考文献 Prabhakar, Yuan, Yang, Sun, Muralidharan. Multi-Objective Optimization of Notifications Using Offline RL. ArXiv’22. 案例2Annie Chen, Alex Nam, Suraj Nair开发了一种可扩展收集机器人数据的算法。 参考文献 Chen*, Nam*, Nair*, Finn. Batch Exploration with Examples for Scalable Robotic RL, ICRA/RA-L’21. Rafael Rafailov重用相同的数据集用新的离线强化学习方法训练策略 将200张图像标记为抽屉打开或关闭训练分类器用于奖励信号用LOMPOCOMBO的前身进行离线强化学习 参考文献 Rafailov*, Yu*, Rajeswaran, Finn. Offline RL from Images with Latent Space Models, L4DC’21. 使用LOMPO成功率为76%不使用LOMPO成功率较低。 使用哪种离线强化学习算法 如果你只想进行离线训练 过滤行为克隆很好的第一种利用离线数据的方法保守Q学习只有一个超参数隐式Q学习可以拼接数据并显式约束到数据支持 如果你想进行离线预训练在线微调 隐式Q学习似乎表现最好 如果你有一个好的动力学模型训练方法 COMBO与CQL类似但受益于学习到的模型 注意这仍然是一个活跃的研究领域 课程提醒 家庭作业2今晚截止家庭作业3今天发布项目提案反馈即将发布Dilip和Ansh的两个Office Hour从线下改为线上线下混合 本节课的关键学习目标 两种离线强化学习方法以及它们何时有效和无效调整离线强化学习方法的重要考虑因素 这些内容将在家庭作业3中涉及 优势加权回归(Advantage-Weighted Regression, AWR) AWR算法的示例代码如下: import numpy as np# 拟合价值函数 def fit_value_function(data):states, actions, rewards data# 最小化平方损失def loss(V):return np.mean((rewards - V[states])**2)# 随机初始化价值函数V np.random.rand(num_states)# 使用梯度下降优化for _ in range(num_iterations):V - learning_rate * grad(loss)(V)return V# 训练AWR策略 def train_awr_policy(data, value_function, alpha):states, actions, rewards data# 计算优势advantages rewards - value_function[states]# 最大化加权对数似然def loss(policy_params):log_probs policy.log_prob(policy_params, states, actions)return -np.mean(log_probs * np.exp(advantages / alpha))# 随机初始化策略参数policy_params np.random.rand(num_policy_params)# 使用梯度下降优化for _ in range(num_iterations):policy_params - learning_rate * grad(loss)(policy_params)return policy_params在这个示例中,我们首先从离线数据中拟合一个价值函数,使用平方损失和梯度下降。然后,我们计算每个状态-动作对的优势,并使用这些优势来加权策略的对数似然损失。最后,我们再次使用梯度下降来优化策略参数。 alpha是一个重要的超参数,控制着策略对优势的敏感度。alpha越小,策略就越倾向于选择具有高优势的动作。 AWR的一个优点是它避免了对任何分布外(OOD)动作进行查询或训练。这是因为在训练过程中,策略只在数据集中观察到的状态-动作对上进行更新。然而,AWR使用蒙特卡洛估计来计算优势,这可能会引入较高的方差。此外,AWR隐含地假设学习到的策略不会比数据收集策略好太多。 隐式Q学习(Implicit Q-Learning, IQL) 为了解决AWR的一些局限性,我们可以使用隐式Q学习(IQL)算法。IQL使用时序差分(TD)学习来估计Q值,避免了蒙特卡洛估计的高方差问题。此外,IQL使用一个特殊的非对称损失函数来拟合状态值函数,允许学习到的策略超越数据收集策略。 IQL算法的示例代码如下: import numpy as np# 拟合Q函数 def fit_q_function(data):states, actions, rewards, next_states data# 最小化TD误差def loss(Q):targets rewards gamma * np.max(Q[next_states], axis1)return np.mean((Q[states, actions] - targets)**2)# 随机初始化Q函数Q np.random.rand(num_states, num_actions)# 使用梯度下降优化for _ in range(num_iterations):Q - learning_rate * grad(loss)(Q)return Q# 拟合状态值函数 def fit_value_function(data, q_function, tau):states, actions, _ data# 最小化非对称MSE损失def loss(V):q_values q_function[states, actions]return np.mean(np.where(V[states] q_values,tau * (V[states] - q_values)**2,(1 - tau) * (V[states] - q_values)**2))# 随机初始化状态值函数V np.random.rand(num_states)# 使用梯度下降优化for _ in range(num_iterations):V - learning_rate * grad(loss)(V)return V# 训练IQL策略 def train_iql_policy(data, q_function, value_function, alpha):states, actions, _ data# 计算优势advantages q_function[states, actions] - value_function[states]# 最大化加权对数似然def loss(policy_params):log_probs policy.log_prob(policy_params, states, actions)return -np.mean(log_probs * np.exp(advantages / alpha))# 随机初始化策略参数policy_params np.random.rand(num_policy_params)# 使用梯度下降优化 for _ in range(num_iterations):policy_params - learning_rate * grad(loss)(policy_params)return policy_paramsIQL首先从离线数据中拟合一个Q函数,使用标准的TD损失。然后,它使用一个特殊的非对称MSE损失来拟合状态值函数。这个损失函数对于高估值(即V(s) Q(s,a))给予更大的惩罚,从而鼓励学习一个下限值函数。tau是控制这个非对称性的超参数,通常设置为一个较小的值(例如0.1)。 在拟合完值函数后,IQL像AWR一样计算优势并训练一个策略来最大化加权对数似然。因为IQL使用一个下限值函数,所学习到的策略可以安全地超越数据收集策略,而不会出现过度乐观估计的问题。 IQL的一个主要优点是它完全避免了对OOD动作的查询和训练。策略训练只使用数据集中观察到的状态-动作对。此外,通过使用TD学习和非对称值损失,IQL可以更有效地利用离线数据,并学习出更好的策略。 总结 AWR和IQL都是有前景的离线强化学习算法,可以从固定的离线数据集中学习策略,而无需与环境进行交互。它们通过对数据中的动作进行加权来约束学习到的策略,使其更接近数据收集策略。 AWR使用蒙特卡洛优势估计和标准对数似然目标,而IQL使用TD学习、非对称值损失和加权对数似然。IQL通常在性能上优于AWR,因为它避免了蒙特卡洛估计的高方差问题,并允许学习到的策略超越数据收集策略。 在实践中,离线RL算法通常很难调整和评估。超参数(如AWR中的alpha和IQL中的tau)可以显著影响性能,需要仔细调整。离线策略评估也是一个开放的研究问题,没有一个通用的可靠方法。常见的策略包括在实际环境中执行策略(昂贵且有风险)、在准确的模拟器中评估策略(需要大量工程)或使用启发式方法(不可靠)。 尽管存在这些挑战,离线RL在许多现实世界的应用中都很有前景,如医疗保健、教育、机器人等领域,在这些领域获得在线交互数据通常是困难的、昂贵的或有风险的。随着更多算法的发展和基准测试的进行,离线RL有望在未来得到更广泛的应用。 Offline learning 具体案例 案例:使用离线强化学习优化LinkedIn的通知发送策略 问题描述: LinkedIn希望优化其通知发送策略,以最大化用户参与度和满意度。具体来说,他们希望学习一个策略,在给定用户状态的情况下,决定是否向该用户发送特定类型的通知。然而,在实际系统中进行在线探索和学习可能会损害用户体验并带来业务风险。因此,LinkedIn决定使用离线强化学习方法,利用历史用户交互日志作为离线数据集来学习最优策略。 解决方案: LinkedIn的研究团队采用了多目标优势加权回归(MO-AWR)算法来解决这个问题。MO-AWR是对标准AWR算法的扩展,可以处理多个可能冲突的目标(如最大化用户参与度和最小化通知数量)。 算法流程如下: 从历史用户交互日志中构建离线数据集,其中每个数据点包括用户状态特征、通知发送决策和相应的奖励(如用户参与度指标)。 对于每个目标,使用离线数据拟合一个Q函数,估计在给定状态下采取特定动作的期望累积奖励。这里使用了时序差分(TD)学习来更新Q函数。 使用拟合的Q函数计算每个状态-动作对的多目标优势值。优势值衡量了一个动作相对于平均策略的好坏程度。 训练一个策略网络来最大化加权的多目标优势值之和。权重参数控制不同目标之间的权衡。 评估学习到的策略在离线数据上的性能,并使用启发式方法进行超参数调优(如调整目标权重)。 将学习到的策略部署到实际系统中,并持续监控其在线性能。如果需要,可以使用新收集的数据重新训练策略。 示例代码: 以下是使用PyTorch实现MO-AWR算法的简化示例代码: import torch import torch.nn as nn import torch.optim as optimclass QNetwork(nn.Module):# Q函数网络def __init__(self, state_dim, action_dim):super(QNetwork, self).__init__()self.fc1 nn.Linear(state_dim, 128)self.fc2 nn.Linear(128, 128)self.fc3 nn.Linear(128, action_dim)def forward(self, state):x torch.relu(self.fc1(state))x torch.relu(self.fc2(x))q_values self.fc3(x)return q_valuesclass PolicyNetwork(nn.Module):# 策略网络def __init__(self, state_dim, action_dim):super(PolicyNetwork, self).__init__()self.fc1 nn.Linear(state_dim, 128)self.fc2 nn.Linear(128, 128)self.fc3 nn.Linear(128, action_dim)def forward(self, state):x torch.relu(self.fc1(state))x torch.relu(self.fc2(x))action_probs torch.softmax(self.fc3(x), dim-1)return action_probsdef train_moawr(offline_dataset, num_objectives, weights, num_iterations):state_dim offline_dataset[0][0].shape[0] # 状态维度action_dim len(offline_dataset[0][1]) # 动作维度# 初始化Q函数和策略网络q_networks [QNetwork(state_dim, action_dim) for _ in range(num_objectives)]policy_network PolicyNetwork(state_dim, action_dim)# 定义优化器q_optimizers [optim.Adam(q_net.parameters(), lr1e-3) for q_net in q_networks] policy_optimizer optim.Adam(policy_network.parameters(), lr1e-3)# 训练循环for i in range(num_iterations):# 从离线数据集中采样一个批次的数据batch_states, batch_actions, batch_rewards sample_batch(offline_dataset)# 计算Q值和优势值q_values_list [q_net(batch_states) for q_net in q_networks]advantages_list [q_values[range(len(batch_actions)), batch_actions] - torch.mean(q_values, dim1) for q_values in q_values_list]# 计算加权的多目标优势值weighted_advantages torch.sum(torch.stack([adv * w for adv, w in zip(advantages_list, weights)]), dim0)# 更新Q函数for j in range(num_objectives):q_targets batch_rewards[:, j] gamma * torch.max(q_networks[j](batch_next_states), dim1)[0]q_loss nn.MSELoss()(q_values_list[j][range(len(batch_actions)), batch_actions], q_targets)q_optimizers[j].zero_grad()q_loss.backward()q_optimizers[j].step()# 更新策略网络policy_log_probs torch.log(policy_network(batch_states)[range(len(batch_actions)), batch_actions])policy_loss -torch.mean(policy_log_probs * torch.exp(weighted_advantages / alpha))policy_optimizer.zero_grad()policy_loss.backward()policy_optimizer.step()在这个示例中,我们首先定义了Q函数网络和策略网络的架构。然后,我们实现了MO-AWR算法的训练循环。在每个迭代中,我们从离线数据集中采样一个批次的数据,计算每个目标的Q值和优势值,并根据给定的权重计算加权的多目标优势值。接下来,我们使用TD误差更新每个目标的Q函数,并使用加权优势值更新策略网络以最大化加权对数似然。 通过调整目标权重,我们可以控制学习到的策略在不同目标之间的权衡。例如,如果我们希望更重视用户参与度而不是最小化通知数量,我们可以为参与度目标分配更高的权重。 这个案例展示了如何使用离线强化学习来优化LinkedIn的通知发送策略。通过利用历史用户交互数据并应用MO-AWR算法,LinkedIn能够学习到一个在多个目标之间权衡的最优策略,而无需在实际系统中进行探索。这种离线学习方法减少了在线试错的风险,提高了策略更新的效率和安全性。同时,通过持续监控和重训练,离线学习到的策略也可以适应用户行为的变化和系统的演进。
http://www.zqtcl.cn/news/412828/

相关文章:

  • 商务网站建设有哪几个步骤拼多多网页qq登录
  • 厦门商城网站开发宜昌小程序开发公司
  • 东莞沙田网站建设榆林网站建设价格
  • 无锡网站制作建设wordpress写文章模板
  • 企业网站销售提升学历要多少钱
  • 打开建设银行官方网站首页wordpress 站库分离
  • 电子商务网站建设的试卷设计之家app
  • 抚养网站建设黔东南小程序开发公司
  • 网站建设相关行业有哪些wordpress 内容管理系统
  • 网站 备案地温州网站优化排名推广
  • 做网站的工作量国内 wordpress
  • 定制网站开发是什么大业推广网站
  • 网站建设每年需要交多少钱天津制作网站公司
  • 网站平台都有哪些wordpress 主题制作 视频
  • 中山网站建设方案家具网站开发目的
  • 教师个人网站建设建模培训多少钱
  • 个人网站可以做社交类型网站建设功能说明书
  • 微站是什么移动网站 拉新
  • 黑龙江省农业网站建设情况wordpress4.94主题上传不显示
  • 个人网站的域名重庆建立公司网站
  • 什么做网站做个多少钱啊百度网盘app
  • 做网站的公司挣钱吗石家庄房产
  • 烟台网站建设设计公司安徽建设工程信息网查询平台蔡庆树
  • 微信链接的微网站怎么做西安企业网站制作价格
  • uniapp怎么做淘客网站表格布局的网站
  • wordpress侧栏图片插件提升seo搜索排名
  • 如何查询网站的域名注册邹城建设银行网站
  • 招生门户网站建设方案国家企业信用信息公示信息查询网
  • 用dw做淘客网站的步骤移动互联网应用技术
  • 企业合作的响应式网站石家庄网站建设推广