深度学习基础—Beam search集束搜索

news2024/12/23 13:42:04

引言

深度学习基础—Seq2Seq模型icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/143781223?fromshare=blogdetail&sharetype=blogdetail&sharerId=143781223&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

        上篇博客讲到,贪心算法在seq2seq模型中计算压力大,并且不一定能找到最好输出,为此,集束搜索算法就可以解决上述问题。

1.集束搜索算法

        假设有句子“Jane visite l'Afrique en Septembre.”(法语),我们希望翻译成英语:“Jane is visiting Africa in September.”(英语),词汇表有10000个词。要做的第一件事是把法语句子输入到编码器(上图绿色部分),解码器会输出第一个词的概率。

        在集束搜索算法中,有一个参数B(集束宽),表示每次考虑的概率最大的TopB个数的结果。假设B=3,如果第一个输出中概率最大的Top3的词是jane、in、september,那么就把这三个结果保存(贪心算法只会保存概率最大的第一个)。

        第二步,分别把选择的Top3的第一个输出输入到解码器的第二个单元中,即寻找在第一个词分别是in、jane、september情况下,第二个词的最大概率:

        每个softmax单元会输出10000个词的概率,一共有3种情况(第一个词是in、第一个词是jane、第一个词是september),因此第二个输出一共有3*10000=30000种输出,我们选择其中概率最大的Top3(集束宽B是3),假设选择了“in September”、“jane is”和“jane visits”并保存下来。

        第三步,分别把选择的Top3的第二个输出输入到解码器的第三个单元中,即寻找在前面的输出是in september、jane is、jane visits情况下,第三个词的最大概率:

        第三个单元还会输出3*10000个结果,我们仍然只选择概率最大的前三个并保存。最终解码器每输出一次增加一个单词,集束搜索算法最终会找到“Jane visits africa in september”这个句子,在句尾符号(上图编号8所示)终止生成。

        注意:观察集束搜索算法,可以发现其搜索树相当于每次生成3*10000个结果(除了第一次生成外),然后剪枝,只保留3种概率最大的结果,即节省了计算,有能保证最好的结果没有被网络丢掉(一般来说最好的结果和概率最大的结果概率相差不会很远,合理的选择集束宽B的大小可以保证找到最优的结果)

        如果集束宽等于1,只考虑1种可能结果,这实际上就变成了贪婪搜索算法。如果同时考虑多个可能的结果,比如3个、10个或者其他的个数,集束搜索通常会找到比贪婪搜索更好的输出结果。

2.改进算法

        集束搜索算法的优化目标是:

        这个其实就是解码器每一个单元输出的条件概率乘积。这些概率值通常远小于1,很多小于1的数相乘就会得到很小很小的数字,会造成数值下溢(numerical underflow),导致电脑的不能精确地存储浮点数。

        解决办法,取对数,优化目标变为:

        log函数严格单调递增,且更加平滑,(0,1)之间的数会被放缩到远离0的位置,从而不会出现数值下溢,如果log()最大了,那么概率P也是最大的。

        我们还可以对目标函数做归一化(归一化对数似然目标函数):

        其中,α是超参数,作用是让归一化更加柔和,取值[0,1],如果是1,说明完全用句子长度做归一化;如果取0,说明不进行归一化。由于目标函数的特性,句子越短概率越高,句子越长概率越低(条件概率的一个性质:事件越多,同时发生的可能性就越低)。因此优化目标会使概率最大化,从而不易于翻译长句子,因此就需要归一化,减少对长句子的惩罚力度。

        注意:如何选择集束宽B的大小?B越大,算法可选择的越多,结果越好,但计算更慢;B越小,算法选择越少,结果没那么好,但计算更快。一般选择B=10,B越大,模型的改善越小。从1到3或10,一般算法有很大的改善。但是当集束宽从1000增加到3000时,效果就没那么明显。

