研究|对偶学习:一种新的机器学习范式 

this blog copy from: http://www.msra.cn/zh-cn/news/blogs/2016/12/dual-learning-20161207.aspx

秦涛

作者简介

秦涛博士,现任微软亚洲研究院主管研究员。他和他的小组的研究领域是机器学习和人工智能,研究重点是深度学习和强化学习的算法设计、理论分析及在实际问题中的应用。他在国际顶级会议和期刊上发表学术论文80余篇,曾任SIGIR、ACML、AAMAS领域主席,担任多个国际学术大会程序委员会成员,包括ICML、NIPS、KDD、IJCAI、AAAI、WSDM、EC、SIGIR、AAMAS、WINE,曾任多个国际学术研讨会联合主席。他是IEEE、ACM会员,中国科学技术大学兼职教授和博士生导师。

问题:如何降低对大规模标注数据的依赖性

近年来,以深度学习为代表的人工智能技术取得了长足的进步,在很多应用取得了巨大的成功。在图像识别中,深度学习已经超过了人类的水平,最近微软刚刚宣布在语音识别中也超过了人类的平均水平,在机器翻译中基于深度学习的模型也超过了以前的统计机器翻译,另外基于深度学习的阿法狗也打败了围棋世界冠军李世石。

深度学习之所以能够取得巨大的成功,一个非常重要的因素就是大数据,特别是大规模的带标签的数据。例如在图像识别中,深度神经网络使用上百万的带标签的图像进行训练,在机器翻译中我们会用上千万的双语句对进行训练,在围棋中我们会用上千万的专业棋手的落子进行训练……这种做法有两个局限性。首先,人工标注获取标签的代价很高。例如我们考虑机器翻译这个任务:现在市场人工翻译一个单词的价格差不多是5到10美分,如果一个句子的平均长度为三十个单词,那么1000万个句子人工翻译的代价差不多是7.5美分×30×1000万,约等于2200万美元。现在一个商业公司的翻译引擎通常支持上百种语言的相互翻译,为了训练这样规模的翻译模型,人工标注的代价就会达到上千亿美元。其次,在很多任务中,我们没办法收集到大规模的标注数据,例如在医疗中或在小语种的相互翻译。为了使深度学习能够取得更广泛的成功,我们需要降低其对大规模标注数据的依赖性。为了解决这个问题,我们提出了一种新的学习范式,我们把它称作对偶学习。

另辟蹊径,将未标注数据用起来

我们注意到,很多人工智能的应用涉及两个互为对偶的任务,例如机器翻译中从中文到英文翻译和从英文到中文的翻译互为对偶、语音处理中语音识别和语音合成互为对偶、图像理解中基于图像生成文本和基于文本生成图像互为对偶、问答系统中回答问题和生成问题互为对偶,以及在搜索引擎中给检索词查找相关的网页和给网页生成关键词互为对偶。这些互为对偶的人工智能任务可以形成一个闭环,使从没有标注的数据中进行学习成为可能。

对偶学习的最关键一点在于,给定一个原始任务模型,其对偶任务的模型可以给其提供反馈;同样的,给定一个对偶任务的模型,其原始任务的模型也可以给该对偶任务的模型提供反馈;从而这两个互为对偶的任务可以相互提供反馈,相互学习、相互提高。

下面我们还是以机器翻译为例子来说明对偶学习的基本思想。

考虑一个对偶翻译游戏,里面有两个玩家小明和爱丽丝,如下图所示。小明只能讲中文,爱丽丝只会讲英文,他们两个人一起希望能够提高英文到中文的翻译模型f和中文到英文的翻译模型g。给定一个英文的句子x,爱丽丝首先通过f把这个句子翻译成中文句子y1,然后把这个中文的句子发给小明。因为没有标注,所以小明不知道正确的翻译是什么,但是小明可以知道,这个中文的句子是不是语法正确、符不符合中文的语言模型,这些信息都能帮助小明大概判断翻译模型f是不是做的好。然后小明再把这个中文的句子y1通过翻译模型g翻译成一个新的英文句子x1,并发给爱丽丝。通过比较x和x1是不是相似,爱丽丝就能够知道翻译模型f和g是不是做得好,尽管x只是一个没有标注的句子。因此,通过这样一个对偶游戏的过程,我们能够从没有标注的数据上获得反馈,从而知道如何提高机器学习模型。

