本文主要是介绍论文阅读:Representation Learning with Contrastive Predictive Coding,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Representation Learning with Contrastive Predictive Coding
- 参考一些NLP方法
- 理解Contrastive Learning
CPC
Motivation: 该论文认为,随着预测未来更多的帧,一些noisy的低层信息会被忽略掉,更多的共享信息(该论文称之为slow features)会被提取到,这也是一些更应被关注的信息。论文举了几个例子:phonemes,object,story line.
去真正的预测未来帧并不是一件简单且必要的事情,因此论文提出学习到某种可以使得当前状态c和未来帧x之间互信息最大的表示。
MI表示:
I ( x , c ) = H ( x ) − H ( x ∣ c ) = ∑ x , c p ( x , c ) l o g p ( x ∣ c ) p ( x ) I(x,c) = H(x) - H(x|c) = \sum_{x,c}p(x,c)log\frac{p(x|c)}{p(x)} I(x,c)=H(x)−H(x∣c)=x,c∑p(x,c)logp(x)p(x∣c)
论文中要以某种loss函数的形式来最大化当前编码 c t c_t ct与未来帧 x t + k x_{t+k} xt+k之间的互信息。
而上述MI公式中的 p ( x ∣ c ) p ( x ) \frac{p(x|c)}{p(x)} p(x)p(x∣c)不容易计算。CPC给出的解决方案是利用最大化所提出的InfoNCE loss来最大化MI的一个下界。
如上述,给定 X = { x 1 , x 2 , . . . , x N } X=\{x_1, x_2, ..., x_N\} X={x1,x2,...,xN}其中 x n ( n ≠ i ) x_n (n \neq i) xn(n=i)采样自p(x), 而 x i x_i xi采样于 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+k∣ct). 实际上当前的X中postive是 x i x_i xi的概率
p ( d = i ∣ X , c t ) = p ( d = i , X ∣ c t ) p ( X ∣ c t ) = p ( d = i , X ∣ c t ) ∑ j p ( d = j , X ∣ c t ) = p ( x 1 ∣ c t ) p ( x 2 ∣ c t ) . . . p ( x i ∣ c t ) . . . p ( x N ∣ c t ) ∑ j p ( x 1 ∣ c t ) p ( x 2 ∣ c t ) . . . p ( x j ∣ c t ) . . . p ( x N ∣ c t ) = p ( x 1 ) p ( x 2 ) . . p ( x i ∣ c t ) . . . p ( x N ) ∑ j p ( x 1 ) p ( x 2 ) . . . p ( x j ∣ c t ) . . . p ( x N ) = p ( x i ∣ c t ) p ( x i ) ∑ j p ( x j ∣ c t ) p ( x j ) p(d=i|X, c_t) = \frac{p(d=i, X|c_t)}{p(X|c_t)} \\ = \frac{p(d=i,X|c_t)}{\sum_jp(d=j,X|c_t)} \\ = \frac{p(x_1|c_t)p(x_2|c_t)...p(x_i|c_t)...p(x_N|c_t)}{\sum_jp(x_1|c_t)p(x_2|c_t)...p(x_j|c_t)...p(x_N|c_t)}\\ =\frac{p(x_1)p(x_2)..p(x_i|c_t)...p(x_N)}{\sum_j{p(x_1)p(x_2)...p(x_j|c_t)...p(x_N)}} \\ =\frac{\frac{p(x_i|c_t)}{p(x_i)}}{\sum_j\frac{p(x_j|c_t)}{p(x_j)}} p(d=i∣X,ct)=p(X∣ct)p(d=i,X∣ct)=∑jp(d=j,X∣ct)p(d=i,X∣ct)=∑jp(x1∣ct)p(x2∣ct)...p(xj∣ct)...p(xN∣ct)p(x1∣ct)p(x2∣ct)...p(xi∣ct)...p(xN∣ct)=∑jp(x1)p(x2)...p(xj∣ct)...p(xN)p(x1)p(x2)..p(xi∣ct)...p(xN)=∑jp(xj)p(xj∣ct)p(xi)p(xi∣ct)
所以 f k ( x t + k , c t ) f_k(x_{t+k}, c_t) fk(xt+k,ct)正比于上述分子。
但是为何 L N \mathcal{L}_N LN中的分式代表 p ( d = i ∣ X , c t ) p(d=i|X, c_t) p(d=i∣X,ct),论文中大致是这样描述的:
f k ( x t + k , c t ) ∑ x f k ( x , c t ) \frac{f_k(x_{t+k}, c_t)}{\sum_xf_k(x, c_t)} ∑xfk(x,ct)fk(xt+k,ct)是一个正样本类别概率,当优化 L N \mathcal{L}_N LN的时候,就是在最大化这个正样本类别概率,其实类似于一个最大似然估计的过程,来估计出上述的 p ( d = i ∣ X , c t ) p(d=i|X, c_t) p(d=i∣X,ct)
在理论上的解释就是上面的内容,技术上,其实这类往往比较容易实现,道理也很直观。
由于 f f f只是一个由参数决定的估计值, f f f被feed x i , c t x_i, c_t xi,ct和负样本 x j , c t x_j, c_t xj,ct,计算softmax分类即可,直观上可以认为是一种contrastive loss, 即配对的当前状态 c t c_t ct和未来帧 x t + k x_{t+k} xt+k通过 f f f后的值较大,而不配对的较小。实际上就是给你一堆 x x x,网络有能力判断出与 c t c_t ct匹配的哪个 x i x_i xi.
其实这类论文的思路按照theory->method的顺序往往难以理解,但是按照method->theory的顺序往往是容易的,即随便想一个intuitive的loss,将其想法设法与已有的统计量发生关联,给出一个合理的数学解释。
CPC的实验部分:
这篇关于论文阅读:Representation Learning with Contrastive Predictive Coding的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!