Coarse-Grain Fine-Grain Coattention Network for Multi-Evidence Question Answering

ICLR 2019 Coarse-Grain Fine-Grain Coattention Network for Multi-Evidence Question Answering

背景

本篇文章所关注的问题是机器阅读理解(Machine Reading Comprehension),即根据查询在给定的文档中寻找相应答案的部分,具体来说是多事实QA(multi-evidence QA)问题。现有的端到端模型在单文档QA问题上往往可以取得不错的效果,即此时文档较短,且查询对应的答案存在于文档的某一具体区域。但是当查询所涉及的文档较多,且文档所对应的evidence散落在多文档的多个部分时,已有的模型处理起来就有点吃力了。

为了解决上述存在的问题,作者在本文中提出了一种Coarse-Grain Fine-Grain Coattention Network (CFC),它以一种从粗粒度到细粒度的渐进的方式来寻找查询所对应的答案部分。模型整体上包括两部分:

  • coarse-grain module:根据给定的查询和相应的文档通过coattention建立一种粗粒度的表示,然后通过自注意力进行总结,此时它是不知道候选答案的
  • gine-grain module:通过比较查询在所有文档中出现候选答案的上下文来为每个答案打分,通过coattention建立关于候选答案所在上下文和问题的表示

在两个模块中均使用了层次化的coattention以及自注意力机制(self-attention),模型通过这两种注意力机制实现查询、支持文档和候选答案之间不同部分的关注。

CFC在WikiHop的测试集上取得了70.6%的准确率,在没有使用预训练编码器的情况下,以3%的优势好于现有的SOTA模型;另外在TriviaQA上也取得了更好的效果,从而证明了所提出模型的有效性和优越性。

模型

CFC模型整体上如下图所示:


在这里插入图片描述

小声说:这是我看过这么多文章种画的最朴实的模型图了~

模型图一目了然,整体上包含上述的两个模块,它们分别处理查询(query)、和支持文档(support docs)。从这里可以看到两个模块都包含对应的打分器(scorer),最后综合考虑两部分的分数来选择问题对应的答案。

Coarse-grain module


在这里插入图片描述

假设当前给定的查询为 q q q,支持文档集为 N s N_{s} Ns,候选答案集为 N c N_{c} Nc。首先通过Bi-GRU对各部分进行编码,其中查询、第 i i i个文档和第 j j j个候选答案所对应的表示向量为 L q L_{q} Lq L s L_{s} Ls L c L_{c} Lc
E q = BiGRU ( tanh ⁡ ( W q L q + b q ) ) E s = BiGRU ( L s ) E c = BiGRU ( L c ) E_{q}=\text{BiGRU}(\tanh (W_{q}L_{q}+b_{q})) \\ E_{s}=\text{BiGRU}(L_{s}) \\ E_{c}=\text{BiGRU}(L_{c}) Eq=BiGRU(tanh(WqLq+bq))Es=BiGRU(Ls)Ec=BiGRU(Lc)
从上图中可以看出,首先 E s E_{s} Es E q E_{q} Eq使用coattention来建立表示向量,再使用self-attention来和 E c E_{c} Ec进行比较,从而完成最后的打分操作。

具体的过程为:在得到了如上的表示向量后,首先使用 E s E_{s} Es E q E_{q} Eq计算一个亲和度矩阵(affinity matrix) A = E s ( E q ) T A=E_{s}(E_{q})^T A=Es(Eq)T
那么 E s E_{s} Es E q E_{q} Eq就可以通过 A A A得到各自对应的summary vector:
S s = softmax ( A ) E q S q = softmax ( A T ) E s S_{s}= \text{softmax}(A)E_{q} \\ S_{q}= \text{softmax}(A^T)E_{s} Ss=softmax(A)EqSq=softmax(AT)Es
然后通过Bi-GRU得到文档的上下文向量 C s = BiGRU ( S q softmax ( A ) ) C_{s}=\text{BiGRU}(S_{q}\text{softmax}(A)) Cs=BiGRU(Sqsoftmax(A))最后将 C s C_{s} Cs S s S_{s} Ss进行拼接得到 U s = [ C s : S s ] U_{s}=[C_{s}:S_{s}] Us=[Cs:Ss]