实际上这个对偶游戏和强化学习的过程比较类似。在强化学习中,我们希望提高我们的策略以最大化长远的回报,但是没有标注的样本告诉我们在某个状态x哪个动作y是正确的。我们只有通过使用这个策略在不同的状态下执行不同的动作,观测该动作带来的回报,从而改善我们的策略。在以上这个翻译对偶游戏中,两个翻译模型就是我们的策略,因为没有标注的双语句对,所以我们不能直接改善它们。这个对偶游戏把一个没有标注的句子x,先翻译成另外一种语言的句子y1,再翻译回来为x1,这里x就是强化学习中的状态,y1和x1就是我们的策略所执行的动作,x和x1的相似度就是我们获得的回报。

我们可以用已有的强化学习的算法来训练我们这两个翻译模型,比如策略梯度方法。策略梯度方法的基本思想非常简单:如果我们在执行某个动作之后,观测到了一个很大的回报,我们就通过调整策略(在当前策略函数的参数上加上它的梯度)来增加这个状态下执行这个动作的概率;相反,如果我们在执行某个动作之后,观测到了一个很小的回报,甚至是负的回报,那么我们就需要调整策略(在当前策略函数的参数上减去它的梯度),以降低在这个状态下执行这个动作的概率。

实测与展望

我们在一个英语-法语翻译的公共数据集上测试了对偶学习的有效性,并和当前最好的算法(NMT,基于深度神经网络算法)进行了对比。这个数据集的训练集有1200万个英法的双语句对,NMT用了所有的1200万个双语句对训练模型。我们的对偶算法只用了不到10%的双语句对初始化两个翻译模型f和g,再用没有标注的英法语句进行训练。如下图所示,我们的对偶学习算法只用10%的标注数据就达到了和NMT用上所有标注数据而取得的相似的甚至更好的翻译准确度,也就是说我们可以把数据标注的代价从2000万美元降到200万美元左右。这个结果说明了我们提出的对偶学习方法能够非常有效地利用未标注的数据。

对偶学习的基本思想是两个对偶的任务能形成一个闭环反馈系统,使我们得以从未标注的数据上获得反馈信息,进而利用该反馈信息提高对偶任务中的两个机器学习模型。该思想具有普适性,可以扩展到多个相关任务上面,前提是只要它们能形成一个闭环反馈系统。例如,从中文翻译到英文,然后从英文翻译到日文,再从日文翻译到中文。另外一个例子是从图片转化成文字,然后从文字转成语音,再从语音转化成图片。

对偶学习(dual learning)和已有的学习范式有很大的不同。首先,监督学习(supervised learning)只能从标注的数据进行学习,只涉及一个学习任务;而对偶学习涉及至少两个学习任务,可以从未标注的数据进行学习。其次,半监督学习(semi-supervised learning)尽管可以对未标注的样本生成伪标签,但无法知道这些伪标签的好坏,而对偶学习通过对偶游戏生成的反馈(例如对偶翻译中x和x1的相似性)能知道中间过程产生的伪标签(y1)的好坏,因而可以更有效地利用未标注的数据。我们甚至可以说,对偶学习在某种程度上是把未标注的数据当作带标签的数据来使用。第三,对偶学习和多任务学习(multi-task learning)也不相同。尽管多任务学习也是同时学习多个任务共的模型,但这些任务必须共享相同的输入空间,而对偶学习对输入空间没有要求,只要这些任务能形成一个闭环系统即可。第四,对偶学习和迁移学习(transfer learning)也很不一样。迁移学习用一个或多个相关的任务来辅助主要任务的学习,而在对偶学习中,多个任务是相互帮助、相互提高,并没有主次之分。因此,对偶学习是一个全新的学习范式,我们预计其会对机器学习领域产生很大的影响,特别是考虑到以下两个点。

