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

引言

深度学习基础—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)的比例,哪种情况的比例更高,就说明哪部分更值得优化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vueRouter路由切换时实现页面子元素动画效果, 左右两侧滑入滑出效果

说明 vue路由切换时&#xff0c;当前页面左侧和右侧容器分别从两侧滑出&#xff0c;新页面左右分别从两侧滑入 效果展示 路由切换-滑入滑出效果 难点和踩坑 现路由和新路由始终存在一个页面根容器&#xff0c;通过<transition>组件&#xff0c;效果只能对页面根容器有效…

【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)

文章目录 前言一、自定义拦截器二、自定义操作1.自定义颜色2.合并单元格 三、复杂操作示例1.实体(使用了注解式样式)&#xff1a;2.自定义拦截器3.代码4.最终效果 前言 本文简单介绍阿里的EasyExcel的复杂导出操作&#xff0c;包括自定义样式&#xff0c;根据数据合并单元格等。…

集群搭建高可用

contos7.9 部署3节点 hadoop3.4 高可用集群 contos7.9 部署3节点 hadoop3.4 高可用集群环境信息Hadoop与Zookeeper的版本对应关系服务器角色分配使用端口服务器配置配置免密登录服务器配置初始化 init_server.sh配置主机名映射所有节点配置 hosts文件 hadoop 安装环境配置下载安…

Pycharm 配置 Poetry

Python 环境安装 参考以下&#xff1a; 官网安装步骤 CODA方式安装 Poetry 安装 Poetry在windows下的安装使用 1.下载软件包 下载地址 2.获取安装脚本下载地址 3.使用命令安装 打开cmd&#xff0c;进入安装包和脚本文件所在目录&#xff0c;执行命令&#xff1a; python …

卡尔曼滤波:从理论到应用的简介

卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种递归算法&#xff0c;用于对一系列噪声观测数据进行动态系统状态估计。它广泛应用于导航、控制系统、信号处理、金融预测等多个领域。本文将介绍卡尔曼滤波的基本原理、核心公式和应用案例。 1. 什么是卡尔曼滤波&#x…

聊聊Flink:Flink的运行时架构

一、运行时架构 上一篇我们可以看到Flink的核心组件的Deploy层&#xff0c;该层主要涉及了Flink的部署模式&#xff0c;Flink支持多种部署模式&#xff1a;本地、集群&#xff08;Standalone/YARN&#xff09;、云&#xff08;GCE/EC2&#xff09;。 Local&#xff08;本地&am…

元器件封装

元器件封装类型 为什么越来越多用贴片元件&#xff0c;而不是插件元件 为什么越来越多用贴片元件&#xff0c;而不是插件元件 1.体积小、质量小、容易保存和运输&#xff1b; 2.容易焊接和拆卸。抗震效果好。 贴片元件不用过孔&#xff0c;用锡少。直插元件最麻烦的就是拆卸&a…

[JAVAEE] 网络编程

目录 一. 什么是socket套接字 二. socket套接字 2.1 socket套接字根据传输层协议分类 2.2 TCP流套接字 UDP数据报套接字主要特点 三. UDP数据报套接字编程 3.1 DatagramSocket 是UDP socket, 用于发送和接受数据报 3.2 DatagramPacket 是UDP socket 发送和接收的数据报 …

GNN入门案例——KarateClub结点分类

文章目录 一、任务描述二、环境配置三、加载数据四、定义网络结构五、训练模型 一、任务描述 Karate Club 图任务是一个经典的图结构学习问题&#xff0c;通常用于社交网络分析和社区检测。该数据集是由 Wayne W. Zachary 在1977年收集的&#xff0c;描述了一个美国的空手道俱…

173. 二叉搜索树迭代器【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 173. 二叉搜索树迭代器 一、题目描述 实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterato…

【lamafactory BLEU ROUGLE L评测】

1、BLEU/ROUGLE评测界面 2、这个是用BLEU 和ROUGL来评测 目录&#xff1a;saves/Qwen2-7B-Chat/lora/eval_2024-11-14-16-28-19/ 在saves文件夹 生成的文件如下 all_results.json文件 说明模型在这个测试集上是不好的 3、可以查看预测结果的文件 predict_result.json

前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)

文章目录 1. npm (Node Package Manager)2. Yarn (Yarn Package Manager)3. pnpm4. Bower5. Parcel总结 前端开发中常用的包管理器主要有以下几个&#xff1a; 1. npm (Node Package Manager) 简介&#xff1a; npm 是 Node.js 的默认包管理器&#xff0c;也是最广泛使用的包…

Python爬虫项目 | 一、网易云音乐热歌榜歌曲

文章目录 1.文章概要1.1 实现方法1.2 实现代码1.3 最终效果 2.具体讲解2.1 使用的Python库2.2 代码说明2.2.1 创建目录保存文件2.2.2 爬取网易云音乐热歌榜单歌曲 2.3 过程展示 3 总结 1.文章概要 学习Python爬虫知识&#xff0c;实现简单的一个小案例&#xff0c;网易云音乐热…

SHELL脚本(Linux)

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…

reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响

目录 Gather Scatter Reduce reduce-scatter:适合分布式计算 Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响 计算结果理论正确性 资源消耗方面 Gather 这个也很好理解,就是把多个进程的数据拼凑在一起。 Scatter 不同于Br…

arkUI:水果选择与管理:基于 ArkUI 的长按编辑功能实现

水果选择与管理&#xff1a;基于 ArkUI 的长按编辑功能实现 1 主要内容说明2 相关内容2.1 相关内容2.1.1 源码1内容的相关说明2.1.1.1 数据结构与状态管理2.1.1.2 添加水果功能2.1.1.3 水果列表展示2.1.1.4 长按进入编辑模式2.1.1.5 复选框的多选功能2.1.1.6 删除水果功能2.1.1…

(时序论文阅读)TimeMixer: Decomposable Multiscale Mixing for Time Series Forecasting

来源论文iclr2024 论文地址&#xff1a;https://arxiv.org/abs/2405.14616 源码地址&#xff1a; https://github.com/kwuking/TimeMixer 背景 数据是有连续性&#xff0c;周期性&#xff0c;趋势性的。我们这篇文章主要围绕的是用MLP结构来预测数据的周期性具体为&#xff…

聊天服务器(8)用户登录业务

目录 登录状态业务层代码数据模型层代码记录用户的连接信息以及线程安全问题客户端异常退出业务 登录状态 登录且状态变为online 业务层代码 #include "chatservice.hpp" #include "public.hpp" #include <string> #include <muduo/base/Loggi…

18.UE5怪物视野、AI感知、攻击范围、散弹技能

2-20 怪物视野、AI感知、攻击范围、散弹技能_哔哩哔哩_bilibili 目录 1.AI感知组件 2.AI感知更新的函数 3.攻击范围 4.散弹技能 4.1创建发射物 4.2创建远程攻击方式 4.3散弹自定义事件的实现 4.4动画通知实现攻击 1.AI感知组件 为怪物蓝图添加AI感知组件&#xff0c;…

单片机智能家居火灾环境安全检测

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代社会&#xff0c;火灾安全始终是人们关注的重点问题。随着科技的不…