Discriminative Algorithm Chinese Version

This Article is a Chinese translation of a study note by Wei. Click here to see the original English version in Wei’s homepage. I will continue to update Chinese translation to sync with Wei’s notes.

请注意: 本文是我翻译的一份学习资料,英文原版请点击Wei的学习笔记。我将不断和原作者的英文笔记同步内容,定期更新和维护。

一类经典的学习模式叫做监督学习(supervised learning)。在这种模式下,我们有输入模块,叫特征(features),和输出模块,叫目标(target)。学习的目的是基于给定的输入和对应的标签训练模型,然后用训练好的模型对给定的新输入来预测输出。

为此,我们收集一个训练数据集(training set),在这个数据集中,我们有许多成对的训练样本,每对样本包含特征向量(feature vector)作为输入(用符号X表示所有的特征向量)及其相应的目标(output)作为输出(用符号Y表示所有的目标值)。 由于每一个输入都有来自事实对应的标签,我们将这种学习称为监督学习(supervised learning)(有对应标签),同时将训练好的模型称为假设(hypothesis)。 下表是一个例子。

Supervise Learning Intuition

在这种情况下,我们将房子的居住面积作为特征,把价格作为目标。学习任务为给定一个新房子居住面积作为输入,用训练好的模型预测新房子的价格。

当目标输出处于连续空间时,我们将其称为回归问题(regression problem)。 当目标输出处于离散空间时,我们将其称为分类问题(classification problem)

1 线性回归 Linear Regression

线性回归问题可以通过以下公式来建模:

我们以 $\theta_0$ 作为偏差项,有时称为截距项。 想象一下,当你尝试回归二维域中的线时,截距项决定了线与y轴交叉的位置。$\theta$ 被称为参数(parameters),我们将从训练数据中学习它。

为了训练模型,我们定义以下代价函数(cost function),并试图将它最小化:

训练的目的是找到最小化代价的$\theta$。那么如何实现呢?为什么函数前面会有 $\frac{1}{2}$ 呢?在下一节中我们将推导出该成本函数的导数并给出解释。简而言之,这种定义方式使数学运算变得方便。

最小均方算法Least Mean Square(LMS) algorithm

LMS算法主要使用梯度下降(gradient descent)来找到局部最小值(local minimum)。 为了实现它,我们将参数初始化为0,即 $\theta = \overrightarrow{0}$ ,然后用以下方法来反复更新 $\theta$:

其中j可以遍历特征向量中的所有维度。$\alpha$ 被称为学习率(learning rate),它控制模型学习/训练的速度。这种一步步更新来找到最小值叫迭代算法(iterative algorithm)

现在,我们根据一个样本求偏导数:

数学解释:第二行是求导数的链式规则(chain rule)。在第三行,我根据定义扩展 $h_{\theta}(x) = \sum\limits_{i=0}^n \theta_i x_i$ 。 在最后一行,因为我们只关心 $\theta_j$,所以其他一切都是常数。

所以,所有样本的更新是:

其中m是训练样本的数量,j可以跨越特征向量的维度。 该算法从每个训练样本中获取对应梯度信息。 我们称之为批量梯度下降(batch gradient descent)。 该方法对局部最小值(即可能到达的鞍点(saddle point))敏感,而我们通常假设代价函数仅有全局最小值(global minimum)(J是凸函数(convex function)), 这也是这个例子的情况 。梯度变化如下图所示:

Batch Gradient Descent

请注意,在更新过程中,我们会遍历所有样本以向局部最小值前进一步。如果m非常大,则该算法每一次迭代计算量十分巨大。 因此,在这种情况下,我们引入了一个类似算法,称为随机梯度下降(stochastic gradient descent)。其中每次算法只会从一小部分样本中计算代价和梯度。 尽管它可能会在最小值处振荡(并没有严格到达最小),但这样做使模型可以更快收敛。因此,我们经常在现实中使用它。

当不能直接计算或者很难计算使目标函数的导数并设为0的求参数时,我们会用以上的迭代算法。如果可以直接计算使导数为0的参数,我们可以通过下面的正则方程直接计算。