第一, 很多深度学习的研究人员认为人工智能和深度学习的下一个突破是从未标注的数据进行学习。由于未标注的数据没有标签信息,无监督学习主要聚焦在聚类、降维等问题,因此,如何从未标注的数据进行端到端的学习(把数据映射到标签,如分类、预测等任务)一直没有很好方法。我们提出的对偶学习提供了一个利用未标注数据进行端到端学习的有效方式。

第二, 近年来强化学习取得了很大的成功,吸引了众多的研究人员和工业界人员的关注。但是到目前为止,强化学习的成功主要是在各种游戏上,因为在游戏中规则定义得非常清楚,并且很容易通过玩大量的游戏获取回报信息(例如Atari游戏中每一步的得分,围棋中最后的输赢),从而改善游戏策略。然而在游戏以外的实际应用中并没有规范定义的规则,也很难获得回报信息(或者获取的代价很高),因而强化学习在复杂的实际应用中的成功还是比较有限。而对偶学习提供了一种为强化学习获取奖励信息的方式,并证实了强化学习在复杂应用(如翻译)中成功的可能。

更多详细信息可参见我们NIPS 2016 论文。Di He, Yingce Xia, Tao Qin, Liwei Wang, Nenghai Yu, Tie-Yan Liu, and Wei-Ying Ma, Dual Learning for Machine Translation, NIPS 2016. (https://papers.nips.cc/paper/6469-dual-learning-for-machine-translation )


对偶学习推动人工智能的新浪潮

刘铁岩

this blog from: http://weibo.com/ttarticle/p/show?id=2309404055907557312894

谢谢大家,感谢组委会的邀请,让我有这个机会与大家分享我们的研究工作。我刚才坐在台下聆听了孙茂松老师和 David 的报告,都获益匪浅。首先,老师非常全面的回顾了机器翻译的历史,又有高屋建瓴的讨论,让我们从中学到了很多的东西。其次,很荣幸我的报告排在 David 之后,做优化和机器学习的同事们应该都非常熟悉 David 的 No Free Lunch Theory,尤其在今天全世界都希望用神经网络这「一招鲜」来解决所有问题的时候,更应该仔细琢磨一下这个定理,对大家会有很大的启示。

今天我分享的主题是对偶学习。在对这个主题进行深入讨论之前,我想同大家一起回顾一下最近这段时间人工智能领域的一些飞速发展。我举几个例子,首先是语音识别。

可能很多同学都看到过这则新闻,微软研究院在语音识别方面取得了重大突破,第一次机器学习算法在日常对话场景下取得了和人一样好的语音识别能力,词错误率降低至 5.9%

第二个例子是有关图像识别和物体分割,在这方面微软研究院同样也有世界领先的研究成果

2015 年,我们研究院发明的 ResNet 算法在 ImageNet 比赛中力拔头筹,超过了人类的识别水平。人眼辨识图像的错误率大概为 5.1%,而 ResNet 的错误率低至 3.5%。今年,在 COCO 物体分割竞赛中,我们研究院同样获得了第一名,和第二名拉开了很大的差距。物体分割比图像分类更难,不但要识别出图片里有什么,还要能够把它的轮廓勾勒出来。

第三个例子是机器翻译,最近相关产业界的发展突飞猛进。这一方向微软同样有着世界领先的技术。

比如在微软的 Skype Translator 软件里,对话双方可以用不同语言进行交流,系统实现实时语音翻译。如果今天会场上大家使用 Skype Translator 的话,可能就不需要聘请同声传译公司了。

第四个例子,最近这段时间人工智能之所以吸引了那么多的眼球,一个重要原因就是它在一些需要极高智商的比赛中取得了关键性胜利。比如 AlphaGo 4:1 战胜了围棋世界冠军李世石。在这场人机大战之后,DeepMind 的科学家没有停止他们的训练,据说今天的 AlphaGo 已经达到了人类专业围棋十三段的水平,十三段对决九段那简直就是秒杀。

人工智能的这些成果非常令人振奋,那么这些成果背后又是怎样的技术呢?这就不得不提到深度学习和增强学习。

深度学习使用的是非常复杂,层次很深,容量很大的非线性模型,如深层神经网络,这样的模型可以很好的拟合大量的训练数据,从而在很多识别任务中表现突出。增强学习是一种持续学习技术,它不断地和环境进行交互,根据环境的反馈更新模型。这两种技术还可以相互结合,我们称之为深度增强学习。AlphaGo 背后的核心技术就是深度增强学习。那么,到底深度学习和增强学习是不是真的已经非常完美,可以解决我们面临的所有人工智能问题呢?

其实答案是否定的。仔细分析一下,就会发现这两项技术都存在本质的弱点。首先,目前深度学习的成功离不开大量的有标签训练数据。但是获得海量有标签数据的代价是非常高的,在某些特定的邻域甚至是不可能完成的任务。比如医疗领域的疑难杂症,本身样本就非常少,有钱也无法取得大量的有标签数据。正所谓成也萧何,败也萧何,大数据推动了深度学习的成功,但也成为了深度学习进一步发展的瓶颈。其次,增强学习虽然不需要利用传统意义上的有标签数据,但是它的学习效率并不高,需要跟环境进行大量交互从而获得反馈用以更新模型。然而,有时和环境的频繁交互并不现实。比如,在我们学开车的时候,依赖于频繁地和环境(周围的路况,其他的车辆)进行交互是很危险的,可能还没学会开车就已经发生交通事故了。这就解释了为什么增强学习取得成功的领域很多都是模拟环境,比如说打电子游戏、下围棋等等,它们规则明确,可以无限次重复。但当把增强学习应用到一些实际场景里,需要和实际用户进行交互,还可能带有无法挽回的风险,是不是还能取得同样的效果呢?目前还没有被证实。

了解了深度学习和增强学习的弱点以后,我们不禁要问:有没有一种新的学习范式可以克服他们的弱点?能否可以不依赖于那么多有标签的数据,能否不需要跟真实环境做那么多次交互,就可以学到有效的模型?为了回答这个问题,我们首先来对现有的人工智能任务做一个仔细的分析。

通过分析,我们发现了一个非常重要的现象:现实中,有意义、有实用价值的人工智能任务,往往是成对出现的。比如在做机器翻译的时候,我们关心从英语翻译到汉语,我们同样也关心从汉语翻译回英语。再比如,在语音领域,我们既关心语音识别的问题,也关心语音合成的问题(TTS)。图像领域,我们既关心图像识别,也关心图像生成。类似这样的对偶任务还有很多,比如在对话引擎、搜索引擎等场景中都有对偶任务。这种现象给了我们什么启示呢?

第一点,由于存在特殊的对偶结构,两个任务可以互相提供反馈信息,而这些反馈信息可以用来训练深度学习模型。也就是说,即便没有人为标注的数据,有了对偶结构,我们也可以做深度学习了。第二,这两个对偶任务,可以互相充当对方的环境,这样我们就不必跟真实的环境做交互,这两个对偶任务之间的交互就可以产生有效的反馈信号了。总而言之,如果我们能充分地利用对偶结构,就有望解决刚才提到的深度学习和增强学习的瓶颈——训练数据从哪里来、和环境的交互怎么持续进行下去。

基于以上的思考,我们提出了一个新的学习范式,叫做对偶学习。它的思路非常简单。我们假设学习过程中有两个智能体,其中一个智能体从事的是原任务,就是从 X 到 Y 的学习任务;而另外一个智能体从事的是对偶任务,也就是从 Y 到 X 的学习任务。假如我们把 X 用第一个智能体的模型 F 映射成 Y,再利用第二个智能体的模型 G 把它反映射成 X’。通过比较 X 和 X'我们其实就可以获得非常有用的反馈信号。

其实这个做法在刚才孙茂松老师的演讲中已经提到过,有人曾经用这种翻过去再翻回来的方式判断机器翻译模型的好坏。如果 X 和 X'的差异很大,就说明这个翻译系统不靠谱,说明模型 F 和 G 至少有一个不好;如果 X 和 X'很接近,就给了我们一个利好的消息,就是这两个模型都不错。除了比较 X 和 X'的差异,其实还有很多其他的反馈信息可以被利用。下面我们以机器翻译为例,做个详细的说明。

假设我们有一个英文的句子 X,通过翻译模型 F 的作用,得到一个中文句子 Y。那么 Y 作为一个中文句子是不是符合语法,是不是顺畅,X 到 Y 之间的关系是否和英汉词典一致等等,都可以作为反馈信息。同样,当我们用模型 G 把 Y 再变成英文句子 X'以后,也可以去衡量 X'是不是符合语法,是否顺畅、X'与 Y 的关系是否与英汉词典一致,以及 X'和 X 是否相似等等,都可以作为反馈信息。利用这些反馈信息,我们可以使用包括 Policy Gradient 在内的方法,来一轮一轮地更新我们的模型,直到最终得到两个满意的模型。

上面的这个过程可以无限循环下去,每次随机地抽选一个单语语句,做对偶学习,更新模型,然后再抽选下一个单语语句,进行对偶学习。那么这个过程会不会收敛呢?其答案是肯定的,以机器翻译为例,我们可以证明,只要机器翻译模型 F 和 G 的解码部分都使用的是随机算法,比如 beam search,这个对偶学习过程就一定是收敛的,也就是说你最终会学到两个稳定的模型 F 和 G。

那么接下来,我们就来看看这样的稳定模型是否有效。我们对比的算法是一个非常经典的神经机器翻译方法,而且用的是他们自己开源的代码。为了训练这个对比算法,我们使用了全部的双语标注数据。而我们自己提出的对偶学习算法并不需要双语标注数据,用单语数据就可以进行学习和迭代了。不过万事开头难,我们还是要给这个学习过程一个初始化。在初始化过程中,我们使用了 10% 的双语语料训练了一个相对比较弱的模型,然后用对偶学习的迭代过程不断提高它。也就是说,在初始化完成之后,我们就不再使用任何双语的标注语料了,而是靠两个对偶任务互相提供反馈信息进行模型训练。好,那我们来看看实验结果如何。

这两张图展示了法英和英法翻译的实验结果。以第一张图为例,最左边这根柱子对应的是用 10% 双语语料训练的初始模型;最右边这根柱子对应的是用 100% 双语语料训练的翻译模型。可以看出,初始模型确实比较弱。当我们使用对偶学习的方法,虽然不再利用任何有标注的双语数据,我们仍可以很快的接近甚至超过用百分之百的双语语料训练出来的模型。这个结果非常令人振奋。不仅如此,我们的实验发现,对偶学习更不容易饱和,因为无标签的单语数据非常丰富、非常多样化,因此通过不断调节单语数据源和调整反馈信息,可以持续提高模型的有效性。相反,使用双语语料比较容易饱和,过几遍数据以后,当信息被挖掘得足够充分,想要再提升模型精度就变得非常困难了。

如上这种振奋人心的结果是否只局限在机器翻译领域呢?其他领域是否也可以使用类似的方法得到提升呢?答案是肯定的,前面我提到的很多人工智能的任务都具有对偶结构,因此都可以用对偶学习来解决。

​ 这张 PPT 展示了在语音识别和语音合成方面如何定义反馈信号,从而进行对偶学习。

同样,这张 PPT 展示了在图像识别和图像生成方面如何定义反馈信号,从而进行对偶学习。

而这张 PPT 则展示了在对话引擎方面如何定义反馈信号,从而进行对偶学习。

说到这里,可能很多人会有疑问,虽然我们说对偶学习应用很宽泛,但是我们举的例子都有一个共同特点,就是真实的物理世界里确实存在两个对偶的任务。那么,如果我们要解决的问题并不存在一个天然的对偶任务怎么办?其实这个也没关系,即使没有物理上的对偶性,也可以通过虚拟的对偶性来完成对偶学习。我举两个例子。第一个是在深度神经网络领域常用的 Auto Encoder,仔细分析一下,它其实是对偶学习的一个特例。

Auto Encoder 原本的任务是要学习从输入层到隐层的一个映射(即编码),为了有效地学习这种映射,我们人为添加了一个虚拟任务:就是从隐层到输入层的逆映射(即解码,请注意图中的输出跟输入是一样的数据),这样就形成了机器学习的闭环。如果用对偶学习的语言描述一下,就是这张图:通过人为增加解码回路,使虚拟的对偶性得以成立,从而实现对偶学习。不过需要指出的是,Auto Encoder 和对偶学习有一些小差别,Auto Encoder 只关心单边任务的模型(也就是编码器),而在标准的对偶学习中,我们同时关心两个模型,想把它们都学好。

另一个例子是最近这两年特别火的——Generative Adversarial Nets(GAN)。它的目标是学习一个图像生成器,为此通过一个鉴别器不断给生成器提供反馈信息(也就是判别生成器生成的东西是真是假)。这样的博弈过程可以获得一个非常有效的图像生成器,用它可以自动制造训练样本来进行深度学习。很显然,GAN 也可以用对偶学习的语言进行描述,并且它也只是对偶学习的一个特例:它只关心单边生成器的有效性,而标准的对偶学习会同时关心生成器和鉴别器的有效性。

到此为止,无论是天然的对偶学习,还是虚拟的对偶学习,都是用来解决无监督学习问题的。那么,如果实际中我们的训练数据已经非常多了,对偶学习的思想还有用吗?我们的答案是:有用,而且非常有用。

让我们来看一下监督学习的例子。我们有一个样本 X,原任务是要预测它的标签 Y。为此,我们可以使用已有的很多监督学习技术加以实现。但如果我们再给它人为增加一条对偶回路会怎样呢?假设存在一个对偶任务,是从标签 Y 到 X 的预测。那么原任务和对偶任务其实存在着非常内在的联系。利用全概率公式和贝叶斯公式我们可以很容易知道,这两个任务背后的条件概率是互相约束的,利用这一点可以构造一个非常强的正则项来提高模型的学习效率。我们在机器翻译上的实验表明,加入这个对偶正则项,翻译模型的 BLEU score 有大幅度的提升。

同样的道理,对偶学习的思想甚至可以提高 inference 的性能。假设我们的模型已经训练好了,原任务是要用它来做预测。传统的做法是,给定一个样本 X,基于已有模型,寻找能够使其条件概率 P(Y|X) 最大化的 Y 作为 inference 的结果。如果我们运用对偶学习的思想,就会发现问题还可以反过来看。从对偶任务的模型出发,利用贝叶斯公式,同样也可以导出条件概率 P(Y|X) 来。按理说这两个条件概率应该是一致的,但是因为原任务和对偶任务是独立进行的,实际中它们可能并不完全一致,那么如果综合考虑这两个条件概率,我们的置信度会得到提升。相应地,inference 的结果也会得到明显的提升。

到此为止我们介绍了对偶学习在无监督学习上的应用、在没有天然对偶结构时如何使用虚拟回路实现对偶学习、以及如何把对偶学习的思想延展到有监督学习和 inference 之中。

事实上,对偶学习是一个新的学习范式,而不单是一个技巧。它和我们熟知的很多学习范式,如无监督学习、半监督学习、co-training、多任务学习、迁移学习都有联系,又有显著不同。它提供了一个看待这个世界的不同视角,对很多难题提供了新的解题思路。我们非常有信心对偶学习在更多的领域将会取得成功。我们组的同事们正在这个方向上积极探索,也希望在座的各位能够加入我们,一起去推动对偶学习的发展,掀起人工智能的新浪潮,谢谢大家!


Reference:

1. http://www.msra.cn/zh-cn/news/blogs/2016/12/dual-learning-20161207.aspx

2. http://weibo.com/ttarticle/p/show?id=2309404055907557312894

3. https://zhuanlan.zhihu.com/p/26996066

4. http://blog.csdn.net/liuyuemaicha/article/details/71698837

(zhuan) Some Talks about Dual Learning的更多相关文章

  1. 论文笔记之:DualGAN: Unsupervised Dual Learning for Image-to-Image Translation

    DualGAN: Unsupervised Dual Learning for Image-to-Image Translation 2017-06-12  21:29:06   引言部分: 本文提出 ...

  2. Machine Learning for Developers

    Machine Learning for Developers Most developers these days have heard of machine learning, but when ...

  3. A Summary of Multi-task Learning

    A Summary of Multi-task Learning author by Yubo Feng. Intro In this paper[0], the introduction of mu ...

  4. 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服

    同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27199954 作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章.这篇就介绍利用生成式对抗网络(GAN)的两个基 ...

  5. face recognition[翻译][深度人脸识别:综述]

    这里翻译下<Deep face recognition: a survey v4>. 1 引言 由于它的非侵入性和自然特征,人脸识别已经成为身份识别中重要的生物认证技术,也已经应用到许多领 ...

  6. Generative Adversarial Nets[content]

    0. Introduction 基于纳什平衡,零和游戏,最大最小策略等角度来作为GAN的引言 1. GAN GAN开山之作 图1.1 GAN的判别器和生成器的结构图及loss 2. Condition ...

  7. Generative Adversarial Nets[CycleGAN]

    本文来自<Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks>,时间线为2017 ...

  8. 【将门创投】AI 往期技术分享

    计算机视觉 1. 嘉宾:商汤科技CEO 徐立 文章回顾:计算机视觉的完整链条,从成像到早期视觉再到识别理解 2. 嘉宾:格灵深瞳CTO 赵勇 文章回顾:计算机视觉在安防.交通.机器人.无人车等领域的应 ...

  9. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

随机推荐

  1. hdu4778 状态压缩

    #include <iostream> #include <algorithm> #include <cstdio> #include <vector> ...

  2. Sql 嵌套循环

    DECLARE @i INT ,@j INT BEGIN PRINT 'satrt i:'+CAST(@i AS varchar) BEGIN PRINT 'j:'+CAST(@j AS varcha ...

  3. linux常用命令:nl 命令

    nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...

  4. Java学习路线:Java中的位移运算符介绍

    学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...

  5. Django后端项目---- Rest Framework(2)

    一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import API ...

  6. vue style 的scoped 使用

    1 原理 vue 可以通过在 style标签添加scoped这个属性来控制 组件内的css作用域 <style scoped> @media (min-width: 250px) { .l ...

  7. 【shell脚本】通过遍历文件的一种批量执行shell命令的方法。

    在分析数据时,经常会有许多机械重复的命令带入,作为一个半路出家的程序猿,我曾经对这种工作束手无策.不像一个熟手那样举重若轻的分析,感觉自己的生信分析完全是个体力活.为了打开这样的局面,我开始学习如何批 ...

  8. python字符格式化

    使用%格式化字符串 字符串格式化使用格式化操作符即百分号. 在%号的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值. In [17]: name = "wxz" I ...

  9. Docker学习笔记之常用的 Docker Compose 配置项

    0x00 概述 与 Dockerfile 一样,编写 Docker Compose 的配置文件是掌握和使用好 Docker Compose 的前提.编写 Docker Compose 配置文件,其本质 ...

  10. An Example of How Oracle Works

    Oracle是怎么工作的,摘自Oracle 9i的官方文档 The following example describes the most basic level of operations tha ...