精华内容
下载资源
问答
  • 检查了三种类型的测试项目React强化物(标记、口头提升、口头中性)对表现的影响,以及两个级别的加固计划(固定的 ancf 连续比率)。 结果表明:(a)强化类型和时间表之间没有交互作用,(b)对时间表类型没有主要...
  • 云南省2016中考英语第三部分题型综合强化题型阅读理解类型一判断型真题集训
  • 云南省2016中考英语第三部分题型综合强化题型阅读理解类型二选择型真题集训
  • 云南省2016中考英语第三部分题型综合强化题型阅读理解类型一判断型备考演练
  • 云南省2016中考英语第三部分题型综合强化题型阅读理解类型二选择型备考演练
  • NAT的四种类型类型检测

    千次阅读 2019-03-04 11:33:49
    考 虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的...

    转自:https://www.cnblogs.com/my_life/articles/1908552.html

     

    考 虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的,其间并不存在太大差异,这是因为TCP协议本身 便是面向连接的,因此无需考虑网络连接无状态所带来复杂性。

    用语定义

    1.内部Tuple:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组
    2.外部Tuple:指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口
    3.目标Tuple:指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组

    详细释义

    1. Full Cone NAT:所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全

    2. Restricted Cone NAT: 它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部 主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安 全性

    3. Port Restricted Cone NAT:它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端 口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性

    4. Symmetric NAT:这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关; 在Symmetric NAT中,目标Tuple则成为了NAT设备建立转换关系的一个重要考量:只有来自于同一个内部Tuple 、且针对同一目标Tuple的请求才被NAT转换至同一个外部Tuple,否则的话,NAT将为之分配一个新的外部Tuple;打个比方,当内部主机以相 同的内部Tuple对2个不同的目标Tuple发送UDP报文时,此时NAT将会为内部主机分配两个不同的外部Tuple,并且建立起两个不同的内、外部 Tuple转换关系。与此同时,只有接收到了内部主机所发送的数据包的外部主机才能向内部主机返回UDP报文,这里对外部返回报文来源的限制是与Port Restricted Cone一致的。不难看出,如果说Full Cone是要求最宽松NAT UDP转换方式,那么,Symmetric NAT则是要求最严格的NAT方式,其不仅体现在转换关系的建立上,而且还体现在对外部报文来源的限制方面。

    P2P的NAT研究 
    第一部分:NAT介绍 
    第二部分:NAT类型检测

    第一部分: NAT介绍 
    各种不同类型的NAT(according to RFC) 
    Full Cone NAT: 
       内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,任何外部主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包 
    Restricted Cone NAT: 
       内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包 
    Port Restricted Cone NAT: 
        内网主机建立一个UDP socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据。只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包 
    Symmetric NAT: 
        内网主机建立一个UDP socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,第一次发送时,NAT会为其分配一个(PublicIP-2,Port-2), 以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).如果NAT有多于一个公网IP,则PublicIP-1和PublicIP-2可能不同,如果NAT只有一个公网IP,则Port-1和Port-2肯定不同,也就是说一定不能是PublicIP-1等于 PublicIP-2且Port-1等于Port-2。此外,如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现UDP-P2P通信。

    第二部:NAT类型检测

    前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1),(IP-2,Port-2)并根据客户端的要求进行应答。

    第一步:检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就 不能P2P了(检测停止)。 
    当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检 测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。

    第二步:检测客户端NAT是否是Full Cone NAT?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回 发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT,这样的客户端能够进行UDP-P2P通信(检测停止)。

    第三步:检测客户端NAT是否是Symmetric NAT?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。 
    用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。 
    比 较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。

    第四步:检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?

    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP 数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。以上两种NAT都可以进行UDP-P2P通信。

    注:以上检测过程中只说明了可否进行UDP-P2P的打洞通信,具体怎么通信一般要借助于Rendezvous Server。另外对于Symmetric NAT不是说完全不能进行UDP-P2P达洞通信,可以进行端口预测打洞,不过不能保证成功。

    展开全文
  • 一般说来,训练深度学习网络的方式主要有四种:监督、无监督、半监督和强化学习。在接下来的文章中,计算机视觉战队将逐个解释这些方法背后所蕴含的理论知识。除此之外,计算机视觉战队将分享文献中经常碰到的术语,...

    转载https://blog.csdn.net/jcjx0315/article/details/73288501

    一般说来,训练深度学习网络的方式主要有四种:监督、无监督、半监督和强化学习。在接下来的文章中,计算机视觉战队将逐个解释这些方法背后所蕴含的理论知识。除此之外,计算机视觉战队将分享文献中经常碰到的术语,并提供与数学相关的更多资源。

     

     

     

    监督学习(Supervised Learning)

    监督学习是使用已知正确答案的示例来训练网络的。想象一下,我们可以训练一个网络,让其从照片库中(其中包含你父母的照片)识别出你父母的照片。以下就是我们在这个假设场景中所要采取的步骤。

     

    步骤1:数据集的创建和分类

     

    首先,我们要浏览你的照片(数据集),确定所有有你父母的照片,并对其进行标注,从而开始此过程。然后我们将把整堆照片分成两堆。我们将使用第一堆来训练网络(训练数据),而通过第二堆来查看模型在选择我们父母照片操作上的准确程度(验证数据)。

     

    等到数据集准备就绪后,我们就会将照片提供给模型。在数学上,我们的目标就是在深度网络中找到一个函数,这个函数的输入是一张照片,而当你的父母不在照片中时,其输出为0,否则输出为1。

     

    此步骤通常称为分类任务。在这种情况下,我们进行的通常是一个结果为yes or no的训练,但事实是,监督学习也可以用于输出一组值,而不仅仅是0或1。例如,我们可以训练一个网络,用它来输出一个人偿还信用卡贷款的概率,那么在这种情况下,输出值就是0到100之间的任意值。这些任务我们称之为回归

     

    步骤2:训练

     

    为了继续该过程,模型可通过以下规则(激活函数)对每张照片进行预测,从而决定是否点亮工作中的特定节点。这个模型每次从左到右在一个层上操作——现在我们将更复杂的网络忽略掉。当网络为网络中的每个节点计算好这一点后,我们将到达亮起(或未亮起)的最右边的节点(输出节点)。

     

    既然我们已经知道有你父母的照片是哪些图片,那么我们就可以告诉模型它的预测是对还是错。然后我们会将这些信息反馈(feed back)给网络。

     

    该算法使用的这种反馈,就是一个量化“真实答案与模型预测有多少偏差”的函数的结果。这个函数被称为成本函数(cost function),也称为目标函数(objective function),效用函数(utility function)或适应度函数(fitness function)。然后,该函数的结果用于修改一个称为反向传播(backpropagation)过程中节点之间的连接强度和偏差,因为信息从结果节点“向后”传播。

     

    我们会为每个图片都重复一遍此操作,而在每种情况下,算法都在尽量最小化成本函数。

     

    其实,我们有多种数学技术可以用来验证这个模型是正确还是错误的,但我们常用的是一个非常常见的方法,我们称之为梯度下降(gradient descent)。Algobeans上有一个 “门外汉”理论可以很好地解释它是如何工作的。迈克尔•尼尔森(Michael Nielsen)用数学知识完善了这个方法,其中包括微积分和线性代数。

    http://neuralnetworksanddeeplearning.com/chap2.html

     

    步骤3:验证

     

    一旦我们处理了第一个堆栈中的所有照片,我们就应该准备去测试该模型。我们应充分利用好第二堆照片,并使用它们来验证训练有素的模型是否可以准确地挑选出含有你父母在内的照片。

     

    我们通常会通过调整和模型相关的各种事物(超参数)来重复步骤2和3,诸如里面有多少个节点,有多少层,哪些数学函数用于决定节点是否亮起,如何在反向传播阶段积极有效地训练权值,等等。而你可以通过浏览Quora上的相关介绍来理解这一点,它会给你一个很好的解释。

     

    步骤4:使用

     

    最后,一旦你有了一个准确的模型,你就可以将该模型部署到你的应用程序中。你可以将模型定义为API调用,例如ParentsInPicture(photo),并且你可以从软件中调用该方法,从而导致模型进行推理并给出相应的结果。

     

    稍后我们将详细介绍一下这个确切的过程,编写一个识别名片的iPhone应用程序。

     

    得到一个标注好的数据集可能会很难(也就是很昂贵),所以你需要确保预测的价值能够证明获得标记数据的成本是值得的,并且我们首先要对模型进行训练。例如,获得可能患有癌症的人的标签X射线是非常昂贵的,但是获得产生少量假阳性和少量假阴性的准确模型的值,这种可能性显然是非常高的。

     

     

    无监督学习(Unsupervised Learning)

     

    无监督学习适用于你具有数据集但无标签的情况。无监督学习采用输入集,并尝试查找数据中的模式。比如,将其组织成群(聚类)或查找异常值(异常检测)。例如:

     

    •想像一下,如果你是一个T恤制造商,拥有一堆人的身体测量值。那么你可能就会想要有一个聚类算法,以便将这些测量组合成一组集群,从而决定你生产的XS,S,M,L和XL号衬衫该有多大。

     

     

    你将在文献中阅读到的一些无监督的学习技术包括:

     

    •自编码(Autoencoding)

    http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/

     

    •主成分分析(Principal components analysis)

    https://www.quora.com/What-is-an-intuitive-explanation-for-PCA

     

    •随机森林(Random forests)

    https://en.wikipedia.org/wiki/Random_forest

     

    •K均值聚类(K-means clustering)

    https://www.youtube.com/watch?v=RD0nNK51Fp8

     

     

    无监督学习中最有前景的最新发展之一是Ian Goodfellow(当时在Yoshua Bengio的实验室工作时提出)的一个想法,称为“生成对抗网络(generative adversarial networks)”,其中我们将两个神经网络相互联系:一个网络,我们称之为生成器,负责生成旨在尝试欺骗另一个网络的数据,而这个网络,我们称为鉴别器。这种方法实现了一些令人惊奇的结果,例如可以从文本字符串或手绘草图生成如照片版逼真图片的AI技术。

     

     

    半监督学习(Semi-supervised Learning)

     

    半监督学习在训练阶段结合了大量未标记的数据和少量标签数据。与使用所有标签数据的模型相比,使用训练集的训练模型在训练时可以更为准确,而且训练成本更低。

     

    为什么使用未标记数据有时可以帮助模型更准确,关于这一点的体会就是:即使你不知道答案,但你也可以通过学习来知晓,有关可能的值是多少以及特定值出现的频率。

     

    数学爱好者的福利:如果你对半监督学习很感兴趣的话,可以来阅读这个朱小津教授的幻灯片教程和2008年回顾的文献随笔文章。(我们会把这两个共享在平台的共享文件专栏)

     

     

    强化学习(Reinforcement Learning)

     

    强化学习是针对你再次没有标注数据集的情况而言的,但你还是有办法来区分是否越来越接近目标(回报函数(reward function))。经典的儿童游戏——“hotter or colder”。(Huckle Buckle Beanstalk的一个变体)是这个概念的一个很好的例证。你的任务是找到一个隐藏的目标物件,然后你的朋友会喊出你是否越来越hotter(更接近)或colder(远离)目标物件。“Hotter/colder”就是回报函数,而算法的目标就是最大化回报函数。你可以把回报函数当做是一种延迟和稀疏的标签数据形式:而不是在每个数据点中获得特定的“right/wrong”答案,你会得到一个延迟的反应,而它只会提示你是否在朝着目标方向前进。

     

    •DeepMind在Nature上发表了一篇文章,描述了一个将强化学习与深度学习结合起来的系统,该系统学会该如何去玩一套Atari视频游戏,一些取得了巨大成功(如Breakout),而另一些就没那么幸运了(如Montezuma’s Revenge(蒙特祖玛的复仇))。

     

    •Nervana团队(现在在英特尔)发表了一个很好的解惑性博客文章,对这些技术进行了详细介绍,大家有兴趣可以阅读一番。

    https://www.nervanasys.com/demystifying-deep-reinforcement-learning/

     

    •Russell Kaplan,Christopher Sauer和Alexander Sosa举办的一个非常有创意的斯坦福学生项目说明了强化学习的挑战之一,并提出了一个聪明的解决方案。正如你在DeepMind论文中看到的那样,算法未能学习如何去玩Montezuma’s Revenge。其原因是什么呢?正如斯坦福大学生所描述的那样,“在稀缺回报函数的环境中,强化学习agent仍然在努力学习”。当你没有得到足够的“hotter”或者“colder”的提示时,你是很难找到隐藏的“钥匙”的。斯坦福大学的学生基础性地教导系统去了解和回应自然语言提示,例如“climb down the ladder”或“get the key”,从而使该系统成为OpenAI gym中的最高评分算法。可以点击算法视频观看算法演示。

    (http://mp.weixinbridge.com/mp/wapredirect?url=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F0B2ZTvWzKa5PHSkJvQVlsb0FLYzQ%2Fview&action=appmsg_redirect&uin=Nzk3MTk3MzIw&biz=MzA5MzQwMDk4Mg==&mid=2651042109&idx=1&type=1&scene=0)

     

     

    •观看这个关于强化学习的算法,好好学习,然后像一个大boss一样去玩超级马里奥吧。

     

    理查德•萨顿和安德鲁•巴托写了关于强化学习的书。你也可以点击查看第二版草稿。http://incompleteideas.net/sutton/book/the-book-1st.html

    展开全文
  • python机器学习(强化学习)

    千次阅读 2021-01-29 17:54:01
    2.强化学习是一试错学习,因其在各种状态(环境)下需要尽量尝试所有可以选择的动作,通过环境给出的反馈(即奖励)来判断动作的优劣,最终获得环境和最优动作的映射关系(即策略)。马尔可夫决策过程(MDP)马尔可夫决策...

    1.强化学习就是程序或智能体(agent)通过与环境不断地进行交互学习一个从环境到动作的映射,学习的目标就是使累计回报最大化。

    2.强化学习是一种试错学习,因其在各种状态(环境)下需要尽量尝试所有可以选择的动作,通过环境给出的反馈(即奖励)来判断动作的优劣,最终获得环境和最优动作的映射关系(即策略)。

    42507aa63b05

    42507aa63b05

    马尔可夫决策过程(MDP)

    马尔可夫决策过程(Markov Decision Process)通常用来描述一个强化学习问题。

    智能体agent根据当前对环境的观察采取动作获得环境的反馈,并使环境发生改变的循环过程

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    蒙特卡洛强化学习

    1.在现实的强化学习任务中,环境的转移概率、奖励函数往往很难得知,甚至很难得知环境中有多少状态。若学习算法不在依赖于环境建模,则称为免模型学习,蒙特卡洛强化学习就是其中一种。

    2.蒙特卡洛强化学习使用多次采样,然后求取平均累计奖赏作为期望累计奖赏的近似。

    42507aa63b05

    蒙特卡洛强化学习:直接对状态动作值函数Q(s,a)进行估计,每采样一条轨迹,就根据轨迹中的所有“状态-动作”利用下面的公式对来对值函数进行更新。

    42507aa63b05

    每次采样更新完所有的“状态-动作”对所对应的Q(s,a),就需要更新采样策略π。但由于策略可能是确定性的,即一个状态对应一个动作,多次采样可能获得相同的采样轨迹,因此需要借助ε贪心策略:

    42507aa63b05

    蒙特卡洛强化学习算法需要采样一个完整的轨迹来更新值函数,效率较低,此外该算法没有充分利用强化学习任务的序贯决策结构。

    Q-learning算法结合了动态规划与蒙特卡洛方法的思想,使得学习更加高效。

    42507aa63b05

    42507aa63b05

    42507aa63b05

    深度强化学习(DRL)

    传统强化学习:真实环境中的状态数目过多,求解困难。

    深度强化学习:将深度学习和强化学习结合在一起,通过深度神经网络直接学习环境(或观察)与状态动作值函数Q(s,a)之间的映射关系,简化问题的求解。

    Deep Q Network(DQN)

    Deep Q Network(DQN):是将神经网略(neural network)和Q-learning结合,利用神经网络近似模拟函数Q(s,a),输入是问题的状态(e.g.,图形),输出是每个动作a对应的Q值,然后依据Q值大小选择对应状态执行的动作,以完成控制。

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    自主学习Flappy Bird游戏

    深度强化学习

    2013年,Deep Mind团队在NIPS上发表《Playing Atari with Deep Reinforcement Learning》一文,在该文中首次提出Deep Reinforcement Learning一词,并且提出DQN(Deep Q-Networt)算法,实现了从纯图像输入完全通过学习来玩Atari游戏。

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    Flappy Bird自主学习程序基本框架

    42507aa63b05

    训练过程

    训练过程过程主要分为以下三个阶段:

    1.观察期(OBSERVE):程序与模拟器进行交互,随机给出动作,获取模拟器中的状态,将状态转移过程存放在D(Replay Memory)中;

    2.探索期(EXPLORE):程序与模拟器交互的过程中,依据Replay Memory中存储的历史信息更新网络参数,并随训练过程降低随机探索率ε;

    3.训练器(TRAIN):ε已经很小,不再发生改变,网络参数随着训练过程不断趋于稳定。

    42507aa63b05

    1.打开游戏模拟器,不执行跳跃动作,获取游戏的初始状态

    2.根据ε贪心策略获得一个动作(由于神经网络参数也是随机初始化的,在本阶段参数也不会进行更新,所以统称为随机动作),并根据迭代次数减小ε的大小

    3.由模拟器执行选择的动作,能够返回新的状态和反馈奖励

    4.将上一状态s,动作a,新状态s’,反馈r组装成(s,a,s‘,r)放进Replay Memory中用作以后的参数更新

    5.根据新的状态s‘,根据ε贪心策略选择下一步执行的动作,周而复始,直至迭代次数到达探索期

    42507aa63b05

    探索期与观察期的唯一区别在于会根据抽样对网络参数进行更新。

    1.迭代次数达到一定数目,进入探索期,根据当前状态s,使用ε贪心策略选择一个动作(可以是随机动作或者由神经网络选择动作),并根据迭代次数减小ε的值

    2.由模拟器执行选择的动作,能够返回新的状态和反馈奖励

    3.将上一状态s,动作a,新状态s’,反馈r组装成(s,a,a‘,r)放进Replay Memory中用作参数更新

    4.从Replay Memory中抽取一定量的样本,对神经网络的参数进行更新

    5.根据新的状态s‘,根据ε贪心策略选择下一步执行的动作,周而复始,直至迭代次数到达训练器

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    相关库的介绍和安装

    tensorflow库

    TensorFlow是谷歌2015年开源的一个人工智能学习系统。主要目的是方便研究人员开展机器学习和深度神经网络方面的研究,目前这个系统更具有通用性,也可广泛用于其他计算领域。

    TensorFlow

    支持多种前端语言,包括python(python也是tensorflow支持最好的前端语言),因此一般大家利用python实现对tensorflow的调用。

    安装:conda install tensorflow

    openCV库

    OpenCV是一个开源的跨平台的计算机视觉库,实现了大量的图像处理和计算机视觉方面的通用算法。

    本实验采用opencv对采集的游戏画面进行预处理

    安装:Mac+anaconda安装opencv3非常麻烦,如需安装请查看我的另一篇文章。

    PyGame库

    Pygame是一个跨平台的模块,专为电子游戏设计。

    Pygame相当于是一款游戏引擎,用户无需编写大量的基础模块,而只需完成游戏逻辑本身就可以了。

    本实验游戏模拟器采用Pygame实现。

    安装:conda install pygame

    tensorflow库的基本使用

    理解TensorFlow

    1.使用图(graph)来表示计算任务;

    2.在被称之为会话(Session)的上下文(context)中执行图;

    3.使用tensor(张量)表示数据;

    4.通过变量(variable)维护状态;

    5.使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据。

    6.TensorFlow是一个编程系统,使用图来表示计算任务。图中的节点被称作op(Operation),op可以获得0个或多个tensor,产生0个或多个tensor。每个tensor是一个类型化的多维数组。例如:可以将一组图像集表示成一个四维的浮点数组,四个维度分别是[batch,height,weight,channels]。

    7.图(graph)描述了计算的过程。为了进行计算,图必须在会话中启动,会话负责将图中的op分发到cpu或gpu上进行计算,然后将产生的tensot返回。在python中,tensor就是numpy.ndarray对象。

    8.TensorFlow程序通常被组织成两个阶段:构建阶段和执行阶段。

    构建阶段:op的执行顺序被描述成一个图;

    执行阶段:使用会话执行图中的op

    例如:通常在构建阶段创建一个图来表示神经网络,在执行阶段反复执行图中的op训练  神经网络。

    9.交互式会话(InteractiveSession):为了方便实用Ipython之类的python交互环境,可以使用交互式会话(interactiveSession)来代替Session,使用类似Tensor.run()和Operation.eval()来代替Session.run(),避免使用一个变量来持有会话。

    10.feed操作:

    前面的例子中,数据均以变量或常量的形式进行存储。Tensorflow还提供了Feed机制,该机制可以临时替代图中任意操作中的tensor。最常见的用例是使用tf.placeholder()创建占位符,相当于是作为图中的输入,然后使用Feed机制向图中占位符提供数据进行计算,具体使用方法见接下来的样例。

    自主学习flappy bird实例程序编写

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    42507aa63b05

    展开全文
  • 四种不同的NAT类型

    千次阅读 2015-08-18 11:35:16
    讨论前提考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是...

    讨论前提

    考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的,其间并不存在太大差异,这是因为TCP协议本身便是面向连接的,因此无需考虑网络连接无状态所带来复杂性。

    用语定义

    1.内部Tuple:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组

    2.外部Tuple:指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口

    3.目标Tuple:指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组

    详细释义

    1. Full Cone NAT:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全

    2. Restricted Cone NAT:它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安全性

    3. Port Restricted Cone NAT:它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性

    4. Symmetric NAT:这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关;在Symmetric NAT中,目标Tuple则成为了NAT设备建立转换关系的一个重要考量:只有来自于同一个内部Tuple 、且针对同一目标Tuple的请求才被NAT转换至同一个外部Tuple,否则的话,NAT将为之分配一个新的外部Tuple;打个比方,当内部主机以相同的内部Tuple对2个不同的目标Tuple发送UDP报文时,此时NAT将会为内部主机分配两个不同的外部Tuple,并且建立起两个不同的内、外部Tuple转换关系。与此同时,只有接收到了内部主机所发送的数据包的外部主机才能向内部主机返回UDP报文,这里对外部返回报文来源的限制是与Port Restricted Cone一致的。不难看出,如果说Full Cone是要求最宽松NAT UDP转换方式,那么,Symmetric NAT则是要求最严格的NAT方式,其不仅体现在转换关系的建立上,而且还体现在对外部报文来源的限制方面。

    展开全文
  • NAT的四种类型及检测

    万次阅读 2017-03-27 15:17:15
    考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、PortRestricted Cone和SymmetricNAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的,...
  • 【C++】 四种强制类型转换

    千次阅读 2017-09-22 09:45:46
    总 结  去const属性用const_cast。... 不同类型的指针类型转换用reinterpreter_cast。 static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;
  • 来源:大数据作者:塞巴斯蒂安·拉施卡、瓦希德·米尔贾利利本文约4700字,建议阅读7分钟。本文将讨论机器学习的主要概念、不同类型及相关术语,为利用机器学习技术成功地解决实...
  • 南京大学俞扬副教授在第二期《人工智能前沿讲习班》的报告完整PPT,内容包括强化学习的概念、主要算法类型和应用等,值得反复精读,目录如下: 一、介绍(Introduction) 二、马尔可夫决策过程(Markov Decision ...
  • NoSQL的四大类型

    千次阅读 2018-12-09 14:30:10
    数据模型:键是一个字符串对象,值可以是任意类型的数据,比如整型、字符型、数组、列表、集合等 典型应用:涉及频繁读写,拥有简单数据模型的应用,内容缓存,如会话、配置文件、参数、购物车等,存储配置和用户...
  • 强化学习(一):简介——什么是强化学习?

    千次阅读 多人点赞 2021-01-22 23:59:35
    本文将介绍强化学习的基本含义,了解什么是强化学习、强化学习的概念与基本框架以及强化学习中常见的问题类型。 什么是强化学习? 强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是...
  • 深度强化学习(二)强化学习算法的分类

    万次阅读 多人点赞 2019-06-17 16:18:21
    对于强化学习的分类,主要参考了莫烦大佬的视频和OpenAI的Spinning Up的介绍。 一、Model-Free和Model-Based两大类 上图是Spinning Up中的分类图。对于model的理解就是强化学习中的环境。根据是否去学习环境来...
  • 这里写目录标题监督、无监督、强化学习监督学习(Supervised Learning)无监督学习(Unsupervised Learning,UL)强化学习(Reinforcement Learning,RL)改进 监督、无监督、强化学习 按照训练样本提供的信息以及...
  • NAT的四种类型及检测[转]

    千次阅读 2015-03-19 20:19:36
    考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种。值得指出的是,对于TCP协议而言,一般来说,目前NAT中针对TCP的实现基本上是一致的,...
  • 本文笔者将与大家讲述:强化学习的基本原理、两个基本类型,以及基于这两个类型下的相关算法。 一般地,我们认为,机器学习领域最基本的三个方向就是“监督学习”“无监督学习”和“强化学习”,而深度学习、半...
  • 收藏 | 强化学习应用简述

    千次阅读 2021-05-13 16:13:39
    强化学习与相关学科的关系 强化学习一般看成是机器学习的一。机器学习从数据中学习做预测或决策。一般把机器学习分为监督学习、无监督学习、和强化学习。监督学习中的数据有标注;无监督学习的数据没有标注。分类...
  • 图解平衡二叉树的四种旋转

    千次阅读 2019-12-18 14:12:29
    为了强化记忆,我用ppt做了四种旋转的图示,也希望看了这篇博客的各位能有所收获。张图分别是LL旋转,RR旋转,LR旋转和RL旋转。(顺便吐槽一句,CSDN的markdown真难用,经常找不到光标,写的时候图片的的注解也没...
  • 该代码是具有维输入(欧几里得类型)的模型。 具有三维输入的模型(混合类型)在RL_3static_MOTSP.zip中。 本文中用于可视化和比较的Matlab代码位于MOTSP_compare_EMO.zip中。 在tsp_transfer _... dirs中可以找到...
  • Effective Java 创建和销毁对象 3.用私用构造器或者枚举类型强化Singleton属性
  • 在此基础上理解、实践强化学习的基础算法就相对简单而且直观了。 先贴上格子世界环境类的源文件: gridworld.py ,只把该文件下载到您自己的文件夹内,导入其中的类或方法就可以了。已经内置的一些环境类UI界面...
  • 强化学习】强化学习介绍

    千次阅读 多人点赞 2018-06-19 19:38:06
    强化学习】强化学习介绍 ...但在传统的机器学习分类中没有提到过强化学习,而在连接主义学习中,把学习算法分为三种类型,即非监督学习(unsupervised learning)、监督学习(supervised leaning)和强化学...
  • 强化学习

    千次阅读 2019-10-17 14:13:37
    《机器学习及其应用》汪荣贵等编著 机械工业出版社 2019 年第 1 版1 第六章 强化学习 我们知道,机器学习是一从经验数据中构造和改善模型...一名为强化学习的机器学习类型强化学习又称为再励学习或评价学习,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,160
精华内容 12,064
关键字:

强化的四种类型