2 正则方程 Normal Equations

回想一下求函数最值的方法,我们可以设函数的导数为0来求得函数的最值,这样我们可以直接地计算局部最小值,而不是通过多次迭代。首先让我们来复习一下数学!

矩阵导数

一些相关概念在其他页面中有所讨论,你可以在这里查看。

在本小节中,我将讨论线性代数中矩阵的迹(trace)的计算,迹被定义为:

其中A必须是方矩阵。现在我将列出迹的属性和对应证明。

证明

证明

另一个证明类似。 请注意,由于矩阵维度约束,你无法随机调整每个矩阵的顺序。

证明:与上面类似

证明:

证明:与上面类似。

证明:与上面类似。

证明

我们知道:

带入可得:

证明:假设$f:\mathbb{R}^{M\times N}\rightarrow\mathbb{R}$,可得:

证明:trace只存在于方矩阵,,因此可得$A\in\mathbb{R}^{N\times M},B\in\mathbb{R}^{M\times M},C\in\mathbb{R}^{N\times N}$

再看Least Square

因此,现在我们不是迭代地找到解决方案,而是明确地直接计算代价函数对于 $\theta$ 的导数,并将其设为零以便直接解出最终表达式。

我们定义训练集输入为:

输出为:

定义模型为 $h_{\theta}(x^{(i)}) = (x^{(i)})^T\theta$,我们得到:

因此,

现在我们需要找到J对于 $\theta$ 的导数。 从矩阵的迹的属性来看,我们知道:

我们知道标量的迹是它自己,因此:

数学解释:标量$a = tr(a)$,因此可得第二行。第三行(1)对$\overrightarrow{y}^T\overrightarrow{y}$求$\theta$导可得0;(2)$tr(A+B) = tr(A) + tr(B)$;(3) $- \theta^TX^T\overrightarrow{y} - \overrightarrow{y}^TX\theta = 2\overrightarrow{y}^TX\theta$;。第四行来源于(1)使用之前的迹的性质,其中$A^T = \theta,B = B^T = X^TX, C = I$;(2)$\triangledown_A trAB = B^T$.

我们将它设为0,可得正则方程,即:

因此我们可算出使矩阵导数为0的$\theta$为:

3 概率解释

正则方程是找到解的一种确定性方法,让我们看看如何从随机性的角度解释它。随机性解释下最终应该得到相同的结果。

我们知道输入和输出的关系为:

其中 $\epsilon^{(i)}$ 是随机变量,它捕获噪声和非模型的因素。 这通常是线性回归的概率模型。 我们还假设噪声是独立同分布(i.i.d.),并来自高斯分布,该分部有均值为 $\theta$ 和任意方差 $\sigma^2$ ,这是一种传统的线性回归建模方式。 $\epsilon^{(i)}$ 是高斯的随机变量,并且 $\theta^T x^{(i)}$ 对于这个随机变量来说是常数。 向高斯随机变量添加常数将使该变量的均值移动常数数量,但它仍然是高斯分布,只是具有不同的均值和相同的方差。因此,按照高斯分布的定义,我们可以说:

当x已知并具有固定参数$\theta$时,该函数可被视为y的函数。 因此,我们可以称之为似然函数likelihood function

我们需要找到满足以下条件的$\theta$:选定 $\theta$ 的情况下,基于给定x,y的概率要最大化。 我们称之为最大似然法。 为简化,我们来找最大对数似然(log likelihood)

对于 $\theta$ 来最大化以上值会与最小化代价函数得到相同的答案。这意味着我们用概率的方式证明了我们在最小均方算法中所得的结果。

4 局部加权线性回归

在上面讨论的回归方法中,我们平等对待在每个训练样本产生的代价。 但是每个样本所带来的代价是不一样的,尤其是一些异常值(outlier)会增加很多代价,我们应该减少它们权重。因此我们根据查询点(querying point)来计算每个样本的权重。 例如,这样的权重可以是:

虽然这个表达式看似于高斯,但它们无关。 x是查询点。 我们需要保留所有训练数据以进行新的预测。

5 分类与逻辑回归

我们可以将分类问题当做一个特殊的回归问题,我们只回归到一组二进制值0和1。有时,我们也使用-1和1表示法,我们分别称它为负类和正类。

然而,如果我们在这里应用线性回归模型,那么我们预测0和1以外的任何值是没有意义的。因此,我们将假设函数修改为:

其中g称为逻辑函数sigmoid函数,如图所示:

Logistic Function

输出范围从0到1。这直观地解释了为什么我们将其称为回归,因为它在连续的空间中输出。 但是,该值表示属于某一类的概率。 所以基本上它是一个分类器。

让我们来看看逻辑函数的导数会是什么:

有了这个知识,接下来的问题是如何找到 $\theta$。 我们知道最小二乘回归可以从最大似然算法中计算出,我们从这里继续。

我们认为:

其中y应为1或0。 假设样本是独立同分布,我们有似然函数:

使用log函数,可得:

然后,我们可以使用梯度下降来优化代价函数。 在更新中,我们应该有 $\theta = \theta + \alpha\triangledown_{\theta}L(\theta)$。 注意我们有加号而不是减号,因为我们发现最大值不是最小值。 接下来求导数:

从第一行到第二行,我们使用上面导出的逻辑函数的导数。 这为我们提供了特征向量上每个维度的更新规则。 虽然在这种情况下我们有与LMS相同的算法,但在这种情况下的假设函数是不同的。 当我们谈论广义线性化模型时,使用相同的等式并不是偶然。

6 插话:感知器学习算法

我们在之后的学习理论中会继续讨论,简单来讲,我们把假设函数调整为:

之前的更新方程保持不变,这就是感知器学习算法

7 牛顿最大化方法

想象一下,我们想要找到函数f的根。 牛顿法允许我们以二次速度完成这项任务。 这个想法是:随机初始化 $x_0$ 并找到 $f(x_0)$ 的切线,标记为$f^{\prime}(x_0)$。 我们使用 $f^{\prime}(x_0)$ 的根作为新x。 我们还将新x和旧x之间的距离定义为 $\Delta$ 。 下图可以展示这个过程:

Newton's Method

所以我们得到:

从这个想法得出,我们可以让 $f(x) = L^{\prime}(\theta)$。 通过这种方式,我们可以更快地找到目标函数的最大值。 为了找到最小值的方法类似。

