贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample)

这篇具有很好参考价值的文章主要介绍了贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先需要了解贪心算法:

贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。{看着这个名字,贪心,贪婪这两字的内在含义最为关键。这就好像一个贪婪的人,他事事都想要眼前看到最好的那个,看不到长远的东西,也不为最终的结果和将来着想,贪图眼前局部的利益最大化,有点走一步看一步的感觉。}

小白带你学---贪心算法(Greedy Algorithm) - 知乎


应用:

   Beam Search(集束搜索)多用在一些大型系统中,比如机器翻译系统,语音识别系统等,因为这些系统中的数据集可能非常大,而且结果也没有唯一正确的解,系统用最快的方式找到最接近正确的解才是系统的目标。例如解码Decoder是seq2seq模型的常见问题,常用方法有贪心搜索(Greedy Search)集束搜索(Beam Search)根据概率等等来确定decoder出什么样的语句。【我原来一直以为它是为了采样一个latent code周围的latent code方法,其实在NLP中,它是为了确定decoder出的语句是什么

1、贪心搜索(greedy search)/采样(Sampling)

贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度。

贪心算法在翻译每个字的时候,直接选择条件概率最大的候选值作为当前最优。如下图所以,

  • 第1个时间步长:首先翻译"我",发现候选"I"的条件概率最大为0.6,所以第一个步长直接翻译成了"I"。
  • 第2个时间步长:翻译"我恨",发现II概率0.2,IH概率0.7,IU概率0.1,所以选择IH作为当前步长最优翻译结果。
  • 第3个时间步长:翻译"我恨你",发现IHI概率0.05,IHH概率0.05,IHU概率0.9,所以选择IHU作为最终的翻译结果。

PS:图中的概率如何得来的?不同的模型有不同的算法,我自己随便填的。

贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample),NLP,深度学习,人工智能

贪心算法每一步选择中都采取在当前状态下最好或最优的选择,通过这种局部最优策略期望产生全局最优解。但是期望是好的,能不能实现是另外一回事了。贪心算法本质上没有从整体最优上加以考虑,并不能保证最终的结果一定是全局最优的。但是相对穷举搜索,搜索效率大大提升。

2、beam search(束搜索)

beam search是对greedy search的一个改进算法。相对greedy search扩大了搜索空间,但远远不及穷举搜索指数级的搜索空间,是二者的一个折中方案。

beam search有一个超参数beam size(束宽),设为 k 。第一个时间步长,选取当前条件概率最大的 k个词,当做候选输出序列的第一个词。之后的每个时间步长,基于上个步长的输出序列,挑选出所有组合中条件概率最大的 k 个,作为该时间步长下的候选输出序列。始终保持 k 个候选。最后从 k 个候选中挑出最优的。

还是以上面的任务为例,假设 k=2 ,我们走一遍这个搜索流程。

  • 第一个时间步长:如下图所示,I和H的概率是top2,所以第一个时间步长的输出的候选是I和H,将I和H加入到候选输出序列中。

贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample),NLP,深度学习,人工智能

  • 第2个时间步长:如下图所示,以I开头有三种候选{II, IH, IU},以H开头有三种候选{HI, HH, HU}。从这6个候选中挑出条件概率最大的2个,即IH和HI,作为候选输出序列。

贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample),NLP,深度学习,人工智能

  • 第3个时间步长:同理,以IH开头有三种候选{IHI, IHH, IHU},以HI开头有三种候选{HII, HIH, HIU}。从这6个候选中挑出条件概率最大的2个,即IHH和HIU,作为候选输出序列。因为3个步长就结束了,直接从IHH和IHU中挑选出最优值IHU作为最终的输出序列。

贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample),NLP,深度学习,人工智能

3、随机采样

贪心搜索(greedy search)、集束搜索(beam search)、随机采样(random sample)_jiangchao98的博客-CSDN博客

总结

beam search不保证全局最优,但是比greedy search搜索空间更大,一般结果比greedy search要好。

greedy search 可以看做是 beam size = 1时的 beam search。

如何通俗的理解beam search? - 知乎文章来源地址https://www.toymoban.com/news/detail-556290.html

