rl

Deep Reinforcement Learning for Dialogue Generation

旧巷老猫 提交于 2019-12-08 05:41:59
这是EMNLP2016的一片关于用reinforcement learning(RL)做dialogue generation的文章,paper链接 https://arxiv.org/abs/1606.01541 ,一作是仍然是李纪为大神(据说是stanford CS方向第一个3年毕业的PHD),现在是香侬科技的创始人,作者homepage http://stanford.edu/~jiweil/index.html ,code还没有被released出来(github上面有很多实现的版本),但是作者released很多其他的dialogue generation的code https://github.com/jiweil/Neural-Dialogue-Generation 。 个人瞎扯: 看这篇文章的原因。 1.这篇文章是比较早利用RL来做sequence生成的文章。 2.文章发表于NLP方向的顶会EMNLP2016,并且google citation很高。 文章要做的事情(dialogue generation): 输入:sentence(question)    输出:sentence(answer) 章show的可视化的实验结果如下所示。 与state-of-the-art方法对比结果如下所示。 method 文章给出了Dialogue simulation

最大回文子串manacher算法python

亡梦爱人 提交于 2019-12-04 20:16:07
关于最大回文子串问题,有两种处理方法: 1.以每个字符为中心,向两边寻找回文子串,遍历整个数组后,返回最长的。 该方法时间复杂度较大为o(n^2) 2.一个中等难度的动态规划算法:马拉车 step1:给每个字符左右都加上特殊字符比如'#',处理后,能使字符串s长度为奇 step2:现在的问题变成如何高效求得RL数组 定义:RL:是一个回文半径数组 RL[i]:以第i个字符为对称轴的回文半径 maxRight:当前访问到的所有回文串中最右边的字符位置 Pos:maxRight对应回文串的对称轴所在位置 i:第i个字符 j:i关于pos的对称点 (1):i在maxright右边:就是说以i为对称轴的回文串还没被访问。 这时,以i为中心向两边扩展,当达到边界or字符不相等时停止。 (2):i在maxright左边:扫到了一部分以i为对称轴的子串。 这时,令以i为对称轴的回文半径RL【i】=min(RL[j],maxright-i) 然后再以i为中心向两边扩展,直到左!=右且到达边界 最后更新maxright=max(maxright,RL[i]+i-1)且若maxright变,Pos会变为Pos=i 很抽象,上代码: # -*- coding:utf-8 -*- #@author:xinxinzhang def manacher(s): s='#'+'#'.join(s)+'#'

最长回文子串——Manacher 算法

一个人想着一个人 提交于 2019-12-04 20:15:50
原文网址: https://segmentfault.com/a/1190000003914228 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。 如果一个字符串正着读和反着读是一样的,那它就是回文串。下面是一些回文串的实例: 12321 a aba abba aaaa tattarrattat(牛津英语词典中最长的回文单词) 1. Brute-force 解法 对于最长回文子串问题,最简单粗暴的办法是:找到字符串的所有子串,遍历每一个子串以验证它们是否为回文串。一个子串由子串的起点和终点确定,因此对于一个长度为n的字符串,共有n^2个子串。这些子串的平均长度大约是n/2,因此这个解法的时间复杂度是O(n^3)。 2. 改进的方法 显然所有的回文串都是对称的。长度为奇数回文串以最中间字符的位置为对称轴左右对称,而长度为偶数的回文串的对称轴在中间两个字符之间的空隙。可否利用这种对称性来提高算法效率呢?答案是肯定的。我们知道整个字符串中的所有字符,以及字符间的空隙,都可能是某个回文子串的对称轴位置。可以遍历这些位置,在每个位置上同时向左和向右扩展,直到左右两边的字符不同,或者达到边界。对于一个长度为n的字符串,这样的位置一共有n+n-1=2n-1个,在每个位置上平均大约要进行n/4次字符比较,于是此算法的时间复杂度是O(n^2)。 3. Manacher

Django基础二,URL路由分发

匿名 (未验证) 提交于 2019-12-02 23:49:02
一 URL配置 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。   基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参数request,和wsgiref的environ类似,就是请求信息的所有内容 from page import views # 从个人新建app中导入views模块 urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 注意: Django 2.0版本中的路由系统已经替换成下面的写法,但是django2.0是向下兼容1.x版本的语法的( 官方文档 ): from django.urls import path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/',

分裂基快速傅里叶变换