以上过程可以简单的表述为 Coattn ( E s , E q ) → U s \text{Coattn}(E_{s},E_{q}) \rightarrow U_{s} Coattn(Es,Eq)Us

接着使用两层的MLP来对 U s U_{s} Us的每个位置进行打分,得到 G s G_{s} Gs。接着使用self-attention来为每个支持文档计算一个对应的固定长度的summary vector,使用它们和候选答案进行Coarse-grain模块的打分操作。
G c = Selfattn ( E c ) G ′ = Selfattn ( G ) y c o a r s e = tanh ⁡ ( W c o a r s e G ′ + b c o a r s e ) G c G_{c}=\text{Selfattn}(E_{c}) \\ G'=\text{Selfattn}(G) \\ y_{coarse}=\tanh(W_{coarse}G'+b_{coarse})G_{c} Gc=Selfattn(Ec)G=Selfattn(G)ycoarse=tanh(WcoarseG+bcoarse)Gc

Fine-grain module


在这里插入图片描述

根据前面对于fine-grain模块的描述,它会根据候选答案在支持文档中找到对应的上下文部分,这里称为mention。其中每一个mention都是通过self-attention得到对应的summary vector,接着根据summary vectors和query使用coattention来计算一个coattention context,最后使用self-attention来对每个mention进行打分。

假设第 i i i个文档中存在 m m m个mention,其中每一个mention表示为答案对应的起始和终止的索引 i s t a r t i_{start} istart i e n d i_{end} iend,那么第 k k k个mention可以表示为:
M k = Selfattn ( E s [ i s t a r t : i e n d ] ) M_{k}=\text{Selfattn}(E_{s}[i_{start}:i_{end}]) Mk=Selfattn(Es[istart:iend])
对所有的mention使用self-attention就可以得到所有mention的表示序列 M M M,然后根据 E q E_{q} Eq计算 U m U_{m} Um G m G_{m} Gm
U m = Coattn ( M , E q ) G m = Selfattn ( U m ) U_{m}=\text{Coattn}(M,E_{q}) \\ G_{m}=\text{Selfattn}(U_{m}) Um=Coattn(M,Eq)Gm=Selfattn(Um)最后通过一个线性层计算gine-grain模块的分数 y f i n e = W f i n e G m + b f i n e y_{fine}=W_{fine}G_{m}+b_{fine} yfine=WfineGm+bfine

实验部分可见原文。

这篇文章看的并不是很明白,所以应该有认识不正确的地方。但总的看下来感觉所涉及的内容并不复杂,主要还是一种渐进优化思想的应用,后面有新的体会再更新吧~