如果 $\theta$ 是矢量值,我们需要在更新中使用海森矩阵(Hessian matrix)。 关于海森矩阵的更多细节可以在[另一篇文章]中找到(https://wei2624.github.io/Useful-Formulas-for-Math/)。 简而言之,为了更新,我们有:

虽然它也可以二次收敛,但是计算起来可比梯度下降麻烦得多。

8 广义线性模型和指数族

在我们更新逻辑回归和最小均方回归时形式一样,这看似巧合。主要是因为它们是大家族广义线性模型中的特殊情况。 它被称为线性的原因是该族中的每个分布中的变量和它们的权重之间存在线性关系。

在进入广义线性模型之前,我们讨论指数族分布作为它的基础。 如果可以以下面的形式来表示一个分布,我们定义在指数族中的一类分布:

其中$\eta$ 称为自然参数,$T(y)$ 称为充分统计量,而$a(\eta)$称为对数分割函数。 通常,我们的情况里,$T(y) = y$。$-a(\eta)$ 是归一化常数。

T,a和b是固定参数,我们可以通过改变 $\eta$ 来建立不同的分布。 现在,我们可以证伯努利分布和高斯分布属于指数族:

伯努利:

其中:

高斯:

其中 $\sigma$ 是1,我们仍然可以变化 $\sigma$ 以及以下参数:

其他指数分布:多项分布,泊松分布,伽马分布和指数分布,贝塔分布和狄利克雷分布。 由于它们都处于指数族,我们能做的是研究一般形式的指数族,并改变 $\eta$ 以建立不同的模型。

9 构建广义线性模型

如上所述,一旦我们知道了T,a和b,就已经确定了分布族。 我们只需要找到 $\eta$ 来确定确切的分布。

例如,假设我们想要基于给定的x预测y。 在继续推导出这个回归问题的构建广义线性模型之前,我们对此做出三个主要假设:

(1)我们总是假设 $y \lvert x;\theta \thicksim \text{ExponentialFamily}(\eta)$.

(2)通常,我们想要预测给定x的T(y)的期望值。 最有可能的是,我们有 $T(y) = y$。定义上,我们有 $h(x) = \mathbb{E}[y\lvert x]$,这对于逻辑回归和线性回归都是正确的。 注意,在逻辑回归中,我们总是有 $\mathbb{E}[y\lvert x] = p(y=1\lvert x;\theta)$

(3)输入和自然参数关联为:$\eta = \theta^Tx$

9.1普通最小二乘法

在这种情况下,我们有 $y\thicksim \mathcal{N}(\mu,\sigma^2)$。 以前,我们讨论过高斯作为指数族。 特别是,我们有:

其中第一个等式来自假设(2); 第二个是定义; 第三个来自之前的推导; 最后一个是假设(3)。

9.2 逻辑回归

在此设置中,我们预测类标签为1或0。 回想一下,在伯努利中,我们有 $\phi=1/(1+e^{\eta})$ 。因此,我们可以推导出以下等式:

这部分解释了为什么我们得出了sigmoid函数这样的形式。 因为我们假设当给定x,y是伯努利分布,所以由指数族来产生sigmoid函数是很自然的事。 为了预测,我们认为 $T(y)$ 是相对于 $\eta$ 的期望值合理的猜测,即规范响应函数链接函数的反函数

。 通常,响应函数是 $\eta$ 的函数,并给出 $\eta$ 和分布参数之间的关系,而链接函数产生η作为分布参数的函数。 反函数意味着用一者来表达另一者。 从上面的推导,我们知道伯努利的响应函数是逻辑函数,而高斯函数的典型响应函数是均值函数。

9.3 Softmax回归

在更广泛的情况下,我们可以有多个类而不是上面的二项类。 将其建模为多项分布是很自然的,它也属于可以从广义线性模型导出的指数族。

在多项分布中,我们可以将 $\phi_1,\phi_2,\dots,\phi_{k-1}$ 定义为 $k-1$ 类的对应概率。 我们不需要所有k类,因为一旦设置了前一个k-1就确定了最后一类。 所以我们可以写为 $\phi_k = 1-\sum_{i=1}^{k-1}\phi_i$

我们首先定义 $T(y) \in \mathbb{R}^{k-1}$,并且:

注意,对于 $T(k)$,我们在向量中只有全零,因为向量的长度是k-1。 我们让 $T(y)_i$ 来定义在向量中的第i个元素。 课程笔记说明中也引入了指标的定义,我在此不再详述。

现在,我们展示了将多项式推导为指数族的步骤:

其中

并且,

$a(\eta) = -\log(\phi_k)$ and $b(y) = 1$

这将多项式表示为指数族。 我们现在可以将链接函数视为:

为了得到响应函数,我们改变链式函数:

因此我们得到响应函数为:

这个响应函数就是我们的softmax函数

根据广义线性模型中的假设(3),我们知道对于对于$i=1,2,\dots,k-1$, $\eta_i = \theta_i^Tx$ ,并且 $\theta_i \in \mathbb{R}^{n+1}$ 是我们广义线性模型模型的参数。而 $\theta_k$ 只是0,因此 $\eta_k = 0$ 。 现在,我们有基于x的模型:

这个模型就叫做softmax回归,是逻辑回归的广泛形式。因此,假设函数成为:

现在,我们需要优化$\theta$来最大化log似然函数,根据定义,我们可以写为:

我们可以用梯度下降或者牛顿方法来找到最大值。

记住:逻辑回归是softmax回归的二项形式。sigmoid函数是softmax函数的二项形式。