Loading

「NLP」朴素贝叶斯

Topic: Naive Bayes

  • 求最优解 (closed-form)
  • MLE (最大似然)
  • Lagrange Multiplier Method (拉格朗日乘数法)
  • Solve for Naive Bayes

讲解朴素贝叶斯模型的数学原理。

求极值

例题:\(f(x)=x^2-2x-3\)

1.公式计算

\[x = -\frac{b}{2a} = 1 \]

2.求导数

\[\begin{align} f'(x) &= 2x-2=0 \\ & \implies x=1 \end{align} \]

3.Gradient Descent (first order)

\(t=0\)时,随机初始化 \(x^0\)

\(t=1, 2,\cdots\)

\(x^t=x^{t-1}-\eta_t \nabla_t f(x)\)

4.Newton's method (second order)

有限制条件的优化 (constrained optimization)

例题:求解 \(f(x)=x+y\) 的最大值,限制条件为 \(s.t. \, x^2+y^2=1\).

s.t.: such that.

通过拉格朗日乘数法,把上面的问题转化为求解下面式子的最大值:

\[L(x,y,\lambda) = x+y+\lambda (x^2+y^2-1) \]

Note:很多有条件限制的优化问题都可以考虑使用拉格朗日乘数法

接着通过计算偏导数,得到下面3个等式:

\[\begin{align} & \frac{\partial L(x,y,\lambda)}{\partial x} = 1 + 2\lambda x =0 \\ & \frac{\partial L(x,y,\lambda)}{\partial y} = 1 + 2\lambda y =0 \\ & \frac{\partial L(x,y,\lambda)}{\partial \lambda} = x^2+y^2-1 =0 \\ \end{align} \]

根据上面的3个等式,可以求出:

\[\lambda_1=\frac{\sqrt{2}}{2},\lambda_2=-\frac{\sqrt{2}}{2} \\ (x,y) = (\frac{\sqrt{2}}{2}, -\frac{\sqrt{2}}{2}) \, or \, (-\frac{\sqrt{2}}{2}, \frac{\sqrt{2}}{2}) \]

最大似然估计 (Maximum Likelihood Estimation, MLE)

最大似然估计是机器学习领域最为常见的用来构建目标函数的方法。它的核心思想是根据观测学习到的结果来预测其中的未知参数。

构建目标函数的方法:

  • MLE (最大似然估计)
  • MAP (最大后验概率估计)
  • Bayesian Estimation (贝叶斯估计)

扔硬币问题

例子:对于一个不均匀的硬币,H(正面),T(反面),\(\theta\) 表示出现正面的概率,如何估计 \(\theta\)

假如我们扔了6次,统计到的数据为 \(D = \{H,T,T,H,H,H \}\),这是一个典型的古典概型问题,我们可以估算 \(\theta=\frac{4}{6}=\frac{2}{3}\),这其实就用到了MLE的思想。

Step1: 构建目标函数

我们的目标函数可以定义为最大化观测值出现的概率:

\[\begin{align} \max p(D) &= p(H,T,T,H,H,H) \\ &= p(H) \cdot p(T) \cdot p(T) \cdot p(H) \cdot p(H) \cdot p(H) \\ &= \theta \cdot (1-\theta) \cdot (1-\theta) \cdot \theta \cdot \theta \cdot \theta \\ &= \theta^{4} \cdot (1-\theta)^2 \end{align} \]

\(L(\theta) = \theta^{4} \cdot (1-\theta)^2\) ,我们的目标就是求解使得 \(L(\theta)\) 最大对应的参数 \(\theta\)

Step2: 优化

目标函数定义好之后,就需要通过各种方法进行优化,这里采用求导的方法。

\[\frac{\partial{L(\theta)}}{\partial{\theta}} = \theta^4 \cdot 2(1-\theta)(-1) + 4\theta^3 \cdot (1-\theta)^2 = 0 \]

计算等式,求得:\(\theta=\frac{2}{3}\) .

样本量少的时候,通常采用MAP;样本量大的时候,可以使用MLE。样本量越大的时候,MAP越趋近于MLE。

如何理解目标函数?

模型是抽象程度较高的东西,模型实例化就变成了具体的目标函数。可以类比为面向对象中创建对象和实例化对象的关系。

朴素贝叶斯 (Naive Bayes)

给定一批训练数据 \(D= \{\ (x^1,y^1), \cdots , (x^N,y^N)\}\)

\(x^i\) : 指第 \(i\) 个样本(文章),而且该样本包含了 \(m_i\) 个单词,\(x^i=(x^i_1,x^i_2, \cdots , x^i_{m_i})\)

\(y^i\) : 代表 \(x^i\) 的标签,比如在垃圾邮件分类应用上,代表”垃圾邮件“,”正常邮件“。

\(V\) : 词典库的大小,即词典中单词的数量。

假设 \(x^i =“今天很高兴来参加NLP训练营”\),那这时候 \(x^i_1="今天", x^i_2="很", x^i_3="高兴", x^i_4="来", x^i_5="参加", x^i_6="NLP", x^i_7="训练营"\), 所以 \(m_i=7\)

Step1 MLE构建目标函数

朴素贝叶斯是生成模型,它的目标是要最大化概率 \(p(D)\) ,即 \(p(x,y)\)

式子说明:

  • 式子(4)是利用的贝叶斯公式。

  • 式子(4)到(5)利用了一个事实:样本 \(x^i\) 由很多个单词来构成。

  • 式子(5)到(6)利用了朴素贝叶斯的假设,也就是每个单词都是相互独立的。即\(p(x,y,z|h) = p(x|h) \cdot p(y|h) \cdot p(z|h)\)

可以看到式子都是乘法项,而多个乘法项很容易导致数据的overflow或underflow(这里是underflow)。所以我们一般不直接最大化 \(p(D)\) ,而是改成最大化 \(\log p(D)\)

所以上式修改为:

式子说明:

  • 式子(7)到(8)的技巧:假设 \(x^i="我们天天运动"\) ,那么其概率可以表示为 \(p(我们天天运动|y)=p(我们天们|y) \cdot p(天|y) \cdot p(运动|y)\) ,另一方面,也可以利用词典库中的所有单词来表示这个概率为 \(p(我们天天运动|y)=p(啊|y)^0 \cdot p(呀|y)^0 \cdots p(天|y)^2 \cdots p(我们|y)^1 \cdots p(运动|y)^1\)。这两者其实是等价的,所以把 \(\prod_{j=1}^{m_j}p(x_j^i|y_i)\) 表示成 \(\prod_{j=1}^{V}p(w_j|y_i)^{n_{ij}}\)。其中,\(n_{ij}\) 代表单词 \(j\) 出现在文档 \(i\) 中的次数,\(w_j\) 代表词典库里的第 \(j\) 个单词。

  • 式子(8)到(9)利用了 \(\log\) 的性质。

  • 式子(9)到(10)是把文档按照类别做了分类。一开始我们是从文档1到N的顺序来循环的,但是现在先取出类别为1的文档,然后再取出类别为2的文档,以此类推。所以 \(\sum_{i=1}^N\) 被拆分成 \(\sum_{k=1}^K \sum_{i:y^i=k}\)\(K\) 表示类别的个数,\(i:y^i=k\) 代表属于类别 \(k\) 的所有文档。

  • 式子(10)到(11)引入两组变量,令 \(p(w_j|y^i=k)=\Theta_{kj}\) ,表示当文章分类为 \(k\) 的时候出现单词 \(w_j\) 的概率;令 \(p(y^i=k)=\pi_{k}\) ,表示文章属于分类 \(k\) 的概率,这个也是朴素贝叶斯模型的先验概率(prior)。

  • 式子(10)到(11)引入一个新的变量 \(n_k\)\(\sum_{i:y^i=k}=n_k\) 表示属类别 \(k\) 的文章个数。

上式中有两个约束条件需要满足,分别是:

式子说明:

  • 条件(13)表示所有类别的概率加起来等于1。

  • 条件(14)表示的是对于任意一个类别k,出现所有词典里的单词的总概率等于1。

所以,这是一个有约束条件的优化问题,把约束条件和目标函数写在一起:

利用拉格朗日乘法项,得到目标函数

Step2 偏导数求解最优解

通过计算偏导数的方法,求解目标函数的最优解。

找出最优解 \(\pi_k\)

\(L\)\(\pi_k\) 的偏导数为:

解得:

\[\pi_k = - \frac{1}{\lambda} n_k \]

需要求解参数 \(\lambda\) ,把 \(\pi_k\) 的解代入约束条件 \(\sum_{u=1}^K \pi_u=1\) ,可以得到:

\[\sum_{u=1}^K - \frac{1}{\lambda} n_u = 1 \]

则得出 \(\lambda = - \sum_{u=1}^K n_u\) ,把 \(\lambda\) 代入 \(\pi_k\) 里面,得到:

\[\pi_k = \frac{n_k}{\sum_{u=1}^K \pi_u} \]

分子 \(n_k\) 表示k类文档的个数,分母 \(\sum_{u=1}^K \pi_u\) 表示语料库中文档的个数。

找出最优解 \(\Theta_{kj}\)

类似的,\(L\)\(\Theta_{kj}\) 的偏导数为:

解得:

\[\Theta_{kj} = - \frac{1}{\lambda_k} \sum_{i:y^i=k} n_{ij} \]

需要求解参数 \(\lambda_k\) ,把 \(\Theta_{kj}\) 的解代入约束条件 \(\sum_{v=1}\Theta_{kv}=1\) ,可以得到:

\[\lambda_k = - \sum_{v=1}^V \sum_{i:y^i=k} n_{iv} \]

Note: 文档中的 \(\lambda_k\) 式子写错了。

\(\lambda_k\) 代入上面的解,得到:

\[\Theta_{kj} = \frac{\sum_{i:y^i=k} n_{ij}}{\sum_{v=1}^V \sum_{i:y^i=k} n_{iv}} \]

分子表示在所有类别为k的文档中出现了多少次 \(w_j\) (词典库中的第j个单词),分母代表类别k的所有文档中出现的单词个数。

posted @ 2021-12-29 11:59  活用数据  阅读(153)  评论(0编辑  收藏  举报