<think>好的,我需要回答用户关于“coarse-to-fine 方法在计算光流中的应用及实现”的问题。首先,我应该明确什么是coarse-to-fine方法,以及它在光流计算中的具体应用。根据用户提供的引用[^1],里面提到多尺度策略,也就是金字塔结构,用于处理大位移问题。这应该是coarse-to-fine方法的核心。 接下来,我需要解释coarse-to-fine方法的基本原理。可能涉及图像金字塔的构建,从低分辨率(粗尺度)到高分辨率(细尺度)逐步优化光流。引用中提到的非线性公式改变光流约束方程,可能需要用线性化和迭代方法处理每个尺度,这可能涉及到如Horn-Schunck方法的扩展。 然后,实现步骤可能需要分点说明:图像金字塔的创建、光流初始估计、迭代细化、运动增量计算等。每个步骤需要结合用户提供的引用内容,特别是多尺度策略和金字塔结构的作用。 用户还提到了性能优化和应用场景,可能需要在相关问题中提及,比如如何处理大位移、优化收敛速度等。需要确保回答结构清晰,分步骤解释,并引用提供的资料。 另外,注意使用正确的中文表达,数学公式需要用$$...$$和$...$格式。例如,光流约束方程可能需要用LaTeX表示,如$I_x u + I_y v + I_t = 0$。还有金字塔层间的运动传播公式,如$u^{k} = 2(u^{k-1} + \Delta u^{k})$。 需要检查是否有遗漏的关键点,比如非线性方程的处理、迭代方法的应用,以及金字塔结构如何逐步完善解决方案。同时,确保回答中的技术术语准确,比如多尺度策略、运动增量、线性化等。 最后,生成的相关问题要围绕实现细节、优化方法和应用场景展开,帮助用户进一步探索。例如,如何构建图像金字塔,或coarse-to-fine方法的优缺点。 总结思考步骤:定义coarse-to-fine方法,解释其在光流中的必要性,详细步骤分点说明,结合引用内容,数学公式正确使用,生成相关问题。</think>### Coarse-to-Fine光流计算方法实现 **1. 基本原理** Coarse-to-Fine方法通过多尺度图像金字塔(从低分辨率到高分辨率)逐步优化光流,解决大位移问题。其核心思想是:在粗尺度上捕捉大范围运动,再在细尺度上逐步修正细节。 **2. 实现步骤** **(1) 构建图像金字塔** - 对输入图像$I_1, I_2$进行降采样,生成多尺度图像序列: $$I^k = \text{downsample}(I^{k-1})$$ 其中$k=0$为原始分辨率,$k=K$为最粗尺度。 **(2) 光流初始化** 在最粗尺度($k=K$)初始化光流场$(u^K, v^K)$,通常设为零或简单运动模型。 **(3) 迭代细化过程** 从粗到细逐层优化: 1. **上采样传播**:将上一层的粗尺度光流$u^{k}, v^{k}$上采样到下一层: $$u^{k-1} = 2 \cdot \text{resize}(u^{k})$$ $$v^{k-1} = 2 \cdot \text{resize}(v^{k})$$ 2. **非线性约束方程**:基于光流约束方程改进运动估计: $$I_x(u + \Delta u) + I_y(v + \Delta v) + I_t = 0$$ 其中$\Delta u, \Delta v$为当前尺度的运动增量。 3. **线性化与迭代**:通过泰勒展开线性化方程,用迭代法(如Gauss-Newton)求解增量。 4. **增量叠加**: $$u^{k-1} \leftarrow u^{k-1} + \Delta u$$ $$v^{k-1} \leftarrow v^{k-1} + \Delta v$$ **(4) 最终优化** 在最细尺度($k=0$)输出光流场$(u^0, v^0)$。 **3. 关键技术点** - **金字塔层数**:通常3-5层,降采样因子为0.5 - **运动增量计算**:使用加权最小二乘法优化能量函数,如: $$E = \sum (I_x\Delta u + I_y\Delta v + I_t)^2 + \lambda(|\nabla \Delta u|^2 + |\nabla \Delta v|^2)$$ - **变形补偿**:在每层迭代时对图像进行变形(warping)以提高精度 **伪代码示例** ```python def coarse_to_fine_flow(img1, img2, max_level=4): pyramid1 = build_gaussian_pyramid(img1, max_level) pyramid2 = build_gaussian_pyramid(img2, max_level) flow = initialize_zero_flow(pyramid1[-1].shape) for level in reversed(range(max_level)): scaled_img1 = pyramid1[level] scaled_img2 = warp_image(pyramid2[level], flow) for iter in range(max_iterations): delta_flow = compute_flow_increment(scaled_img1, scaled_img2) flow = refine_flow(flow, delta_flow) if level > 0: flow = upsample_flow(flow, pyramid1[level-1].shape) return flow ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值