3.误差分析

        当我们的训练好的seq2seq模型在dev集(开发集)出现问题时,比如对于法语句子:“Jane visite l'Afrique en septembre”,集束搜索算法输出的翻译:“Jane visited Africa last September”(y^),而正确的人工翻译是:“Jane visits Africa in September”(y*),也就是不正确的翻译输出概率更大,说明模型出现了问题。模型主要由RNN网络(编码器和解码器)、集束搜索算法组成,那是哪一部分出现问题了呢?换句话说是RNN网络部分值得优化还是集束搜索算法值得优化?通常我们会用到误差分析来确定我们的优化方向:

        我们分别把两种情况的序列输入到解码器部分,计算输出的概率,得到如下两种情况:

        (1)集束搜索算法得到的y^的概率<人工翻译句子y*的概率:

        说明集束搜索算法得到的使概率最大化的句子(y^)并不是使概率最大化的句子(因为y*的概率更大),此时集束搜索算法效果更差,更值得优化集束搜索算法。可以调整集束宽度B的大小等等。

        (2)集束搜索算法得到的y^的概率>人工翻译句子y*的概率:

        说明集束搜索算法得到的使概率最大化的句子(y^)是使概率最大化的句子,但是y*显然是更好的句子,RNN应该输出的是y*的概率更大,此时RNN网络输出更差,更值得优化RNN网络。可以选择更优的结构、正则化、扩充数据集等等。

        RNN网络的优化技巧和神经网络的优化技巧一致,有关优化网络的技巧和误差分析见如下:

深度学习基础—参数调优icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/141144823?fromshare=blogdetail&sharetype=blogdetail&sharerId=141144823&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link深度学习基础—正则化icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/141176121?fromshare=blogdetail&sharetype=blogdetail&sharerId=141176121&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link深度学习基础—结构化机器学习项目icon-default.png?t=O83Ahttps://blog.csdn.net/sniper_fandc/article/details/141554291?fromshare=blogdetail&sharetype=blogdetail&sharerId=141554291&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

        现在,我们按照上述句子的处理思路,遍历开发集,寻找人工翻译句子和开发集之间的误差分布,统计情况(1)和(2)的比例,哪种情况的比例更高,就说明哪部分更值得优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++__day1

1、思维导图 2、如果登录失败&#xff0c;提示用户登录失败信息&#xff0c;并且提示错误几次&#xff0c;且重新输入&#xff1b;如果输入错误三次&#xff0c;则退出系统 #include <iostream> using namespace std;int main() {string id , pswd;string user"admi…

【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

欧式距离和曼哈顿距离是两种常用的距离度量方法&#xff0c;用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。 1. 欧式距离 概念 欧式距离&#xff08;Euclidean Distance&#xff09;是最常见的直线距离度量方法&#xff0c;源于欧…

Java之JDBC,Maven,MYBatis

前言 就是用来操作数据库的 1.JDBC快速入门 注意在使用前一定要导入jar包 在模块那里新建目录&#xff0c;新建lib&#xff0c;粘贴复制jar包&#xff0c;我这个jar设置的是模块有效 package test1017;import java.sql.Connection; import java.sql.DriverManager; import…

JavaWeb笔记整理——Spring Task、WebSocket

目录 SpringTask ​cron表达式 WebSocket SpringTask cron表达式 WebSocket

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …

如何实现主备租户的无缝切换 | OceanBase应用实践

对于DBA而言&#xff0c;确保数据库的高可用性、容灾等能力是其日常工作中需要持续思考和关注的重要事项。一方面&#xff0c;可以利用数据库自身所具备的功能来实现这些目标&#xff1b;若数据库本身不提供相应功能&#xff0c;DBA则需寻找其他工具来增强数据库的高可用性和容…

Spring 中的 BeanDefinitionParserDelegate 和 NamespaceHandler

一、BeanDefinitionParserDelegate Spring在解析xml文件的时候&#xff0c;在遇到<bean>标签的时候&#xff0c;我们会使用BeanDefinitionParserDelegate对象类解析<bean>标签的内容&#xff0c;包括<bean>标签的多个属性&#xff0c;例如 id name class in…

MQTT从入门到精通之MQTT Dashboard

MQTT Dashboard 1 Dashboard简介 EMQX 提供了一个内置的管理控制台&#xff0c;即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群&#xff0c;并配置和使用所需的各项功能。 访问地址&#xff1a;http://ip:18083 首次登录访问账号&#xff1a;admin…

Flume和kafka的整合

1、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 在flume的conf文件夹下&#xff0c;有一个flumeconf 文件夹&#xff1a;这个文件夹是自己创建的 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf Flume 1.9用户手册中文版 — 可能是目前翻译最完…

vue2项目中在线预览csv文件