到了这里,关于贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法 in Golang:Breadth-first search(BFS、广度优先搜索)

    从 A 到 F 点有多条路径 将问题建模为图(Graph) 通过 Breadth-first Search 算法来解决问题 图是用来对不同事物间如何关联进行建模的一种方式 图是一种数据结构 作用于图(Graph) 能够回答两类问题: 是否能够从节点 A 到节点 B? 从 A 到 B 的最短路径是什么? 直接添加的朋友

    2024年02月08日
    浏览(36)
  • Jump Point Search-跳点搜索法-原理&matlab代码-与A*算法比较(路径规划)

    目录 算法区别 1.A_star算法         2.JPS算法 3.搜索过程和结果对比动图 两个定义、三个规则(重点)       两个定义   定义一,强迫邻居(forced neighbour):   定义二,跳点(jump point): 三个规则  规则一 规则二 规则三  算法流程  1.A*算法 2.JPS算法  其他地图算法对

    2024年01月24日
    浏览(29)
  • 邻域搜索(Neighborhood Search ,NS)、大邻域搜索(Large NS , LNS)和自适应大邻域搜索(Adaptive LNS, ALNS)算法的联系与区别

    邻域搜索算法、大邻域搜索算法和自适应大邻域搜索算法是一类用于求解组合优化问题的算法,它们在搜索问题解空间时有一些联系和区别。以下是它们之间的联系与区别: 1.邻域搜索算法(Neighborhood Search ,NS): 基本思想: 邻域搜索算法通过在当前解的邻域内寻找更优解

    2024年01月20日
    浏览(67)
  • 【LeetCode 算法】Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数-Greedy

    给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它 减小 到 恰好 一半 。(注意,在后续操作中你可以对减半过的数继续执行操作) 请你返回将 nums 数组和 至少 减少一半 的 最少 操作数。 1 = n u m s . l e n g t h = 1 0 5 1 = n u m s [ i ] = 1 0 7 1 = num

    2024年02月15日
    浏览(36)
  • (3)【全局路径规划】图搜索的路径探索方法--DFS\BFS\DFS-ID、贪心算法、Dijkstra和A*、JPS、.hybird A*、

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理

    2024年02月15日
    浏览(30)
  • 「二分搜索Binary Search」

    二分搜索其实也是双指针,左右指针。 题解 直接二分搜索解决。 Code 但是这个数有缺陷,假如有重复的数,例如[1,2,2,2,3],想要找左边界的2,应该返回索引为1,;或者右边界的2,返回索引3,但是发现找不了,只会给你返回中间的2,返回索引2,改进在下边。 结果 Code 注意此

    2024年02月15日
    浏览(28)
  • 强化学习基础:Epsilon-greedy 算法,多臂老虎机问题的理解,说点人话的强化学习,一定能看懂

    在强化学习中,epsilon-greedy可以说是非常基础的一个探索利用算法。应用十分广泛。尝试进行平衡的探索-利用方法。 在Epsilon-Greedy策略中,一个agent会以概率epsilon随机选择行动,也就是进行探索。此外以1-epsilon的概率选择当前估计的最佳行动,也就是利用 。 具体来说,如果

    2024年02月14日
    浏览(29)
  • 【搜索引擎】elastic search核心概念

    前言 本文不涉及ES的具体安装下载、操作、集群的内容,这部分内容会放在后面一篇文章中。本文只包含ES的核心理论,看完本文再去学ES的细节会事半功倍。 目录 1.由日志存储引出的问题 2.什么是ES? 3.ES的数据结构 4.ES的核心原理 5.联系作者 本文或者说本系列的来源: 前面

    2024年02月03日
    浏览(40)
  • uniapp Uview框架中的搜索(u-search)组件进行搜索

    uview中只给了一个搜索框的样式 如何实现搜索的效果呢? 接下来跟着我走吧! 搜索时 未搜索的样子 说那么多废话都没用,接下来直接上代码! 好了,内容不易,如果有错误,请多多指教!

    2024年02月12日
    浏览(34)
  • 【C++】二叉搜索树Binary Search Tree

    二叉搜索树又被称为二叉排序树,顾名思义,当我们使用中序遍历时,会得到一个有序的序列。二叉搜索树有如下的性质: 1.若它的左子树不为空,则左子树上每个节点的值都小于根节点的值。 2.若它的右子树不为空,则右子树上每个节点的值都大于根节点的值。 3.左右子树

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包