标签:参数估计 理解 自己 逻辑 参数 case lock 计算 博客
- 我的博客不是科普性质的博客,仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
- 本文参考了网络上诸多资料。
统一的机器学习框架(MLA):
1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)
按照如上所说框架,LR最核心的就是损失函数使用了 Sigmoid 和 Cross Entropy 。
LR: Sigmoid + Cross Entropy
题外话:参照上一篇博客:遵循统一的机器学习框架理解SVM,就会发现LR与SVM在模型和算法上是一样的,不同点就在于损失函数的不同。
给定数据集 \((x^1,\hat{y}^1),(x^2,\hat{y}^2)...(x^n,\hat{y}^n)\),其中\(\hat{y}^i\in\{0,1\}\), \(y\) 表示预测的 \(label\) 值,线性函数:
\[f(x)=w^Tx+b\]
\[y=\begin{cases}
1,\quad &f(x)>0\0, &f(x)<0
\end{cases}\]
同时:
当 \(\hat{y}=1\) 时,\(f(x)\)越大越好; $\hat{y}=0 $ 时,\(f(x)\)越小越好。
经验风险最小化(交叉熵损失函数):Sigmoid + Cross Entropy。
增加Sigmoid的目的是为了把 \(f(x)\) 的值放缩到0-1之间,用于计算交叉熵损失。
\[ \begin{aligned} &z = \sigma(f(x))\&p(\hat{y}=1|x;w,b) = z\&p(\hat{y}=0|x;w,b) = 1-z \end{aligned} \]
\(z\) 表示预测出的可能性
1.使用 \(sigmoid + cross\ entropy\) 的损失函数:
\[\hat{y}=\begin{cases}
1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(z)\0,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-z)
\end{cases}\]
\[ Loss = -[\hat{y} ln z+(1-\hat{y})ln (1-z)] \]
2.从最大似然的角度
假设训练样本相互独立,那么似然函数表达式为:
\[ \begin{aligned} Loss &= p(\hat{Y}|X;w,b) \&= \prod_{i=1}^n p(\hat{y}^i|x^i;w,b)\&= \prod_{i=1}^n z_i^{\hat{y}^i} (1-z_i)^{1-\hat{y}^i}\&= \sum_{i=1}^n \hat{y}^iln z_i + (1-\hat{y}^i)ln(1-z_i) \end{aligned} \]
至此,发现从交叉熵的角度和最大似然的角度,得到的损失函数竟然完全相同,说明他俩在背后存在着不为人知的本质联系。
现在开始探究这种联系。
3. 交叉熵与最大似然的联系
熵
\[H(X) = -E_{x \sim P}[log {P(x)}]\]
KL散度:KL衡量两个分布之间的差异
\[
\begin{aligned}
D_{KL}(P||Q) &=E_{x \sim P}[log \frac{P(x)}{Q(x)}]\&=E_{x \sim P}[log{P(x)}-log{Q(x)}]
\end{aligned}
\]
\(D_{KL}(P||Q)\)表示选择一个 \(Q\),使得它在 \(P\) 具有高概率的地方具有高概率。简单来说就是找到一组参数表示 \(Q\) 分布,这组参数要做到:当 \(P\) 分布中高概率的地方时,从这组参数也能取到高概率。
交叉熵
\[
\begin{aligned}
H(P,Q) &=H(P)+D_{KL}(P||Q)
\end{aligned}
\]
具体到我们的场景而言:\(\hat{Y}\) 分布对应着 \(P\) 分布, \(Y\) 分布对应着 \(Q\) 分布。\(\hat{Y}\) 分布是确定的,\(Y\) 分布是我们所求的。换句话说就是让 \(Y\) 分布尽量逼近 \(\hat{Y}\) 分布。
在我们这个场景下,\(\hat{Y}\) 是确定但未知的(先验分布)。
\[ \begin{aligned} H(\hat{Y},Y) &= H(\hat{Y})+D_{KL}(\hat{Y}||Y)\&=-E_{x \sim \hat{Y}}[log \hat{Y}]+E_{x \sim \hat{Y}}[log{\hat{Y}(x)}-log{Y(x)}]\&=E_{x \sim \hat{Y}}-log{Y(x)} \end{aligned} \]
当我们最小化交叉熵时:
\[
\begin{aligned}
&min\;\;H(\hat{Y},Y)\&min\;\;D_{KL}(\hat{Y}||Y)\&min \;\;E_{x \sim \hat{Y}}[log{\hat{Y}(x)}-log{Y(x)}]\&min \;\;E_{x \sim \hat{Y}}-log{Y(x)}
\end{aligned}
\]
当 \(\hat{Y}\) 分布是已知,则熵是常量,此时交叉熵和KL散度则是等价的。
针对 \(Y\) 最小化交叉熵等价于最小化KL散度,因为 \(H(\hat{Y})\) 与\(Y\)无关。
注意最后的 \(E_{x \sim \hat{Y}}-log{Y(x)}\) 与熵 \(H(Y)\) 之间的差别。熵是已经知道一个变量x的概率分布,求出来的是这个分布的事件所产生的期望信息总量;但对于这个式子,\(Y\) 分布是未知的,是我们所要求的东西。我们只是希望\(Y\)与\(\hat{Y}\)之间尽可能相似或者接近,而并不需要知道他们每个的确切的分布是什么(也就是并不需要知道概率分布的表达式),所以使用KL散度直接定义他们之间的差异就行了。
说到这里想起来了上一篇介绍SVM时的核函数,其中也是要把低维空间升到高维空间,然后计算他们的内积,对于这整个过程,我们最终需要的是内积的结果。为了减少计算量同时达到最终的目的,跳过中间复杂的过程,引入了核函数,这样我们就不需要知道升维后具体是什么样子。
最小化KL散度和模型采用最大似然估计进行参数估计又是一致的,因此交叉熵与最大似然估计有一个KL散度关联在一起的。
梯度下降法
\(\sigma(x)' = \sigma(x)(1-\sigma(x))\)
$ min;;Loss = -\sum_{i=1}^n \hat{y}^i ln z_i + (1-\hat{y}^i)ln(1-z_i)$
\(z = \sigma(f(x))\)
\[ \begin{aligned} \frac{\partial L}{\partial w} &= -\sum_{i=1}^n \hat{y}^i \frac{1}{z_i} z_i(1-z_i) x^i+(1-\hat{y}^i)\frac{1}{1-z_i} (-1) z_i(1-z_i)x^i \&= -\sum_{i=1}^n \hat{y}^i(1-z_i) x^i-(1-\hat{y}^i)z_ix^i\&= -\sum_{i=1}^n (\hat{y}^i-z_i)x^i\&= -\sum_{i=1}^n (\hat{y}^i-\sigma(w^Tx^i+b))x^i \end{aligned} \]
\[ \begin{aligned} w^{k+1} &= w^k - \eta \frac{\partial L}{\partial w} \&= w^k+\eta\sum_{i=1}^n (\hat{y}^i-z_i)x^i \end{aligned} \]
这里有一个很好的性质,更新的梯度与 \(\hat{y}^i-z_i\) 有关,当他们之间的差距越大时,更新的梯度越大。
上面所说的模型中\(\hat{y}^i\in\{0,1\}\),换一种写法:\(\hat{y}^i\in\{1,-1\}\),还是用sigmoid+交叉熵的方式来写损失函数。
此时:
\[\hat{y}=\begin{cases}
1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(z)\-1,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-z)=-ln(-z)
\end{cases}\]
上式的变换参考上一篇遵循统一的机器学习框架理解SVM
综合得来:
\[
\begin{aligned}
Loss &= -\sum_{i=1}^n ln(\sigma(\hat{y}^if(x^i)))\\&= - \sum_{i=1}^n ln \frac{1}{1+exp(-\hat{y}^if(x^i))}\\&=\sum_{i=1}^n ln(1+exp(-\hat{y}^if(x^i)))
\end{aligned}
\]
\[ \begin{aligned} \frac{\partial L}{\partial w} &= -\sum_{i=1}^n \frac{1}{\sigma(\hat{y}^if(x^i))}\sigma(\hat{y}^if(x^i))(1-\sigma(\hat{y}^if(x^i)))\hat{y}^ix^i\&=-\sum_{i=1}^n (\hat{y}^i-\hat{y}^i\sigma(\hat{y}^if(x^i)))x^i \end{aligned} \]
\(\hat{y}^i=1\)时,\[\frac{\partial L}{\partial w}=-\sum_{i=1}^n (1-\sigma(f(x^i)))x^i\]
\(\hat{y}^i=-1\)时,\[\frac{\partial L}{\partial w}=-\sum_{i=1}^n (-1+\sigma(-f(x^i)))x^i=-\sum_{i=1}^n (-1+1-\sigma(f(x^i)))x^i=-\sum_{i=1}^n -\sigma(f(x^i))x^i\]
到此可以看出与\(\hat{y}^i\in\{1,0\}\) 时完全相同。
标签:参数估计 理解 自己 逻辑 参数 case lock 计算 博客
原文地址:https://www.cnblogs.com/SpingC/p/11622726.html