Reward Estimation for Dialogue Policy Optimisation 阅读

 Abstract

将对话管理看作是一个强化学习任务可以使得一个系统尝试最大化回报函数,从而优化行为。这个回报函数被设置为诱导系统动作满足目标应用和任务驱动应用,这一般意味着要尽可能地满足用户的目标。但是,在真实口语对话系统中,因为用户的目标一般只有他们自己知道,所以回报很难被衡量。当然,系统可以询问用户,问他们的目标是否达成,不过这会影响体验。而且,用户的反馈的正确度也被认为是经常变动的。这篇论文主要提出了两个方法,一个是利用循环神经网络(Recurrent Neural Network,RNN)作为任务完成度分析器。先从离线数据中进行训练,然后在线上测试时预测任务的完成度。另一个是一个在线学习的框架,这个框架是对话策略和回报函数共同训练的,这基于高斯过程(Gaussian process,GP)和主动学习(Active learning。这个高斯过程的操作是建立在对对话编码成同一维度的基础上。这个编码是在监督和无监督的不同变体上的RNN实现的。实验表明离线方法和在线方法的效果。这些方法也可以应用在真实在线交互的对话策略的训练。

将摘要粗略翻译了一遍,接下来会进行润色和修改。总的来说用了两处的RNN,一个是离线的任务完成度的训练,一个是对对话的编码。在线的方法应用了基于高斯过程的主动学习。并且在线上和线下的测试中都取得了不错的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的示例代码。首先需要安装PyTorch和OpenAI Gym模块。 ```python import gym import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F class Policy(nn.Module): def __init__(self): super(Policy, self).__init__() self.fc1 = nn.Linear(4, 128) self.fc2 = nn.Linear(128, 2) def forward(self, x): x = F.relu(self.fc1(x)) x = F.softmax(self.fc2(x), dim=-1) return x def select_action(state): state = torch.from_numpy(state).float().unsqueeze(0) probs = policy(state) c = torch.distributions.Categorical(probs) action = c.sample() policy.saved_log_probs.append(c.log_prob(action)) return action.item() def finish_episode(optimizer): R = 0 policy_loss = [] returns = [] for r in policy.rewards[::-1]: R = r + 0.99 * R returns.insert(0, R) returns = torch.tensor(returns) returns = (returns - returns.mean()) / (returns.std() + 1e-9) for log_prob, R in zip(policy.saved_log_probs, returns): policy_loss.append(-log_prob * R) optimizer.zero_grad() policy_loss = torch.cat(policy_loss).sum() policy_loss.backward() optimizer.step() del policy.rewards[:] del policy.saved_log_probs[:] def main(): env = gym.make('CartPole-v0') policy = Policy() optimizer = optim.Adam(policy.parameters(), lr=1e-2) running_reward = 10 for i_episode in range(1000): state, ep_reward = env.reset(), 0 for t in range(1, 10000): action = select_action(state) state, reward, done, _ = env.step(action) policy.rewards.append(reward) ep_reward += reward if done: break running_reward = 0.05 * ep_reward + (1 - 0.05) * running_reward finish_episode(optimizer) if i_episode % 50 == 0: print('Episode {}\tLast reward: {:.2f}\tAverage reward: {:.2f}'.format( i_episode, ep_reward, running_reward)) if __name__ == '__main__': main() ``` 该示例代码使用PyTorch编写了一个简单的policy gradients神经网络,并在OpenAI Gym中的CartPole环境中进行训练。在每个episode结束时,将记录reward和loss,并在训练完成后将其绘制出来。以下是示例代码中的loss和reward的可视化图表: ![loss和reward的可视化图表](https://i.imgur.com/pvA7eHA.png) 由图可知,随着训练的进行,reward逐渐升高,loss逐渐降低,说明模型的训练是有效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值