提交 f33a59b8 编写于 作者: W wizardforcel

ch4 style

上级 c3fa3d57
...@@ -14,7 +14,9 @@ ...@@ -14,7 +14,9 @@
最后,我们将介绍两个常用于分类的模型:Logistic回归和Softmax回归 最后,我们将介绍两个常用于分类的模型:Logistic回归和Softmax回归
**提示:** *在本章中包含许多数学公式,以及一些线性代数和微积分基本概念。为了理解这些公式,你需要知道什么是向量,什么是矩阵,以及它们直接是如何转化的,以及什么是点积,什么是矩阵的逆,什么是偏导数。如果你对这些不是很熟悉的话,你可以阅读本书提供的 Jupyter 在线笔记,它包括了线性代数和微积分的入门指导。对于那些不喜欢数学的人,你也应该快速简单的浏览这些公式。希望它足以帮助你理解大多数的概念。* > 提示
>
> 在本章中包含许多数学公式,以及一些线性代数和微积分基本概念。为了理解这些公式,你需要知道什么是向量,什么是矩阵,以及它们直接是如何转化的,以及什么是点积,什么是矩阵的逆,什么是偏导数。如果你对这些不是很熟悉的话,你可以阅读本书提供的 Jupyter 在线笔记,它包括了线性代数和微积分的入门指导。对于那些不喜欢数学的人,你也应该快速简单的浏览这些公式。希望它足以帮助你理解大多数的概念。
## 线性回归 ## 线性回归
...@@ -143,7 +145,9 @@ array([[4.21509616],[9.75532293]]) ...@@ -143,7 +145,9 @@ array([[4.21509616],[9.75532293]])
正态方程需要计算矩阵 ${\mathbf{X}}^T\cdot\mathbf{X}$ 的逆,它是一个 $n * n$ 的矩阵($n$ 是特征的个数)。这样一个矩阵求逆的运算复杂度大约在 $O(n^{2.4})$ 到 $O(n^3)$ 之间,具体值取决于计算方式。换句话说,如果你将你的特征个数翻倍的话,其计算时间大概会变为原来的 5.3($2^{2.4}$)到 8($2^3$)倍。 正态方程需要计算矩阵 ${\mathbf{X}}^T\cdot\mathbf{X}$ 的逆,它是一个 $n * n$ 的矩阵($n$ 是特征的个数)。这样一个矩阵求逆的运算复杂度大约在 $O(n^{2.4})$ 到 $O(n^3)$ 之间,具体值取决于计算方式。换句话说,如果你将你的特征个数翻倍的话,其计算时间大概会变为原来的 5.3($2^{2.4}$)到 8($2^3$)倍。
**提示:** *当特征的个数较大的时候(例如:特征数量为 100000),正态方程求解将会非常慢。* > 提示
>
> 当特征的个数较大的时候(例如:特征数量为 100000),正态方程求解将会非常慢。
有利的一面是,这个方程在训练集上对于每一个实例来说是线性的,其复杂度为 $O(m)$,因此只要有能放得下它的内存空间,它就可以对大规模数据进行训练。同时,一旦你得到了线性回归模型(通过解正态方程或者其他的算法),进行预测是非常快的。因为模型中计算复杂度对于要进行预测的实例数量和特征个数都是线性的。 换句话说,当实例个数变为原来的两倍多的时候(或特征个数变为原来的两倍多),预测时间也仅仅是原来的两倍多。 有利的一面是,这个方程在训练集上对于每一个实例来说是线性的,其复杂度为 $O(m)$,因此只要有能放得下它的内存空间,它就可以对大规模数据进行训练。同时,一旦你得到了线性回归模型(通过解正态方程或者其他的算法),进行预测是非常快的。因为模型中计算复杂度对于要进行预测的实例数量和特征个数都是线性的。 换句话说,当实例个数变为原来的两倍多的时候(或特征个数变为原来的两倍多),预测时间也仅仅是原来的两倍多。
...@@ -189,7 +193,9 @@ array([[4.21509616],[9.75532293]]) ...@@ -189,7 +193,9 @@ array([[4.21509616],[9.75532293]])
正如你看到的,左面的梯度下降可以直接快速地到达最小值,然而在右面的梯度下降第一次前进的方向几乎和全局最小值的方向垂直,并且最后到达一个几乎平坦的山谷,在平坦的山谷走了很长时间。它最终会达到最小值,但它需要很长时间。 正如你看到的,左面的梯度下降可以直接快速地到达最小值,然而在右面的梯度下降第一次前进的方向几乎和全局最小值的方向垂直,并且最后到达一个几乎平坦的山谷,在平坦的山谷走了很长时间。它最终会达到最小值,但它需要很长时间。
**提示:** *当我们使用梯度下降的时候,应该确保所有的特征有着相近的尺度范围(例如:使用 Scikit Learn 的 `StandardScaler`类),否则它将需要很长的时间才能够收敛。* > 提示
>
> 当我们使用梯度下降的时候,应该确保所有的特征有着相近的尺度范围(例如:使用 Scikit Learn 的 `StandardScaler`类),否则它将需要很长的时间才能够收敛。
这幅图也表明了一个事实:训练模型意味着找到一组模型参数,这组参数可以在训练集上使得损失函数最小。这是对于模型参数空间的搜索,模型的参数越多,参数空间的维度越多,找到合适的参数越困难。例如在300维的空间找到一枚针要比在三维空间里找到一枚针复杂的多。幸运的是线性回归模型的损失函数是凸函数,这个最优参数一定在碗的底部。 这幅图也表明了一个事实:训练模型意味着找到一组模型参数,这组参数可以在训练集上使得损失函数最小。这是对于模型参数空间的搜索,模型的参数越多,参数空间的维度越多,找到合适的参数越困难。例如在300维的空间找到一枚针要比在三维空间里找到一枚针复杂的多。幸运的是线性回归模型的损失函数是凸函数,这个最优参数一定在碗的底部。
...@@ -218,7 +224,9 @@ array([[4.21509616],[9.75532293]]) ...@@ -218,7 +224,9 @@ array([[4.21509616],[9.75532293]])
> =\frac{2}{m}{\mathbf{X}}^T\cdot{(\mathbf{X}\cdot\theta-y)} > =\frac{2}{m}{\mathbf{X}}^T\cdot{(\mathbf{X}\cdot\theta-y)}
> $$ > $$
> **提示:** *在这个方程中每一步计算时都包含了整个训练集 $\mathbf{X}$,这也是为什么这个算法称为批量梯度下降:每一次训练过程都使用所有的的训练数据。因此,在大数据集上,其会变得相当的慢(但是我们接下来将会介绍更快的梯度下降算法)。然而,梯度下降的运算规模和特征的数量成正比。训练一个数千数量特征的线性回归模型使用*梯度下降要比使用正态方程快的多。 > 提示
>
> 在这个方程中每一步计算时都包含了整个训练集 $\mathbf{X}$,这也是为什么这个算法称为批量梯度下降:每一次训练过程都使用所有的的训练数据。因此,在大数据集上,其会变得相当的慢(但是我们接下来将会介绍更快的梯度下降算法)。然而,梯度下降的运算规模和特征的数量成正比。训练一个数千数量特征的线性回归模型使用*梯度下降要比使用正态方程快的多。
...@@ -263,7 +271,9 @@ array([[4.21509616],[2.77011339]]) ...@@ -263,7 +271,9 @@ array([[4.21509616],[2.77011339]])
你可能想知道如何选取迭代的次数。如果它太小了,当算法停止的时候,你依然没有找到最优解。如果它太大了,算法会非常的耗时同时后来的迭代参数也不会发生改变。一个简单的解决方法是:设置一个非常大的迭代次数,但是当梯度向量变得非常小的时候,结束迭代。非常小指的是:梯度向量小于一个值 $\varepsilon$(称为容差)。这时候可以认为梯度下降几乎已经达到了最小值。 你可能想知道如何选取迭代的次数。如果它太小了,当算法停止的时候,你依然没有找到最优解。如果它太大了,算法会非常的耗时同时后来的迭代参数也不会发生改变。一个简单的解决方法是:设置一个非常大的迭代次数,但是当梯度向量变得非常小的时候,结束迭代。非常小指的是:梯度向量小于一个值 $\varepsilon$(称为容差)。这时候可以认为梯度下降几乎已经达到了最小值。
**收敛速率:** *当损失函数是凸函数,同时它的斜率不能突变(就像均方差损失函数那样),那么它的批量梯度下降算法固定学习率之后,它的收敛速率是 $O(\frac{1}{iterations})$。换句话说,如果你将容差 $\varepsilon$ 缩小 10 倍后(这样可以得到一个更精确的结果),这个算法的迭代次数大约会变成原来的 10 倍。* > 收敛速率:
>
> 当损失函数是凸函数,同时它的斜率不能突变(就像均方差损失函数那样),那么它的批量梯度下降算法固定学习率之后,它的收敛速率是 $O(\frac{1}{iterations})$。换句话说,如果你将容差 $\varepsilon$ 缩小 10 倍后(这样可以得到一个更精确的结果),这个算法的迭代次数大约会变成原来的 10 倍。
### 随机梯度下降 ### 随机梯度下降
...@@ -346,7 +356,9 @@ sgd_reg.fit(X,y.ravel()) ...@@ -346,7 +356,9 @@ sgd_reg.fit(X,y.ravel())
![](../images/chapter_4/表4-1.PNG) ![](../images/chapter_4/表4-1.PNG)
**提示:** *上述算法在完成训练后,得到的参数基本没什么不同,它们会得到非常相似的模型,最后会以一样的方式去进行预测。* > 提示
>
> 上述算法在完成训练后,得到的参数基本没什么不同,它们会得到非常相似的模型,最后会以一样的方式去进行预测。
## 多项式回归 ## 多项式回归
...@@ -393,7 +405,9 @@ array([-0.75275929, 0.56664654]) ...@@ -393,7 +405,9 @@ array([-0.75275929, 0.56664654])
请注意,当存在多个特征时,多项式回归能够找出特征之间的关系(这是普通线性回归模型无法做到的)。 这是因为`LinearRegression`会自动添加当前阶数下特征的所有组合。例如,如果有两个特征 $a,b$,使用 3 阶(`degree=3`)的`LinearRegression`时,不仅有 $a^2,a^3,b^2$ 以及 $b^3$,同时也会有它们的其他组合项 $ab,a^2b,ab^2$。 请注意,当存在多个特征时,多项式回归能够找出特征之间的关系(这是普通线性回归模型无法做到的)。 这是因为`LinearRegression`会自动添加当前阶数下特征的所有组合。例如,如果有两个特征 $a,b$,使用 3 阶(`degree=3`)的`LinearRegression`时,不仅有 $a^2,a^3,b^2$ 以及 $b^3$,同时也会有它们的其他组合项 $ab,a^2b,ab^2$。
**提示:** * `PolynomialFeatures(degree=d)`把一个包含 $n$ 个特征的数组转换为一个包含 $\frac{(n+d)!}{d!n!}$ 特征的数组,$n!$ 表示 $n$ 的阶乘,等于 $1 * 2 * 3 \cdots * n$。小心大量特征的组合爆炸!* > 提示
>
> `PolynomialFeatures(degree=d)`把一个包含 $n$ 个特征的数组转换为一个包含 $\frac{(n+d)!}{d!n!}$ 特征的数组,$n!$ 表示 $n$ 的阶乘,等于 $1 * 2 * 3 \cdots * n$。小心大量特征的组合爆炸!
## 学习曲线 ## 学习曲线
...@@ -441,7 +455,9 @@ plot_learning_curves(lin_reg, X, y) ...@@ -441,7 +455,9 @@ plot_learning_curves(lin_reg, X, y)
上面的曲线表现了一个典型的欠拟合模型,两条曲线都到达高原地带并趋于稳定,并且最后两条曲线非常接近,同时误差值非常大。 上面的曲线表现了一个典型的欠拟合模型,两条曲线都到达高原地带并趋于稳定,并且最后两条曲线非常接近,同时误差值非常大。
**提示:** *如果你的模型在训练集上是欠拟合的,添加更多的样本是没用的。你需要使用一个更复杂的模型或者找到更好的特征。* > 提示
>
> 如果你的模型在训练集上是欠拟合的,添加更多的样本是没用的。你需要使用一个更复杂的模型或者找到更好的特征。
现在让我们看一个在相同数据上10阶多项式模型拟合的学习曲线(图 4-16): 现在让我们看一个在相同数据上10阶多项式模型拟合的学习曲线(图 4-16):
...@@ -465,15 +481,17 @@ plot_learning_curves(polynomial_regression, X, y) ...@@ -465,15 +481,17 @@ plot_learning_curves(polynomial_regression, X, y)
图4-16:多项式模型的学习曲线 图4-16:多项式模型的学习曲线
**提示:** *改善模型过拟合的一种方法是提供更多的训练数据,直到训练误差和验证误差相等。* > 提示
>
**偏差和方差的权衡:** > 改善模型过拟合的一种方法是提供更多的训练数据,直到训练误差和验证误差相等。
*在统计和机器学习领域有个重要的理论:一个模型的泛化误差由三个不同误差的和决定:*
+ *偏差:泛化误差的这部分误差是由于错误的假设决定的。例如实际是一个二次模型,你却假设了一个线性模型。一个高偏差的模型最容易出现欠拟合。* > 偏差和方差的权衡
+ *方差:这部分误差是由于模型对训练数据的微小变化较为敏感,一个多自由度的模型更容易有高的方差(例如一个高阶多项式模型),因此会导致模型过拟合。* >
+ *不可约误差:这部分误差是由于数据本身的噪声决定的。降低这部分误差的唯一方法就是进行数据清洗(例如:修复数据源,修复坏的传感器,识别和剔除异常值)。* > 在统计和机器学习领域有个重要的理论:一个模型的泛化误差由三个不同误差的和决定:
>
> + 偏差:泛化误差的这部分误差是由于错误的假设决定的。例如实际是一个二次模型,你却假设了一个线性模型。一个高偏差的模型最容易出现欠拟合。
> + 方差:这部分误差是由于模型对训练数据的微小变化较为敏感,一个多自由度的模型更容易有高的方差(例如一个高阶多项式模型),因此会导致模型过拟合。
> + 不可约误差:这部分误差是由于数据本身的噪声决定的。降低这部分误差的唯一方法就是进行数据清洗(例如:修复数据源,修复坏的传感器,识别和剔除异常值)。
## 线性模型的正则化 ## 线性模型的正则化
...@@ -486,7 +504,9 @@ plot_learning_curves(polynomial_regression, X, y) ...@@ -486,7 +504,9 @@ plot_learning_curves(polynomial_regression, X, y)
岭回归(也称为 Tikhonov 正则化)是线性回归的正则化版:在损失函数上直接加上一个正则项 $\alpha\sum_{i=1}^n\theta_i^2$。这使得学习算法不仅能够拟合数据,而且能够使模型的参数权重尽量的小。注意到这个正则项只有在训练过程中才会被加到损失函数。当得到完成训练的模型后,我们应该使用没有正则化的测量方法去评价模型的表现。 岭回归(也称为 Tikhonov 正则化)是线性回归的正则化版:在损失函数上直接加上一个正则项 $\alpha\sum_{i=1}^n\theta_i^2$。这使得学习算法不仅能够拟合数据,而且能够使模型的参数权重尽量的小。注意到这个正则项只有在训练过程中才会被加到损失函数。当得到完成训练的模型后,我们应该使用没有正则化的测量方法去评价模型的表现。
**提示:** *一般情况下,训练过程使用的损失函数和测试过程使用的评价函数是不一样的。除了正则化,还有一个不同:训练时的损失函数应该在优化过程中易于求导,而在测试过程中,评价函数更应该接近最后的客观表现。一个好的例子:在分类训练中我们使用对数损失(马上我们会讨论它)作为损失函数,但是我们却使用精确率/召回率来作为它的评价函数。* > 提示
>
> 一般情况下,训练过程使用的损失函数和测试过程使用的评价函数是不一样的。除了正则化,还有一个不同:训练时的损失函数应该在优化过程中易于求导,而在测试过程中,评价函数更应该接近最后的客观表现。一个好的例子:在分类训练中我们使用对数损失(马上我们会讨论它)作为损失函数,但是我们却使用精确率/召回率来作为它的评价函数。
超参数 $\alpha$ 决定了你想正则化这个模型的强度。如果 $\alpha=0$ 那此时的岭回归便变为了线性回归。如果 $\alpha$ 非常的大,所有的权重最后都接近于零,最后结果将是一条穿过数据平均值的水平直线。公式 4-8 是岭回归的损失函数: 超参数 $\alpha$ 决定了你想正则化这个模型的强度。如果 $\alpha=0$ 那此时的岭回归便变为了线性回归。如果 $\alpha$ 非常的大,所有的权重最后都接近于零,最后结果将是一条穿过数据平均值的水平直线。公式 4-8 是岭回归的损失函数:
...@@ -498,7 +518,9 @@ plot_learning_curves(polynomial_regression, X, y) ...@@ -498,7 +518,9 @@ plot_learning_curves(polynomial_regression, X, y)
值得注意的是偏差 $\theta_0$ 是没有被正则化的(累加运算的开始是 $i=1$ 而不是 $i=0$)。如我定义 $\mathbf{w}$ 作为特征的权重向量($\theta_1$ 到 $\theta_n$),那么正则项可以简写成 $\frac{1}{2}{({\parallel \mathbf{w}\parallel_2})}^2$,其中 $\parallel \cdot \parallel_2 $ 表示权重向量的 $\ell_2$ 范数。对于梯度下降来说仅仅在均方差梯度向量(公式 4-6)加上一项 $\alpha\mathbf{w}$。 值得注意的是偏差 $\theta_0$ 是没有被正则化的(累加运算的开始是 $i=1$ 而不是 $i=0$)。如我定义 $\mathbf{w}$ 作为特征的权重向量($\theta_1$ 到 $\theta_n$),那么正则项可以简写成 $\frac{1}{2}{({\parallel \mathbf{w}\parallel_2})}^2$,其中 $\parallel \cdot \parallel_2 $ 表示权重向量的 $\ell_2$ 范数。对于梯度下降来说仅仅在均方差梯度向量(公式 4-6)加上一项 $\alpha\mathbf{w}$。
**提示:** *在使用岭回归前,对数据进行放缩(可以使用`StandardScaler`)是非常重要的,算法对于输入特征的数值尺度(scale)非常敏感。大多数的正则化模型都是这样的。* > 提示
>
> 在使用岭回归前,对数据进行放缩(可以使用`StandardScaler`)是非常重要的,算法对于输入特征的数值尺度(scale)非常敏感。大多数的正则化模型都是这样的。
图 4-17 展示了在相同线性数据上使用不同 $\alpha$ 值的岭回归模型最后的表现。左图中,使用简单的岭回归模型,最后得到了线性的预测。右图中的数据首先使用 10 阶的`PolynomialFearures`进行扩展,然后使用`StandardScaler`进行缩放,最后将岭模型应用在处理过后的特征上。这就是带有岭正则项的多项式回归。注意当$\alpha$增大的时候,导致预测曲线变得扁平(即少了极端值,多了一般值),这样减少了模型的方差,却增加了模型的偏差。 图 4-17 展示了在相同线性数据上使用不同 $\alpha$ 值的岭回归模型最后的表现。左图中,使用简单的岭回归模型,最后得到了线性的预测。右图中的数据首先使用 10 阶的`PolynomialFearures`进行扩展,然后使用`StandardScaler`进行缩放,最后将岭模型应用在处理过后的特征上。这就是带有岭正则项的多项式回归。注意当$\alpha$增大的时候,导致预测曲线变得扁平(即少了极端值,多了一般值),这样减少了模型的方差,却增加了模型的偏差。
...@@ -557,9 +579,11 @@ Lasso 回归的一个重要特征是它倾向于完全消除最不重要的特 ...@@ -557,9 +579,11 @@ Lasso 回归的一个重要特征是它倾向于完全消除最不重要的特
![](../images/chapter_4/图4-19.PNG) ![](../images/chapter_4/图4-19.PNG)
图4-19:Ridge 回归和 Lasso 回归对比 4-19:Ridge 回归和 Lasso 回归对比
**提示:** *在 Lasso 损失函数中,批量梯度下降的路径趋向与在低谷有一个反弹。这是因为在 $\theta_2=0$ 时斜率会有一个突变。为了最后真正收敛到全局最小值,你需要逐渐的降低学习率。* > 提示
>
> 在 Lasso 损失函数中,批量梯度下降的路径趋向与在低谷有一个反弹。这是因为在 $\theta_2=0$ 时斜率会有一个突变。为了最后真正收敛到全局最小值,你需要逐渐的降低学习率。
Lasso 损失函数在 $\theta_i=0(i=1,2,\cdots,n) $ 处无法进行微分运算,但是梯度下降如果你使用子梯度向量 $\mathbf{g}$ 后它可以在任何 $\theta_i=0$ 的情况下进行计算。公式 4-11 是在 Lasso 损失函数上进行梯度下降的子梯度向量公式。 Lasso 损失函数在 $\theta_i=0(i=1,2,\cdots,n) $ 处无法进行微分运算,但是梯度下降如果你使用子梯度向量 $\mathbf{g}$ 后它可以在任何 $\theta_i=0$ 的情况下进行计算。公式 4-11 是在 Lasso 损失函数上进行梯度下降的子梯度向量公式。
...@@ -621,7 +645,9 @@ array([ 1.54333232]) ...@@ -621,7 +645,9 @@ array([ 1.54333232])
图 4-20:早期停止法 图 4-20:早期停止法
**提示:** *随机梯度和小批量梯度下降不是平滑曲线,你可能很难知道它是否达到最小值。 一种解决方案是,只有在验证误差高于最小值一段时间后(你确信该模型不会变得更好了),才停止,之后将模型参数回滚到验证误差最小值。* > 提示
>
> 随机梯度和小批量梯度下降不是平滑曲线,你可能很难知道它是否达到最小值。 一种解决方案是,只有在验证误差高于最小值一段时间后(你确信该模型不会变得更好了),才停止,之后将模型参数回滚到验证误差最小值。
下面是一个早期停止法的基础应用: 下面是一个早期停止法的基础应用:
...@@ -775,7 +801,9 @@ array([1, 0]) ...@@ -775,7 +801,9 @@ array([1, 0])
就像其他线性模型,逻辑回归模型也可以 $\ell_1$ 或者 $\ell_2$ 惩罚使用进行正则化。Scikit-Learn 默认添加了 $\ell_2$ 惩罚。 就像其他线性模型,逻辑回归模型也可以 $\ell_1$ 或者 $\ell_2$ 惩罚使用进行正则化。Scikit-Learn 默认添加了 $\ell_2$ 惩罚。
**注意:** *在 Scikit-Learn 的`LogisticRegression`模型中控制正则化强度的超参数不是 $\alpha$(与其他线性模型一样),而是它的逆:$C$。 $C$ 的值越大,模型正则化强度越低。* > 注意
>
> 在 Scikit-Learn 的`LogisticRegression`模型中控制正则化强度的超参数不是 $\alpha$(与其他线性模型一样),而是它的逆:$C$。 $C$ 的值越大,模型正则化强度越低。
### Softmax 回归 ### Softmax 回归
...@@ -816,7 +844,9 @@ Logistic 回归模型可以直接推广到支持多类别分类,不必组合 ...@@ -816,7 +844,9 @@ Logistic 回归模型可以直接推广到支持多类别分类,不必组合
> >
>+ `argmax`运算返回一个函数取到最大值的变量值。 在这个等式,它返回使 $\sigma{(\mathbf{s}(\mathbf{x}))_k}$ 最大时的 $k$ 的值 >+ `argmax`运算返回一个函数取到最大值的变量值。 在这个等式,它返回使 $\sigma{(\mathbf{s}(\mathbf{x}))_k}$ 最大时的 $k$ 的值
**注意:** *Softmax 回归分类器一次只能预测一个类(即它是多类的,但不是多输出的),因此它只能用于判断互斥的类别,如不同类型的植物。 你不能用它来识别一张照片中的多个人。* > 注意
>
> Softmax 回归分类器一次只能预测一个类(即它是多类的,但不是多输出的),因此它只能用于判断互斥的类别,如不同类型的植物。 你不能用它来识别一张照片中的多个人。
现在我们知道这个模型如何估计概率并进行预测,接下来将介绍如何训练。我们的目标是建立一个模型在目标类别上有着较高的概率(因此其他类别的概率较低),最小化公式 4-22 可以达到这个目标,其表示了当前模型的损失函数,称为交叉熵,当模型对目标类得出了一个较低的概率,其会惩罚这个模型。 交叉熵通常用于衡量待测类别与目标类别的匹配程度(我们将在后面的章节中多次使用它) 现在我们知道这个模型如何估计概率并进行预测,接下来将介绍如何训练。我们的目标是建立一个模型在目标类别上有着较高的概率(因此其他类别的概率较低),最小化公式 4-22 可以达到这个目标,其表示了当前模型的损失函数,称为交叉熵,当模型对目标类得出了一个较低的概率,其会惩罚这个模型。 交叉熵通常用于衡量待测类别与目标类别的匹配程度(我们将在后面的章节中多次使用它)
...@@ -830,10 +860,11 @@ Logistic 回归模型可以直接推广到支持多类别分类,不必组合 ...@@ -830,10 +860,11 @@ Logistic 回归模型可以直接推广到支持多类别分类,不必组合
可以看出,当只有两个类($K=2$)时,此损失函数等同于 Logistic 回归的损失函数(对数损失;请参阅公式 4-17)。 可以看出,当只有两个类($K=2$)时,此损失函数等同于 Logistic 回归的损失函数(对数损失;请参阅公式 4-17)。
**交叉熵** > 交叉熵
*交叉熵源于信息论。假设你想要高效地传输每天的天气信息。如果有八个选项(晴天,雨天等),则可以使用3位对每个选项进行编码,因为 $2^3=8$。但是,如果你认为几乎每天都是晴天,更高效的编码“晴天”的方式是:只用一位(0)。剩下的七项使用四位(从 1 开始)。交叉熵度量每个选项实际发送的平均比特数。 如果你对天气的假设是完美的,交叉熵就等于天气本身的熵(即其内部的不确定性)。 但是,如果你的假设是错误的(例如,如果经常下雨)交叉熵将会更大,称为 Kullback-Leibler 散度(KL 散度)。* >
> 交叉熵源于信息论。假设你想要高效地传输每天的天气信息。如果有八个选项(晴天,雨天等),则可以使用3位对每个选项进行编码,因为 $2^3=8$。但是,如果你认为几乎每天都是晴天,更高效的编码“晴天”的方式是:只用一位(0)。剩下的七项使用四位(从 1 开始)。交叉熵度量每个选项实际发送的平均比特数。 如果你对天气的假设是完美的,交叉熵就等于天气本身的熵(即其内部的不确定性)。 但是,如果你的假设是错误的(例如,如果经常下雨)交叉熵将会更大,称为 Kullback-Leibler 散度(KL 散度)。
*两个概率分布 $p$ 和 $q$ 之间的交叉熵定义为:$H(p,q)=-\sum_xp(x)\log q(x)$(分布至少是离散的)* >
> 两个概率分布 $p$ 和 $q$ 之间的交叉熵定义为:$H(p,q)=-\sum_xp(x)\log q(x)$(分布至少是离散的)
这个损失函数关于 $\theta_k$ 的梯度向量为公式 4-23: 这个损失函数关于 $\theta_k$ 的梯度向量为公式 4-23:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册