简介 希望在项目中&#xff0c;在线预览.csv文件&#xff0c;本以为插件很多&#xff0c;结果都只是支持excel&#xff08;.xls、.xlsx&#xff09;一到.csv就歇菜。。。 关于文件预览 vue-office&#xff1a;文档、 查看在线演示demo&#xff0c;支持docx、.xlsx、pdf、ppt…

右键添加获取可供WSL使用的路径,对windows文件夹也适用,即获取符合Linux规范的路径内容给WSL

文章目录 1. 功能展示1.1. 对 WSL 文件/文件夹/目录空白位置 使用1.2. 对 Windows 文件/文件夹/目录空白位置 使用1.3. Fin 2. 方法3. 文件内容3.1. AddWSLPath.reg3.2. CopyPath.vbs 4. 念念碎 1. 功能展示 1.1. 对 WSL 文件/文件夹/目录空白位置 使用 输出 /etc 1.2. 对 Wi…

新版Apache tomcat服务安装 Mac+Window双环境(笔记)

简介&#xff1a;Tomcat服务器器的下载和安装&#xff1a; 安装前提 1&#xff09;电脑需要有java环境&#xff0c;jdk8以上&#xff0c;否则启动不不成功 2&#xff09;已经安装Sublime⽂文件编辑软件 3&#xff09;window电脑需要显示⽂文件拓拓展名 官网&#xff08;https:…

网络基础(3)https和加密

http其它的报头 直接看图片&#xff1a; 上图中的第一个和第二个类型之前已经使用过了也就不多做说明了&#xff0c;第三个报头类型使用的很少了。第四个报头类型主要就使用在一些灰度更新的应用上&#xff0c;确定用户使用的软件的版本不让其访问该版本不能访问的功能。下一个…

vue3【实战】切换全屏【组件封装】FullScreen.vue

效果预览 原理解析 使用 vueUse 里的 useFullscreen() 实现 代码实现 技术方案 vue3 vite UnoCSS vueUse 组件封装 src/components/FullScreen.vue <template><component:is"tag"click"toggle":class"[!isFullscreen ? i-ep:full-sc…

热点更新场景,OceanBase如何实现性能优化

案例背景 这个案例来自一个保险行业的客户&#xff1a;他们的核心系统底层采用了OceanBase数据库作为存储解决方案&#xff0c;然而&#xff0c;在系统上线运行后&#xff0c;出现了一个异常情况&#xff0c;执行简单的主键更新语句时SQL执行时间出现了显著的波动。为了迅速定…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展&#xff0c;传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式&#xff0c;即商家不需要自己储备商品库存&#xff0c;而是将订单直接转给供应商&#xff0c;由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

使用Axios函数库进行网络请求的使用指南

目录 前言1. 什么是Axios2. Axios的引入方式2.1 通过CDN直接引入2.2 在模块化项目中引入 3. 使用Axios发送请求3.1 GET请求3.2 POST请求 4. Axios请求方式别名5. 使用Axios创建实例5.1 创建Axios实例5.2 使用实例发送请求 6. 使用async/await简化异步请求6.1 获取所有文章数据6…

Python Web 应用开发基础知识

Python Web 应用开发基础知识 引言 随着互联网的快速发展&#xff0c;Web 应用程序的需求日益增加。Python 作为一种简单易学且功能强大的编程语言&#xff0c;已经成为 Web 开发中广受欢迎的选择之一。本文将深入探讨 Python Web 开发的基础知识&#xff0c;包括常用框架、基…

Ubuntu 的 ROS 2 操作系统 turtlebot3 gazebo仿真

引言 TurtleBot3 Gazebo仿真环境是一个非常强大的工具&#xff0c;能够帮助开发者在虚拟环境中测试和验证机器人算法。 Gazebo是一个开源的3D机器人仿真平台&#xff0c;它能支持物理引擎&#xff0c;允许机器人在虚拟环境中模拟和测试。结合ROS&#xff0c;它能提供一个完整的…

前后端交互之动态列

一. 情景 在做项目时&#xff0c;有时候后会遇到后端使用了聚合函数&#xff0c;导致生成的对象的属性数量或数量不固定&#xff0c;因此无法建立一个与之对应的对象来向前端传递数据&#xff0c;这时可以采用NameDataListVO向前端传递数据。 Data Builder AllArgsConstructo…