采样

引子
最近开始拾起来看一些NLP相关的东西,特别是深度学习在NLP上的应用,发现采样方法在很多模型中应用得很多,因为训练的时候如果预测目标是一个词,直接的softmax计算量会根据单词数量的增长而增长。恰好想到最开始深度学习在DBN的时候采样也发挥了关键的作用,而自己对采样相关的方法了解不算太多,所以去学习记录一下,经典的统计的方法确实巧妙,看起来非常有收获。

本篇文章先主要介绍一下经典的采样方法如Inverse Sampling、Rejective Sampling以及Importance Sampling和它在NLP上的应用,后面还会有一篇来尝试介绍MCMC这一组狂炫酷拽的算法。才疏学浅,行文若有误望指正。

Why Sampling
采样是生活和机器学习算法中都会经常用到的技术,一般来说采样的目的是评估一个函数在某个分布上的期望值,也就是
E[f(x)],x∼p,p is a distribution.

比如我们都学过的抛硬币,期望它的结果是符合一个伯努利分布的,定义正面的概率为p,反面概率为1−p。最简单地使f(x)=x,在现实中我们就会通过不断地进行抛硬币这个动作,来评估这个概率p。
E[f(x)]≈1m∑i=1mf(xi). xi∼p

这个方法也叫做蒙特卡洛法(Monte Carlo Method),常用于计算一些非常复杂无法直接求解的函数期望。
对于抛硬币这个例子来说:
E[f(x)]=p≈1m∑i=1mxi=cntum

其期望就是抛到正面的计数cntu除以总次数m。
而我们抛硬币的这个过程其实就是采样,如果要用程序模拟上面这个过程也很简单,因为伯努利分布的样本很容易生成:
yi∼Uniform(0,1),so xi=I(y

猜你喜欢

转载自blog.csdn.net/sun_brother/article/details/80701139