时间秒杀一切 提交于 2019-12-02 06:34:09
一、功能 计算复序列的分裂基快速傅里叶变换。 二、方法简介 序列 \(x(n)(n=0,1,...,N-1)\) 的离散傅里叶变换定义为 \[ X(k)=\sum_{n=0}^{N-1}x(n)W_{N}^{nk}, \qquad k=0,1,...,N-1 \] 其中 \(W_{N}^{nk}=e^{-j\frac{2\pi nk}{N}}\) ,将 \(X(k)\) 按序号 \(k\) 的奇偶分成两组。当 \(k\) 为偶数时,进行基2频率抽取分解, \(X(k)\) 可表示为 \[ X(2k)=\sum_{n=0}^{N/2-1}[x(n)+x(n+\frac{N}{2})]W_{N}^{2nk} \ , \ k=0,1,...,\frac{N}{2}-1 \] 当 \(k\) 为奇数时进行基4 频率抽取分解,$ X(k)$可表示为 \[ \left\{\begin{matrix}X(4k+1)=\sum_{n=0}^{N/4-1}{[x(n)-x(n+\frac{N}{2})]-j[x(n+\frac{N}{4})-x(n+\frac{3N}{4})]}W_{N}^{n}W_{N}^{4nk}\\ X(4k+3)=\sum_{n=0}^{N/4-1}{[x(n)-x(n+\frac{N}{2})]+j[x(n+\frac{N}{4})-x(n+\frac{3N}{4})]

第59题:螺旋矩阵 II

▼魔方 西西 提交于 2019-12-01 01:43:06
一. 问题描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 二. 解题思路 按照模拟往矩阵内填数依次填写 * 步骤一:将数组依次填入到rf行中lf~ll列中,rf=rf+1,判断数组填完; * 步骤二:将数组依次填入到ll列的rf~rl行中,ll=ll-1,判断数组填完; * 步骤三:将数组依次填入到rl行中ll~lf列中,rl=rl-1,判断数组填完; * 步骤四:将数组依次填入到lf列的rl~rf行中,lf=lf+1,判断数组填完; * 第五步:重复步骤一 三. Java代码 class Solution { public int[][] generateMatrix(int n) { int rf=0,rl=n-1; //表示行的标记 int lf=0,ll=n-1; //表示列的标记 int number=1; int[][] arr=new int[n][n]; while(true) { for(int i=lf;i<=ll&&number<=(n*n);i++) { arr[rf][i]=number; number++; } rf=rf+1; for(int i=rf;i<=rl&&number<=

Django基础二之URL路由系统

北城余情 提交于 2019-11-30 10:29:30
一 URL配置   Django 1.11版本 URLConf官方文档   URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。   基本格式   from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参数request,和wsgiref的environ类似,就是请求信息的所有内容 urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ]   注意:   Django 2.0版本中的路由系统已经替换成下面的写法,但是django2.0是向下兼容1.x版本的语法的( 官方文档 ): from django.urls import path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views

RL 四

空扰寡人 提交于 2019-11-30 00:20:31
接下来可能就要涉及编程, 机器学习, 我建议用python。 当然,我不建议你把python当成一门课程来折腾, 建议能够敲abc就可以开始了。 [题外话:tou疼, 我现在都还在吐嘈我们将英语当成了理工科的公式来学习, 请问表达需要啥语法, 只要对面能够听懂就好了呀,我想说从发出了a b c的读音,你就懂英语了] 其实人工智能的教材现在网上比较多,但是国内的很多要收费,比如 床长 的教程。 我对技术人员都是尊重,但是我没有交这360块钱。 要给钱的教材,我认为就是阻碍发展, 阻碍行业发展的可能就是教师,因为很多培训都是为了收钱而培训,脱离了应用场景。 大家都知道,做教材其实不容易,如果有能力的朋友可以帮助一下做教程的朋友,但我不认为,如果收了钱,教程就能提高好多。 不说了,我打算在这个github项目 - DQN Adventure: from Zero to State of the Art 上面最系统化的学习,大家跟上脚步(假装知道零基础的你也看到这里了,哈哈)。 python语言搭建环境,大家可以看看anconda的搭建, 基本过程和普通的应用程序安装, 应该是一个道理。 然后 pip install jupyter 然后 jupyter notebook 然后,python需要安装一些程序包,大概就是一句话,只要是哪句import语句报错,就命令收入pip install

RL 五

无人久伴 提交于 2019-11-30 00:20:20
其实,看开源项目,有一个不好的地方,就是维护相对比较不太友好。 特别是依赖的环境版本一直在变动的时候,这个弊端就非常明显。 好了,万事都有两面,我们可以通过这些版本的更迭,来看到深度学习的发展方向。拿过来就用,没得挑战性。 我这次对 项目 第一节进行了维护,并上传到 gitee 上面,然后就来将我的计算机环境分享出来。 由于pytorch需要cuda这些环境,其实其他环境变动不太大,但是cuda的cudnn的api变动相当大,需要注意版本匹配。 系统版本: $ sudo lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial CPU信息: $ lscpu Architecture: x86_64 CPU op-mode ( s ) : 32-bit, 64-bit Byte Order: Little Endian CPU ( s ) : 8 On-line CPU ( s ) list: 0-7 Thread ( s ) per core: 2 .. . .. . Model name: Intel ( R ) Core ( TM ) i7-7700K CPU @ 4

从RL角度看MDP过程

百般思念 提交于 2019-11-29 08:19:24
Markov Reward Processes 任何部分可观测问题都可以转化为马尔可夫过程 MDP化 Markov Property 状态转移概率 -> 矩阵 告诉我们在当前状态下,有多大概率到达哪个state a tuple(S,P) non-stationary MDP 不稳定的动态过程 如概率变化 Reward a tuple (S, P, R, γ) return G 强化学习的目标 γ:折扣因子 所有的returns都是有限的 value function v(s) -> 长期的reward 期望值 Bellman方程 矩阵表示: v = R + γPv (P为状态转移概率矩阵) -> 线性方程 可求解v Action空间 a tuple (S, A, P, R, γ) A:有限action的集合 policy:完全定义agent的行为 -> 决策概率 vs 环境的状态转移概率 v_Π(s):基于当前policy下的value function 在s状态下的一个action可能到达s1,也可能到达s2 离开一个state时,采取不同的action可能得到不同的reward “你采取一个action,环境就给你掷一个骰子,告诉你在哪个state结束” Best policy v_*(s) = max_Π v_Π(s) v_Π(s) 是在policy下 各个action对应的