Logistic Regression 的简单推导
Logistic regression 将 sigmoid 函数 $s(x) = \frac{1}{1+e^{-x}}$ 视为样本属于正例($y=1$)的概率。给定一个参数向量 $\theta$,所有训练样本都属于它们被标记的类别的概率为 $$L(\theta) = \prod_i (s(x_i^T\theta))^{y_i}(1-s(x_i^T\theta))^{1-y_i}$$ 其中 $x_i$ 表示第 $i$ 个训练样本的各个特征组成的向量,$y_i$ 表示第 $i$ 个训练样本的“答案分类”,是一个为 0 或者为 1 的数值。对上式取对数并加上负号,就获得了 logistic regression 的损失函数 $$J(\theta) = -\sum_i (y_i\text{log}(s(x_i^T\theta)) + (1-y_i)\text{log}(1-s(x_i^T\theta)))$$ 显然 $J(\theta)$ 越小,$L(\theta)$ 就越大。也就是说,logistic regression 使用了极大似然估计法,作为训练 $\theta$ 的标准。
我们可以通过求出 $J(\theta)$ 的梯度,再使用梯度下降法从而求出 $\theta$ 的最优值。当然,这就要求 $J(\theta)$ 是一个凸函数。以下对这些内容进行简单推导。
代价函数是否为凸函数
首先将代价函数展开并进行整理,我们可以发现 $$J(\theta) = -\sum_i (y_ix_i^T\theta - \text{log}(1+e^{x_i^T\theta}))$$
接下来我们证明 $J(\theta)$ 为凸函数。为了简化问题,我们转而证明 $J(x) = -yx+\text{log}(1+e^x)$ 是凸函数(其中 $x$ 和 $y$ 均为数值)。很容易发现两者的证明是等价的。
要证明 $J(x)$ 为凸函数,我们可以观察它的二次导数:$$J^{''}(x) = \frac{e^x(1+e^x)-(e^x)^2}{(1+e^x)^2} = \frac{e^x}{(1+e^x)^2}$$ 容易发现 $J(x)$ 的二次导数非负,可以证明 $J(x)$ 是凸函数,也就证明了 $J(\theta)$ 是凸函数,可以使用梯度下降法进行优化。
梯度的计算
接下来我们计算 $\nabla_\theta J(\theta)$:$$\nabla_\theta J(\theta) = \sum_i\nabla_\theta\text{log}(1+e^{x_i^T\theta}) - \sum_i\nabla_\theta y_ix_i^T\theta$$ 对第二项使用 $\text{tr}(ABC) = \text{tr}(CAB)$ 有(注意到 $y_i$ 是数值,并不需要交换顺序): $$\nabla_\theta y_ix_i^T\theta = \nabla_\theta\text{tr}(\theta y_ix_i^T) = y_ix_i$$ 对第一项使用链式求导法则有:$$\nabla_\theta\text{log}(1+e^{x_i^T\theta}) = \frac{e^{x_i^T\theta}}{1+e^{x_i^T\theta}}\nabla_\theta x_i^T\theta = s(x_i^T\theta)x_i$$ 所以我们有:$$\nabla_\theta J(\theta) = \sum_i(s(x_i^T\theta) - y_i)x_i$$ 这样我们就可以使用梯度下降法求出最优的 $\theta$ 了。