CSCI3230 HW01:按小问手把手做题(2026T1)
学习衔接:本次课件内容补全后,可直接学习 回归建模 、最小二乘 、逻辑回归 与 梯度下降 ,再逐小问作答;本篇保持原作业题号、数据及提示/答案边界。作业题面核验记录沿用此前版本,本次不称重新核对试卷。
课程:CSCI3230 / ESTR3108 · Fundamentals of Artificial Intelligence · 2026–2027 Term 1
原题:HW01-2026T1-题目.pdf(本地课件) ,PDF p.1–4
用法:对着题号读;每问都从题目要求开始,接着代入、计算、解释和验算。
版本:2026-10-04 按原题与个人草稿统一记号;所有训练数据、测试数据、初始参数均按这一版原题。
直接跳到正在做的小问:
本文是解题教学笔记。公式从原题重新排版;解释放在对应步骤旁。数值展示会舍入,后续计算使用未舍入的参数。
Q1:用十个训练点拟合,再用十个测试点比较
公共题面 (HW01-2026T1-题目.pdf · Q1 · p.1;数据表为图片,已视觉核对)
p.1 Assume we have a training set and a test set as follows:
Let’s try to find some linear models to fit the training data. We use the RSS objective function J ( Θ ) = ∥ f ^ Θ ( X ) − Y ∥ 2 2 J(\boldsymbol{\Theta})=\lVert \hat f_{\boldsymbol{\Theta}}(\mathbf{X})-\mathbf{Y}\rVert_2^2 J ( Θ ) = ∥ f ^ Θ ( X ) − Y ∥ 2 2 .
公式按原题重排。拟合后的三种模型沿用你的 f ^ 1 ( x ) \hat f_1(x) f ^ 1 ( x ) 、f ^ 2 ( x ) \hat f_2(x) f ^ 2 ( x ) 、f ^ 4 ( x ) \hat f_4(x) f ^ 4 ( x ) ,下标是次数;它们分别对应原题同一记号 f ^ Θ ( x ) \hat f_{\boldsymbol{\Theta}}(x) f ^ Θ ( x ) 在三个模型下的拟合结果。样本编号写作 x ( i ) , y ( i ) x^{(i)},y^{(i)} x ( i ) , y ( i ) ;X \mathbf{X} X 是含常数列的设计矩阵,Y \mathbf{Y} Y 是标签列向量。下面把原题左右两张表并列;每一侧各有十条数据。
(a)–(c) 只用左边的训练集求参数。右边的测试集留到 (d),把已经求好的模型代进去,检查预测得好不好。
Q1(a):求直线的两个系数并画图(p.1,5%)
题面 (同上原件 · Q1(a) · p.1)
p.1 Calculate the analytic solution of the linear model f ^ Θ ( x ) = θ 0 + θ 1 x \hat f_{\boldsymbol{\Theta}}(x)=\theta_0+\theta_1x f ^ Θ ( x ) = θ 0 + θ 1 x . Then, plot the line of your obtained linear model together with the data points in training set. (5%)
这问要做完两件事:算出截距、斜率;把这条直线和十个训练点画在一起。 analytic solution 指通过求导、解方程求出参数,这里不需要反复做梯度下降。
第 1 步:把题目给的模型代进 RSS。
未知数只有 θ 0 \theta_0 θ 0 和 θ 1 \theta_1 θ 1 。例如第一个点为 ( 7 , 0.9 ) (7,0.9) ( 7 , 0.9 ) ,模型预测是 θ 0 + 7 θ 1 \theta_0+7\theta_1 θ 0 + 7 θ 1 ,预测减真实值为 θ 0 + 7 θ 1 − 0.9 \theta_0+7\theta_1-0.9 θ 0 + 7 θ 1 − 0.9 。这个点对 RSS 的贡献就是它的平方。
十个点全部这样做:
J ( θ 0 , θ 1 ) = ∑ i = 1 10 ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 .
J(\theta_0,\theta_1)=\sum_{i=1}^{10}(\theta_0+\theta_1x^{(i)}-y^{(i)})^2.
J ( θ 0 , θ 1 ) = i = 1 ∑ 10 ( θ 0 + θ 1 x ( i ) − y ( i ) ) 2 . 展开开头两项和最后一项,你就能看清求和符号装着什么:
J = ( θ 0 + 7 θ 1 − 0.9 ) 2 + ( θ 0 + 1.6 θ 1 − 1.4 ) 2 + ⋯ + ( θ 0 + 8 θ 1 − 1.3 ) 2 .
J=(\theta_0+7\theta_1-0.9)^2
+(\theta_0+1.6\theta_1-1.4)^2
+\cdots+(\theta_0+8\theta_1-1.3)^2.
J = ( θ 0 + 7 θ 1 − 0.9 ) 2 + ( θ 0 + 1.6 θ 1 − 1.4 ) 2 + ⋯ + ( θ 0 + 8 θ 1 − 1.3 ) 2 . 第 2 步:分别对两个未知数求导,再令导数等于零。
对 θ 0 \theta_0 θ 0 求导时,括号内部对它的导数是 1;对 θ 1 \theta_1 θ 1 求导时,括号内部对它的导数是 x ( i ) x^{(i)} x ( i ) 。平方的导数还会带出一个 2:
∂ J ∂ θ 0 = 2 ∑ i = 1 10 ( θ 0 + θ 1 x ( i ) − y ( i ) ) = 0 ,
\frac{\partial J}{\partial\theta_0}
=2\sum_{i=1}^{10}(\theta_0+\theta_1x^{(i)}-y^{(i)})=0,
∂ θ 0 ∂ J = 2 i = 1 ∑ 10 ( θ 0 + θ 1 x ( i ) − y ( i ) ) = 0 , ∂ J ∂ θ 1 = 2 ∑ i = 1 10 x ( i ) ( θ 0 + θ 1 x ( i ) − y ( i ) ) = 0.
\frac{\partial J}{\partial\theta_1}
=2\sum_{i=1}^{10}x^{(i)}(\theta_0+\theta_1x^{(i)}-y^{(i)})=0.
∂ θ 1 ∂ J = 2 i = 1 ∑ 10 x ( i ) ( θ 0 + θ 1 x ( i ) − y ( i ) ) = 0. 两式各除以 2。第一式收集常数、x ( i ) x^{(i)} x ( i ) 、y ( i ) y^{(i)} y ( i ) ;第二式先把外面的 x ( i ) x^{(i)} x ( i ) 乘进去:
10 θ 0 + ( ∑ i x ( i ) ) θ 1 = ∑ i y ( i ) , ( ∑ i x ( i ) ) θ 0 + ( ∑ i ( x ( i ) ) 2 ) θ 1 = ∑ i x ( i ) y ( i ) .
\begin{aligned}
10\theta_0+\left(\sum_i x^{(i)}\right)\theta_1&=\sum_i y^{(i)},\\
\left(\sum_i x^{(i)}\right)\theta_0+\left(\sum_i (x^{(i)})^2\right)\theta_1&=\sum_i x^{(i)}y^{(i)}.
\end{aligned}
10 θ 0 + ( i ∑ x ( i ) ) θ 1 ( i ∑ x ( i ) ) θ 0 + ( i ∑ ( x ( i ) ) 2 ) θ 1 = i ∑ y ( i ) , = i ∑ x ( i ) y ( i ) . 第一式为什么有 10 θ 0 10\theta_0 10 θ 0 ?因为每个点都有一个截距,十项相加就是十倍截距。
第 3 步:按训练表算出方程里的四个总和。
于是刚才的两个方程变成:
{ 10 θ 0 + 56.1 θ 1 = 8.5 , 56.1 θ 0 + 353.09 θ 1 = 52.88.
\begin{cases}
10\theta_0+56.1\theta_1=8.5,\\
56.1\theta_0+353.09\theta_1=52.88.
\end{cases}
{ 10 θ 0 + 56.1 θ 1 = 8.5 , 56.1 θ 0 + 353.09 θ 1 = 52.88. 第 4 步:消元,先求斜率,再求截距。
第一式除以 10,移项:
θ 0 = 0.85 − 5.61 θ 1 .
\theta_0=0.85-5.61\theta_1.
θ 0 = 0.85 − 5.61 θ 1 . 把它代入第二式:
56.1 ( 0.85 − 5.61 θ 1 ) + 353.09 θ 1 = 52.88 , 47.685 − 314.721 θ 1 + 353.09 θ 1 = 52.88 , 38.369 θ 1 = 5.195 , θ 1 = 0.1353957622.
\begin{aligned}
56.1(0.85-5.61\theta_1)+353.09\theta_1&=52.88,\\
47.685-314.721\theta_1+353.09\theta_1&=52.88,\\
38.369\theta_1&=5.195,\\
\theta_1&=0.1353957622.
\end{aligned}
56.1 ( 0.85 − 5.61 θ 1 ) + 353.09 θ 1 47.685 − 314.721 θ 1 + 353.09 θ 1 38.369 θ 1 θ 1 = 52.88 , = 52.88 , = 5.195 , = 0.1353957622. 再代回第一式:
θ 0 = 0.85 − 5.61 ( 0.1353957622 ) = 0.0904297740.
\theta_0=0.85-5.61(0.1353957622)=0.0904297740.
θ 0 = 0.85 − 5.61 ( 0.1353957622 ) = 0.0904297740. 所以求出的直线是:
f ^ 1 ( x ) = 0.0904297740 + 0.1353957622 x .
\boxed{\hat f_1(x)=0.0904297740+0.1353957622x.}
f ^ 1 ( x ) = 0.0904297740 + 0.1353957622 x . 这确实使 RSS 最小:RSS 是平方和,关于两个参数的二次函数是凸的;本题各个 x x x 不全相同,方程给出唯一最小点。无需再找另一个驻点比较。
第 5 步:画出直线,叠加原训练点。
可以先拿第一个点验算:输入 x = 7 x=7 x = 7 ,模型给出
f ^ 1 ( 7 ) = 0.0904297740 + 0.1353957622 ( 7 ) = 1.0382001094.
\hat f_1(7)=0.0904297740+0.1353957622(7)=1.0382001094.
f ^ 1 ( 7 ) = 0.0904297740 + 0.1353957622 ( 7 ) = 1.0382001094. 真实值是 0.9,所以这个点不会正好落在拟合线上。最小二乘要求十个点的总平方误差最小,不要求每个点都穿过。
以下代码可单独运行;xx 是从左到右的画图横坐标,x, y 才是原训练点。散点用 scatter,模型线用 plot。
import numpy as np
import matplotlib.pyplot as plt
x = np.array([7 , 1.6 , 3.8 , 4.7 , 4 , 6.3 , 7.9 , 5.7 , 7.1 , 8 ])
y = np.array([.9 , 1.4 , .7 , -.3 , 0 , .6 , 1.7 , .1 , 2.1 , 1.3 ])
A = np.column_stack([np.ones(10 ), x])
theta_a = np.linalg.lstsq(A, y, rcond=None )[0 ]
xx = np.linspace(1 , 8.4 , 400 )
yy = theta_a[0 ] + theta_a[1 ] * xx
plt.scatter(x, y, label="training data" )
plt.plot(xx, yy, label="degree 1" )
plt.xlabel("x" )
plt.ylabel("y" )
plt.legend()
plt.show()
print (theta_a)
代码中的 A、y、theta_a 分别对应公式中的 X \mathbf{X} X 、Y \mathbf{Y} Y 、一次模型的 Θ ^ \hat{\boldsymbol{\Theta}} Θ ^ ;Python 变量名不影响数学记号。这里 lstsq 直接求解上面同一个最小二乘问题;前面的手算已经说明了它为什么得到这两个数。
**本问完成检查:**有两个系数、有代回后的直线、有训练散点与直线同图。只写一个通用的矩阵公式还没算完这问。
Q1(b):增加平方项,求三个系数(p.1,5%)
题面 (同上原件 · Q1(b) · p.1)
p.1 Suppose we want to increase the model complexity, by considering y y y as a linear function of both x x x and x 2 x^2 x 2 : f ^ Θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 \hat f_{\boldsymbol{\Theta}}(x)=\theta_0+\theta_1x+\theta_2x^2 f ^ Θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 . In this case, calculate the analytic solution of the model and plot the curve of the model, together with the data points in training set. (5%)
原题矩阵提示转写:X \mathbf{X} X 每一行为 ( 1 , x ( i ) , ( x ( i ) ) 2 ) (1,x^{(i)},(x^{(i)})^2) ( 1 , x ( i ) , ( x ( i ) ) 2 ) ,Θ = ( θ 0 , θ 1 , θ 2 ) T \boldsymbol{\Theta}=(\theta_0,\theta_1,\theta_2)^T Θ = ( θ 0 , θ 1 , θ 2 ) T 。这问是在同一批训练数据上,增加一个待求系数。 x 2 x^2 x 2 是已知输入的平方,不是给标签 y y y 平方。
第 1 步:按题目提示把每个输入扩成三列。
例如第一行由 7 7 7 变成 ( 1 , 7 , 49 ) (1,7,49) ( 1 , 7 , 49 ) ;第二行由 1.6 1.6 1.6 变成 ( 1 , 1.6 , 2.56 ) (1,1.6,2.56) ( 1 , 1.6 , 2.56 ) 。第一列 1 用来乘截距。下面直接用题目的 X \mathbf{X} X 表示设计矩阵;小写 x x x 仍是单个输入:
X = ( 1 7 49 1 1.6 2.56 1 3.8 14.44 1 4.7 22.09 1 4 16 1 6.3 39.69 1 7.9 62.41 1 5.7 32.49 1 7.1 50.41 1 8 64 ) , Θ = ( θ 0 θ 1 θ 2 ) .
\mathbf{X}=\begin{pmatrix}
1&7&49\\1&1.6&2.56\\1&3.8&14.44\\1&4.7&22.09\\
1&4&16\\1&6.3&39.69\\1&7.9&62.41\\1&5.7&32.49\\
1&7.1&50.41\\1&8&64
\end{pmatrix},\qquad
\boldsymbol{\Theta}=\begin{pmatrix}\theta_0\\\theta_1\\\theta_2\end{pmatrix}.
X = 1 1 1 1 1 1 1 1 1 1 7 1.6 3.8 4.7 4 6.3 7.9 5.7 7.1 8 49 2.56 14.44 22.09 16 39.69 62.41 32.49 50.41 64 , Θ = θ 0 θ 1 θ 2 . 矩阵乘法 X Θ \mathbf{X}\boldsymbol{\Theta} X Θ 就是十个预测值。例如第一行乘出来是 θ 0 + 7 θ 1 + 49 θ 2 \theta_0+7\theta_1+49\theta_2 θ 0 + 7 θ 1 + 49 θ 2 ,正是题目要求的二次模型。
第 2 步:写 RSS,求导得到三个方程。
每条残差现在是 r i = θ 0 + θ 1 x ( i ) + θ 2 ( x ( i ) ) 2 − y ( i ) r_i=\theta_0+\theta_1x^{(i)}+\theta_2(x^{(i)})^2-y^{(i)} r i = θ 0 + θ 1 x ( i ) + θ 2 ( x ( i ) ) 2 − y ( i ) 。分别对三个参数求导,括号内部的导数分别为 1 , x ( i ) , ( x ( i ) ) 2 1,x^{(i)},(x^{(i)})^2 1 , x ( i ) , ( x ( i ) ) 2 ,所以条件是:
∑ i r i = 0 , ∑ i x ( i ) r i = 0 , ∑ i ( x ( i ) ) 2 r i = 0.
\sum_i r_i=0,\qquad \sum_i x^{(i)}r_i=0,\qquad \sum_i (x^{(i)})^2r_i=0.
i ∑ r i = 0 , i ∑ x ( i ) r i = 0 , i ∑ ( x ( i ) ) 2 r i = 0. 三式可以合写成 X T ( X Θ − Y ) = 0 \mathbf{X}^T(\mathbf{X}\boldsymbol{\Theta}-\mathbf{Y})=0 X T ( X Θ − Y ) = 0 ,移项得到 X T X Θ = X T Y \mathbf{X}^T\mathbf{X}\boldsymbol{\Theta}=\mathbf{X}^T\mathbf{Y} X T X Θ = X T Y 。这就是“正规方程”,本质上仍是刚才的三个偏导等于零。
第 3 步:把本题数字填进去。
X T X \mathbf{X}^T\mathbf{X} X T X 的每个格子是两列对应元素乘完后求和。例如第一行第三格是 ∑ i ( x ( i ) ) 2 = 353.09 \sum_i (x^{(i)})^2=353.09 ∑ i ( x ( i ) ) 2 = 353.09 ;第二行第三格是 ∑ i ( x ( i ) ) 3 = 2367.981 \sum_i (x^{(i)})^3=2367.981 ∑ i ( x ( i ) ) 3 = 2367.981 。右侧第三格是 ∑ i ( x ( i ) ) 2 y ( i ) = 373.386 \sum_i (x^{(i)})^2y^{(i)}=373.386 ∑ i ( x ( i ) ) 2 y ( i ) = 373.386 。
( 10 56.1 353.09 56.1 353.09 2367.981 353.09 2367.981 16523.1077 ) ( θ 0 θ 1 θ 2 ) = ( 8.5 52.88 373.386 ) .
\begin{pmatrix}
10&56.1&353.09\\
56.1&353.09&2367.981\\
353.09&2367.981&16523.1077
\end{pmatrix}
\begin{pmatrix}\theta_0\\\theta_1\\\theta_2\end{pmatrix}
=
\begin{pmatrix}8.5\\52.88\\373.386\end{pmatrix}.
10 56.1 353.09 56.1 353.09 2367.981 353.09 2367.981 16523.1077 θ 0 θ 1 θ 2 = 8.5 52.88 373.386 . 第 4 步:先消掉截距,再解两个未知数。
第一行除以 10,整理为:
θ 0 = 0.85 − 5.61 θ 1 − 35.309 θ 2 .
\theta_0=0.85-5.61\theta_1-35.309\theta_2.
θ 0 = 0.85 − 5.61 θ 1 − 35.309 θ 2 . 把这一式分别代进第二、第三行。合并同类项后得到:
{ 38.369 θ 1 + 387.1461 θ 2 = 5.195 , 387.1461 θ 1 + 4055.85289 θ 2 = 73.2595.
\begin{cases}
38.369\theta_1+387.1461\theta_2=5.195,\\
387.1461\theta_1+4055.85289\theta_2=73.2595.
\end{cases}
{ 38.369 θ 1 + 387.1461 θ 2 = 5.195 , 387.1461 θ 1 + 4055.85289 θ 2 = 73.2595. 这里以第一行的平方项系数为例,387.1461 = 2367.981 − 56.1 ( 35.309 ) 387.1461=2367.981-56.1(35.309) 387.1461 = 2367.981 − 56.1 ( 35.309 ) ,来自代入截距后的两部分合并。
再用第二式减去第一式的 387.1461 / 38.369 387.1461/38.369 387.1461/38.369 倍,θ 1 \theta_1 θ 1 被消掉:
( 4055.85289 − 387.1461 2 38.369 ) θ 2 = 73.2595 − 387.1461 ( 5.195 ) 38.369 .
\left(4055.85289-\frac{387.1461^2}{38.369}\right)\theta_2
=73.2595-\frac{387.1461(5.195)}{38.369}.
( 4055.85289 − 38.369 387.146 1 2 ) θ 2 = 73.2595 − 38.369 387.1461 ( 5.195 ) . 算出两边的数:
149.5195806823 θ 2 = 20.8415587062 , θ 2 = 0.1393901629.
149.5195806823\theta_2=20.8415587062,
\qquad \theta_2=0.1393901629.
149.5195806823 θ 2 = 20.8415587062 , θ 2 = 0.1393901629. 先回代求 θ 1 \theta_1 θ 1 ,再回代求 θ 0 \theta_0 θ 0 :
θ 1 = 5.195 − 387.1461 θ 2 38.369 = − 1.2710614804 , θ 0 = 0.85 − 5.61 θ 1 − 35.309 θ 2 = 3.0589276435.
\begin{aligned}
\theta_1&=\frac{5.195-387.1461\theta_2}{38.369}
=-1.2710614804,\\
\theta_0&=0.85-5.61\theta_1-35.309\theta_2
=3.0589276435.
\end{aligned}
θ 1 θ 0 = 38.369 5.195 − 387.1461 θ 2 = − 1.2710614804 , = 0.85 − 5.61 θ 1 − 35.309 θ 2 = 3.0589276435. 二次模型因此为:
f ^ 2 ( x ) = 3.0589276435 − 1.2710614804 x + 0.1393901629 x 2 .
\boxed{\hat f_2(x)=3.0589276435-1.2710614804x+0.1393901629x^2.}
f ^ 2 ( x ) = 3.0589276435 − 1.2710614804 x + 0.1393901629 x 2 . 第 5 步:画曲线。
接着 (a) 已定义的 np、plt、x、y、xx,运行下面这一段。这里的 x**2 和 xx**2 都是在计算输入的平方,系数仍只乘一次。
A = np.column_stack([np.ones(10 ), x, x**2 ])
theta_b = np.linalg.lstsq(A, y, rcond=None )[0 ]
yy = theta_b[0 ] + theta_b[1 ] * xx + theta_b[2 ] * xx**2
plt.figure()
plt.scatter(x, y, label="training data" )
plt.plot(xx, yy, label="degree 2" )
plt.xlabel("x" )
plt.ylabel("y" )
plt.legend()
plt.show()
print (theta_b)
**本问完成检查:**矩阵是十行三列,参数有三个;模型代入 x x x 时要有平方项;曲线和训练散点画在一起。
Q1(c):增加到四次项,求五个系数(p.2,5%)
题面 (同上原件 · Q1(c) · p.2)
p.2 Let’s further increase the model complexity, by assuming y y y is related to higher-order forms of x x x , i.e., f ^ Θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 \hat f_{\boldsymbol{\Theta}}(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4 f ^ Θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 . Again, calculate the analytic solution of the model, plot the curve of the function, together with the data points in training set. (5%)
原题还给了设计矩阵提示。已核对 PDF:提示最后一行的第四列印成了四次幂,与上面模型中的三次项不一致;本节依明确给出的模型建立 1 , x , x 2 , x 3 , x 4 1,x,x^2,x^3,x^4 1 , x , x 2 , x 3 , x 4 五列。
第 1 步:把十个输入的三次方、四次方算出来。
把后五列作为矩阵 X \mathbf{X} X ,一行乘以五个系数,就给出一个预测。比如第一行是 θ 0 + 7 θ 1 + 49 θ 2 + 343 θ 3 + 2401 θ 4 \theta_0+7\theta_1+49\theta_2+343\theta_3+2401\theta_4 θ 0 + 7 θ 1 + 49 θ 2 + 343 θ 3 + 2401 θ 4 。
第 2 步:仍然让五个偏导分别等于零。
对第 j j j 个系数求导,j = 0 , 1 , 2 , 3 , 4 j=0,1,2,3,4 j = 0 , 1 , 2 , 3 , 4 :
∂ J ∂ θ j = 2 ∑ i = 1 10 ( x ( i ) ) j ( θ 0 + θ 1 x ( i ) + θ 2 ( x ( i ) ) 2 + θ 3 ( x ( i ) ) 3 + θ 4 ( x ( i ) ) 4 − y ( i ) ) = 0.
\frac{\partial J}{\partial\theta_j}
=2\sum_{i=1}^{10}(x^{(i)})^j
(\theta_0+\theta_1x^{(i)}+\theta_2(x^{(i)})^2+\theta_3(x^{(i)})^3+\theta_4(x^{(i)})^4-y^{(i)})=0.
∂ θ j ∂ J = 2 i = 1 ∑ 10 ( x ( i ) ) j ( θ 0 + θ 1 x ( i ) + θ 2 ( x ( i ) ) 2 + θ 3 ( x ( i ) ) 3 + θ 4 ( x ( i ) ) 4 − y ( i ) ) = 0. 因此仍然解 X T X Θ = X T Y \mathbf{X}^T\mathbf{X}\boldsymbol{\Theta}=\mathbf{X}^T\mathbf{Y} X T X Θ = X T Y 。这里 X T X \mathbf{X}^T\mathbf{X} X T X 为五行五列;每一格对应 ∑ i ( x ( i ) ) r + c \sum_i (x^{(i)})^{r+c} ∑ i ( x ( i ) ) r + c ,行列编号 r , c r,c r , c 从 0 开始。
第 3 步:把要解的方程组具体写出来。
为了不把五列大数挤成一行,下面每行就是一个方程的五个系数及右侧常数;各列依次乘 θ 0 , θ 1 , θ 2 , θ 3 , θ 4 \theta_0,\theta_1,\theta_2,\theta_3,\theta_4 θ 0 , θ 1 , θ 2 , θ 3 , θ 4 。
第一行例如就是:
10 θ 0 + 56.1 θ 1 + 353.09 θ 2 + 2367.981 θ 3 + 16523.1077 θ 4 = 8.5.
10\theta_0+56.1\theta_1+353.09\theta_2+2367.981\theta_3+16523.1077\theta_4=8.5.
10 θ 0 + 56.1 θ 1 + 353.09 θ 2 + 2367.981 θ 3 + 16523.1077 θ 4 = 8.5. 第 4 步:用线性代数工具解这个方程组,并画图。
原题允许用 Python/MATLAB 做计算。这里不要求手算五元消元;关键是先构造正确方程,再说明软件具体解了什么。下面接着 (a) 的数据运行:
A = np.column_stack([np.ones(10 ), x, x**2 , x**3 , x**4 ])
G = A.T @ A
b = A.T @ y
print (G)
print (b)
print (np.linalg.solve(G, b))
theta_c = np.linalg.lstsq(A, y, rcond=None )[0 ]
print (theta_c)
B = np.column_stack([np.ones(len (xx)), xx, xx**2 , xx**3 , xx**4 ])
yy = B @ theta_c
plt.figure()
plt.scatter(x, y, label="training data" )
plt.plot(xx, yy, label="degree 4" )
plt.xlabel("x" )
plt.ylabel("y" )
plt.legend()
plt.show()
五个输出按幂次从低到高排列:
Θ = ( − 12.1769041048 16.4457655738 − 6.3777487490 0.9546521253 − 0.0484786041 ) .
\boldsymbol{\Theta}=\begin{pmatrix}
-12.1769041048\\16.4457655738\\-6.3777487490\\0.9546521253\\-0.0484786041
\end{pmatrix}.
Θ = − 12.1769041048 16.4457655738 − 6.3777487490 0.9546521253 − 0.0484786041 . 把它们放回题目中的模型:
f ^ 4 ( x ) = − 12.1769041048 + 16.4457655738 x − 6.3777487490 x 2 + 0.9546521253 x 3 − 0.0484786041 x 4 .
\boxed{\hat f_4(x)=-12.1769041048+16.4457655738x-6.3777487490x^2
+0.9546521253x^3-0.0484786041x^4.}
f ^ 4 ( x ) = − 12.1769041048 + 16.4457655738 x − 6.3777487490 x 2 + 0.9546521253 x 3 − 0.0484786041 x 4 . **检查:**四次模型要有五个系数;训练矩阵应为十行五列。拿未舍入的解代回,X T ( X Θ − Y ) \mathbf{X}^T(\mathbf{X}\boldsymbol{\Theta}-\mathbf{Y}) X T ( X Θ − Y ) 应接近全零。四次式里较大的正负项会抵消,不要把系数只留两位就拿去计算测试误差。
下面的配套图把 (a)–(c) 并排显示;每幅黑点都是同一组训练数据:
一次、二次、四次模型与训练点(本地素材,未公开)
Q1(d):用测试集判断哪一个模型更合适(p.2,10%)
题面 (同上原件 · Q1(d) · p.2)
p.2 Observe the above three functions, please point out which could be faced with underfitting, which could be faced with overfitting, and which one is relatively a good one? Then, you can calculate the values of prediction error on the test data to verify your thoughts. (10%)
这问接着使用刚才三个模型。参数已经确定,测试时不再重新拟合。
第 1 步:先看形状,提出初步判断。
训练点大致是中间低、两侧高。直线弯不了,可能欠拟合;二次曲线能表达这个走势;四次曲线能拐得更多,但这些额外弯曲是否对新数据有帮助,还要算测试误差。
第 2 步:每个测试输入分别代入三个模型。
拿第一条 ( 7.2 , 0.6 ) (7.2,0.6) ( 7.2 , 0.6 ) 先算直线:
f ^ 1 ( 7.2 ) = 0.0904297740 + 0.1353957622 ( 7.2 ) = 1.0652792618.
\hat f_1(7.2)=0.0904297740+0.1353957622(7.2)=1.0652792618.
f ^ 1 ( 7.2 ) = 0.0904297740 + 0.1353957622 ( 7.2 ) = 1.0652792618. 该点的误差是 1.0652792618 − 0.6 = 0.4652792618 1.0652792618-0.6=0.4652792618 1.0652792618 − 0.6 = 0.4652792618 ,平方误差约为 0.21648479 0.21648479 0.21648479 。
再算二次模型的同一个点:
f ^ 2 ( 7.2 ) = 3.0589276435 − 1.2710614804 ( 7.2 ) + 0.1393901629 ( 51.84 ) ≈ 1.13327103.
\hat f_2(7.2)=3.0589276435-1.2710614804(7.2)+0.1393901629(51.84)
\approx1.13327103.
f ^ 2 ( 7.2 ) = 3.0589276435 − 1.2710614804 ( 7.2 ) + 0.1393901629 ( 51.84 ) ≈ 1.13327103. 平方误差是 ( 1.13327103 − 0.6 ) 2 ≈ 0.28437799 (1.13327103-0.6)^2\approx0.28437799 ( 1.13327103 − 0.6 ) 2 ≈ 0.28437799 。一个点上直线更好,不代表十个点加起来仍更好,所以必须继续算整张表。
第 3 步:逐点做“预测减真实,再平方”,最后相加。
例如一次模型的测试 RSS 是:
R S S t e s t , 1 = ( 1.06527926 − 0.6 ) 2 + ( 0.23936511 − 1 ) 2 + ( 0.57785452 − 0.3 ) 2 + ( 0.74032943 + 0.4 ) 2 + ( 0.67263155 − 0 ) 2 + ( 0.98404180 − 0.2 ) 2 + ( 1.14651672 − 1.8 ) 2 + ( 0.84864604 − 0.6 ) 2 + ( 1.07881884 − 1.7 ) 2 + ( 1.20067502 − 1.3 ) 2 ≈ 4.12435607.
\begin{aligned}
\mathrm{RSS}_{\mathrm{test},1}
={}&(1.06527926-0.6)^2+(0.23936511-1)^2\\
&+(0.57785452-0.3)^2+(0.74032943+0.4)^2\\
&+(0.67263155-0)^2+(0.98404180-0.2)^2\\
&+(1.14651672-1.8)^2+(0.84864604-0.6)^2\\
&+(1.07881884-1.7)^2+(1.20067502-1.3)^2\\
\approx{}&4.12435607.
\end{aligned}
RSS test , 1 = ≈ ( 1.06527926 − 0.6 ) 2 + ( 0.23936511 − 1 ) 2 + ( 0.57785452 − 0.3 ) 2 + ( 0.74032943 + 0.4 ) 2 + ( 0.67263155 − 0 ) 2 + ( 0.98404180 − 0.2 ) 2 + ( 1.14651672 − 1.8 ) 2 + ( 0.84864604 − 0.6 ) 2 + ( 1.07881884 − 1.7 ) 2 + ( 1.20067502 − 1.3 ) 2 4.12435607. 第四项是加 0.4,因为真实值为 −0.4。不要把十个有正有负的误差先加起来再平方,那不是 RSS。
运行下面这段可把三列预测和全部误差一次复算出来,依赖 (a)–(c) 已求出的三个 theta:
xt = np.array([7.2 , 1.1 , 3.6 , 4.8 , 4.3 , 6.6 , 7.8 , 5.6 , 7.3 , 8.2 ])
yt = np.array([.6 , 1 , .3 , -.4 , 0 , .2 , 1.8 , .6 , 1.7 , 1.3 ])
for degree, theta in [(1 , theta_a), (2 , theta_b), (4 , theta_c)]:
A = np.column_stack([x**j for j in range (degree + 1 )])
B = np.column_stack([xt**j for j in range (degree + 1 )])
prediction = B @ theta
squared_errors = (prediction - yt)**2
print ("degree" , degree)
print ("test prediction, squared error:" , np.column_stack([prediction, squared_errors]))
print ("train RSS" , np.sum ((A @ theta - y)**2 ))
print ("test RSS" , np.sum (squared_errors))
训练集、测试集各有 10 条,所以两列 MSE 分别等于对应 RSS 除以 10;列顺序与你的 Q1(d) 一致。
第 4 步:用比较结果解释结论。
二次变四次时,训练 RSS 从 1.8765 降至 0.7712,测试 RSS 却从 2.4768 升至 5.1835。多出的复杂度更贴合训练点,但没有改善这里的测试预测,这才是判断四次过拟合的依据。
还能定位到具体错误:四次模型在测试 x = 1.1 x=1.1 x = 1.1 时预测 −0.604,真实值为 1,单点平方误差约 2.5727。这个输入低于最小训练输入 1.6,已经在训练范围之外,四次曲线的外推在这里出了明显偏差。
**本问完成检查:**三个判断都给出理由,同时用测试 RSS 支持判断。若写 MSE,应把各 RSS 除以 10 并明确名称,不能把 2.4768 称作本题的 MSE。
Q2:按 (a) 求截距、(b) 代回、(c) 求斜率的顺序推导
公共题面 (HW01-2026T1-题目.pdf · Q2 · p.2)
p.2 Recall that we have learned ridge regression which is a shrinkage method to regularize the coefficients in linear models. Suppose we have M M M samples X = ( X ( 1 ) , X ( 2 ) , … , X ( m ) ) T \mathbf{X}=(\mathbf{X}^{(1)},\mathbf{X}^{(2)},\ldots,\mathbf{X}^{(m)})^T X = ( X ( 1 ) , X ( 2 ) , … , X ( m ) ) T . The ridge regression penalizes L2 norm of the model parameters: Θ ^ r i d g e = arg min Θ ∥ X Θ + θ 0 − Y ∥ 2 2 + λ ∥ Θ ∥ 2 2 \hat{\boldsymbol{\Theta}}^{\mathrm{ridge}}=\arg\min_{\boldsymbol{\Theta}}\lVert\mathbf{X}\boldsymbol{\Theta}+\theta_0-\mathbf{Y}\rVert_2^2+\lambda\lVert\boldsymbol{\Theta}\rVert_2^2 Θ ^ ridge = arg min Θ ∥ X Θ + θ 0 − Y ∥ 2 2 + λ ∥ Θ ∥ 2 2 , with λ \lambda λ as a positive scalar (λ > 0 \lambda>0 λ > 0 ). Let’s find the analytic solution for the ridge regression.
公式按原题重排。原题同时出现样本数 M M M 和求和上限 m m m ,下文统一记为 M M M ;X ( i ) \mathbf{X}^{(i)} X ( i ) 表示第 i i i 条样本的特征行。这一题没有给具体数据,是要证明一个公式,不要代用 Q1 的十个点。
沿用你 Q2(a)–(b) 的大写样本记号,后面不再换成小写缩写。粗体用标准 LaTeX 的 \mathbf{X}、\boldsymbol{\Theta};范数写成 \lVert \boldsymbol{\Theta}\rVert_2^2。先认清这几个符号:
如果每条样本有 p p p 个特征,那么 X ( i ) \mathbf{X}^{(i)} X ( i ) 是一行 p p p 个数,Θ \boldsymbol{\Theta} Θ 是一列 p p p 个数,X ( i ) Θ \mathbf{X}^{(i)}\boldsymbol{\Theta} X ( i ) Θ 相乘后得到一个预测数。题目中的正则项只惩罚 Θ \boldsymbol{\Theta} Θ ,没有 λ θ 0 2 \lambda\theta_0^2 λ θ 0 2 。
Q2(a):证明给定斜率时,哪个截距使损失最小(p.2,10%)
题面 (同上原件 · Q2(a) · p.2)
p.2 First of all, in order to be more convenient for the derivation, we rewrite the error function as:
J ( Θ , θ 0 ) = ∑ i = 1 m [ X ( i ) Θ + θ 0 − Y ( i ) ] 2 + λ ∥ Θ ∥ 2 2 J(\boldsymbol{\Theta},\theta_0)=\sum_{i=1}^{m}[\mathbf{X}^{(i)}\boldsymbol{\Theta}+\theta_0-Y^{(i)}]^2+\lambda\lVert\boldsymbol{\Theta}\rVert_2^2 J ( Θ , θ 0 ) = ∑ i = 1 m [ X ( i ) Θ + θ 0 − Y ( i ) ] 2 + λ ∥ Θ ∥ 2 2 .
Set X ˉ \bar{\mathbf{X}} X ˉ be the mean vector of all the raw vectors of X \mathbf{X} X , then, if we change the form of J ( Θ , θ 0 ) J(\boldsymbol{\Theta},\theta_0) J ( Θ , θ 0 ) into the following rewritten function:
J ( Θ , θ 0 ) = ∑ i = 1 m [ ( X ( i ) − X ˉ ) Θ + θ 0 + X ˉ Θ − Y ( i ) ] 2 + λ ∥ Θ ∥ 2 2 J(\boldsymbol{\Theta},\theta_0)=\sum_{i=1}^{m}[(\mathbf{X}^{(i)}-\bar{\mathbf{X}})\boldsymbol{\Theta}+\theta_0+\bar{\mathbf{X}}\boldsymbol{\Theta}-Y^{(i)}]^2+\lambda\lVert\boldsymbol{\Theta}\rVert_2^2 J ( Θ , θ 0 ) = ∑ i = 1 m [( X ( i ) − X ˉ ) Θ + θ 0 + X ˉ Θ − Y ( i ) ] 2 + λ ∥ Θ ∥ 2 2 .
Prove that, when θ 0 = Y ˉ − X ˉ Θ \theta_0=\bar Y-\bar{\mathbf{X}}\boldsymbol{\Theta} θ 0 = Y ˉ − X ˉ Θ , we can get the minimal value for J ( Θ , θ 0 ) J(\boldsymbol{\Theta},\theta_0) J ( Θ , θ 0 ) . (10%)
这问先把 Θ \boldsymbol{\Theta} Θ 当作固定的,只调整 θ 0 \theta_0 θ 0 。 要证明的是“无论当前斜率是什么,与它配套的最佳截距都满足这个式子”;斜率本身到 (c) 才求。
第 1 步:对截距求导。
从目标函数开始:
J = ∑ i = 1 M ( X ( i ) Θ + θ 0 − Y ( i ) ) 2 + λ ∥ Θ ∥ 2 2 .
J=\sum_{i=1}^{M}(\mathbf{X}^{(i)}\boldsymbol{\Theta}+\theta_0-Y^{(i)})^2+\lambda\lVert\boldsymbol{\Theta}\rVert_2^2.
J = i = 1 ∑ M ( X ( i ) Θ + θ 0 − Y ( i ) ) 2 + λ ∥ Θ ∥ 2 2 . 正则项里没有 θ 0 \theta_0 θ 0 ,对它求导就是 0。每个平方项用链式法则,内部对 θ 0 \theta_0 θ 0 的导数为 1:
∂ J ∂ θ 0 = 2 ∑ i = 1 M ( X ( i ) Θ + θ 0 − Y ( i ) ) .
\frac{\partial J}{\partial\theta_0}
=2\sum_{i=1}^{M}(\mathbf{X}^{(i)}\boldsymbol{\Theta}+\theta_0-Y^{(i)}).
∂ θ 0 ∂ J = 2 i = 1 ∑ M ( X ( i ) Θ + θ 0 − Y ( i ) ) . 第 2 步:令导数为零,把截距单独移到一边。
∑ i = 1 M ( X ( i ) Θ + θ 0 − Y ( i ) ) = 0 , ( ∑ i = 1 M X ( i ) ) Θ + M θ 0 − ∑ i = 1 M Y ( i ) = 0 , M θ 0 = ∑ i = 1 M Y ( i ) − ( ∑ i = 1 M X ( i ) ) Θ , θ 0 = 1 M ∑ i = 1 M Y ( i ) − ( 1 M ∑ i = 1 M X ( i ) ) Θ .
\begin{aligned}
\sum_{i=1}^{M}(\mathbf{X}^{(i)}\boldsymbol{\Theta}+\theta_0-Y^{(i)})&=0,\\
\left(\sum_{i=1}^{M}\mathbf{X}^{(i)}\right)\boldsymbol{\Theta}+M\theta_0-\sum_{i=1}^{M}Y^{(i)}&=0,\\
M\theta_0&=\sum_{i=1}^{M}Y^{(i)}-\left(\sum_{i=1}^{M}\mathbf{X}^{(i)}\right)\boldsymbol{\Theta},\\
\theta_0&=\frac{1}{M}\sum_{i=1}^{M}Y^{(i)}-\left(\frac{1}{M}\sum_{i=1}^{M}\mathbf{X}^{(i)}\right)\boldsymbol{\Theta}.
\end{aligned}
i = 1 ∑ M ( X ( i ) Θ + θ 0 − Y ( i ) ) ( i = 1 ∑ M X ( i ) ) Θ + M θ 0 − i = 1 ∑ M Y ( i ) M θ 0 θ 0 = 0 , = 0 , = i = 1 ∑ M Y ( i ) − ( i = 1 ∑ M X ( i ) ) Θ , = M 1 i = 1 ∑ M Y ( i ) − ( M 1 i = 1 ∑ M X ( i ) ) Θ . 第二行中,Θ \boldsymbol{\Theta} Θ 对所有样本都相同,所以可以从求和中拿出来。最后一行两处“总和除以样本数”正是均值,于是:
θ 0 = Y ˉ − X ˉ Θ .
\boxed{\theta_0=\bar Y-\bar{\mathbf{X}}\boldsymbol{\Theta}.}
θ 0 = Y ˉ − X ˉ Θ . 第 3 步:证明是最小值,不能只停在导数为零。
对截距再求一次导数:
∂ 2 J ∂ θ 0 2 = 2 M > 0.
\frac{\partial^2J}{\partial\theta_0^2}=2M>0.
∂ θ 0 2 ∂ 2 J = 2 M > 0. 因为 M M M 是正的样本数,损失关于截距是一条开口向上的抛物线,刚才的驻点就是唯一最小点。
如果想沿原题“减均值”的提示证明,也可以直接把平方拆开。
先在原残差里加减均值,使它分成两个部分:
X ( i ) Θ + θ 0 − Y ( i ) = ( X ( i ) − X ˉ ) Θ − ( Y ( i ) − Y ˉ ) ⏟ r i + ( θ 0 + X ˉ Θ − Y ˉ ) ⏟ a .
\mathbf{X}^{(i)}\boldsymbol{\Theta}+\theta_0-Y^{(i)}
=\underbrace{(\mathbf{X}^{(i)}-\bar{\mathbf{X}})\boldsymbol{\Theta}-(Y^{(i)}-\bar Y)}_{r_i}
+\underbrace{(\theta_0+\bar{\mathbf{X}}\boldsymbol{\Theta}-\bar Y)}_{a}.
X ( i ) Θ + θ 0 − Y ( i ) = r i ( X ( i ) − X ˉ ) Θ − ( Y ( i ) − Y ˉ ) + a ( θ 0 + X ˉ Θ − Y ˉ ) . 这里 r i r_i r i 随样本变,a a a 对所有样本相同。因为每列减均值之后的总和都是 0,∑ i r i = 0 \sum_i r_i=0 ∑ i r i = 0 。所以:
∑ i ( r i + a ) 2 = ∑ i r i 2 + 2 a ∑ i r i + M a 2 = ∑ i r i 2 + M a 2 .
\begin{aligned}
\sum_i(r_i+a)^2
&=\sum_i r_i^2+2a\sum_i r_i+Ma^2\\
&=\sum_i r_i^2+Ma^2.
\end{aligned}
i ∑ ( r i + a ) 2 = i ∑ r i 2 + 2 a i ∑ r i + M a 2 = i ∑ r i 2 + M a 2 . 固定 Θ \boldsymbol{\Theta} Θ 时,只有 M a 2 Ma^2 M a 2 随截距变化。平方最低是 0,令 a = 0 a=0 a = 0 就得到 θ 0 = Y ˉ − X ˉ Θ \theta_0=\bar Y-\bar{\mathbf{X}}\boldsymbol{\Theta} θ 0 = Y ˉ − X ˉ Θ 。这和求导法得出同一个结论。
与你原稿对照:这里得到的是“固定 Θ \boldsymbol{\Theta} Θ 后,驻点给出 J J J 关于 θ 0 \theta_0 θ 0 的最小值”,不是说 θ 0 \theta_0 θ 0 本身是 J J J 的最小值,也不是已经同时优化全部参数。
**本问完成检查:**公式已推出,而且说明了为什么是最小值。此时仍不能声称已经求出了整个岭回归的所有参数。
Q2(b):把刚得到的截距代回去(p.2,5%)
题面 (同上原件 · Q2(b) · p.2)
p.2 Next, let’s define the centered input as X c ( i ) = X ( i ) − X ˉ \mathbf{X}_c^{(i)}=\mathbf{X}^{(i)}-\bar{\mathbf{X}} X c ( i ) = X ( i ) − X ˉ , and the corresponding centered label as Y c ( i ) = Y ( i ) − Y ˉ Y_c^{(i)}=Y^{(i)}-\bar Y Y c ( i ) = Y ( i ) − Y ˉ . Plug the above θ 0 \theta_0 θ 0 into the loss function, try to derive that:
J ( Θ , θ 0 ) = J c ( Θ ) = ∑ i = 1 m [ X c ( i ) Θ − Y c ( i ) ] 2 + λ ∥ Θ ∥ 2 2 J(\boldsymbol{\Theta},\theta_0)=J_c(\boldsymbol{\Theta})=\sum_{i=1}^{m}[\mathbf{X}_c^{(i)}\boldsymbol{\Theta}-Y_c^{(i)}]^2+\lambda\lVert\boldsymbol{\Theta}\rVert_2^2 J ( Θ , θ 0 ) = J c ( Θ ) = ∑ i = 1 m [ X c ( i ) Θ − Y c ( i ) ] 2 + λ ∥ Θ ∥ 2 2 . (5%)
这问只做代入和整理,不需要再次求导。 “centered” 就是减去均值;没有除标准差。
第 1 步:先只看一个样本的残差,代入 (a) 的截距。
X ( i ) Θ + θ 0 − Y ( i ) = X ( i ) Θ + ( Y ˉ − X ˉ Θ ) − Y ( i ) = X ( i ) Θ − X ˉ Θ + Y ˉ − Y ( i ) = ( X ( i ) − X ˉ ) Θ − ( Y ( i ) − Y ˉ ) = X c ( i ) Θ − Y c ( i ) .
\begin{aligned}
\mathbf{X}^{(i)}\boldsymbol{\Theta}+\theta_0-Y^{(i)}
&=\mathbf{X}^{(i)}\boldsymbol{\Theta}+(\bar Y-\bar{\mathbf{X}}\boldsymbol{\Theta})-Y^{(i)}\\
&=\mathbf{X}^{(i)}\boldsymbol{\Theta}-\bar{\mathbf{X}}\boldsymbol{\Theta}+\bar Y-Y^{(i)}\\
&=(\mathbf{X}^{(i)}-\bar{\mathbf{X}})\boldsymbol{\Theta}-(Y^{(i)}-\bar Y)\\
&=\mathbf{X}_c^{(i)}\boldsymbol{\Theta}-Y_c^{(i)}.
\end{aligned}
X ( i ) Θ + θ 0 − Y ( i ) = X ( i ) Θ + ( Y ˉ − X ˉ Θ ) − Y ( i ) = X ( i ) Θ − X ˉ Θ + Y ˉ − Y ( i ) = ( X ( i ) − X ˉ ) Θ − ( Y ( i ) − Y ˉ ) = X c ( i ) Θ − Y c ( i ) . 第二行把含 Θ \boldsymbol{\Theta} Θ 的两项放一起;第三行对这两项提取 Θ \boldsymbol{\Theta} Θ ,并把 Y ˉ − Y ( i ) \bar Y-Y^{(i)} Y ˉ − Y ( i ) 写为 − ( Y ( i ) − Y ˉ ) -(Y^{(i)}-\bar Y) − ( Y ( i ) − Y ˉ ) 。最后一行直接使用题目给的两个 centered 定义。
第 2 步:每个残差都已相等,平方后求和也相等。
J ( Θ , Y ˉ − X ˉ Θ ) = ∑ i = 1 M ( X c ( i ) Θ − Y c ( i ) ) 2 + λ ∥ Θ ∥ 2 2 = J c ( Θ ) .
\boxed{
J(\boldsymbol{\Theta},\bar Y-\bar{\mathbf{X}}\boldsymbol{\Theta})
=\sum_{i=1}^{M}(\mathbf{X}_c^{(i)}\boldsymbol{\Theta}-Y_c^{(i)})^2+\lambda\lVert\boldsymbol{\Theta}\rVert_2^2
=J_c(\boldsymbol{\Theta}).
}
J ( Θ , Y ˉ − X ˉ Θ ) = i = 1 ∑ M ( X c ( i ) Θ − Y c ( i ) ) 2 + λ ∥ Θ ∥ 2 2 = J c ( Θ ) . 正则项没变,因为你只替换了截距,Θ \boldsymbol{\Theta} Θ 还是原来的斜率向量。现在目标里不再出现独立的 θ 0 \theta_0 θ 0 ,你的 Q2(b) 最后一式把上限写成了小写 m m m ;这里按 (a) 统一用 M M M ,指同一批样本。所以 (c) 可以只对 Θ \boldsymbol{\Theta} Θ 求导。
**本问完成检查:**两个均值都减了:输入要减 X ˉ \bar{\mathbf{X}} X ˉ ,标签也要减 Y ˉ \bar Y Y ˉ 。只减输入而不减标签,就推不出题目中的式子。
Q2(c):对中心化后的目标求导,解出斜率(p.2,10%)
题面 (同上原件 · Q2(c) · p.2)
p.2 Finally, with calculating the first-order derivatives of J c ( Θ ) J_c(\boldsymbol{\Theta}) J c ( Θ ) , try to find the analytic solution Θ ^ \hat{\boldsymbol{\Theta}} Θ ^ for the ridge regression. (10%)
这问从 (b) 最后一行接着做。 为了用矩阵解方程,把全部 X c ( i ) \mathbf{X}_c^{(i)} X c ( i ) 叠成 X c \mathbf{X}_c X c ,全部 Y c ( i ) Y_c^{(i)} Y c ( i ) 叠成 Y c \mathbf{Y}_c Y c :
J c ( Θ ) = ( X c Θ − Y c ) T ( X c Θ − Y c ) + λ Θ T Θ .
J_c(\boldsymbol{\Theta})=(\mathbf{X}_c\boldsymbol{\Theta}-\mathbf{Y}_c)^T(\mathbf{X}_c\boldsymbol{\Theta}-\mathbf{Y}_c)+\lambda\boldsymbol{\Theta}^T\boldsymbol{\Theta}.
J c ( Θ ) = ( X c Θ − Y c ) T ( X c Θ − Y c ) + λ Θ T Θ . 第 1 步:展开,找出哪些项含未知参数。
J c = Θ T X c T X c Θ − 2 Θ T X c T Y c + Y c T Y c + λ Θ T Θ .
J_c=\boldsymbol{\Theta}^T\mathbf{X}_c^T\mathbf{X}_c\boldsymbol{\Theta}-2\boldsymbol{\Theta}^T\mathbf{X}_c^T\mathbf{Y}_c+\mathbf{Y}_c^T\mathbf{Y}_c+\lambda\boldsymbol{\Theta}^T\boldsymbol{\Theta}.
J c = Θ T X c T X c Θ − 2 Θ T X c T Y c + Y c T Y c + λ Θ T Θ .
中间本来有两个交叉项,但它们都是同一个标量,所以合成两倍。Y c T Y c \mathbf{Y}_c^T\mathbf{Y}_c Y c T Y c 只由数据决定,是常数。
第 2 步:逐项求导。
如果第一行的矩阵求导不熟,可以逐个看标量分量 θ j \theta_j θ j :一个残差平方的导数是 2 ( X c ( i ) Θ − Y c ( i ) ) X c , j ( i ) 2(\mathbf{X}_c^{(i)}\boldsymbol{\Theta}-Y_c^{(i)})X_{c,j}^{(i)} 2 ( X c ( i ) Θ − Y c ( i ) ) X c , j ( i ) ,其中 X c , j ( i ) X_{c,j}^{(i)} X c , j ( i ) 是第 i 条中心化样本的第 j 个标量特征;加上所有样本后,这正是向量 2 X c T ( X c Θ − Y c ) 2\mathbf{X}_c^T(\mathbf{X}_c\boldsymbol{\Theta}-\mathbf{Y}_c) 2 X c T ( X c Θ − Y c ) 的第 j j j 个分量。
所以总梯度为:
∇ Θ J c = 2 X c T X c Θ − 2 X c T Y c + 2 λ Θ .
\nabla_{\boldsymbol{\Theta}} J_c
=2\mathbf{X}_c^T\mathbf{X}_c\boldsymbol{\Theta}-2\mathbf{X}_c^T\mathbf{Y}_c+2\lambda\boldsymbol{\Theta}.
∇ Θ J c = 2 X c T X c Θ − 2 X c T Y c + 2 λ Θ . 第 3 步:令导数为零,解方程。
2 X c T X c Θ − 2 X c T Y c + 2 λ Θ = 0 , X c T X c Θ + λ Θ = X c T Y c , ( X c T X c + λ I p ) Θ = X c T Y c .
\begin{aligned}
2\mathbf{X}_c^T\mathbf{X}_c\boldsymbol{\Theta}-2\mathbf{X}_c^T\mathbf{Y}_c+2\lambda\boldsymbol{\Theta}&=0,\\
\mathbf{X}_c^T\mathbf{X}_c\boldsymbol{\Theta}+\lambda\boldsymbol{\Theta}&=\mathbf{X}_c^T\mathbf{Y}_c,\\
(\mathbf{X}_c^T\mathbf{X}_c+\lambda I_p)\boldsymbol{\Theta}&=\mathbf{X}_c^T\mathbf{Y}_c.
\end{aligned}
2 X c T X c Θ − 2 X c T Y c + 2 λ Θ X c T X c Θ + λ Θ ( X c T X c + λ I p ) Θ = 0 , = X c T Y c , = X c T Y c . 第二行除以了 2 并移项;第三行把 λ Θ \lambda\boldsymbol{\Theta} λ Θ 写成 λ I p Θ \lambda I_p\boldsymbol{\Theta} λ I p Θ 才能提取右侧的 Θ \boldsymbol{\Theta} Θ 。I p I_p I p 是 p p p 行 p p p 列的单位矩阵,大小等于特征数,不是样本数。
因此:
Θ ^ = ( X c T X c + λ I p ) − 1 X c T Y c .
\boxed{\hat{\boldsymbol{\Theta}}=(\mathbf{X}_c^T\mathbf{X}_c+\lambda I_p)^{-1}\mathbf{X}_c^T\mathbf{Y}_c.}
Θ ^ = ( X c T X c + λ I p ) − 1 X c T Y c . 第 4 步:说明为什么这个逆存在。
取任意非零向量 v v v :
v T ( X c T X c + λ I p ) v = ∥ X c v ∥ 2 2 + λ ∥ v ∥ 2 2 > 0.
v^T(\mathbf{X}_c^T\mathbf{X}_c+\lambda I_p)v
=\lVert \mathbf{X}_cv\rVert_2^2+\lambda\lVert v\rVert_2^2>0.
v T ( X c T X c + λ I p ) v = ∥ X c v ∥ 2 2 + λ ∥ v ∥ 2 2 > 0. 第一项至少为 0,第二项因为题目给了 λ > 0 \lambda>0 λ > 0 而严格大于 0。这个矩阵因此正定、可逆;目标的 Hessian 是它的两倍,也正定,所以求到的是唯一最小值。
第 5 步:如果要回到原输入坐标,恢复截距。
θ ^ 0 = Y ˉ − X ˉ Θ ^ , Y ^ = X n e w Θ ^ + θ ^ 0 .
\boxed{\hat\theta_0=\bar Y-\bar{\mathbf{X}}\hat{\boldsymbol{\Theta}},\qquad
\hat Y=\mathbf{X}_{\mathrm{new}}\hat{\boldsymbol{\Theta}}+\hat\theta_0.}
θ ^ 0 = Y ˉ − X ˉ Θ ^ , Y ^ = X new Θ ^ + θ ^ 0 . 其中 X n e w \mathbf{X}_{\mathrm{new}} X new 是一条新输入的行向量。
**补充验算(以下数字为演示自取,原题没有数据):**用两个样本 ( 1 , 2 ) , ( 3 , 6 ) (1,2),(3,6) ( 1 , 2 ) , ( 3 , 6 ) ,取 λ = 2 \lambda=2 λ = 2 。这只是核对 (a)–(c) 如何接起来:
均值:X ˉ = 2 \bar{\mathbf{X}}=2 X ˉ = 2 ,Y ˉ = 4 \bar Y=4 Y ˉ = 4 。
减均值:X c = ( − 1 , 1 ) T \mathbf{X}_c=(-1,1)^T X c = ( − 1 , 1 ) T ,Y c = ( − 2 , 2 ) T \mathbf{Y}_c=(-2,2)^T Y c = ( − 2 , 2 ) T 。
相乘求和:X c T X c = 1 + 1 = 2 \mathbf{X}_c^T\mathbf{X}_c=1+1=2 X c T X c = 1 + 1 = 2 ;X c T Y c = 2 + 2 = 4 \mathbf{X}_c^T\mathbf{Y}_c=2+2=4 X c T Y c = 2 + 2 = 4 。
代入 (c):Θ ^ = 4 / ( 2 + 2 ) = 1 \hat{\boldsymbol{\Theta}}=4/(2+2)=1 Θ ^ = 4/ ( 2 + 2 ) = 1 。
代入 (a):θ ^ 0 = 4 − 2 ( 1 ) = 2 \hat\theta_0=4-2(1)=2 θ ^ 0 = 4 − 2 ( 1 ) = 2 ,模型为 y ^ = x + 2 \hat y=x+2 y ^ = x + 2 。
原数据预测为 3、5,残差为 1、−1,RSS 为 2;正则项为 2 ( 1 ) 2 = 2 2(1)^2=2 2 ( 1 ) 2 = 2 ,总损失为 4。中心化残差也是 1、−1,损失不变,核对了 (b)。
**本问完成检查:**逆矩阵里出现的是 X c T X c + λ I p \mathbf{X}_c^T\mathbf{X}_c+\lambda I_p X c T X c + λ I p ;系数解要用中心化数据;截距没有被一起惩罚。
Q3:从题目给的初始参数开始,只更新一次
公共题面 (HW01-2026T1-题目.pdf · Q3 · p.2–3;数据表为图片,已视觉核对)
p.2 Assume that we have a training set and a test set as follows:
表(题面,p.3):训练集与测试集。
p.3 Use these data to implement a logistic regression classifier. We use the linear model f Θ ( x 1 , x 2 ) = θ 0 + θ 1 x 1 + θ 2 x 2 f_{\boldsymbol{\Theta}}(x_1,x_2)=\theta_0+\theta_1x_1+\theta_2x_2 f Θ ( x 1 , x 2 ) = θ 0 + θ 1 x 1 + θ 2 x 2 and the logistic regression function as σ ( f Θ ( x 1 , x 2 ) ) = 1 1 + e − f Θ ( x 1 , x 2 ) \sigma(f_{\boldsymbol{\Theta}}(x_1,x_2))=\frac{1}{1+e^{-f_{\boldsymbol{\Theta}}(x_1,x_2)}} σ ( f Θ ( x 1 , x 2 )) = 1 + e − f Θ ( x 1 , x 2 ) 1 . The error function uses cross-entropy error function.
Now, let’s use the gradient descent to update the model in the training set. The initial weights are set as θ 0 = − 1 , θ 1 = 1.5 , θ 2 = 0.5 \theta_0=-1,\theta_1=1.5,\theta_2=0.5 θ 0 = − 1 , θ 1 = 1.5 , θ 2 = 0.5 . The learning rate is 0.1.
公式按原题重排。先把初始参数 −1、1.5、0.5 和学习率 0.1 写在手边。下面使用六条训练样本的交叉熵总和 ,与 L03 原课件(本地课件) PDF p.35–36 一致;这会直接影响 (b) 一步更新的数值。
Q3(a):写概率模型,再写六条样本的损失(p.3,5%)
题面 (同上原件 · Q3(a) · p.3)
p.3 Please write down the logistic model P ( y ^ = 1 ∣ x 1 , x 2 ) P(\hat y=1\mid x_1,x_2) P ( y ^ = 1 ∣ x 1 , x 2 ) and its cross-entropy error function. (5%)
这问还不更新参数。先写清楚模型如何从两个输入产生一个概率,以及什么叫预测得不好。
与你新增的 Q3(a) 对照:sigmoid 的分母是 1 + e − z 1+e^{-z} 1 + e − z ,不是 1 − e − z 1-e^{-z} 1 − e − z ;后者在 z = 0 z=0 z = 0 时无定义,也不能保证概率落在 0 到 1 之间。这里 z = θ 0 + θ 1 x 1 + θ 2 x 2 z=\theta_0+\theta_1x_1+\theta_2x_2 z = θ 0 + θ 1 x 1 + θ 2 x 2 ,x 1 , x 2 x_1,x_2 x 1 , x 2 是题目表中的两列独立特征,不能把第二列写成 x 2 x^2 x 2 。单条交叉熵 ℓ i = − y i ln p i − ( 1 − y i ) ln ( 1 − p i ) \ell_i=-y_i\ln p_i-(1-y_i)\ln(1-p_i) ℓ i = − y i ln p i − ( 1 − y i ) ln ( 1 − p i ) 的写法正确;本题再对六条训练样本求和。
第 1 步:把直线模型放进 sigmoid。
先算一个分数 z = θ 0 + θ 1 x 1 + θ 2 x 2 z=\theta_0+\theta_1x_1+\theta_2x_2 z = θ 0 + θ 1 x 1 + θ 2 x 2 ,再计算:
P ( y ^ = 1 ∣ x 1 , x 2 ) = 1 1 + exp [ − ( θ 0 + θ 1 x 1 + θ 2 x 2 ) ] .
\boxed{P(\hat y=1\mid x_1,x_2)
=\frac{1}{1+\exp[-(\theta_0+\theta_1x_1+\theta_2x_2)]}.}
P ( y ^ = 1 ∣ x 1 , x 2 ) = 1 + exp [ − ( θ 0 + θ 1 x 1 + θ 2 x 2 )] 1 . 代入给定参数,初始模型为:
P ( y ^ = 1 ∣ x 1 , x 2 ) = 1 1 + exp [ − ( − 1 + 1.5 x 1 + 0.5 x 2 ) ] .
P(\hat y=1\mid x_1,x_2)
=\frac{1}{1+\exp[-(-1+1.5x_1+0.5x_2)]}.
P ( y ^ = 1 ∣ x 1 , x 2 ) = 1 + exp [ − ( − 1 + 1.5 x 1 + 0.5 x 2 )] 1 . 例如训练第一条:
z 1 = − 1 + 1.5 ( 0.15 ) + 0.5 ( 0.35 ) = − 0.6 , p 1 = 1 1 + e 0.6 = 0.3543436938.
z_1=-1+1.5(0.15)+0.5(0.35)=-0.6,
\qquad p_1=\frac{1}{1+e^{0.6}}=0.3543436938.
z 1 = − 1 + 1.5 ( 0.15 ) + 0.5 ( 0.35 ) = − 0.6 , p 1 = 1 + e 0.6 1 = 0.3543436938. 指数是正 0.6,因为 sigmoid 里用的是 − z -z − z 。这里 p 1 p_1 p 1 是“属于类别 1 的概率”,还不是最终的 0/1 判断。
第 2 步:按真实标签写交叉熵。
记第 i i i 条的概率为 p i p_i p i ,真实标签为 y i y_i y i 。单条损失是:
ℓ i = − y i ln p i − ( 1 − y i ) ln ( 1 − p i ) .
\ell_i=-y_i\ln p_i-(1-y_i)\ln(1-p_i).
ℓ i = − y i ln p i − ( 1 − y i ) ln ( 1 − p i ) . 为什么是这样?真实标签为 1 时只留下 − ln p i -\ln p_i − ln p i ,模型给类别 1 的概率越高,损失越低;真实标签为 0 时只留下 − ln ( 1 − p i ) -\ln(1-p_i) − ln ( 1 − p i ) ,模型给类别 0 的概率越高,损失越低。
第 3 步:把本题六条数据的标签代进去。
前三条真实标签为 0,后三条为 1,因此:
E ( Θ ) = − ln ( 1 − p 1 ) − ln ( 1 − p 2 ) − ln ( 1 − p 3 ) − ln p 4 − ln p 5 − ln p 6 .
\boxed{
E(\boldsymbol{\Theta})=-\ln(1-p_1)-\ln(1-p_2)-\ln(1-p_3)
-\ln p_4-\ln p_5-\ln p_6.
}
E ( Θ ) = − ln ( 1 − p 1 ) − ln ( 1 − p 2 ) − ln ( 1 − p 3 ) − ln p 4 − ln p 5 − ln p 6 . 一般求和写法是:
E ( Θ ) = − ∑ i = 1 6 [ y i ln p i + ( 1 − y i ) ln ( 1 − p i ) ] .
E(\boldsymbol{\Theta})=-\sum_{i=1}^{6}[y_i\ln p_i+(1-y_i)\ln(1-p_i)].
E ( Θ ) = − i = 1 ∑ 6 [ y i ln p i + ( 1 − y i ) ln ( 1 − p i )] . 这里每个 p i p_i p i 都由上面的模型和训练集第 i 行 计算。例如第一条损失是 − ln ( 1 − 0.3543436938 ) ≈ 0.43748795 -\ln(1-0.3543436938)\approx0.43748795 − ln ( 1 − 0.3543436938 ) ≈ 0.43748795 。
**本问完成检查:**既写了模型也写了损失;真实标签 0 的三条通过 ln ( 1 − p i ) \ln(1-p_i) ln ( 1 − p i ) 参与,不能漏掉。
Q3(b):算六条梯度贡献,合起来更新一次(p.3,10%)
题面 (同上原件 · Q3(b) · p.3)
p.3 Use gradient descent to update θ 0 \theta_0 θ 0 , θ 1 \theta_1 θ 1 and θ 2 \theta_2 θ 2 for one iteration. Write down the updated logistic regression model. (10%)
这问要拿到三个新参数,最后写出新概率模型。 全批量的一次更新顺序是:先用同一套旧参数算六条数据 → 六条贡献相加 → 统一更新一次。算到第二条时还不能改参数。
第 1 步:先确定要累加的梯度公式。
对一条样本,(a) 给出 ℓ = − y ln p − ( 1 − y ) ln ( 1 − p ) \ell=-y\ln p-(1-y)\ln(1-p) ℓ = − y ln p − ( 1 − y ) ln ( 1 − p ) 。沿着“参数影响分数,分数影响概率,概率影响损失”求导:
∂ ℓ ∂ p = − y p + 1 − y 1 − p , ∂ p ∂ z = p ( 1 − p ) .
\frac{\partial\ell}{\partial p}
=-\frac{y}{p}+\frac{1-y}{1-p},
\qquad
\frac{\partial p}{\partial z}=p(1-p).
∂ p ∂ ℓ = − p y + 1 − p 1 − y , ∂ z ∂ p = p ( 1 − p ) . 第二个导数可以直接从 p = ( 1 + e − z ) − 1 p=(1+e^{-z})^{-1} p = ( 1 + e − z ) − 1 算:外层倒数求导带负号,内层 e − z e^{-z} e − z 求导也带负号,两者抵消,得到 e − z / ( 1 + e − z ) 2 = p ( 1 − p ) e^{-z}/(1+e^{-z})^2=p(1-p) e − z / ( 1 + e − z ) 2 = p ( 1 − p ) 。
把两段相乘,约去分母:
∂ ℓ ∂ z = ( − y p + 1 − y 1 − p ) p ( 1 − p ) = − y ( 1 − p ) + ( 1 − y ) p = − y + y p + p − y p = p − y .
\begin{aligned}
\frac{\partial\ell}{\partial z}
&=\left(-\frac{y}{p}+\frac{1-y}{1-p}\right)p(1-p)\\
&=-y(1-p)+(1-y)p\\
&=-y+yp+p-yp=p-y.
\end{aligned}
∂ z ∂ ℓ = ( − p y + 1 − p 1 − y ) p ( 1 − p ) = − y ( 1 − p ) + ( 1 − y ) p = − y + y p + p − y p = p − y . 分数 z = θ 0 + θ 1 x 1 + θ 2 x 2 z=\theta_0+\theta_1x_1+\theta_2x_2 z = θ 0 + θ 1 x 1 + θ 2 x 2 对三个参数的导数分别是 1 , x 1 , x 2 1,x_1,x_2 1 , x 1 , x 2 。所以一条样本对三个梯度的贡献是:
∂ ℓ ∂ θ 0 = p − y , ∂ ℓ ∂ θ 1 = ( p − y ) x 1 , ∂ ℓ ∂ θ 2 = ( p − y ) x 2 .
\frac{\partial\ell}{\partial\theta_0}=p-y,\qquad
\frac{\partial\ell}{\partial\theta_1}=(p-y)x_1,\qquad
\frac{\partial\ell}{\partial\theta_2}=(p-y)x_2.
∂ θ 0 ∂ ℓ = p − y , ∂ θ 1 ∂ ℓ = ( p − y ) x 1 , ∂ θ 2 ∂ ℓ = ( p − y ) x 2 . 第 2 步:六条训练数据逐条算旧分数。
z 1 = − 1 + 1.5 ( 0.15 ) + 0.5 ( 0.35 ) = − 0.600 , z 2 = − 1 + 1.5 ( 0.30 ) + 0.5 ( 0.45 ) = − 0.325 , z 3 = − 1 + 1.5 ( 0.55 ) + 0.5 ( 0.25 ) = − 0.050 , z 4 = − 1 + 1.5 ( 0.30 ) + 0.5 ( 0.80 ) = − 0.150 , z 5 = − 1 + 1.5 ( 0.55 ) + 0.5 ( 0.60 ) = 0.125 , z 6 = − 1 + 1.5 ( 0.70 ) + 0.5 ( 0.50 ) = 0.300.
\begin{aligned}
z_1&=-1+1.5(0.15)+0.5(0.35)=-0.600,\\
z_2&=-1+1.5(0.30)+0.5(0.45)=-0.325,\\
z_3&=-1+1.5(0.55)+0.5(0.25)=-0.050,\\
z_4&=-1+1.5(0.30)+0.5(0.80)=-0.150,\\
z_5&=-1+1.5(0.55)+0.5(0.60)=0.125,\\
z_6&=-1+1.5(0.70)+0.5(0.50)=0.300.
\end{aligned}
z 1 z 2 z 3 z 4 z 5 z 6 = − 1 + 1.5 ( 0.15 ) + 0.5 ( 0.35 ) = − 0.600 , = − 1 + 1.5 ( 0.30 ) + 0.5 ( 0.45 ) = − 0.325 , = − 1 + 1.5 ( 0.55 ) + 0.5 ( 0.25 ) = − 0.050 , = − 1 + 1.5 ( 0.30 ) + 0.5 ( 0.80 ) = − 0.150 , = − 1 + 1.5 ( 0.55 ) + 0.5 ( 0.60 ) = 0.125 , = − 1 + 1.5 ( 0.70 ) + 0.5 ( 0.50 ) = 0.300.
第 3 步:把每个分数变成概率,再减去真实标签。
每行都用 p i = 1 / ( 1 + e − z i ) p_i=1/(1+e^{-z_i}) p i = 1/ ( 1 + e − z i ) 。例如第四条 p 4 = 1 / ( 1 + e 0.15 ) = 0.4625701547 p_4=1/(1+e^{0.15})=0.4625701547 p 4 = 1/ ( 1 + e 0.15 ) = 0.4625701547 ,真实标签是 1,所以 p 4 − y 4 = − 0.5374298453 p_4-y_4=-0.5374298453 p 4 − y 4 = − 0.5374298453 。
第 4 步:各行的残差乘以相应输入,得到三列贡献。
先手算第四行,这行容易丢负号:
θ 0 contribution = − 0.5374298453 , θ 1 contribution = ( − 0.5374298453 ) ( 0.30 ) = − 0.1612289536 , θ 2 contribution = ( − 0.5374298453 ) ( 0.80 ) = − 0.4299438763.
\begin{aligned}
\theta_0\text{ contribution}&=-0.5374298453,\\
\theta_1\text{ contribution}&=(-0.5374298453)(0.30)=-0.1612289536,\\
\theta_2\text{ contribution}&=(-0.5374298453)(0.80)=-0.4299438763.
\end{aligned}
θ 0 contribution θ 1 contribution θ 2 contribution = − 0.5374298453 , = ( − 0.5374298453 ) ( 0.30 ) = − 0.1612289536 , = ( − 0.5374298453 ) ( 0.80 ) = − 0.4299438763. 注意这里是梯度贡献 ,还没有乘学习率,也还没有从参数中减去。六行完整结果:
例如截距这一列就是:
g 0 = 0.3543436938 + 0.4194576952 + 0.4875026035 − 0.5374298453 − 0.4687906266 − 0.4255574832 = − 0.1704739627.
\begin{aligned}
g_0={}&0.3543436938+0.4194576952+0.4875026035\\
&-0.5374298453-0.4687906266-0.4255574832\\
={}&-0.1704739627.
\end{aligned}
g 0 = = 0.3543436938 + 0.4194576952 + 0.4875026035 − 0.5374298453 − 0.4687906266 − 0.4255574832 − 0.1704739627. 第一系数那一列必须乘 x 1 x_1 x 1 再相加:
g 1 = 0.15 ( 0.3543436938 ) + 0.30 ( 0.4194576952 ) + 0.55 ( 0.4875026035 ) + 0.30 ( − 0.5374298453 ) + 0.55 ( − 0.4687906266 ) + 0.70 ( − 0.4255574832 ) = − 0.2698387419.
\begin{aligned}
g_1={}&0.15(0.3543436938)+0.30(0.4194576952)+0.55(0.4875026035)\\
&+0.30(-0.5374298453)+0.55(-0.4687906266)+0.70(-0.4255574832)\\
={}&-0.2698387419.
\end{aligned}
g 1 = = 0.15 ( 0.3543436938 ) + 0.30 ( 0.4194576952 ) + 0.55 ( 0.4875026035 ) + 0.30 ( − 0.5374298453 ) + 0.55 ( − 0.4687906266 ) + 0.70 ( − 0.4255574832 ) − 0.2698387419. 第二系数用另一列 x 2 x_2 x 2 :
g 2 = 0.35 ( 0.3543436938 ) + 0.45 ( 0.4194576952 ) + 0.25 ( 0.4875026035 ) + 0.80 ( − 0.5374298453 ) + 0.60 ( − 0.4687906266 ) + 0.50 ( − 0.4255574832 ) = − 0.4893450873.
\begin{aligned}
g_2={}&0.35(0.3543436938)+0.45(0.4194576952)+0.25(0.4875026035)\\
&+0.80(-0.5374298453)+0.60(-0.4687906266)+0.50(-0.4255574832)\\
={}&-0.4893450873.
\end{aligned}
g 2 = = 0.35 ( 0.3543436938 ) + 0.45 ( 0.4194576952 ) + 0.25 ( 0.4875026035 ) + 0.80 ( − 0.5374298453 ) + 0.60 ( − 0.4687906266 ) + 0.50 ( − 0.4255574832 ) − 0.4893450873. 第 5 步:每个旧参数减去“0.1 × 对应梯度”。
θ 0 ′ = − 1 − 0.1 ( − 0.1704739627 ) = − 0.9829526037 , θ 1 ′ = 1.5 − 0.1 ( − 0.2698387419 ) = 1.5269838742 , θ 2 ′ = 0.5 − 0.1 ( − 0.4893450873 ) = 0.5489345087.
\begin{aligned}
\theta_0'&=-1-0.1(-0.1704739627)=-0.9829526037,\\
\theta_1'&=1.5-0.1(-0.2698387419)=1.5269838742,\\
\theta_2'&=0.5-0.1(-0.4893450873)=0.5489345087.
\end{aligned}
θ 0 ′ θ 1 ′ θ 2 ′ = − 1 − 0.1 ( − 0.1704739627 ) = − 0.9829526037 , = 1.5 − 0.1 ( − 0.2698387419 ) = 1.5269838742 , = 0.5 − 0.1 ( − 0.4893450873 ) = 0.5489345087. 三个梯度都是负数,所以三个参数都增加。第一个仍然为负,但 −0.983 比 −1 大,方向没有写反。
第 6 步:把新参数放回概率模型。
P ( y ^ = 1 ∣ x 1 , x 2 ) = 1 1 + exp [ − ( − 0.9829526037 + 1.5269838742 x 1 + 0.5489345087 x 2 ) ] .
\boxed{
P(\hat y=1\mid x_1,x_2)
=\frac{1}{1+\exp[-(-0.9829526037+1.5269838742x_1+0.5489345087x_2)]}.
}
P ( y ^ = 1 ∣ x 1 , x 2 ) = 1 + exp [ − ( − 0.9829526037 + 1.5269838742 x 1 + 0.5489345087 x 2 )] 1 .
这就是 (c) 要用的模型。用六条训练数据复算,总交叉熵从 3.6076515301 降到 3.5756262189,可作为本次更新的验算。
**如果你的结果只变化了这里的六分之一:**先检查是否把六条损失取了平均。平均交叉熵会使梯度除以 6,在同样学习率 0.1 下得到 ( − 0.9971587673 , 1.5044973124 , 0.5081557515 ) (-0.9971587673,1.5044973124,0.5081557515) ( − 0.9971587673 , 1.5044973124 , 0.5081557515 ) 。这是另一种损失缩放下的一步;本解析从 (a) 开始明确采用求和,因此后面全部沿用求和结果。
**本问完成检查:**六条都用旧参数;三列贡献分别累加;学习率乘一次;三个参数一起更新;最终仍写 sigmoid 概率模型。
Q3(c):逐条预测测试集,再数 TP、FP、TN、FN(p.3,10%)
题面 (同上原件 · Q3(c) · p.3)
p.3 Use the above new model to make predictions for all the samples in the test dataset. Then, calculate the accuracy, precision and recall to evaluate this model. (10%)
这一问用的是 (b) 的新参数和右半边测试表。 以下以类别 1 为正类,概率达到 0.5 判为 1,否则判为 0。
第 1 步:逐条计算新分数。
把参数先固定为刚求出的 ( − 0.9829526037 , 1.5269838742 , 0.5489345087 ) (-0.9829526037,1.5269838742,0.5489345087) ( − 0.9829526037 , 1.5269838742 , 0.5489345087 ) :
z 1 ′ = − 0.9829526037 + 1.5269838742 ( 0.28 ) + 0.5489345087 ( 0.82 ) = − 0.1052708218 , z 2 ′ = − 0.9829526037 + 1.5269838742 ( 0.45 ) + 0.5489345087 ( 0.75 ) = 0.1158910212 , z 3 ′ = − 0.9829526037 + 1.5269838742 ( 0.58 ) + 0.5489345087 ( 0.62 ) = 0.2430374387 , z 4 ′ = − 0.9829526037 + 1.5269838742 ( 0.72 ) + 0.5489345087 ( 0.48 ) = 0.3799643499 , z 5 ′ = − 0.9829526037 + 1.5269838742 ( 0.22 ) + 0.5489345087 ( 0.40 ) = − 0.4274423479 , z 6 ′ = − 0.9829526037 + 1.5269838742 ( 0.50 ) + 0.5489345087 ( 0.26 ) = − 0.0767376944.
\begin{aligned}
z_1'&=-0.9829526037+1.5269838742(0.28)+0.5489345087(0.82)
=-0.1052708218,\\
z_2'&=-0.9829526037+1.5269838742(0.45)+0.5489345087(0.75)
=0.1158910212,\\
z_3'&=-0.9829526037+1.5269838742(0.58)+0.5489345087(0.62)
=0.2430374387,\\
z_4'&=-0.9829526037+1.5269838742(0.72)+0.5489345087(0.48)
=0.3799643499,\\
z_5'&=-0.9829526037+1.5269838742(0.22)+0.5489345087(0.40)
=-0.4274423479,\\
z_6'&=-0.9829526037+1.5269838742(0.50)+0.5489345087(0.26)
=-0.0767376944.
\end{aligned}
z 1 ′ z 2 ′ z 3 ′ z 4 ′ z 5 ′ z 6 ′ = − 0.9829526037 + 1.5269838742 ( 0.28 ) + 0.5489345087 ( 0.82 ) = − 0.1052708218 , = − 0.9829526037 + 1.5269838742 ( 0.45 ) + 0.5489345087 ( 0.75 ) = 0.1158910212 , = − 0.9829526037 + 1.5269838742 ( 0.58 ) + 0.5489345087 ( 0.62 ) = 0.2430374387 , = − 0.9829526037 + 1.5269838742 ( 0.72 ) + 0.5489345087 ( 0.48 ) = 0.3799643499 , = − 0.9829526037 + 1.5269838742 ( 0.22 ) + 0.5489345087 ( 0.40 ) = − 0.4274423479 , = − 0.9829526037 + 1.5269838742 ( 0.50 ) + 0.5489345087 ( 0.26 ) = − 0.0767376944. 第 2 步:分数变概率,概率变 0/1。
第一条举例:
p 1 ′ = 1 1 + e 0.1052708218 = 0.4737065719 < 0.5 , y ^ 1 = 0.
p_1'=\frac{1}{1+e^{0.1052708218}}=0.4737065719<0.5,
\qquad\hat y_1=0.
p 1 ′ = 1 + e 0.1052708218 1 = 0.4737065719 < 0.5 , y ^ 1 = 0. 第 3 步:数四种情况。
四格合计 3 + 1 + 0 + 2 = 6 3+1+0+2=6 3 + 1 + 0 + 2 = 6 ,等于测试样本数。
第 4 步:分别确定三个指标的分母。
Accuracy:六条里预测对了几条?正确的是第 2–6 行,共五条。
A c c u r a c y = T P + T N T P + T N + F P + F N = 3 + 2 6 = 5 6 ≈ 83.33 % .
\boxed{\mathrm{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN}
=\frac{3+2}{6}=\frac{5}{6}\approx83.33\%.}
Accuracy = TP + TN + FP + FN TP + TN = 6 3 + 2 = 6 5 ≈ 83.33%. Precision:模型报为正类的那些样本里,有多少是真的正类?模型报正的是第 2、3、4 行,三条都正确。
P r e c i s i o n = T P T P + F P = 3 3 + 0 = 100 % .
\boxed{\mathrm{Precision}=\frac{TP}{TP+FP}=\frac{3}{3+0}=100\%.}
Precision = TP + FP TP = 3 + 0 3 = 100%. Recall:本来真实为正类的那些样本里,找出了多少?真实正类是第 1、2、3、4 行,共四条;找到后三条。
R e c a l l = T P T P + F N = 3 3 + 1 = 75 % .
\boxed{\mathrm{Recall}=\frac{TP}{TP+FN}=\frac{3}{3+1}=75\%.}
Recall = TP + FN TP = 3 + 1 3 = 75%. 所以 precision 达到 100% 并不表示没犯错:第 1 条仍被漏掉。Precision 的分母只包含“报出来的正类”,漏报由 recall 反映。
**独立复算 Q3 的代码:**每一段对应上面的一个步骤,可直接运行,无需 Q1 的变量。
import numpy as np
train = np.array([[.15 ,.35 ], [.30 ,.45 ], [.55 ,.25 ],
[.30 ,.80 ], [.55 ,.60 ], [.70 ,.50 ]])
y = np.array([0 , 0 , 0 , 1 , 1 , 1 ])
test = np.array([[.28 ,.82 ], [.45 ,.75 ], [.58 ,.62 ],
[.72 ,.48 ], [.22 ,.40 ], [.50 ,.26 ]])
yt = np.array([1 , 1 , 1 , 1 , 0 , 0 ])
A = np.column_stack([np.ones(6 ), train])
B = np.column_stack([np.ones(6 ), test])
old = np.array([-1. , 1.5 , .5 ])
p = 1 / (1 + np.exp(-(A @ old)))
r = p - y
contributions = r[:, None ] * A
print ("each training contribution:" , contributions)
gradient = contributions.sum (axis=0 )
new = old - .1 * gradient
print ("gradient:" , gradient)
print ("new parameters:" , new)
prob = 1 / (1 + np.exp(-(B @ new)))
pred = (prob >= .5 ).astype(int )
print ("test probability, prediction, label:" , np.column_stack([prob, pred, yt]))
tp = np.sum ((pred == 1 ) & (yt == 1 ))
fp = np.sum ((pred == 1 ) & (yt == 0 ))
tn = np.sum ((pred == 0 ) & (yt == 0 ))
fn = np.sum ((pred == 0 ) & (yt == 1 ))
print ("accuracy, precision, recall:" , (tp+tn)/6 , tp/(tp+fp), tp/(tp+fn))
Q4:先对类别分数求导,再沿链式法则求到参数
公共题面 (HW01-2026T1-题目.pdf · Q4 · p.3)
p.3 In multi-class tasks we discriminate between three or more classes. As usual, we imagine that we have one sample X = ( x ( 1 ) , x ( 2 ) , … , x ( n ) ) T \mathbf{X}=(x^{(1)},x^{(2)},\ldots,x^{(n)})^T X = ( x ( 1 ) , x ( 2 ) , … , x ( n ) ) T with n-dimensional features. Suppose there are K classes in this task. Instead of representing the output labels as 1, 2, …, K, we present the vector to be 0 in each component except for the one corresponding to the correct label. For example, if there are 5 classes and a particular sample belongs to class 3, then its label vector is [0, 0, 1, 0, 0]. In other words, the label y 3 = 1 y_3=1 y 3 = 1 and y 1 = y 2 = y 4 = y 5 = 0 y_1=y_2=y_4=y_5=0 y 1 = y 2 = y 4 = y 5 = 0 .
In many cases, we perform multi-class tasks by softmax function, with the probability written as:
P ( y ^ i = 1 ∣ X ) = e X T Θ i ∑ k = 1 K e X T Θ k P(\hat y_i=1\mid\mathbf{X})=\frac{e^{\mathbf{X}^T\boldsymbol{\Theta}_i}}{\sum_{k=1}^{K}e^{\mathbf{X}^T\boldsymbol{\Theta}_k}} P ( y ^ i = 1 ∣ X ) = ∑ k = 1 K e X T Θ k e X T Θ i .
Here X T Θ i \mathbf{X}^T\boldsymbol{\Theta}_i X T Θ i is the linear model. As there are K classes in this task, we have a set of K weight vectors for multi-class classification: Θ 1 , Θ 2 , … , Θ K \boldsymbol{\Theta}_1,\boldsymbol{\Theta}_2,\ldots,\boldsymbol{\Theta}_K Θ 1 , Θ 2 , … , Θ K . The P ( y ^ i = 1 ∣ X ) P(\hat y_i=1\mid\mathbf{X}) P ( y ^ i = 1 ∣ X ) indicates the probability that the prediction for the sample is class i.
公式按原题重排。这道题只有一个样本,K K K 表示类别数。 别把这里的求和当成 Q3 中“对六个样本求和”。这里 X \mathbf{X} X 是一个样本的列向量,也不同于 Q2 中整张数据表的矩阵。
为减少长式子,只做三个缩写,后面全部对应原题中的同一个量:
z i = X T Θ i , S = ∑ k = 1 K e z k , p i = P ( y ^ i = 1 ∣ X ) = e z i S .
z_i=\mathbf{X}^T\boldsymbol{\Theta}_i,\qquad S=\sum_{k=1}^{K}e^{z_k},\qquad
p_i=P(\hat y_i=1\mid\mathbf{X})=\frac{e^{z_i}}{S}.
z i = X T Θ i , S = k = 1 ∑ K e z k , p i = P ( y ^ i = 1 ∣ X ) = S e z i . 其中 z i z_i z i 是第 i 类的分数,p i p_i p i 是第 i 类的概率,S S S 是所有类的指数分数之和。i i i 表示“正在看哪个概率”,j j j 表示“正在改哪个分数或哪组参数”。
Q4(a):分别计算同一类和不同类的导数(p.3,10%)
题面 (同上原件 · Q4(a) · p.3)
p.3 Calculate that the derivative of P ( y ^ i = 1 ∣ X ) P(\hat y_i=1\mid\mathbf{X}) P ( y ^ i = 1 ∣ X ) w.r.t. X T Θ j \mathbf{X}^T\boldsymbol{\Theta}_j X T Θ j is:
∂ P ( y ^ i = 1 ∣ X ) ∂ ( X T Θ j ) = { P ( y ^ i = 1 ∣ X ) [ 1 − P ( y ^ j = 1 ∣ X ) ] , j = i , − P ( y ^ i = 1 ∣ X ) P ( y ^ j = 1 ∣ X ) , j ≠ i .
\frac{\partial P(\hat y_i=1\mid\mathbf{X})}{\partial(\mathbf{X}^T\boldsymbol{\Theta}_j)}=
\begin{cases}
P(\hat y_i=1\mid\mathbf{X})[1-P(\hat y_j=1\mid\mathbf{X})],&j=i,\\
-P(\hat y_i=1\mid\mathbf{X})P(\hat y_j=1\mid\mathbf{X}),&j\ne i.
\end{cases}
∂ ( X T Θ j ) ∂ P ( y ^ i = 1 ∣ X ) = { P ( y ^ i = 1 ∣ X ) [ 1 − P ( y ^ j = 1 ∣ X )] , − P ( y ^ i = 1 ∣ X ) P ( y ^ j = 1 ∣ X ) , j = i , j = i .
p.3 (hint: you can separately discuss the two situations for j = i j=i j = i and j ≠ i j\ne i j = i ) (10%)
题面公式按原题重排。目标就是求 ∂ p i / ∂ z j \partial p_i/\partial z_j ∂ p i / ∂ z j 。 先固定一个输出概率 p i = e z i / S p_i=e^{z_i}/S p i = e z i / S ,看看改变 z j z_j z j 时,分子和分母分别怎么变。
第 1 步:写商法则,不急着代概率。
如果 p i = u / v p_i=u/v p i = u / v ,那么:
∂ p i ∂ z j = v ∂ u / ∂ z j − u ∂ v / ∂ z j v 2 .
\frac{\partial p_i}{\partial z_j}
=\frac{v\,\partial u/\partial z_j-u\,\partial v/\partial z_j}{v^2}.
∂ z j ∂ p i = v 2 v ∂ u / ∂ z j − u ∂ v / ∂ z j . 本题的 u = e z i u=e^{z_i} u = e z i ,v = S v=S v = S 。接下来唯一需要分情况的地方,就是分子的导数。
第 2 步:当 j=i,分子、分母都含正在改变的分数。
∂ e z i ∂ z i = e z i , ∂ S ∂ z i = e z i .
\frac{\partial e^{z_i}}{\partial z_i}=e^{z_i},\qquad
\frac{\partial S}{\partial z_i}=e^{z_i}.
∂ z i ∂ e z i = e z i , ∂ z i ∂ S = e z i . 第二式为什么只剩一个指数?因为 S = e z 1 + ⋯ + e z K S=e^{z_1}+\cdots+e^{z_K} S = e z 1 + ⋯ + e z K ,对 z i z_i z i 求导时只有第 i 项变化,其他类的分数暂时固定。
把这两个导数放进商法则:
∂ p i ∂ z i = S e z i − e z i e z i S 2 = e z i S − e z i S e z i S = p i − p i 2 = p i ( 1 − p i ) .
\begin{aligned}
\frac{\partial p_i}{\partial z_i}
&=\frac{S e^{z_i}-e^{z_i}e^{z_i}}{S^2}\\
&=\frac{e^{z_i}}S-\frac{e^{z_i}}S\frac{e^{z_i}}S\\
&=p_i-p_i^2\\
&=p_i(1-p_i).
\end{aligned}
∂ z i ∂ p i = S 2 S e z i − e z i e z i = S e z i − S e z i S e z i = p i − p i 2 = p i ( 1 − p i ) . 第二行把分式拆成两项;第三行每一个 e z i / S e^{z_i}/S e z i / S 都替换为 p i p_i p i 。这就得到原题第一种情况。
第 3 步:当 j≠i,分子不变,分母仍会变。
此时分子是 e z i e^{z_i} e z i ,对另一个变量 z j z_j z j 求导为 0;但分母中确实有 e z j e^{z_j} e z j ,所以:
∂ e z i ∂ z j = 0 , ∂ S ∂ z j = e z j .
\frac{\partial e^{z_i}}{\partial z_j}=0,\qquad
\frac{\partial S}{\partial z_j}=e^{z_j}.
∂ z j ∂ e z i = 0 , ∂ z j ∂ S = e z j . 再次代商法则:
∂ p i ∂ z j = S ( 0 ) − e z i e z j S 2 = − e z i S e z j S = − p i p j .
\begin{aligned}
\frac{\partial p_i}{\partial z_j}
&=\frac{S(0)-e^{z_i}e^{z_j}}{S^2}\\
&=-\frac{e^{z_i}}S\frac{e^{z_j}}S\\
&=-p_ip_j.
\end{aligned}
∂ z j ∂ p i = S 2 S ( 0 ) − e z i e z j = − S e z i S e z j = − p i p j . 负号表示:提高别的类的分数,会增大共同分母,从而降低当前类的概率。即使分子不含 z j z_j z j ,也不能说整个概率对它的导数为零。
第 4 步:把两种情况合起来。
∂ p i ∂ z j = { p i ( 1 − p i ) , j = i , − p i p j , j ≠ i .
\boxed{\frac{\partial p_i}{\partial z_j}=
\begin{cases}p_i(1-p_i),&j=i,\\-p_ip_j,&j\ne i.\end{cases}}
∂ z j ∂ p i = { p i ( 1 − p i ) , − p i p j , j = i , j = i .
**补充算一遍(数字为演示自取):**设三类分数为 ( 0 , ln 2 , ln 3 ) (0,\ln2,\ln3) ( 0 , ln 2 , ln 3 ) ,指数为 ( 1 , 2 , 3 ) (1,2,3) ( 1 , 2 , 3 ) ,所以 S = 6 S=6 S = 6 、概率为 ( 1 / 6 , 1 / 3 , 1 / 2 ) (1/6,1/3,1/2) ( 1/6 , 1/3 , 1/2 ) 。若观察第二类概率:
∂ p 2 ∂ z 2 = 1 3 ( 1 − 1 3 ) = 2 9 , ∂ p 2 ∂ z 1 = − 1 3 1 6 = − 1 18 .
\frac{\partial p_2}{\partial z_2}=\frac{1}{3}\left(1-\frac{1}{3}\right)=\frac{2}{9},
\qquad
\frac{\partial p_2}{\partial z_1}=-\frac{1}{3}\frac{1}{6}=-\frac{1}{18}.
∂ z 2 ∂ p 2 = 3 1 ( 1 − 3 1 ) = 9 2 , ∂ z 1 ∂ p 2 = − 3 1 6 1 = − 18 1 . 同类导数为正,异类为负,与刚才的分子分母分析吻合。这是导数的数值,不是在说分数增加 1 后概率恰好增加这么多;导数描述的是局部变化率。
**本问完成检查:**两种情况各有求导过程;特别是异类情况下,分母的导数不能漏。
Q4(b):由分数的导数,得到参数向量的导数(p.4,5%)
题面 (同上原件 · Q4(b) · p.4)
p.4 Calculate the derivative of P ( y ^ i = 1 ∣ X ) P(\hat y_i=1\mid\mathbf{X}) P ( y ^ i = 1 ∣ X ) w.r.t. Θ j \boldsymbol{\Theta}_j Θ j . (5%)
(hint: ∂ P ( y ^ i = 1 ∣ X ) ∂ Θ j = ∂ P ( y ^ i = 1 ∣ X ) ∂ ( X T Θ j ) ∂ ( X T Θ j ) ∂ Θ j \frac{\partial P(\hat y_i=1\mid\mathbf{X})}{\partial\boldsymbol{\Theta}_j}=\frac{\partial P(\hat y_i=1\mid\mathbf{X})}{\partial(\mathbf{X}^T\boldsymbol{\Theta}_j)}\frac{\partial(\mathbf{X}^T\boldsymbol{\Theta}_j)}{\partial\boldsymbol{\Theta}_j} ∂ Θ j ∂ P ( y ^ i = 1 ∣ X ) = ∂ ( X T Θ j ) ∂ P ( y ^ i = 1 ∣ X ) ∂ Θ j ∂ ( X T Θ j ) .)
(a) 对一个数 z j z_j z j 求导,(b) 要对一整列参数 Θ j \boldsymbol{\Theta}_j Θ j 求导。 中间只差“z j z_j z j 怎样由参数算出来”这一段。
第 1 步:把点积展开,逐个参数求导。
如果 X = ( x ( 1 ) , … , x ( n ) ) T \mathbf{X}=(x^{(1)},\ldots,x^{(n)})^T X = ( x ( 1 ) , … , x ( n ) ) T ,第 j 类参数为 Θ j = ( θ 1 j , … , θ n j ) T \boldsymbol{\Theta}_j=(\theta_{1j},\ldots,\theta_{nj})^T Θ j = ( θ 1 j , … , θ nj ) T ,那么:
z j = X T Θ j = x ( 1 ) θ 1 j + x ( 2 ) θ 2 j + ⋯ + x ( n ) θ n j .
z_j=\mathbf{X}^T\boldsymbol{\Theta}_j
=x^{(1)}\theta_{1j}+x^{(2)}\theta_{2j}+\cdots+x^{(n)}\theta_{nj}.
z j = X T Θ j = x ( 1 ) θ 1 j + x ( 2 ) θ 2 j + ⋯ + x ( n ) θ nj . 对 θ 1 j \theta_{1j} θ 1 j 求导得到 x ( 1 ) x^{(1)} x ( 1 ) ,对 θ 2 j \theta_{2j} θ 2 j 求导得到 x ( 2 ) x^{(2)} x ( 2 ) ,一直到最后一个参数。把这些偏导按列摆好:
∇ Θ j z j = ( x ( 1 ) x ( 2 ) ⋮ x ( n ) ) = X .
\nabla_{\boldsymbol{\Theta}_j}z_j
=\begin{pmatrix}x^{(1)}\\x^{(2)}\\\vdots\\x^{(n)}\end{pmatrix}
=\mathbf{X}.
∇ Θ j z j = x ( 1 ) x ( 2 ) ⋮ x ( n ) = X . 因此这一步得到的是输入列向量 ,不是标量,也不是行向量 X T \mathbf{X}^T X T 。
第 2 步:接上 (a) 已算出的导数。
链式法则是:
∇ Θ j p i = ∂ p i ∂ z j ∇ Θ j z j = ∂ p i ∂ z j X .
\nabla_{\boldsymbol{\Theta}_j}p_i
=\frac{\partial p_i}{\partial z_j}\nabla_{\boldsymbol{\Theta}_j}z_j
=\frac{\partial p_i}{\partial z_j}\mathbf{X}.
∇ Θ j p i = ∂ z j ∂ p i ∇ Θ j z j = ∂ z j ∂ p i X . 把 (a) 的两种结果分别代入:
∇ Θ j p i = { p i ( 1 − p i ) X , j = i , − p i p j X , j ≠ i .
\boxed{\nabla_{\boldsymbol{\Theta}_j}p_i=
\begin{cases}
p_i(1-p_i)\mathbf{X},&j=i,\\
-p_ip_j\mathbf{X},&j\ne i.
\end{cases}}
∇ Θ j p i = { p i ( 1 − p i ) X , − p i p j X , j = i , j = i . 换回原题概率记号,即
∂ P ( y ^ i = 1 ∣ X ) ∂ Θ j = { P ( y ^ i = 1 ∣ X ) [ 1 − P ( y ^ j = 1 ∣ X ) ] X , j = i , − P ( y ^ i = 1 ∣ X ) P ( y ^ j = 1 ∣ X ) X , j ≠ i .
\frac{\partial P(\hat y_i=1\mid\mathbf{X})}{\partial\boldsymbol{\Theta}_j}
=\begin{cases}
P(\hat y_i=1\mid\mathbf{X})[1-P(\hat y_j=1\mid\mathbf{X})]\mathbf{X},&j=i,\\
-P(\hat y_i=1\mid\mathbf{X})P(\hat y_j=1\mid\mathbf{X})\mathbf{X},&j\ne i.
\end{cases}
∂ Θ j ∂ P ( y ^ i = 1 ∣ X ) = { P ( y ^ i = 1 ∣ X ) [ 1 − P ( y ^ j = 1 ∣ X )] X , − P ( y ^ i = 1 ∣ X ) P ( y ^ j = 1 ∣ X ) X , j = i , j = i . 这就是 (b) 要求的结果。不需要重新对整个 softmax 分式求一遍商法则。
**补充数值检查:**沿用 (a) 的自取概率,再取 X = ( 2 , − 1 ) T \mathbf{X}=(2,-1)^T X = ( 2 , − 1 ) T 。这些概率可由参数实现,例如令 Θ k = ( z k / 2 , 0 ) T \boldsymbol{\Theta}_k=(z_k/2,0)^T Θ k = ( z k /2 , 0 ) T ,就有 X T Θ k = z k \mathbf{X}^T\boldsymbol{\Theta}_k=z_k X T Θ k = z k 。
于是:
∇ Θ 2 p 2 = 2 9 ( 2 − 1 ) = ( 4 / 9 − 2 / 9 ) ,
\nabla_{\boldsymbol{\Theta}_2}p_2=\frac{2}{9}\begin{pmatrix}2\\-1\end{pmatrix}
=\begin{pmatrix}4/9\\-2/9\end{pmatrix},
∇ Θ 2 p 2 = 9 2 ( 2 − 1 ) = ( 4/9 − 2/9 ) , ∇ Θ 1 p 2 = − 1 18 ( 2 − 1 ) = ( − 1 / 9 1 / 18 ) .
\nabla_{\boldsymbol{\Theta}_1}p_2=-\frac{1}{18}\begin{pmatrix}2\\-1\end{pmatrix}
=\begin{pmatrix}-1/9\\1/18\end{pmatrix}.
∇ Θ 1 p 2 = − 18 1 ( 2 − 1 ) = ( − 1/9 1/18 ) . **本问完成检查:**参数有 n 个分量,梯度就要有 n 个分量;(a) 的标量结果必须再乘输入向量。
Q4(c):对全部类别的损失求导,化成预测减真实(p.4,10%)
题面 (同上原件 · Q4(c) · p.4)
p.4 We use the following negative log-likelihood loss function for this multi-class task:
E ( Θ ) = − ∑ i = 1 K y i ln P ( y ^ i = 1 ∣ X ) E(\boldsymbol{\Theta})=-\sum_{i=1}^{K}y_i\ln P(\hat y_i=1\mid\mathbf{X}) E ( Θ ) = − ∑ i = 1 K y i ln P ( y ^ i = 1 ∣ X )
where y i y_i y i indicates the label for class i. Prove that the derivative of E ( Θ ) E(\boldsymbol{\Theta}) E ( Θ ) w.r.t. Θ j \boldsymbol{\Theta}_j Θ j is
∂ E ( Θ ) ∂ Θ j = X P ( y ^ j = 1 ∣ X ) − X y j \frac{\partial E(\boldsymbol{\Theta})}{\partial\boldsymbol{\Theta}_j}=\mathbf{X} P(\hat y_j=1\mid\mathbf{X})-\mathbf{X} y_j ∂ Θ j ∂ E ( Θ ) = X P ( y ^ j = 1 ∣ X ) − X y j . (10%)
(hint: ∂ E ( Θ ) ∂ Θ j = ∂ E ( Θ ) ∂ P ( y ^ i = 1 ∣ X ) ∂ P ( y ^ i = 1 ∣ X ) ∂ ( X T Θ j ) ∂ ( X T Θ j ) ∂ Θ j \frac{\partial E(\boldsymbol{\Theta})}{\partial\boldsymbol{\Theta}_j}=\frac{\partial E(\boldsymbol{\Theta})}{\partial P(\hat y_i=1\mid\mathbf{X})}\frac{\partial P(\hat y_i=1\mid\mathbf{X})}{\partial(\mathbf{X}^T\boldsymbol{\Theta}_j)}\frac{\partial(\mathbf{X}^T\boldsymbol{\Theta}_j)}{\partial\boldsymbol{\Theta}_j} ∂ Θ j ∂ E ( Θ ) = ∂ P ( y ^ i = 1 ∣ X ) ∂ E ( Θ ) ∂ ( X T Θ j ) ∂ P ( y ^ i = 1 ∣ X ) ∂ Θ j ∂ ( X T Θ j ) .)
公式按原题重排。要证明的目标用缩写就是 ∇ Θ j E = ( p j − y j ) X \nabla_{\boldsymbol{\Theta}_j}E=(p_j-y_j)\mathbf{X} ∇ Θ j E = ( p j − y j ) X 。 注意原题 hint 展示了一条经过 p i p_i p i 的求导路径;因为损失里有对 i 的求和,完整求导时要把所有路径加起来。
第 1 步:从损失出发,把求和保留到求导式里。
E = − ∑ i = 1 K y i ln p i .
E=-\sum_{i=1}^{K}y_i\ln p_i.
E = − i = 1 ∑ K y i ln p i . 真实标签 y i y_i y i 是已知常数。对 ln p i \ln p_i ln p i 求导会带出 1 / p i 1/p_i 1/ p i ,再乘概率对参数的导数:
∇ Θ j E = − ∑ i = 1 K y i p i ∇ Θ j p i .
\nabla_{\boldsymbol{\Theta}_j}E
=-\sum_{i=1}^{K}\frac{y_i}{p_i}\nabla_{\boldsymbol{\Theta}_j}p_i.
∇ Θ j E = − i = 1 ∑ K p i y i ∇ Θ j p i . 这里不能只保留 i = j i=j i = j 一项,因为改变第 j 类分数也会改变其他类别的概率。
第 2 步:把 i=j 的一项和所有 i≠j 的项拆开。
∇ Θ j E = − y j p j ∇ Θ j p j − ∑ i ≠ j y i p i ∇ Θ j p i .
\nabla_{\boldsymbol{\Theta}_j}E
=-\frac{y_j}{p_j}\nabla_{\boldsymbol{\Theta}_j}p_j
-\sum_{i\ne j}\frac{y_i}{p_i}\nabla_{\boldsymbol{\Theta}_j}p_i.
∇ Θ j E = − p j y j ∇ Θ j p j − i = j ∑ p i y i ∇ Θ j p i . 这样拆的目的,是为了直接使用 (b) 的两种情况。
第 3 步:分别代入 (b) 的导数。
同类项代 p j ( 1 − p j ) X p_j(1-p_j)\mathbf{X} p j ( 1 − p j ) X ;异类项代 − p i p j X -p_ip_j\mathbf{X} − p i p j X :
∇ Θ j E = − y j p j p j ( 1 − p j ) X − ∑ i ≠ j y i p i ( − p i p j X ) .
\nabla_{\boldsymbol{\Theta}_j}E
=-\frac{y_j}{p_j}p_j(1-p_j)\mathbf{X}
-\sum_{i\ne j}\frac{y_i}{p_i}(-p_ip_j\mathbf{X}).
∇ Θ j E = − p j y j p j ( 1 − p j ) X − i = j ∑ p i y i ( − p i p j X ) . 第一项的 p j p_j p j 约掉;求和里的 p i p_i p i 约掉,两个负号变正号:
∇ Θ j E = − y j ( 1 − p j ) X + ∑ i ≠ j y i p j X .
\nabla_{\boldsymbol{\Theta}_j}E
=-y_j(1-p_j)\mathbf{X}+\sum_{i\ne j}y_ip_j\mathbf{X}.
∇ Θ j E = − y j ( 1 − p j ) X + i = j ∑ y i p j X . 第 4 步:把求和里不随 i 变化的量提出来。
X \mathbf{X} X 始终是同一个输入样本;p j p_j p j 的 j 固定,也不随 i 变化。因此:
∇ Θ j E = [ − y j ( 1 − p j ) + p j ∑ i ≠ j y i ] X .
\nabla_{\boldsymbol{\Theta}_j}E
=\left[-y_j(1-p_j)+p_j\sum_{i\ne j}y_i\right]\mathbf{X}.
∇ Θ j E = − y j ( 1 − p j ) + p j i = j ∑ y i X . 第 5 步:使用题目给的 one-hot 标签。
one-hot 标签只有一个 1,其他全是 0,所以 ∑ i y i = 1 \sum_i y_i=1 ∑ i y i = 1 。从全部类别中扣掉第 j 类,就得到:
∑ i ≠ j y i = 1 − y j .
\sum_{i\ne j}y_i=1-y_j.
i = j ∑ y i = 1 − y j . 代入上一式,并逐项展开:
∇ Θ j E = [ − y j ( 1 − p j ) + p j ( 1 − y j ) ] X = [ − y j + y j p j + p j − p j y j ] X = ( p j − y j ) X = X P ( y ^ j = 1 ∣ X ) − X y j .
\begin{aligned}
\nabla_{\boldsymbol{\Theta}_j}E
&=[-y_j(1-p_j)+p_j(1-y_j)]\mathbf{X}\\
&=[-y_j+y_jp_j+p_j-p_jy_j]\mathbf{X}\\
&=(p_j-y_j)\mathbf{X}\\
&=\mathbf{X} P(\hat y_j=1\mid\mathbf{X})-\mathbf{X}y_j.
\end{aligned}
∇ Θ j E = [ − y j ( 1 − p j ) + p j ( 1 − y j )] X = [ − y j + y j p j + p j − p j y j ] X = ( p j − y j ) X = X P ( y ^ j = 1 ∣ X ) − X y j . 中间的 y j p j y_jp_j y j p j 和 − p j y j -p_jy_j − p j y j 是同一个数的正负两项,互相抵消,证明完成。
第 6 步:用一组数检查类别和符号有没有写反。
补充自取例子继续用 p = ( 1 / 6 , 1 / 3 , 1 / 2 ) p=(1/6,1/3,1/2) p = ( 1/6 , 1/3 , 1/2 ) 、X = ( 2 , − 1 ) T \mathbf{X}=(2,-1)^T X = ( 2 , − 1 ) T ,现在规定真实类别是第 3 类,所以 y = ( 0 , 0 , 1 ) y=(0,0,1) y = ( 0 , 0 , 1 ) 。三个参数向量的梯度分别为:
∇ Θ 1 E = ( 1 / 6 − 0 ) ( 2 , − 1 ) T = ( 1 / 3 , − 1 / 6 ) T , ∇ Θ 2 E = ( 1 / 3 − 0 ) ( 2 , − 1 ) T = ( 2 / 3 , − 1 / 3 ) T , ∇ Θ 3 E = ( 1 / 2 − 1 ) ( 2 , − 1 ) T = ( − 1 , 1 / 2 ) T .
\begin{aligned}
\nabla_{\boldsymbol{\Theta}_1}E&=(1/6-0)(2,-1)^T=(1/3,-1/6)^T,\\
\nabla_{\boldsymbol{\Theta}_2}E&=(1/3-0)(2,-1)^T=(2/3,-1/3)^T,\\
\nabla_{\boldsymbol{\Theta}_3}E&=(1/2-1)(2,-1)^T=(-1,1/2)^T.
\end{aligned}
∇ Θ 1 E ∇ Θ 2 E ∇ Θ 3 E = ( 1/6 − 0 ) ( 2 , − 1 ) T = ( 1/3 , − 1/6 ) T , = ( 1/3 − 0 ) ( 2 , − 1 ) T = ( 2/3 , − 1/3 ) T , = ( 1/2 − 1 ) ( 2 , − 1 ) T = ( − 1 , 1/2 ) T . 也可只从真实类的损失检查第二个结果。因为真实是第 3 类,损失为 E = − ln p 3 E=-\ln p_3 E = − ln p 3 。由 (b),对第二类参数有 ∇ Θ 2 p 3 = − p 3 p 2 X \nabla_{\boldsymbol{\Theta}_2}p_3=-p_3p_2\mathbf{X} ∇ Θ 2 p 3 = − p 3 p 2 X ,因此:
∇ Θ 2 E = − 1 p 3 ( − p 3 p 2 X ) = p 2 X = ( 2 / 3 , − 1 / 3 ) T .
\nabla_{\boldsymbol{\Theta}_2}E
=-\frac{1}{p_3}(-p_3p_2\mathbf{X})
=p_2\mathbf{X}=(2/3,-1/3)^T.
∇ Θ 2 E = − p 3 1 ( − p 3 p 2 X ) = p 2 X = ( 2/3 , − 1/3 ) T . 它和总公式一致,说明异类路径和负号都保留正确。
**本问完成检查:**保留类别求和 → 分同类、异类 → 使用 (b) → 使用 one-hot 的和为 1 → 化简到 ( p j − y j ) X (p_j-y_j)\mathbf{X} ( p j − y j ) X 。只写最终公式,或者只对同类项求导,都缺少这道证明的关键过程。
补充核验:把公式正确、数值正确和任务完成分开
本段不改题目数据或既有答案,补充独立验算的路线。Q1的每个次数可以将已求参数代回设计矩阵,检查 X T ( X θ ^ − Y ) X^T(X\hat\theta-Y) X T ( X θ ^ − Y ) 是否在与数据尺度相称的数值容差内接近0。截距列对应残差和,其余列对应各幂次加权残差和。只检查训练RSS小,不足以说明已经解到该次数的最小值;只检查正规方程也不能替代原题要求的图与测试比较。
尤其四次幂列的尺度远大于常数列,直接比较各梯度分量的绝对大小可能误导。可检查相对残差,例如分母加入 ∥ X ∥ 2 ∥ X θ ^ − Y ∥ 2 \lVert X\rVert_2\lVert X\hat\theta-Y\rVert_2 ∥ X ∥ 2 ∥ X θ ^ − Y ∥ 2 及防零的小量;也应使用未舍入参数重新计算。这里不规定一个适用于所有尺度的固定阈值,显示用的小数截断会使本来正确的解不再严格满足方程。
Q2的正则项只对题目指定参数生效。把候选代入原始未中心化目标的各偏导,再与中心化后方程对照,比只在最后一行重复同样的代数更独立。Q3用旧参数先计算一份完整梯度,然后一次性更新;对比更新前后损失时重新算全部概率,不能沿用旧概率。损失变化是诊断信息,单步下降并不是梯度绝对正确的证明。
Q4的Softmax概率和始终为1,因此对任一分数或参数分量求导后,各类别概率导数相加应为0。这个关系来自恒等式求导,能发现漏掉其他类别分母贡献的错误。但通过该关系也不充分:全部误写成0同样满足它,还需逐项链式法则与维度核对。多个独立检查互相补充,才比“和参考结果看起来差不多”更可靠。
做完之后,按题号检查有没有漏项
跨小问概念复习(保留此前网页的解释)
前文按原题13个小问逐步作答;以下保留此前网页按概念串讲的材料,用于第二遍复习、数值稳定性理解和独立复算。两条路线使用相同2026数据,复算记录属于此前版本。
HW01 · 2026T1 · 逐题详细解析
这是包含完整结果与推导的解析版 。想先自己挑战,请先读 分级提示版 ,不要继续向下翻本页。两份笔记各有用途:提示版只扶你走下一步,本篇则把省略的计算与理由展开。
来源为 官方题目(本地课件) ,即2026–27 Term 1版本:Q1在PDF p.1–2,Q2在p.2,Q3在p.3,Q4在p.3–4。原有 完整参考答案(本地资料) 保留本地,本页也提供独立阅读所需的数据与计算。这里的参考解析不代表已生成或提交正式作业。
阅读顺序建议:每题先看“要解决什么”,拿纸重算一行,再看一般式。四题的联系是:Q1学会拟合,Q2控制参数大小,Q3将输出改成二类概率,Q4把类别数扩展到多个。所有作业数字均来自当前原题,2025年的数据与学习率不能搬来替换。
Q1:从训练数据得到三个模型
1. 先把“线性”理解准确
题目给十条已知输入与标签,要求我们找一条能描述它们的函数。先不要同时算三个模型:第一步只是规定每个模型允许长什么样。一次模型只能画直线,二次模型可以有弯曲,四次模型有更多可调的弯曲方式。
这里的“线性模型”是对未知参数线性 。例如二次模型 θ 0 + θ 1 x + θ 2 x 2 \theta_0+\theta_1x+\theta_2x^2 θ 0 + θ 1 x + θ 2 x 2 中,x 2 x^2 x 2 虽然是输入的平方,但拟合时输入已知,未知的每个系数仍只出现一次。它没有 θ 1 2 \theta_1^2 θ 1 2 或 θ 1 θ 2 \theta_1\theta_2 θ 1 θ 2 ,因此能用线性最小二乘。曲线弯不弯与能否用线性代数求参数是两回事。
本题输入如下,训练与测试按原题PDF p.1表格顺序保留。左右两半是两个数据集,同一行号不表示左右两个点必须配对训练。
为了统一记法,设多项式次数为 d d d ,定义第 i i i 行特征为 a i = ( 1 , x i , x i 2 , … , x i d ) a_i=(1,x_i,x_i^2,\ldots,x_i^d) a i = ( 1 , x i , x i 2 , … , x i d ) 。首项1负责截距:乘 θ 0 \theta_0 θ 0 时得到常数 θ 0 \theta_0 θ 0 。把十行叠起来成为设计矩阵 A A A ,系数按次数从低到高排成列向量 θ \theta θ ,预测向量就是 A θ A\theta A θ 。
拿二次模型的第一行慢算:输入7变成 ( 1 , 7 , 49 ) (1,7,49) ( 1 , 7 , 49 ) ;与 ( θ 0 , θ 1 , θ 2 ) T (\theta_0,\theta_1,\theta_2)^T ( θ 0 , θ 1 , θ 2 ) T 相乘,正好得到 θ 0 + 7 θ 1 + 49 θ 2 \theta_0+7\theta_1+49\theta_2 θ 0 + 7 θ 1 + 49 θ 2 。对应真实标签仍是0.9,不要也对标签平方。第二行输入1.6变成 ( 1 , 1.6 , 2.56 ) (1,1.6,2.56) ( 1 , 1.6 , 2.56 ) ,真实标签仍1.4。
你此刻只需弄清:每行是一个样本,每列是一种幂次特征,每个参数在所有样本之间共享。 不是每行学出一套新参数,也不是把测试标签加入训练矩阵。
2. 正规方程从哪里来
RSS 是 residual sum of squares,即残差平方和。对一组候选参数,先为每条样本算预测,再减真实标签,最后平方并相加:
y ^ i = ∑ j = 0 d θ j x i j , r i = y ^ i − y i , J ( θ ) = ∑ i = 1 10 r i 2 .
\hat y_i=\sum_{j=0}^{d}\theta_jx_i^j,\qquad
r_i=\hat y_i-y_i,\qquad
J(\theta)=\sum_{i=1}^{10}r_i^2.
y ^ i = j = 0 ∑ d θ j x i j , r i = y ^ i − y i , J ( θ ) = i = 1 ∑ 10 r i 2 . 这里约定 x i 0 = 1 x_i^0=1 x i 0 = 1 ;r i r_i r i 正负都可能,平方让高估与低估不互相抵消。J J J 输出一个非负标量,参数向量是它的输入。求参数就是让这个数尽量小。
先对一个参数 θ k \theta_k θ k 求导,不急着背矩阵结果。残差中的第 k k k 项是 θ k x i k \theta_kx_i^k θ k x i k ,因此 ∂ r i / ∂ θ k = x i k \partial r_i/\partial\theta_k=x_i^k ∂ r i / ∂ θ k = x i k 。平方求导给 2 r i 2r_i 2 r i ,再乘内部残差对参数的导数,最后对十条相加:
∂ J ∂ θ k = ∑ i = 1 10 2 r i ∂ r i ∂ θ k = 2 ∑ i = 1 10 r i x i k .
\frac{\partial J}{\partial\theta_k}
=\sum_{i=1}^{10}2r_i\frac{\partial r_i}{\partial\theta_k}
=2\sum_{i=1}^{10}r_ix_i^k.
∂ θ k ∂ J = i = 1 ∑ 10 2 r i ∂ θ k ∂ r i = 2 i = 1 ∑ 10 r i x i k . 当 k = 0 k=0 k = 0 ,这是两倍残差和;当 k = 1 k=1 k = 1 ,是两倍“残差乘输入”的和;当 k = 2 k=2 k = 2 ,换成“残差乘输入平方”的和。它们不是三种不同规则,只是设计矩阵的不同列。
把所有参数的偏导排列成列,就是 2 A T ( A θ − y ) 2A^T(A\theta-y) 2 A T ( A θ − y ) 。形状上,A T A^T A T 是 ( d + 1 ) × 10 (d+1)\times10 ( d + 1 ) × 10 ,残差是 10 × 1 10\times1 10 × 1 ,结果为 ( d + 1 ) × 1 (d+1)\times1 ( d + 1 ) × 1 ,与参数数目一致。
也可以从矩阵展开核对同一结论:
J ( θ ) = ( A θ − y ) T ( A θ − y ) = θ T A T A θ − θ T A T y − y T A θ + y T y = θ T A T A θ − 2 θ T A T y + y T y .
\begin{aligned}
J(\theta)&=(A\theta-y)^T(A\theta-y)\\
&=\theta^TA^TA\theta-\theta^TA^Ty-y^TA\theta+y^Ty\\
&=\theta^TA^TA\theta-2\theta^TA^Ty+y^Ty.
\end{aligned}
J ( θ ) = ( A θ − y ) T ( A θ − y ) = θ T A T A θ − θ T A T y − y T A θ + y T y = θ T A T A θ − 2 θ T A T y + y T y . 两个交叉项为什么能合并?它们都是标量,一个是另一个的转置,而标量转置不变。y T y y^Ty y T y 不含未知参数,对参数求导为0;A T A A^TA A T A 对称,二次项给两倍矩阵乘参数。因此
∇ J = 2 A T A θ − 2 A T y .
\nabla J=2A^TA\theta-2A^Ty.
∇ J = 2 A T A θ − 2 A T y . 令每个偏导为0,得到正规方程 :
A T A θ ^ = A T y .
A^TA\hat\theta=A^Ty.
A T A θ ^ = A T y . “正规方程”是一个方程组,不是说已经求出了逆。如果 A T A A^TA A T A 可逆,才可写 θ ^ = ( A T A ) − 1 A T y \hat\theta=(A^TA)^{-1}A^Ty θ ^ = ( A T A ) − 1 A T y 。本题十个训练输入互不相同;一个非零的至多四次多项式不能在十个不同点全为零,因此这三种设计矩阵均列满秩,正规矩阵可逆。实际计算用 lstsq 通常比显式求逆更稳定,数学目标没有改变。
一次模型还可不用矩阵软件复算:先由截距方程得到 θ ^ 0 = y ˉ − θ ^ 1 x ˉ \hat\theta_0=\bar y-\hat\theta_1\bar x θ ^ 0 = y ˉ − θ ^ 1 x ˉ ,代入斜率方程后得到
θ ^ 1 = ∑ i ( x i − x ˉ ) ( y i − y ˉ ) ∑ i ( x i − x ˉ ) 2 , θ ^ 0 = y ˉ − θ ^ 1 x ˉ .
\hat\theta_1=\frac{\sum_i(x_i-\bar x)(y_i-\bar y)}{\sum_i(x_i-\bar x)^2},\qquad
\hat\theta_0=\bar y-\hat\theta_1\bar x.
θ ^ 1 = ∑ i ( x i − x ˉ ) 2 ∑ i ( x i − x ˉ ) ( y i − y ˉ ) , θ ^ 0 = y ˉ − θ ^ 1 x ˉ . x ˉ \bar x x ˉ 是十个训练输入的平均,y ˉ \bar y y ˉ 是十个训练标签的平均;分母衡量输入围绕均值的分散程度。本题 x ˉ = 5.61 \bar x=5.61 x ˉ = 5.61 、y ˉ = 0.85 \bar y=0.85 y ˉ = 0.85 ,代入得 θ ^ 1 ≈ 0.1353957622 \hat\theta_1\approx0.1353957622 θ ^ 1 ≈ 0.1353957622 、θ ^ 0 ≈ 0.0904297740 \hat\theta_0\approx0.0904297740 θ ^ 0 ≈ 0.0904297740 。二次与四次只是增加设计矩阵列数,不需要发明另一套损失。
补充 · 正规方程是推导依据,不是唯一数值实现 (通识讲解;演示数据不属于原题)。
高次幂列可能数量级相差很大,或彼此近似相关。这会让参数对微小舍入误差敏感;显式形成 A T A A^TA A T A 再求逆还可能放大数值困难。因此纸面用正规方程解释最优条件,实际核验可直接使用最小二乘求解器,而不是要求每个程序必须真的计算逆矩阵。
检查重点有两层:一是用原始输入和尽量完整的系数代回预测,再算RSS;二是确认正规方程残差在与数据尺度相称的容差内。不要先把高次系数截成两位小数再判断它们不满足方程,幂次会放大舍入影响。两套显示精度不同的系数可能预测十分接近,所以应同时比较系数、预测与目标,而非只逐字符比较答案。
本题下文保留原数据、系数和逐点表;这一段解释怎样可靠地复查它们,不改变训练/测试划分,也不把数值容差当成可以忽略明显错误的理由。
3. 三个结果应该怎么看
训练点与三个拟合模型(本地素材,未公开)
上方图是本地配套素材;即使网页不提供图片,下面的模型与误差表也足以复核结论。画图时横轴应是按大小递增的连续输入,纵轴是模型预测;训练数据另外画成散点。不能把原表未排序的十行直接连线,当成拟合曲线。
一次模型为
y ^ = 0.09042977 + 0.13539576 x .
\hat y=0.09042977+0.13539576x.
y ^ = 0.09042977 + 0.13539576 x . 它只有截距与斜率,无法同时跟随中间较低、两侧较高的趋势。训练RSS为4.78161902,说明即便在用来拟合的这十点上,直线也有较大残差。
二次模型为
y ^ = 3.05892764 − 1.27106148 x + 0.13939016 x 2 .
\hat y=3.05892764-1.27106148x+0.13939016x^2.
y ^ = 3.05892764 − 1.27106148 x + 0.13939016 x 2 . 正的平方项允许形成谷底,训练RSS降到1.87651075。这个模型不是逐点穿过,而是让全体残差平方和最小;某些点仍会预测不好是正常的。
四次模型为
y ^ = − 12.17690410 + 16.44576557 x − 6.37774875 x 2 + 0.95465213 x 3 − 0.04847860 x 4 .
\hat y=-12.17690410+16.44576557x-6.37774875x^2
+0.95465213x^3-0.04847860x^4.
y ^ = − 12.17690410 + 16.44576557 x − 6.37774875 x 2 + 0.95465213 x 3 − 0.04847860 x 4 . 五个参数给更多自由度,训练RSS进一步降到0.77116732。但自由度多只说明能更好适应训练数据,并没有保证新输入预测更好。把两种误差一起看:
四次式中各项可能是很大的正数与负数,最后相互抵消得到较小的预测。因此系数只保留两位就代入,会放大舍入误差;上面的系数仅供展示,下面逐点表和RSS均用未舍入解计算。
4. 用逐点预测验证泛化判断
得到参数后把它们冻结,不再用测试标签调整。对测试输入构建相同幂次特征;例如二次模型测试第1行输入7.2,应使用 ( 1 , 7.2 , 51.84 ) (1,7.2,51.84) ( 1 , 7.2 , 51.84 ) ,与训练得到的同一组系数相乘。
RSS的逐点流程可以只用第一列示范一次:一次模型第1行预测约1.06527926,真实值0.6,残差约0.46527926,平方约0.21648479。第二行预测约0.23936511,真实1,残差约−0.76063489,平方约0.57856543。继续十行相加才得到总RSS;不能把预测直接相加,也不能先加正负残差再整体平方。
四次模型第2行尤其值得停下来观察:
( − 0.6039735054 − 1 ) 2 ≈ 2.57273100.
(-0.6039735054-1)^2\approx2.57273100.
( − 0.6039735054 − 1 ) 2 ≈ 2.57273100. 仅这一点就贡献很大误差。测试输入1.1还小于所有训练输入,是外推 ;模型在未被训练点包围的区域更容易出现不稳定弯曲。这个观察支持解释误差,而不是拿“多项式一定不能外推”代替本题数据证据。
按题目给定的三种比较,一次模型有欠拟合迹象,四次有过拟合迹象,二次相对最好。关键证据是训练误差从二次到四次继续下降,但测试误差反而上升。仅说“次数高所以过拟合”没有完成论证。实际开发通常用验证集选模型、独立测试集做最后评价;本题遵照题意使用给定test set比较,不将它误称为一般无偏的模型选择流程。
下面是一段独立复算代码,只在内存里计算,不读写原作答或核验文件。需要Python与NumPy;若还要画图,后半段另需Matplotlib。increasing=True明确列顺序是1、x、平方……,否则系数顺序会反过来。
import numpy as np
x = np.array([7 , 1.6 , 3.8 , 4.7 , 4 , 6.3 , 7.9 , 5.7 , 7.1 , 8 ])
y = np.array([.9 , 1.4 , .7 , -.3 , 0 , .6 , 1.7 , .1 , 2.1 , 1.3 ])
xt = np.array([7.2 , 1.1 , 3.6 , 4.8 , 4.3 , 6.6 , 7.8 , 5.6 , 7.3 , 8.2 ])
yt = np.array([.6 , 1 , .3 , -.4 , 0 , .2 , 1.8 , .6 , 1.7 , 1.3 ])
models = {}
for degree in (1 , 2 , 4 ):
A = np.vander(x, N=degree + 1 , increasing=True )
B = np.vander(xt, N=degree + 1 , increasing=True )
theta = np.linalg.lstsq(A, y, rcond=None )[0 ]
train_prediction = A @ theta
test_prediction = B @ theta
train_rss = np.sum ((train_prediction - y) ** 2 )
test_rss = np.sum ((test_prediction - yt) ** 2 )
models[degree] = theta
print (degree, theta, train_rss, test_rss)
print (test_prediction)
import matplotlib.pyplot as plt
xx = np.linspace(min (x.min (), xt.min ()), max (x.max (), xt.max ()), 300 )
plt.scatter(x, y, label="train" )
for degree, theta in models.items():
curve = np.vander(xx, N=degree + 1 , increasing=True ) @ theta
plt.plot(xx, curve, label=f"degree {degree} " )
plt.xlabel("x" )
plt.ylabel("prediction" )
plt.legend()
plt.show()
小自查:这题每个数据集都有十条,若把RSS除以10,模型排名会改变吗?把四次系数粗略舍入后重新算RSS,结果还能视作同一个数值解吗?
参考答案
除以同一个正数10得到MSE,排名不变,数值与名称要同时更换。提前舍入系数会改变实际预测函数,尤其高次项相互抵消时误差明显,所以不能拿粗舍入结果要求完全复现未舍入解的RSS。
Q2:为什么中心化能消掉截距
1. 截距与斜率扮演不同角色
Q2不是要求再代Q1的十条数据,而是对一般的 M M M 条、每条 p p p 个特征的数据推导。题面p.2明确 λ > 0 \lambda>0 λ > 0 ,正则项为 λ ∥ Θ ∥ 2 2 \lambda\lVert\Theta\rVert_2^2 λ ∥ Θ ∥ 2 2 :只惩罚斜率向量 Θ \Theta Θ ,不惩罚单独列出的截距 θ 0 \theta_0 θ 0 。这是后续结论的前提。
先用一个小例子理解截距(以下数字为补充自取,不是原题数据)。输入为1、3,标签为2、6;假设斜率暂时固定为1。不加截距时预测1、3,残差−1、−3。若把整体往上移2,预测变3、5,残差变1、−1;误差变得居中,残差和为0。这一步只是在给定斜率下找合适高度,还没说斜率1是整个问题最好的选择。
再建立原题的形状。这里 x i x_i x i 按行向量 表示第 i i i 条样本,与Q4的列向量约定不同,需看清转置。
于是第 i i i 条预测是 x i Θ + θ 0 x_i\Theta+\theta_0 x i Θ + θ 0 ,总目标是
J ( Θ , θ 0 ) = ∑ i = 1 M ( x i Θ + θ 0 − y i ) 2 + λ ∥ Θ ∥ 2 2 .
J(\Theta,\theta_0)=\sum_{i=1}^{M}(x_i\Theta+\theta_0-y_i)^2
+\lambda\lVert\Theta\rVert_2^2.
J ( Θ , θ 0 ) = i = 1 ∑ M ( x i Θ + θ 0 − y i ) 2 + λ ∥ Θ ∥ 2 2 . 先固定 Θ \Theta Θ ,只对高度 θ 0 \theta_0 θ 0 求导。每条残差对截距的导数都是1,正则项不含截距,故
∂ J ∂ θ 0 = 2 ∑ i = 1 M ( x i Θ + θ 0 − y i ) = 0.
\frac{\partial J}{\partial\theta_0}
=2\sum_{i=1}^{M}(x_i\Theta+\theta_0-y_i)=0.
∂ θ 0 ∂ J = 2 i = 1 ∑ M ( x i Θ + θ 0 − y i ) = 0. 把同类项收集,注意截距出现了 M M M 次:
( ∑ i x i ) Θ + M θ 0 − ∑ i y i = 0.
\left(\sum_i x_i\right)\Theta+M\theta_0-\sum_i y_i=0.
( i ∑ x i ) Θ + M θ 0 − i ∑ y i = 0. 除以正的样本数 M M M ,由均值定义得到 x ˉ Θ + θ 0 − y ˉ = 0 \bar x\Theta+\theta_0-\bar y=0 x ˉ Θ + θ 0 − y ˉ = 0 ,所以
θ ^ 0 = y ˉ − x ˉ Θ .
\hat\theta_0=\bar y-\bar x\Theta.
θ ^ 0 = y ˉ − x ˉ Θ. 因此预测均值等于真实均值,也即训练残差之和为0。小例子中 x ˉ = 2 , y ˉ = 4 , Θ = 1 \bar x=2,\bar y=4,\Theta=1 x ˉ = 2 , y ˉ = 4 , Θ = 1 ,恢复出截距2,正好对应前面的整体上移。但如果 Θ \Theta Θ 尚未优化,这仍只是固定斜率后的条件最优截距 。
2. 从平方分解看全局最小
上节让导数为0,还可以用“多出来的是一个平方”解释为什么该截距确实最好。先定义中心化残差
r c , i = ( x i − x ˉ ) Θ − ( y i − y ˉ ) ,
r_{c,i}=(x_i-\bar x)\Theta-(y_i-\bar y),
r c , i = ( x i − x ˉ ) Θ − ( y i − y ˉ ) , 再把全部样本共有的偏移定义为 a = θ 0 + x ˉ Θ − y ˉ a=\theta_0+\bar x\Theta-\bar y a = θ 0 + x ˉ Θ − y ˉ 。逐项展开就知道原残差等于它们相加:
r c , i + a = x i Θ − x ˉ Θ − y i + y ˉ + θ 0 + x ˉ Θ − y ˉ = x i Θ + θ 0 − y i .
\begin{aligned}
r_{c,i}+a
&=x_i\Theta-\bar x\Theta-y_i+\bar y
+\theta_0+\bar x\Theta-\bar y\\
&=x_i\Theta+\theta_0-y_i.
\end{aligned}
r c , i + a = x i Θ − x ˉ Θ − y i + y ˉ + θ 0 + x ˉ Θ − y ˉ = x i Θ + θ 0 − y i . 中间的均值项正负抵消;这不是改变原模型,而是换一种分组方式。同样,由 ∑ i ( x i − x ˉ ) = 0 \sum_i(x_i-\bar x)=0 ∑ i ( x i − x ˉ ) = 0 与 ∑ i ( y i − y ˉ ) = 0 \sum_i(y_i-\bar y)=0 ∑ i ( y i − y ˉ ) = 0 ,可得 ∑ i r c , i = 0 \sum_i r_{c,i}=0 ∑ i r c , i = 0 。
现在平方、求和,每一步单独看:
∑ i ( r c , i + a ) 2 = ∑ i ( r c , i 2 + 2 a r c , i + a 2 ) = ∑ i r c , i 2 + 2 a ∑ i r c , i + M a 2 = ∑ i r c , i 2 + M a 2 .
\begin{aligned}
\sum_i(r_{c,i}+a)^2
&=\sum_i(r_{c,i}^2+2ar_{c,i}+a^2)\\
&=\sum_i r_{c,i}^2+2a\sum_i r_{c,i}+Ma^2\\
&=\sum_i r_{c,i}^2+Ma^2.
\end{aligned}
i ∑ ( r c , i + a ) 2 = i ∑ ( r c , i 2 + 2 a r c , i + a 2 ) = i ∑ r c , i 2 + 2 a i ∑ r c , i + M a 2 = i ∑ r c , i 2 + M a 2 . 交叉项消失是因为中心化残差和为0;最后的 M a 2 Ma^2 M a 2 来自每条样本都有同一个 a 2 a^2 a 2 。正则项不依赖 a a a ,所以把它留在中心化目标 J c J_c J c 中:
J ( Θ , θ 0 ) = J c ( Θ ) + M ( θ 0 + x ˉ Θ − y ˉ ) 2 .
J(\Theta,\theta_0)=J_c(\Theta)+M(\theta_0+\bar x\Theta-\bar y)^2.
J ( Θ , θ 0 ) = J c ( Θ ) + M ( θ 0 + x ˉ Θ − y ˉ ) 2 . 对任意固定斜率,J c J_c J c 不随截距改变,额外平方项又总非负,只有 a = 0 a=0 a = 0 时取0。这直接证明前节截距是该斜率下的全局 最低高度,而不仅是一个驻点。
小例子中心化输入为−1、1,中心化标签为−2、2,斜率仍1,所以中心化残差为1、−1,平方和为2。如果截距偏离最佳值2达 a a a ,总RSS变成 2 + 2 a 2 2+2a^2 2 + 2 a 2 。例如截距0即 a = − 2 a=-2 a = − 2 ,RSS是10;截距2时RSS是2,数字和前节一致。
3. 中心化不等于标准化
中心化就是每列减掉自己的均值,不除标准差,因此不改变单位。X X X 若以厘米记长度,中心化后仍以厘米记“比平均长多少”;标准化再除标准差才是另一种变换。
矩阵写法为
X c = X − 1 x ˉ , y c = y − y ˉ 1.
X_c=X-\mathbf1\bar x,\qquad y_c=y-\bar y\mathbf1.
X c = X − 1 x ˉ , y c = y − y ˉ 1 . 1 x ˉ \mathbf1\bar x 1 x ˉ 是 ( M × 1 ) ( 1 × p ) = M × p (M\times1)(1\times p)=M\times p ( M × 1 ) ( 1 × p ) = M × p ,把每个特征均值复制到每一行,才能与 X X X 相减。y c y_c y c 仍是 M × 1 M\times1 M × 1 。代入最佳截距后:
X Θ + θ ^ 0 1 − y = X Θ + ( y ˉ − x ˉ Θ ) 1 − y = ( X − 1 x ˉ ) Θ − ( y − y ˉ 1 ) = X c Θ − y c .
\begin{aligned}
X\Theta+\hat\theta_0\mathbf1-y
&=X\Theta+(\bar y-\bar x\Theta)\mathbf1-y\\
&=(X-\mathbf1\bar x)\Theta-(y-\bar y\mathbf1)\\
&=X_c\Theta-y_c.
\end{aligned}
X Θ + θ ^ 0 1 − y = X Θ + ( y ˉ − x ˉ Θ ) 1 − y = ( X − 1 x ˉ ) Θ − ( y − y ˉ 1 ) = X c Θ − y c . 因此原题(b)的中心化目标就是
J c ( Θ ) = ∥ X c Θ − y c ∥ 2 2 + λ ∥ Θ ∥ 2 2 .
J_c(\Theta)=\lVert X_c\Theta-y_c\rVert_2^2
+\lambda\lVert\Theta\rVert_2^2.
J c ( Θ ) = ∥ X c Θ − y c ∥ 2 2 + λ ∥ Θ ∥ 2 2 . 接下来对斜率求导。数据拟合项仍按Q1“残差乘设计列”的规则给 2 X c T ( X c Θ − y c ) 2X_c^T(X_c\Theta-y_c) 2 X c T ( X c Θ − y c ) ;惩罚是 λ ∑ j Θ j 2 \lambda\sum_j\Theta_j^2 λ ∑ j Θ j 2 ,逐个参数求导给 2 λ Θ j 2\lambda\Theta_j 2 λ Θ j 。排列成向量:
∇ J c = 2 X c T X c Θ − 2 X c T y c + 2 λ Θ .
\nabla J_c=2X_c^TX_c\Theta-2X_c^Ty_c+2\lambda\Theta.
∇ J c = 2 X c T X c Θ − 2 X c T y c + 2 λ Θ. 除以2并令为0,把 λ Θ \lambda\Theta λ Θ 写成 λ I p Θ \lambda I_p\Theta λ I p Θ ,才能和另一矩阵项合并:
( X c T X c + λ I p ) Θ = X c T y c .
(X_c^TX_c+\lambda I_p)\Theta=X_c^Ty_c.
( X c T X c + λ I p ) Θ = X c T y c . I p I_p I p 是 p × p p\times p p × p 单位矩阵,右边是 p × 1 p\times1 p × 1 。在下一节证明可逆之后,答案为
Θ ^ = ( X c T X c + λ I p ) − 1 X c T y c , θ ^ 0 = y ˉ − x ˉ Θ ^ .
\hat\Theta=(X_c^TX_c+\lambda I_p)^{-1}X_c^Ty_c,
\qquad
\hat\theta_0=\bar y-\bar x\hat\Theta.
Θ ^ = ( X c T X c + λ I p ) − 1 X c T y c , θ ^ 0 = y ˉ − x ˉ Θ ^ . 顺序因此很明确:先减均值,再求斜率,最后加回截距。若只给出 Θ ^ \hat\Theta Θ ^ ,还没有完整恢复原坐标里的预测函数。
4. 为什么加上 λI 后一定能求逆
本题明确假设 λ > 0 \lambda>0 λ > 0 。若两列特征重复,数据可能无法分辨某些参数变化方向,X c T X c X_c^TX_c X c T X c 可能不可逆;正则项为每个非零参数方向增加代价。
取任意非零 p × 1 p\times1 p × 1 向量 v v v ,检查正规矩阵在该方向的二次型:
v T ( X c T X c + λ I p ) v = v T X c T X c v + λ v T v = ∥ X c v ∥ 2 2 + λ ∥ v ∥ 2 2 > 0.
\begin{aligned}
v^T(X_c^TX_c+\lambda I_p)v
&=v^TX_c^TX_cv+\lambda v^Tv\\
&=\lVert X_cv\rVert_2^2+\lambda\lVert v\rVert_2^2\\
&>0.
\end{aligned}
v T ( X c T X c + λ I p ) v = v T X c T X c v + λ v T v = ∥ X c v ∥ 2 2 + λ ∥ v ∥ 2 2 > 0. 第一项是平方和,至少为0;第二项因 v ≠ 0 v\ne0 v = 0 且 λ > 0 \lambda>0 λ > 0 严格为正。因此矩阵正定 ,没有非零的零空间向量,故可逆。目标Hessian为 2 ( X c T X c + λ I p ) 2(X_c^TX_c+\lambda I_p) 2 ( X c T X c + λ I p ) ,也正定,所以中心化斜率有唯一最优解,再通过均值关系得到唯一截距。
若 λ = 0 \lambda=0 λ = 0 ,第二项消失,要另查 X c X_c X c 是否列满秩,不能沿用“无条件可逆”。负的 λ \lambda λ 不在题目范围内,也不能用上述正定性证明。
小自查:如果把残差项改成MSE,但正则项仍用相同数值的 λ \lambda λ ,公式中还是 λ I p \lambda I_p λ I p 吗?
参考答案
不是。若目标为 M − 1 ∥ X c Θ − y c ∥ 2 + λ ∥ Θ ∥ 2 M^{-1}\lVert X_c\Theta-y_c\rVert^2+\lambda\lVert\Theta\rVert^2 M − 1 ∥ X c Θ − y c ∥ 2 + λ ∥ Θ ∥ 2 ,求导后乘 M / 2 M/2 M /2 ,得到 X c T X c + M λ I p X_c^TX_c+M\lambda I_p X c T X c + M λ I p 。这改变了数据拟合与惩罚的相对比例,不是只改显示单位。若把整个目标 同时除以M,最优解才保持不变。
同时检查:单位矩阵维数是特征数 p p p ,不是样本数 M M M ;截距没有混进罚项;证明条件是题面正的 λ \lambda λ ;中心化与标准化不能混称。
Q3:一步梯度下降究竟做了什么
1. 先区分分数、概率和类别
这题不再预测一个连续标签,而是预测0或1。模型先产生分数 ,再转换成概率 ,最后才决定类别 。如果把三件事都叫“输出”,求损失时很容易用错对象。
z = θ 0 + θ 1 x 1 + θ 2 x 2 , p = σ ( z ) = 1 1 + e − z .
z=\theta_0+\theta_1x_1+\theta_2x_2,\qquad
p=\sigma(z)=\frac{1}{1+e^{-z}}.
z = θ 0 + θ 1 x 1 + θ 2 x 2 , p = σ ( z ) = 1 + e − z 1 . z z z 是任意实数,p p p 是有限分数下严格介于0和1之间的正类概率;最后按 p ≥ 0.5 p\ge0.5 p ≥ 0.5 判1、否则判0。训练计算交叉熵时需要连续的 p p p ,不能先把它四舍五入变成类别。
本题PDF p.3的完整数据如下。表的前三列属于训练,后三列属于测试,训练时只用左半边。
2026题目给定初始参数 ( − 1 , 1.5 , 0.5 ) (-1,1.5,0.5) ( − 1 , 1.5 , 0.5 ) ,学习率0.1。先在一张纸上写下这四个数;不要用旧题的第三参数1.5或学习率0.3。
为方便同时处理截距,给每条输入补常数1:x ~ i = ( 1 , x i 1 , x i 2 ) T \tilde x_i=(1,x_{i1},x_{i2})^T x ~ i = ( 1 , x i 1 , x i 2 ) T ,是 3 × 1 3\times1 3 × 1 列;参数 θ = ( θ 0 , θ 1 , θ 2 ) T \theta=(\theta_0,\theta_1,\theta_2)^T θ = ( θ 0 , θ 1 , θ 2 ) T 也是 3 × 1 3\times1 3 × 1 ;点积 z i = x ~ i T θ z_i=\tilde x_i^T\theta z i = x ~ i T θ 是一个标量。所有六条数据共用这同一组参数。
拿第1行演算:
z 1 = − 1 + 1.5 ( 0.15 ) + 0.5 ( 0.35 ) = − 0.6 , p 1 = 1 1 + e 0.6 ≈ 0.3543436938.
\begin{aligned}
z_1&=-1+1.5(0.15)+0.5(0.35)=-0.6,\\
p_1&=\frac{1}{1+e^{0.6}}\approx0.3543436938.
\end{aligned}
z 1 p 1 = − 1 + 1.5 ( 0.15 ) + 0.5 ( 0.35 ) = − 0.6 , = 1 + e 0.6 1 ≈ 0.3543436938. 注意指数是 − z 1 = + 0.6 -z_1=+0.6 − z 1 = + 0.6 。真实标签0,所以正确类别概率是 1 − p 1 1-p_1 1 − p 1 ,该行损失为 − ln ( 1 − p 1 ) -\ln(1-p_1) − ln ( 1 − p 1 ) 。第4行的标签是1,就用 − ln p 4 -\ln p_4 − ln p 4 。这不是两个损失规则,只是由标签选择同一个式子的哪项保留。
对应(a),一般模型概率就是上面的sigmoid,初始模型为 σ ( − 1 + 1.5 x 1 + 0.5 x 2 ) \sigma(-1+1.5x_1+0.5x_2) σ ( − 1 + 1.5 x 1 + 0.5 x 2 ) 。全体训练的求和交叉熵写成
E ( θ ) = − ∑ i = 1 6 [ y i ln p i + ( 1 − y i ) ln ( 1 − p i ) ] .
E(\theta)=-\sum_{i=1}^{6}\left[y_i\ln p_i+(1-y_i)\ln(1-p_i)\right].
E ( θ ) = − i = 1 ∑ 6 [ y i ln p i + ( 1 − y i ) ln ( 1 − p i ) ] . 标签为1时第二项系数为0,标签为0时第一项系数为0。不要把真实为0的数据删掉,它们通过第二项参与训练。
2. 为什么梯度恰好是“预测减真实”
先对一条样本求导,再对六条相加,这样每个负号的来源都能看清。单样本损失为
ℓ = − y ln p − ( 1 − y ) ln ( 1 − p ) .
\ell=-y\ln p-(1-y)\ln(1-p).
ℓ = − y ln p − ( 1 − y ) ln ( 1 − p ) . 训练时特征与标签固定,参数变化依次影响分数、概率、损失。链式法则沿这个顺序串三个变化率:损失对概率、概率对分数、分数对参数。
第一段,对 p p p 求导:
∂ ℓ ∂ p = − y p + 1 − y 1 − p .
\frac{\partial\ell}{\partial p}=-\frac{y}{p}+\frac{1-y}{1-p}.
∂ p ∂ ℓ = − p y + 1 − p 1 − y . 第一项只是对数导数 1 / p 1/p 1/ p 乘常数 − y -y − y 。第二项前面原有负号,而 ln ( 1 − p ) \ln(1-p) ln ( 1 − p ) 求导再带一个−1,负负得正,所以不能把两项都写成负号。
第二段,对sigmoid求导。先把倒数写为负一次幂,再应用链式法则:
∂ p ∂ z = d d z ( 1 + e − z ) − 1 = − ( 1 + e − z ) − 2 ( − e − z ) = e − z ( 1 + e − z ) 2 = 1 1 + e − z e − z 1 + e − z = p ( 1 − p ) .
\begin{aligned}
\frac{\partial p}{\partial z}
&=\frac{d}{dz}(1+e^{-z})^{-1}\\
&=-(1+e^{-z})^{-2}(-e^{-z})\\
&=\frac{e^{-z}}{(1+e^{-z})^2}\\
&=\frac{1}{1+e^{-z}}\frac{e^{-z}}{1+e^{-z}}
=p(1-p).
\end{aligned}
∂ z ∂ p = d z d ( 1 + e − z ) − 1 = − ( 1 + e − z ) − 2 ( − e − z ) = ( 1 + e − z ) 2 e − z = 1 + e − z 1 1 + e − z e − z = p ( 1 − p ) . 最后一步用 1 − p = e − z / ( 1 + e − z ) 1-p=e^{-z}/(1+e^{-z}) 1 − p = e − z / ( 1 + e − z ) 。这不是凭空记一个导数,两个因子正好分别是正类概率与负类概率。
第三段,z = θ 0 + θ 1 x 1 + θ 2 x 2 z=\theta_0+\theta_1x_1+\theta_2x_2 z = θ 0 + θ 1 x 1 + θ 2 x 2 对三个参数的导数依次为1、x 1 x_1 x 1 、x 2 x_2 x 2 ,所以 ∇ θ z = ( 1 , x 1 , x 2 ) T \nabla_\theta z=(1,x_1,x_2)^T ∇ θ z = ( 1 , x 1 , x 2 ) T 。
前两段先合并:
∂ ℓ ∂ z = ( − y p + 1 − y 1 − p ) p ( 1 − p ) = − y ( 1 − p ) + ( 1 − y ) p = − y + y p + p − y p = p − y .
\begin{aligned}
\frac{\partial\ell}{\partial z}
&=\left(-\frac{y}{p}+\frac{1-y}{1-p}\right)p(1-p)\\
&=-y(1-p)+(1-y)p\\
&=-y+yp+p-yp\\
&=p-y.
\end{aligned}
∂ z ∂ ℓ = ( − p y + 1 − p 1 − y ) p ( 1 − p ) = − y ( 1 − p ) + ( 1 − y ) p = − y + y p + p − y p = p − y . 接上第三段:
∇ θ ℓ = ( p − y ) ( 1 , x 1 , x 2 ) T .
\nabla_\theta\ell=(p-y)(1,x_1,x_2)^T.
∇ θ ℓ = ( p − y ) ( 1 , x 1 , x 2 ) T . 这里 p − y p-y p − y 是标量,但梯度是三个数的列向量。预测减真实只是到分数的梯度,求参数梯度还必须乘各自的输入特征。 sigmoid导数已在化简过程中使用,最终式外再乘一遍 p ( 1 − p ) p(1-p) p ( 1 − p ) 会重复计算。
直觉上,第1行标签0而概率约0.3543,残差为正;负梯度会试图降低其分数。第4行标签1但概率小于1,残差为负;负梯度会试图提高其分数。全批量时这些贡献相加,模型要同时兼顾六条,不是逐行独立选参数。
3. 逐行累加三个梯度
先冻结题目给的旧参数,为每行算分数、概率、残差。不要算到第2行时已经修改了第1行用过的参数。
这也保留了原先的六行残差向量,顺序不可重排后却仍拿原特征逐项相乘:
( 0.3543436938 , 0.4194576952 , 0.4875026035 , − 0.5374298453 , − 0.4687906266 , − 0.4255574832 ) .
(0.3543436938,0.4194576952,0.4875026035,
-0.5374298453,-0.4687906266,-0.4255574832).
( 0.3543436938 , 0.4194576952 , 0.4875026035 , − 0.5374298453 , − 0.4687906266 , − 0.4255574832 ) . 每条对截距的贡献是残差乘1,对第一权重的贡献是残差乘 x 1 x_1 x 1 ,对第二权重的贡献是残差乘 x 2 x_2 x 2 。把“乘完再加”的过程列开:
因此截距梯度 g 0 = − 0.1704739627 g_0=-0.1704739627 g 0 = − 0.1704739627 。第一权重原始展开如下,能用来核对表中每个乘法:
g 1 = 0.15 ( 0.3543436938 ) + 0.30 ( 0.4194576952 ) + 0.55 ( 0.4875026035 ) + 0.30 ( − 0.5374298453 ) + 0.55 ( − 0.4687906266 ) + 0.70 ( − 0.4255574832 ) = − 0.2698387419.
\begin{aligned}
g_1={}&0.15(0.3543436938)+0.30(0.4194576952)+0.55(0.4875026035)\\
&+0.30(-0.5374298453)+0.55(-0.4687906266)+0.70(-0.4255574832)\\
={}&-0.2698387419.
\end{aligned}
g 1 = = 0.15 ( 0.3543436938 ) + 0.30 ( 0.4194576952 ) + 0.55 ( 0.4875026035 ) + 0.30 ( − 0.5374298453 ) + 0.55 ( − 0.4687906266 ) + 0.70 ( − 0.4255574832 ) − 0.2698387419. 第二权重同理:
g 2 = 0.35 ( 0.3543436938 ) + 0.45 ( 0.4194576952 ) + 0.25 ( 0.4875026035 ) + 0.80 ( − 0.5374298453 ) + 0.60 ( − 0.4687906266 ) + 0.50 ( − 0.4255574832 ) = − 0.4893450873.
\begin{aligned}
g_2={}&0.35(0.3543436938)+0.45(0.4194576952)+0.25(0.4875026035)\\
&+0.80(-0.5374298453)+0.60(-0.4687906266)+0.50(-0.4255574832)\\
={}&-0.4893450873.
\end{aligned}
g 2 = = 0.35 ( 0.3543436938 ) + 0.45 ( 0.4194576952 ) + 0.25 ( 0.4875026035 ) + 0.80 ( − 0.5374298453 ) + 0.60 ( − 0.4687906266 ) + 0.50 ( − 0.4255574832 ) − 0.4893450873. 三个负梯度意味着此次更新会让三个参数都增大。截距仍是负数,但从−1变为约−0.983,也是“增大”,不要将负数和减小混淆。
θ 0 ′ = − 1 − 0.1 g 0 = − 0.9829526037 , θ 1 ′ = 1.5 − 0.1 g 1 = 1.5269838742 , θ 2 ′ = 0.5 − 0.1 g 2 = 0.5489345087.
\begin{aligned}
\theta_0'&=-1-0.1g_0=-0.9829526037,\\
\theta_1'&=1.5-0.1g_1=1.5269838742,\\
\theta_2'&=0.5-0.1g_2=0.5489345087.
\end{aligned}
θ 0 ′ θ 1 ′ θ 2 ′ = − 1 − 0.1 g 0 = − 0.9829526037 , = 1.5 − 0.1 g 1 = 1.5269838742 , = 0.5 − 0.1 g 2 = 0.5489345087. 更新后的完整概率模型为
P ( y ^ = 1 ∣ x 1 , x 2 ) = σ ( − 0.9829526037 + 1.5269838742 x 1 + 0.5489345087 x 2 ) .
P(\hat y=1\mid x_1,x_2)
=\sigma(-0.9829526037+1.5269838742x_1+0.5489345087x_2).
P ( y ^ = 1 ∣ x 1 , x 2 ) = σ ( − 0.9829526037 + 1.5269838742 x 1 + 0.5489345087 x 2 ) . 这里的“一次iteration”按课程求和交叉熵的全批量更新解释:六行形成一份 梯度,再一起改三个参数。先改截距再拿新截距计算另两个梯度,是混用两套模型;每读一条数据就更新一次则是另一种更新方式,都不是上面的同一次向量更新。
复算当前求和训练损失,旧值约3.6076515301,新值约3.5756262189,确实下降。这是对本次数值与符号的检查,不表示任意学习率都会下降,也不表示测试集一定改善。
4. sum 与 mean 为什么会改变数值
课程L03把交叉熵写成六条之和,因此主结果也采用 E = ∑ i ℓ i E=\sum_i\ell_i E = ∑ i ℓ i 。一些程序库默认取平均,即 E m e a n = E / 6 E_{\mathrm{mean}}=E/6 E mean = E /6 。求导是线性的,所以平均损失的每个梯度也除6。
若学习率仍为0.1,平均损失的一步为
( − 0.9971587673 , 1.5044973124 , 0.5081557515 ) .
(-0.9971587673,1.5044973124,0.5081557515).
( − 0.9971587673 , 1.5044973124 , 0.5081557515 ) . 这组参数比主答案移动得更少。两个目标只是乘一个正数,最低点位置相同,却不能推出有限一步的更新相同 。更新还依赖梯度大小和学习率。
要抵消这六分之一,把平均损失的学习率设为0.6:0.6 ( g / 6 ) = 0.1 g 0.6(g/6)=0.1g 0.6 ( g /6 ) = 0.1 g ,才能复现求和损失0.1的同一步。说明你采用哪种损失定义,是让后面的参数和概率可核对的必要条件,不是写作格式的装饰。
5. 如何把概率变成评价指标
现在固定新参数,把六条测试输入依次代入。测试标签只用于最后比较,不再参与参数更新。第1行的分数慢算为
z = − 0.9829526037 + 1.5269838742 ( 0.28 ) + 0.5489345087 ( 0.82 ) = − 0.1052708218.
\begin{aligned}
z&=-0.9829526037+1.5269838742(0.28)+0.5489345087(0.82)\\
&=-0.1052708218.
\end{aligned}
z = − 0.9829526037 + 1.5269838742 ( 0.28 ) + 0.5489345087 ( 0.82 ) = − 0.1052708218. sigmoid给 p = 0.4737065719 < 0.5 p=0.4737065719<0.5 p = 0.4737065719 < 0.5 ,预测0,真实标签1,所以这一行是漏报FN :本来有正类,模型却没找到。
本文直接列完整测试结果,不必跳到本地参考答案才能继续读。
预测依次为 ( 0 , 1 , 1 , 1 , 0 , 0 ) (0,1,1,1,0,0) ( 0 , 1 , 1 , 1 , 0 , 0 ) ,真实标签为 ( 1 , 1 , 1 , 1 , 0 , 0 ) (1,1,1,1,0,0) ( 1 , 1 , 1 , 1 , 0 , 0 ) 。正类是1,先用真实/预测两个条件给每条归格,再数格子:
四格相加为6,与样本数一致。接着,每个指标问一个不同问题:
Accuracy问“全部六条里正确几条”:( T P + T N ) / 6 = 5 / 6 ≈ 83.33 % (TP+TN)/6=5/6\approx83.33\% ( TP + TN ) /6 = 5/6 ≈ 83.33% 。
Precision问“模型报出的三个正类里,真正正类几条”:T P / ( T P + F P ) = 3 / 3 = 1 TP/(TP+FP)=3/3=1 TP / ( TP + FP ) = 3/3 = 1 。
Recall问“真实存在的四个正类里,找到几条”:T P / ( T P + F N ) = 3 / 4 = 0.75 TP/(TP+FN)=3/4=0.75 TP / ( TP + FN ) = 3/4 = 0.75 。
因此precision是100%,仍有一个漏掉的正类。它只检查报出来的正类有没有误报,没有衡量漏掉了多少;recall正好补上这一面。不是任何一个指标等于100%就说明模型完美。
小自查:假设你错把第1行叫FP,precision与recall会发生什么问题?
参考答案
第1行真实1、预测0,只能是FN。误记成FP会把两个分母换错:本题实际报正3条、真实正4条,必须对应precision分母3和recall分母4。先数这两个集合,比机械记英文缩写更可靠。
最后核对:用的是更新后的模型,正类编码1,指数为 − z -z − z ,学习率是2026的0.1;这些条件都比最后显示几位小数更重要。
Q4:从二分类推广到多分类
1. Softmax 的分母把所有类别连在一起
二分类时,一个正类概率决定另一个概率;多分类时需要同时给 K K K 个互斥类别分配概率,并让总和为1。它不是让每一类各自独立跑一个sigmoid,否则多个输出的总和未必为1。
先用三类做补充自取示例 。令三个分数为 z = ( 0 , ln 2 , ln 3 ) T z=(0,\ln2,\ln3)^T z = ( 0 , ln 2 , ln 3 ) T ,取指数后是 ( 1 , 2 , 3 ) T (1,2,3)^T ( 1 , 2 , 3 ) T ;合计6,分别除以6得到
p = ( 1 / 6 , 2 / 6 , 3 / 6 ) T = ( 1 / 6 , 1 / 3 , 1 / 2 ) T .
p=(1/6,2/6,3/6)^T=(1/6,1/3,1/2)^T.
p = ( 1/6 , 2/6 , 3/6 ) T = ( 1/6 , 1/3 , 1/2 ) T . 三个概率总和1,第3类最有可能。若只把第2类分数增加 ln 2 \ln2 ln 2 ,它的指数从2变4,另外两类指数不变;新总和变8,所以新概率为 ( 1 / 8 , 4 / 8 , 3 / 8 ) (1/8,4/8,3/8) ( 1/8 , 4/8 , 3/8 ) 。第1类和第3类的分数没改,概率却都变小了:共同分母让类别彼此竞争 。
现在回到原题符号。输入 X ∈ R n X\in\mathbb R^n X ∈ R n 是一个样本的 n × 1 n\times1 n × 1 特征列向量;类别 i i i 有自己的参数列 Θ i ∈ R n \Theta_i\in\mathbb R^n Θ i ∈ R n ;分数 z i = X T Θ i z_i=X^T\Theta_i z i = X T Θ i 是标量。共有 K K K 个参数列,不是 K K K 条训练样本。令
S = ∑ k = 1 K e z k , p i = e z i S .
S=\sum_{k=1}^{K}e^{z_k},\qquad p_i=\frac{e^{z_i}}{S}.
S = k = 1 ∑ K e z k , p i = S e z i . 指数保证各项为正,除以全部指数之和保证 ∑ i p i = 1 \sum_i p_i=1 ∑ i p i = 1 。p p p 作为整体是 K × 1 K\times1 K × 1 概率列,和输入的 n n n 维不是同一回事。
本题标签是one-hot:正确类别位置为1,其余为0。例如原题五类中真实第3类,标签为 ( 0 , 0 , 1 , 0 , 0 ) T (0,0,1,0,0)^T ( 0 , 0 , 1 , 0 , 0 ) T 。这个向量不是概率预测,而是已知答案的编码,后面会用到其分量之和为1。
2. Q4(a):为什么要分 j=i 与 j≠i
先说清求导对象:i i i 表示“观察哪一个输出概率”,j j j 表示“改变哪一个类别分数”。因为每个概率的分母都含每个分数,改变 z j z_j z j 一定会影响分母;只有当 j = i j=i j = i 时,还同时影响分子。
对自己的分数,即 j = i j=i j = i ,商法则为“分母乘分子导数,减分子乘分母导数,再除分母平方”。这里分子 e z i e^{z_i} e z i 的导数是 e z i e^{z_i} e z i ,分母的导数也只是求和中的第 i i i 项 e z i e^{z_i} e z i ,其余项对 z i z_i z i 都是常数:
∂ p i ∂ z i = S e z i − e z i e z i S 2 = e z i S − e z i e z i S 2 = p i − p i 2 = p i ( 1 − p i ) .
\begin{aligned}
\frac{\partial p_i}{\partial z_i}
&=\frac{S e^{z_i}-e^{z_i}e^{z_i}}{S^2}\\
&=\frac{e^{z_i}}{S}-\frac{e^{z_i}e^{z_i}}{S^2}\\
&=p_i-p_i^2=p_i(1-p_i).
\end{aligned}
∂ z i ∂ p i = S 2 S e z i − e z i e z i = S e z i − S 2 e z i e z i = p i − p i 2 = p i ( 1 − p i ) . 当 j ≠ i j\ne i j = i ,分子导数为0,分母导数是 e z j e^{z_j} e z j ,所以
∂ p i ∂ z j = S ⋅ 0 − e z i e z j S 2 = − e z i S e z j S = − p i p j .
\begin{aligned}
\frac{\partial p_i}{\partial z_j}
&=\frac{S\cdot0-e^{z_i}e^{z_j}}{S^2}\\
&=-\frac{e^{z_i}}{S}\frac{e^{z_j}}{S}\\
&=-p_ip_j.
\end{aligned}
∂ z j ∂ p i = S 2 S ⋅ 0 − e z i e z j = − S e z i S e z j = − p i p j . 也可以把分母写成负一次幂,保留原来的另一条推导路线:
e z i ∂ S − 1 ∂ z j = − e z i S − 2 e z j = − p i p j ( j ≠ i ) .
e^{z_i}\frac{\partial S^{-1}}{\partial z_j}
=-e^{z_i}S^{-2}e^{z_j}=-p_ip_j\quad(j\ne i).
e z i ∂ z j ∂ S − 1 = − e z i S − 2 e z j = − p i p j ( j = i ) . 负号来自倒数求导。它与上一节竞争直觉一致:提高自己的分数,自己概率增加;提高竞争者分数,自己概率减少。
定义 Kronecker delta δ i j \delta_{ij} δ ij :同下标为1,不同为0。这只是一个方便合并两种情况的记号,不是这里的梯度本身。两式合成
∂ p i ∂ z j = p i ( δ i j − p j ) .
\frac{\partial p_i}{\partial z_j}=p_i(\delta_{ij}-p_j).
∂ z j ∂ p i = p i ( δ ij − p j ) . 把所有 i , j i,j i , j 排起来得到Jacobian,行对应被观察的概率,列对应改变的分数,形状为 K × K K\times K K × K :
J = diag ( p ) − p p T .
J=\operatorname{diag}(p)-pp^T.
J = diag ( p ) − p p T . diag ( p ) \operatorname{diag}(p) diag ( p ) 将各概率放在对角线上;p p T pp^T p p T 是外积,第 i , j i,j i , j 格为 p i p j p_ip_j p i p j 。因此对角格为 p i − p i 2 p_i-p_i^2 p i − p i 2 ,非对角格为 − p i p j -p_ip_j − p i p j ,与上面一致。
用三类补充例 p = ( 1 / 6 , 1 / 3 , 1 / 2 ) T p=(1/6,1/3,1/2)^T p = ( 1/6 , 1/3 , 1/2 ) T ,改变第2类分数,对三种概率的导数分别是 − 1 / 18 , 2 / 9 , − 1 / 6 -1/18,2/9,-1/6 − 1/18 , 2/9 , − 1/6 。相加为0,说明第2类得到的概率增加,被另外两类减少的总量抵消。这是局部变化率的自检,不是说任意大幅改分数都能直接用导数作精确概率增量。
3. Q4(b):标量导数变成向量梯度
(a)得到的是“一个概率对一个标量分数”的导数;(b)要对第 j j j 类整个权重列求导,答案应是一列 n n n 个数。先展开分数:
z j = X T Θ j = ∑ r = 1 n X r Θ j r .
z_j=X^T\Theta_j=\sum_{r=1}^{n}X_r\Theta_{jr}.
z j = X T Θ j = r = 1 ∑ n X r Θ j r . Θ j r \Theta_{jr} Θ j r 表示第 j j j 类参数中的第 r r r 个特征权重。数据 X r X_r X r 固定,对该参数分量求导得到 X r X_r X r ;把全部分量排成列,便是 ∇ Θ j z j = X \nabla_{\Theta_j}z_j=X ∇ Θ j z j = X 。
不同类别参数列互相独立,改变 Θ j \Theta_j Θ j 直接改变的分数只有 z j z_j z j ,所以再接上这一段链式法则:
∇ Θ j p i = ∂ p i ∂ z j ∇ Θ j z j = p i ( δ i j − p j ) X .
\begin{aligned}
\nabla_{\Theta_j}p_i
&=\frac{\partial p_i}{\partial z_j}\nabla_{\Theta_j}z_j\\
&=p_i(\delta_{ij}-p_j)X.
\end{aligned}
∇ Θ j p i = ∂ z j ∂ p i ∇ Θ j z j = p i ( δ ij − p j ) X . 前面是一个标量,后面是 n × 1 n\times1 n × 1 列,结果与待求导的 Θ j \Theta_j Θ j 形状相同。若最后只剩 − p i p j -p_ip_j − p i p j ,说明你停在(a),没有把分数怎样依赖参数这段接上。
补充自取形状验算 :输入取 X = ( 2 , − 1 ) T X=(2,-1)^T X = ( 2 , − 1 ) T ,仍用上节三类概率。第1概率对第2类权重的梯度为 ( − 1 / 18 ) X = ( − 1 / 9 , 1 / 18 ) T (-1/18)X=(-1/9,1/18)^T ( − 1/18 ) X = ( − 1/9 , 1/18 ) T 。两个分量符号不同不是矛盾:增加第一个权重会提高该类分数,而增加第二个权重因输入−1会降低分数,故对竞争概率的影响相反。
4. Q4(c):不能漏掉其他类别的链式法则项
损失是一个标量:
E = − ∑ i = 1 K y i ln p i .
E=-\sum_{i=1}^{K}y_i\ln p_i.
E = − i = 1 ∑ K y i ln p i . 每一项是“真实标签权重乘该类别概率的负对数”。one-hot最终只保留真实类的一项,但求导时不能误认为只有 p j p_j p j 才受 Θ j \Theta_j Θ j 影响;所有 p i p_i p i 都通过共同分母依赖 Θ j \Theta_j Θ j 。
先对每一项使用链式法则,再加起来:
∇ Θ j E = − ∑ i = 1 K y i p i ∇ Θ j p i = − ∑ i = 1 K y i p i p i ( δ i j − p j ) X = − ∑ i = 1 K y i ( δ i j − p j ) X .
\begin{aligned}
\nabla_{\Theta_j}E
&=-\sum_{i=1}^{K}\frac{y_i}{p_i}\nabla_{\Theta_j}p_i\\
&=-\sum_{i=1}^{K}\frac{y_i}{p_i}\,p_i(\delta_{ij}-p_j)X\\
&=-\sum_{i=1}^{K}y_i(\delta_{ij}-p_j)X.
\end{aligned}
∇ Θ j E = − i = 1 ∑ K p i y i ∇ Θ j p i = − i = 1 ∑ K p i y i p i ( δ ij − p j ) X = − i = 1 ∑ K y i ( δ ij − p j ) X . 第一行用 d ln p i / d p i = 1 / p i d\ln p_i/dp_i=1/p_i d ln p i / d p i = 1/ p i ,标签是固定常数;第二行代入(b);第三行约去 p i p_i p i ,softmax有限分数下概率为正,因此这一步有依据。
接着拆成两项。X X X 与 p j p_j p j 对求和索引 i i i 不变,可提到求和号外:
− X ∑ i y i δ i j + X p j ∑ i y i .
-X\sum_i y_i\delta_{ij}+Xp_j\sum_i y_i.
− X i ∑ y i δ ij + X p j i ∑ y i . 第一个求和中的delta只留下 i = j i=j i = j ,所以为 y j y_j y j ;第二个求和是全部one-hot标签之和,等于1。因此
∇ Θ j E = − X y j + X p j = X ( p j − y j ) .
\nabla_{\Theta_j}E=-Xy_j+Xp_j=X(p_j-y_j).
∇ Θ j E = − X y j + X p j = X ( p j − y j ) . 这就是题目要证的式子。题面hint省略了完整求和符号,实际推导须恢复,不能只对 i = j i=j i = j 那一项求导就说已经处理总损失。
用三类小例作检查:若真实为第3类,则第2类标签 y 2 = 0 y_2=0 y 2 = 0 。即使损失中 y 2 ln p 2 y_2\ln p_2 y 2 ln p 2 系数为0,梯度对 Θ 2 \Theta_2 Θ 2 仍是 X p 2 = X / 3 Xp_2=X/3 X p 2 = X /3 ,并不为0,因为提高第2类分数会挤压真正类别的概率。这个例子能直接发现“只看第j项”的漏项错误。
5. 换一种写法再次验证
将真实类别记为 c c c 。one-hot让损失剩下 E = − ln p c E=-\ln p_c E = − ln p c ,代入softmax:
E = − ln ( e z c ∑ k e z k ) = − ln e z c + ln ( ∑ k e z k ) = − z c + ln ( ∑ k e z k ) .
\begin{aligned}
E&=-\ln\left(\frac{e^{z_c}}{\sum_ke^{z_k}}\right)\\
&=-\ln e^{z_c}+\ln\left(\sum_ke^{z_k}\right)\\
&=-z_c+\ln\left(\sum_ke^{z_k}\right).
\end{aligned}
E = − ln ( ∑ k e z k e z c ) = − ln e z c + ln ( k ∑ e z k ) = − z c + ln ( k ∑ e z k ) . 第二行使用商的对数等于对数之差,并处理了外面的负号;第三行用 ln e z c = z c \ln e^{z_c}=z_c ln e z c = z c 。现在对分数 z j z_j z j 求导:
若 j = c j=c j = c ,第一项导数是−1;否则为0,统一写成 − δ c j = − y j -\delta_{cj}=-y_j − δ c j = − y j 。
第二项先对外层对数求导为 1 / S 1/S 1/ S ,再乘内部求和对 z j z_j z j 的导数 e z j e^{z_j} e z j ,结果是 p j p_j p j 。
所以 ∂ E / ∂ z j = p j − y j \partial E/\partial z_j=p_j-y_j ∂ E / ∂ z j = p j − y j ,再乘 ∇ Θ j z j = X \nabla_{\Theta_j}z_j=X ∇ Θ j z j = X ,仍得 X ( p j − y j ) X(p_j-y_j) X ( p j − y j ) 。两条推导路线一条追踪所有概率,一条直接展开真实类负对数,结果一致,但都保留了共同分母的影响。
真实类的 p c − 1 < 0 p_c-1<0 p c − 1 < 0 ,负梯度更新会沿 X X X 方向增大该类参数;其他类 p j > 0 p_j>0 p j > 0 ,则沿反方向更新。在单样本、独立各类参数的情形,点积还会让真实类分数上升、其他类分数下降(输入为零时不动)。批量训练还要加上其他样本贡献,不能保证每条样本同时变好。
这与Q3的“概率残差乘输入”很像,但不要混淆模型:Q3是二类sigmoid,这题是共同归一化的softmax;简洁梯度来自它们分别与交叉熵的配对。
小自查:固定第 j j j 个分数,将所有概率对它的导数相加,为什么应为0?这与把所有类别参数梯度加起来是否为0有何关系?
参考答案
因为 ∑ i p i = 1 \sum_i p_i=1 ∑ i p i = 1 是恒等式,对任何分数求导都为0;公式也给 ∑ i p i ( δ i j − p j ) = p j − p j ∑ i p i = 0 \sum_i p_i(\delta_{ij}-p_j)=p_j-p_j\sum_i p_i=0 ∑ i p i ( δ ij − p j ) = p j − p j ∑ i p i = 0 。对本题单样本交叉熵,全部类别梯度之和为 X ∑ j ( p j − y j ) = X ( 1 − 1 ) = 0 X\sum_j(p_j-y_j)=X(1-1)=0 X ∑ j ( p j − y j ) = X ( 1 − 1 ) = 0 。前者对输出概率求和,后者对类别参数梯度求和,对象不同,但都依赖正确的归一化。
最后核对索引:i i i 是当前概率类别,j j j 是正在求导的类别参数,k k k 是分母求和的哑下标,r r r 是特征分量。输入维数为 n n n ,类别数为 K K K ,本题此处只处理一个样本,不能额外乘样本数。
复习路线与核验
Q1、Q2对应 L02 最小二乘 和 L02 收缩方法 ;若不懂可逆条件,再读 L02 矩阵与投影 的相关段落。Q3先回 L03 逻辑回归模型 辨认分数与概率,再看 L03 交叉熵与梯度下降 。这些课程笔记的历史作业附录可能使用2025数据,本题只使用当前2026原表。
此前版本的数据逐项对照当前原题PDF p.1与p.3表格;Q2的正则条件对照p.2;Q4的两种导数与one-hot设定对照p.3–4。原题并未说明x、y的现实物理单位,本篇没有擅自补出单位或应用背景。三类softmax和两样本中心化例明确为教学补充。
此前发布版本的独立数值复算记录:Q1三个最小二乘解及逐点测试预测与本文表格一致;Q3解析梯度的中心有限差分最大误差约 1.9 × 10 − 11 1.9\times10^{-11} 1.9 × 1 0 − 11 (步长 10 − 5 10^{-5} 1 0 − 5 ),更新将求和训练损失从约3.6076515301降为3.5756262189;三类补充例的softmax Jacobian差分最大误差约 4.1 × 10 − 12 4.1\times10^{-12} 4.1 × 1 0 − 12 。有限差分是数值自检,不代替上文的代数证明。
既有 核验记录(本地资料) 与 核验脚本(本地资料) 是本地历史配套资料,本次没有运行或改写它们,也没有修改题目PDF、参考答案和正式作答。网页无法打开本地材料时,正文完整数据、公式与Q1独立脚本仍可用于复算。
来源与证据
题面、数据、分值与小问顺序:HW01-2026T1-题目.pdf(本地课件) ,Q1 p.1–2、Q2 p.2、Q3 p.2–3、Q4 p.3–4;均为 PDF 页号。
Q1、Q3 图片数据表已逐格视觉核对;Q1(c) 提示矩阵的末行幂次已与 p.2 渲染图复核,按题目模型的三次项、四次项建立特征。
Q3 求和交叉熵的定义:L03-Logistic-Regression-2026T1.pdf(本地课件) ,PDF p.35–36。
计算、证明与自取验算例为本解析展开;自取数字均就地标明。题目演练不新增讲义课程索引条目。
本次没有以同学答案或既有参考答案作为正确性依据。
考试证据:读了 HW01-2026T1-题目.pdf;未识别用途的 PDF:无