论文笔记:Self-critical Sequence Training for Image Captioning

2023-12-20 21:38

本文主要是介绍论文笔记:Self-critical Sequence Training for Image Captioning,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文链接:Self-critical Sequence Training for Image Captioning


引言

现在image caption主要存在的问题有:

  1. exposure bias:模型训练的时候用的是叫“Teacher-Forcing”的方式:输入RNN的上一时刻的单词是来自训练集的ground-truth单词。而在测试的时候依赖的是自己生成的单词,一旦生成得不好就会导致误差的积累,导致后面的单词也生成得不好。

  2. 模型训练的时候用的是cross entropy loss,而evaluate的时候却用的是BLEU、ROUGE、METEOR、CIDEr等metrics,存在不对应的问题。

由于生成单词的操作是不可微的,无法通过反向传播来直接优化这些metrics,因此很多工作开始使用强化学习来解决这些问题。

但强化学习在计算期望梯度时的方差会很大,通常来说是不稳定的。又有些研究通过引入一个baseline来进行bias correction。还有一些方法比如Actor-Critic,训练了一个critic网络来估算生成单词的value。

而本文的方法则没有直接去估算reward,而是使用了自己在测试时生成的句子作为baseline。sample时,那些比baseline好的句子就会获得正的权重,差的句子就会被抑制。具体做法会在后面展开。


Caption Models

本文分别使用了两个caption model作为基础,分别是

  1. FC model [3, 4]。就是以cross entropy loss训练的image caption模型,公式基本跟show and tell里的公式一样。
  2. Attention Model(Att2in)。本文对原模型的结构进行了一些修改,只把attention feature输入到LSTM的cell node,并且发现使用ADAM方法优化的时候,这种结构的表现优于其他结构。
FC models

公式就不打了,只需要知道LSTM最后输出的是每个单词的分数 s t s_t st,再通过softmax得到下一个单词的概率分布为 w t w_t wt

训练目标是最小化cross entropy loss(XE):

L ( θ ) = − ∑ t = 1 T l o g ( p θ ( w t ∗ ∣ w 1 ∗ , . . . , w t − 1 ∗ ) ) L(\theta) = - \sum^T_{t=1} log(p_\theta(w^*_t | w^*_1,...,w^*_{t-1})) L(θ)=t=1Tlog(pθ(wtw1,...,wt1))

θ \theta θ是模型的参数, w 1 ∗ , . . . , w t − 1 ∗ w^*_1,...,w^*_{t-1} w1,...,wt1是训练集中的语句, s t s_t st p θ p_\theta pθ在后面Reinforcement Learning部分会被用到。

Attention Model(Att2in)

公式基本跟FC Model的一样,只不过在cell node的公式里加了个attention项,其他部分以及loss function也跟上面一样的。


Reinforcement Learning

把序列问题看作是一个RL的问题:

  • Agent: LSTM
  • Environment: words and image features
  • Action: prediction of the next word(模型的参数 θ \theta θ定义了一个policy p θ p_\theta pθ,也就是上面的 p θ p_\theta pθ,从而导致了这个action)
  • State: cells and hidden states of the LSTM, attenion weights etc
  • Reward: CIDEr score r

训练目标是最小化负的期望

L ( θ ) = − E w s ∼ p θ [ r ( w s ) ] L(\theta) = -\mathbb{E}_{w^s\sim p_\theta} [r(w^s)] L(θ)=Ewspθ[r(ws)]

= − ∑ r ( w s ) p θ ( w s ) = -\sum r(w^s)p_\theta (w^s) =r(ws)pθ(ws)

w s = ( w 1 s , . . . , w T s ) w^s=(w^s_1,...,w^s_T) ws=(w1s,...,wTs)是生成的句子。

实际上, w s w^s ws可以依据 p θ p_\theta pθ的概率来进行single sample(而不是选择概率最大的那一个), L ( θ ) L(\theta) L(θ)可以近似为:

L ( θ ) ≈ − r ( w s ) , w s ∼ p θ L(\theta) \approx -r(w^s), w^s \sim p_\theta L(θ)r(ws),wspθ

L关于 θ \theta θ的梯度为:

∇ θ L ( θ ) = − E w s ∼ p θ [ r ( w s ) ∇ θ log ⁡ p θ ( w s ) ] \nabla_\theta L(\theta) = -\mathbb{E}_{w_s\sim p_\theta}[r(w^s)\nabla_\theta \log p_\theta(w^s) ] θL(θ)=Ewspθ[r(ws)θlogpθ(ws)]

推导过程:

这里写图片描述
再引入一个baseline来减少方差:

∇ θ L ( θ ) = − E w s ∼ p θ [ ( r ( w s ) − b ) ∇ θ log ⁡ p θ ( w s ) ] \nabla_\theta L(\theta) = -\mathbb{E}_{w_s\sim p_\theta}[(r(w^s) - b)\nabla_\theta \log p_\theta(w^s) ] θL(θ)=Ewspθ[(r(ws)b)θlogpθ(ws)]

baseline可以是任意函数,只要它不依赖action w s w^s ws,引入它并不会改变梯度的值,证明如下:
这里写图片描述

实际上 L ( θ ) L(\theta) L(θ)可以被近似为:
∇ θ L ( θ ) ≈ − ( r ( w s ) − b ) ∇ θ log ⁡ p θ ( w s ) \nabla_\theta L(\theta) \approx -(r(w^s) - b)\nabla_\theta \log p_\theta(w^s) θL(θ)(r(ws)b)θlogpθ(ws)

应用链式法则,梯度可以表示为:
∇ θ L ( θ ) = ∑ t = 1 T ∂ L ( θ ) ∂ s t ∂ s t ∂ θ \nabla_\theta L(\theta) = \sum_{t=1}^T \frac{\partial L(\theta) }{\partial s_t } \frac{\partial s_t }{\partial \theta} θL(θ)=t=1TstL(θ)θst

根据Reinforcement learning neural turing machines: //我在原文并没有找到为什么可以这样近似,但在SEQUENCE LEVEL TRAINING WITH RECURRENT NEURAL NETWORKS里面有解释
∂ L ( θ ) ∂ s t ≈ ( r ( w s ) − b ) ( p θ ( w t ∣ h t ) − 1 w t s ) \frac{\partial L(\theta)}{\partial s_t} \approx (r(w^s) - b)(p_\theta(w_t|h_t) - 1_{w_t^s}) stL(θ)(r(ws)b)(pθ(wtht)1wts)

1 w t s 1_{w_t^s} 1wts是词的one-hot向量表示。

Self-Critical sequence training(SCST)

SCST阶段的训练过程如图所示:

这里写图片描述

SCST的思想就是用当前模型在测试阶段生成的词的reward作为baseline,梯度就变成了:

∂ L ( θ ) ∂ s t ≈ ( r ( w s ) − r ( w ^ ) ) ( p θ ( w t ∣ h t ) − 1 w t s ) \frac{\partial L(\theta)}{\partial s_t} \approx (r(w^s) - r(\hat w))(p_\theta(w_t|h_t) - 1_{w_t^s}) stL(θ)(r(ws)r(w^))(pθ(wtht)1wts)

其中 r ( w ^ ) = a r g m a x w t p ( w t ∣ h t ) r(\hat w)=arg max_{w_t}p(w_t|h_t) r(w^)=argmaxwtp(wtht),就是在测试阶段使用greedy decoding取概率最大的词来生成句子;

r ( w s ) r(w^s) r(ws)是通过根据概率来随机sample词,如果当前概率最大的词的概率为60%,那就有60%的概率选到它,而不是像greedy decoding一样100%选概率最大的。

公式的意思就是:对于如果当前sample到的词比测试阶段生成的词好,那么在这次词的维度上,整个式子的值就是负的(因为后面那一项一定为负),这样梯度就会上升,从而提高这个词的分数 s t s_t st;而对于其他词,后面那一项为正,梯度就会下降,从而降低其他词的分数。


Experiments

训练阶段,作者使用了curriculum learning的方法:先对最后一个词使用CIDEr的目标进行训练,前面的词则使用XE进行训练,然后逐步开始提高比例,对最后两个词、三个词用CIDEr进行训练。但最后发现在MSCOCO数据集上,这种训练方法没有提高模型的performance。

作者也对其他的metrics进行优化,但是发现只有优化CIDEr才能提高其他metrics的得分。

有意思的是,文章还对一些objects ut-of-context(OOOC)的图片进行实验,发现使用了SCST优化的Att2in模型能准确地描述图片。
这里写图片描述
但至于为什么模型有这样的能力,文章没有进行探讨。

Supplementary Material

几个有意思的点:

  • 跟SEQUENCE LEVEL TRAINING WITH RECURRENT NEURAL NETWORKS的发现一样,作者发现使用RL加beam search训练的模型只比RL加greedy decoding训练的模型有少量的提升。
  • 在优化CIDEr的时候要把EOS tag当成单词,不然的话生成的句子会含有大量的"with a"
    "and a"这样没有意义但是能在CIDEr标准里面拿高分的单词。在CIDEr-D里面引入了截断和基于长度的惩罚,实际上就是本文所优化的(为什么不直接优化CIDEr-D呢?)

本文链接:http://blog.csdn.net/sinat_26253653/article/details/78458894
参考:用Reinforcement Learning来做image captioning


这篇关于论文笔记:Self-critical Sequence Training for Image Captioning的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517599

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个