CSCI3230 L06 · Part 3/5 Network training and validation
课程:CSCI3230 (ESTR3108) Fundamentals of Artificial Intelligence · 2025T1 本讲:L06,第 3 部分 / 共 5 部分 · 原件 L06-Neural-Network-Basics-2025T1.pdf(本地课件) p.52–70 定位:旧版预习材料,尚非已取得的 2026T1 L06;把分数变成概率,选择可定义的损失,再调整步长。 前后:上一份 Backpropagation · 下一份 Summary
输出、损失与更新
这篇把三个问题依次连接:网络吐出的任意分数怎样变成可比较的概率?怎样把预测好坏变成损失?得到梯度后,每次该走多远?如果反向传播还不熟,先能重算那里的一个 ReLU 单元,再读本篇损失的求导。
Softmax不是逐元素sigmoid(p.52–54)【新】
p.52 是分节页。假设每张图片只属于猫、狗、鸟中的一类,网络给三个任意实数分数,这些数叫 logit。分数能为负、能很大,也不保证总和为 1,因此不能直接称概率。
p.53 的 softmax 把一整组分数共同归一化:
是类别数, 是第 i 类的分数, 是该类预测概率。输入、输出都是 K 维向量;分母是全部 K 个指数之和,因此每个输出都依赖所有分数。逐元素 sigmoid 则各算各的,不保证总和为 1,不能不区分单标签与多标签问题就互换。
补充自取例:取三个分数 。先指数化得 ,再相加得 6,最后逐项除以 6,概率为 。输出仍保留原分数大小次序,但变成正数且总和为 1。三个概率并非三个独立旋钮:已知前两个,第三个只能是 1 减去前两者,这是 p.54 所说只有 个独立自由度。
共同给三个 logit 加 100 会怎样?分子和分母都多一个 因子,约掉后概率不变。实际实现常先减最大 logit,避免指数溢出。这个数值技巧与数学平移不变性是同一件事的两种用途。
补充:Softmax的平移不变与竞争关系
自编分数 的指数为 ,概率为 。给三个分数同时加1000,理论概率完全不变,因为分子分母共同乘 ;直接算却可能溢出。因此先减最大分数,再求指数和,是等价且稳定的计算方式。它不是把最大概率强制设为1。
再求一个分数改变会影响谁。设 ,商法则给
其中 在 时为1,否则0。自身分数提高,自身概率增加;其他类概率会减少,因为共用分母。上例对第一个分数求导,三个概率变化率为 ,相加为0,与总概率始终为1相符。
若真实类别是第二类,交叉熵 的分数梯度为 。三个梯度相加也为0,沿“全体分数同加一个数”的方向没有损失变化。这既是Softmax层反传的核验,也是为什么概率只确定分数之间的差,而不能唯一确定共同偏移。
指示量与概率乘积(p.55–56)
这里课件引入很多符号,先只抓一个目的:用一条式子表达“取真实类别对应的那个概率”。若真实类是狗,标签可写为 ,叫 one-hot:正确位置是 1,其他位置是 0。
设概率记作 。乘积 正好等于 。一般形式为
是类别这个随机变量, 是本次实际类别; 是指示量,括号内为真取 1,为假取 0。乘积符号 表示把各项相乘。这里假设概率为正,避免零的零次方等边界记号干扰。
p.55 为去掉冗余,只存前 个指示量,称 ;末类对应全零。例如三类时 、、。这不是说末类没有标签,而是由其余分量都为零认出它。指示量的期望为 。
p.56 取对数把乘积变成加法,再把末类作为参考。三类时,令前两指示量为 ,末类指示量是 :
第二行只是展开括号,把含同一个 t 的两项合并,再用 。这说明相对参数自然成为“相对末类的对数概率比”。首次读若仍吃力,先核对三类例,而不必急着记指数族名称。
p.55–56的一般 类形式也保留在这里。指示函数的原例是 、; 的第 项为 ,而 。用 ,得到
按本页的加号约定,、;有些教材使用减号配正的log-partition,不能将两种记法混用。中间每步分别是指数还原乘积、代入末类指示量、合并同一 的系数。
从概率比恢复softmax(p.57)
定义 ,并补上参考类 ,因为 。对数的逆运算是指数,所以
目前每个概率都含未知公共倍数 ,怎么办?利用概率总和必须是 1:
这就是 softmax。分母中的参考类不能漏,它的指数 。最早三个 logit 不必有一项为零;先共同减去末项就得到这一参考类写法,不改变概率。
补充自检:原例概率为 ,以末类作参考,相对比值是 ;它们和为 2,归一化又回到原概率。转换的是表示方式,不是换了分布。
补充 · softmax 的平移不变性与稳定计算(通识讲解;演示数据不属于原题)。
给所有类别分数同时加常数 ,每个分子和分母都乘 ,会约掉,所以概率不变。演示分数 ,直接计算指数可能溢出;减去最大分数1001后用 ,概率成为 ,避免了巨大中间数。
这个技巧是对整组分数加同一个常数,不能逐项随意缩放。将分数差也缩小会让概率更平均,实际改变模型输出。交叉熵也宜通过稳定的 log-sum-exp 形式计算,而不是先把极小概率舍入成0再取对数;数学上为正的概率在有限精度里可能被算成0。检查 NaN 时应先找第一个非有限中间量,而不是只在最终损失上加一个任意常数掩盖问题。
损失和MSE(p.58–60)【延伸 L02 p.17–22】
概率或预测值还不是损失。损失函数输入预测与目标,输出一个实数,表示在当前任务定义下错得多严重。p.58 写总损失为各样本损失之和;p.59 名称叫 MSE,但式子展示的是单样本平方误差。多样本取和还是均值,必须先声明。
设一个样本预测为 ,目标是 ,参数向量 有 d 个分量。平方误差为
输入 是特征, 输出一个预测标量; 也是一个标量,但含义不同。残差是预测减目标,平方使正负误差都被惩罚,且较大误差更重。对参数求导:
表示把对每个参数的偏导排成一个 d 维向量。外层平方贡献 ,内层预测贡献 ,是上一 Part 的链式法则。
补充自取:模型 ,输入 、目标 、旧参数 。预激活 2 为正,预测 2,损失 1;对参数的梯度为 。学习率 0.1 更新后 ,预测 2.8,损失 0.04。注意本篇用完整平方;上一 Part 示例用半平方,两者梯度相差常数 2,不是算术矛盾。
p.58的一般数据记号是 、,预测 ,总损失 。p.60原例具体取三输入 与三参数列 ,,输出 ;没有给数值,因此下一节展开的是全体三参数的一般答案。
ReLU分段导数(p.61)
现在令 ,预测为 ReLU(z)。对某参数 :若 ,ReLU 导数为 1,因此梯度是 ;若 ,局部导数为 0,整条路径贡献为 0。
把p.61省略的其余两项同时写出,在 时:
在 时三项都为0。三条式子的差别只在输入因子,因为 。
判断分支看的是整个加权和 z,而不是某个权重的正负。 正权重配负输入也会产生负贡献,不能看 就直接选正分支。
p.61 把零放进非负分支;严格说 ReLU 在 0 处不可微,一般需要约定。少数复合损失在特殊目标下可能恰好可导,也不意味着 ReLU 本身没有折点。做题和实现应明确选择,而不把某一边斜率当唯一数学导数。
交叉熵的概率前提(p.62–64)【回顾 L03 p.30–36】
分类中经常关心“真实类别被分到多少概率”。若标签 one-hot,交叉熵为
是真实标签的第 i 项, 是预测概率,同为 K 维。真实类位置为 1,其余为 0,所以只留下 。补充自取:真实类为第 2 类,原例概率 ,损失 ;若真实类概率升到 ,损失降为约 0.405。提高的是正确类概率,损失才变小,不能只看最大概率变大。
p.62 写 是一个类别项;完整二分类还要 ,完整多分类要对所有类别求和。不能拿单项去替代任何任务的完整损失。
p.62单项的完整链式求导为 ,定义域先要求 。p.63的原三输入例仍为 ;在 上三个形式导数依次为 ,而非只需要第一条。
p.63–64 用 ReLU 输出直接放进 log 演示求导,此处必须指出边界:当 ,形式上可算出 ;但 ReLU 输出可能超过 1,不是自动合法的概率。若 ,输出为 0, 不产生有限损失,不能像原页分段式那样直接写梯度为零。
补充自取: 时写 ,已不符合“正确类概率介于 0 和 1”的解释; 时输出 0,损失发散。分类中通常使用 softmax 配多类交叉熵,或 sigmoid 配完整二分类交叉熵。这是定义域纠正,不是更换求导规则来掩盖无定义的表达式。
学习率与阶梯衰减(p.65–66)
得到梯度还要决定走多远。学习率 乘在梯度前,决定参数更新幅度;它不是网络学出来的一条连接权重。
补充自取一个能看见边界的目标:,导数为 ,于是
从 出发, 给 1、0.8、0.64,慢慢靠近 0; 给 1、−0.5、0.25,左右摆动但幅度缩小; 给 1、−1、1,无法降低损失; 幅度越摆越大。这里收敛范围 是这一个二次函数的结论,不是所有网络的通用阈值。
p.66 图在约 30、60、90 个 epoch 降低学习率后,训练 loss 出现进一步下降。图能支持“这个实验中下调有帮助”,不能保证每次下调都立刻下降。Epoch 是完整走过训练集一次;iteration 是一次参数更新,若分 mini-batch,一轮通常包含很多次更新。
p.66指定的阶梯示例是每到30、60、90个epoch后将当前学习率乘0.1,即三个阶段后分别为初值的 。图横轴为epoch、纵轴为training loss,蓝色波动带与平滑曲线同时下降;不应把图当作分类准确率曲线。
三种连续计划(p.67–69)
现在让学习率随进度 t 改变。 是起始尺度,T 是计划总进度,t 的单位必须一致。
| 计划 | 课件公式 | 理解端点 |
|---|---|---|
| 线性 | t=0 为起始值,t=T 为 0 | |
| 余弦 | 同样从起始值到 0,但变化速度不同 | |
| 反平方根 | 只对 t>0 写得有意义,不是终点必为零的计划 |
补充自取:。在 t=25,线性为 0.075,余弦约 0.08536;t=50 时二者都为 0.05;t=75 时分别 0.025 和约 0.01464。只查中点会误以为两计划相同。
反平方根若 t=1,学习率 0.1;t=4 时 0.05;t=100 时 0.01。不能在 t=0 直接代入。实际计划若加偏移或接 warmup,要明说,不应把修改后的式子说成原课件原式。
Warmup(p.70)
**Warmup(预热)**先用较小步长,再逐渐升到目标学习率,之后才接衰减。图(p.70)的曲线先陡升后缓降;文字举前 5000 次迭代,图横轴则标 epoch,所以不能直接把图上的横坐标 5000 当 5000 轮。
补充自取一个小计划:想在前 4 次更新把学习率从 0 升到 0.1,可以在第 1、2、3、4 次用 0.025、0.05、0.075、0.1。预热不保证稳定,它只是减轻初始参数尚未适应时大步更新的风险;长度和目标值仍要验证。
怎样使用验证集,而不把它变成训练集
标题里还有 validation。补充一个最小概念区分:训练集用来算梯度并更新权重;验证集用来比较学习率、层数或停止时机;测试集留到最后评估。验证损失高只表示对该集合表现不好,不能单独断言欠拟合。训练也高时检查实现、特征、优化与容量;训练低而验证高时再考虑过拟合、数据分布或划分问题。
小检查: 三类输出都在 0 与 1 之间,就一定是合法 softmax 吗?训练 loss 小能证明新样本好么?
参考答案
还要检查三项和为 1;仅逐项在范围内不够。训练 loss 小只证明拟合了训练目标,需要独立验证或测试评估泛化。若用测试集反复挑学习率,它也参与了选择,不能再把最终结果当未参与选择的独立评估。
想进一步推导 softmax 梯度或看旧实验要求,可见附录 A1。先理解本篇“输出必须合法、损失约定明确、梯度与步长分开”。
本讲核心考点
- Softmax 是整组归一化;参考类推导不能漏掉分母的一项(p.53–57)。
- MSE 常数取决于求和/均值/半平方约定(p.58–61)。
- 交叉熵需要合法概率,ReLU 直接接 log 的零值分支不能称梯度为零(p.62–64)。
- 学习率控制步幅,调度的 epoch/iteration 单位和零点必须明确(p.65–70)。
附录
A1 作业/往年题演练(非讲义内容):题目演练与实验边界
历史 softmax 题容易被长下标淹没。先把每个线性分数缩写成 z,把所有指数和缩写成 Z,再问“改变某个 z 时,分子变不变、分母变不变”。自己的类别分数会影响分子与分母,其他类别只影响分母;这正是商法则的两种情况。得到分数导数后才乘线性分数对参数的导数。实验题另属训练实现,不凭手推导数就宣称已取得准确率。
题面(HW01-2025T1-题目.pdf · Q4 · p.3–4;公式视觉核对)
p.3 4. In multi-class tasks we discriminate between three or more classes. As usual, we imagine that we have one sample 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 and .
In many cases, we perform multi-class tasks by softmax function, with the probability written as: .
p.4 Here is the linear model. As there are K classes in this task, we have a set of K weight vectors for multi-class classification: . The indicates the probability that the prediction for the sample is class i.
(a) Calculate that the derivative of w.r.t. is: , ; , . (10%)
(hint: you can separately discuss the two situations for and )
(b) Calculate the derivative of w.r.t. . (5%)
(hint: )
(c) We use the following negative log-likelihood loss function for this multi-class task: , where indicates the label for class i. Prove that the derivative of w.r.t. is . (10%)
公式按原题重排,原列向量改写为转置行列示法;以下用 、 简写。
先令 。当 ,分子与分母都变化:
当 ,分子不变,仅分母变化:
这分别兑现 (a) 的两个分支;(b) 乘 。(c) 对所有类别的损失项求和,不能只保留 一项:
第二行使用 one-hot 标签总和 1,最后一步链式法则回到参数;这是把本讲 p.53–57 的 softmax 与多类交叉熵结合得到的补充推导;p.61–64 本身演示的是单项损失链式求导,不能混称。
HW01-2025T1-题目.pdf p.3–4 Q4,A 级。题面: K类,输入x,类别参数θi,概率pi=exp(xᵀθi)/∑kexp(xᵀθk),one-hot标签yi;求softmax相关偏导并推导交叉熵对参数的梯度。令zi=xᵀθi,以商法则:
将L=−∑yi log pi代入:∂L/∂zj=−∑yi(δij−pj)=pj−yj,因为∑yi=1。故∂L/∂θj=(pj−yj)x。多个样本再按题面求和或均值。核对∑j∂L/∂zj=0,与对全部logit共同平移不改变loss一致。
题面(ESTR-Final-Exam-2023T1.pdf · Part I Q5 · p.2;扫描件,视觉读取)
p.2 5. (3%) If use neural networks to conduct the image classification tasks, which of the following is not possible to be an output of the Softmax layer?
A. 0.513, 0.487
B. 0.023, 0.145, 0.872
C. 0.213, 0.213, 0.458, 0.116
D. 0.003, 0.016, 0.002, 0.128, 0.851
2023卷 p.2 Part I Q5,A 级。题面: 哪个向量不可能是softmax输出?A(.513,.487),B(.023,.145,.872),C(.213,.213,.458,.116),D(.003,.016,.002,.128,.851)。B总和1.040,其余和1且为正,所以B。不要只查每分量是否在0到1。
题面(ESTR-Final-Exam-2024T1.pdf · Part II Q4 · p.6;扫描件,视觉读取)
p.6 4. (5%) In the following figure, the plot of learning curve shows the epoch count on the x-axis, and the error rate (i.e., 100% minus accuracy rate) on the y-axis. What is the most likely setting change in epochs 25 and 60 that could have produced this learning curve shape (i.e., significant decrease of the error rate at epochs 25 and 60)?
图(题面,p.6):训练/验证错误率随 epoch 下降。 元素:ResNet-50 与 SE-ResNet-50 的训练、验证四条曲线;横轴到 100,纵轴为 Top-1 error (%)。 看什么:约 25 与 60 两处多条线共同出现台阶下降,提示训练设置改变;它不是损失值坐标,不能把 error rate 与交叉熵混称。
2024卷 p.6 Part II Q4,A 级。题面: 解释训练曲线在约25与60轮明显下降的可能原因。与课件相同形态可提出这些时点降低学习率,使参数在较小邻域进一步优化;图形本身不唯一证明调度,答案应表述合理原因,不能声称读出了未给的具体α。
题面(ESTR-Final-Exam-2024T1.pdf · Part III Q3(c) · p.9;网络与参数见上一 Part)
p.9 c) If you are given ten million samples of paired and , and use these data to train this network, after you tried different learning rates and trained the network for a long time, your model still has a high loss on the training and validation datasets, what could you do to solve the problem? Why? (3%)
题面(ESTR-Final-Exam-2023T1.pdf · Part III Q3(c)(d) · p.8;同一网络)
p.8 c) If you want to use a different learning rate for model training, state how would the change of learning rate would affect model training. (2%)
d) If you are given one million samples of paired and , and use these data to train this network, after you tried different learning rates and trained the network for a long time, your model still has a high loss on the validation dataset, what should you do to solve the problem? Why? (4%)
2023(c):较大学习率使每次参数移动更远,可能更快但可能震荡或发散;较小学习率有利局部精调但收敛慢。以本课程平方目标为例, 直接说明 时振荡,不是越大越快。
2023(d):先比较训练损失。若训练也高,检查实现和优化后考虑容量或特征;若训练低、验证高,则考虑过拟合、分布差异、标签质量,使用正则、增强或改进数据划分。只有验证高与样本数量多,不能唯一推出欠拟合。2024(c) 明确两者都高,因此支持以下高偏差诊断。
2024卷 p.9 Part III Q3c,A 级。题面: 有1000万训练样本,但训练与验证误差都高,如何改进?先查输入、标签和优化是否正常;若已充分训练仍高,考虑提高模型容量或改善特征,属于高偏差方向,单加更多同分布样本通常不解决。2023卷对应问法仅给高validation loss,信息不足以直接断言欠拟合,需同时看training loss。
题面(HW03-2025T1-题目.pdf · Q4 · p.4–5)
p.4 4. In this question, we consider a multi-class classification problem, i.e., to discriminate C () classes. We use Softmax function in the output layer to produce probability predictions for each class. In specific, consider the following neural network with 2 input neurons (see the figure below), 2 hidden layers and 3 output neurons. Each hidden layer has 4 neurons. For each hidden neuron, we use ReLU activation function. The input and output of this neural network is represented by and . The weight matrix from the input layer to the first hidden layer is denoted by . The weight matrix from the first hidden layer to the second hidden layer is denoted by and the weight matrix from the second hidden layer to the output layer is denoted by .
Here, we use one-hot encoding to convert ground truth labels into “one-hot” vectors, where only an entry is 1 and other entries are 0. For example, suppose there are C classes in total, the one-hot encoding of a label c (an integer) is a n-dimensional vector where only the c-th entry is equal to 1 while other entries are 0. We use loss function of cross entropy loss to optimize the network. Given the ground truth label in the one-hot encoding format and the probability prediction of the network , the cross entropy loss between the ground truth label and probability prediction is defined as . Now solve the following tasks. (25%)
(1) Given a training set and test set listed in train_q4.csv and test_q4.csv, write PyTorch code to learn the above network. Please randomly initialize the weights matrix with torch.nn.init_kaiming_uniform. Please use the torch.optim.SGD optimizer for training, tune
p.5 the learning rate from set {0.4, 0.1, 0.001}, set the batch size as 256 and the total training epochs as 100. Also, fix the seed using code as following:
import torch
import torch.backends.cudnn as cudnn
import random
import numpy as np
seed = 1443
cudnn.benchmark = False
cudnn.deterministic = True
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
Present the followings: 1) plot the curve of training loss, 2) test the network on the given test set and report the testing accuracy. What’s your findings according to these training loss curves and testing accuracy with different learning rates? (20%)
(2) Let’s further study the impact of weight initialization. Torch.nn.init provides multiple methods for weight initialization. Please try your best to tune the weight initialization schemes to make the test accuracy . Please try at least two methods and show your results. For fair evaluation, please use the torch.optim.SGD optimizer for training, set the learning rate as 0.1, the batch size as 256 and the total training epochs as 100. Also, fix the seed using code as following:
import torch
import torch.backends.cudnn as cudnn
import random
import numpy as np
seed = 1443
cudnn.benchmark = False
cudnn.deterministic = True
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
After that, please present the followings: (1) plot the curve of training loss (2) test the network on the given test set, report and discuss about the test accuracy. (Hint: Find the documentation for torch.nn.init at https://pytorch.org/docs/stable/nn.init.html) (5%)
公式按原题重排。原文 one-hot 维数的 n 与前面的 C 不一致,按类别数应为 C;此处未据此猜改原题。图为相邻层全连接的 2→4→4→3 网络,两个隐藏层用 ReLU,输出分数经 softmax。
(2) 的独立变量是初始化,故固定学习率 0.1,分别重新初始化并训练至少两组;不能沿用 (1) 已训练权重继续跑再宣称比较初始化。未取得题定两个 CSV,无法提供训练曲线、95% 达标结论或哪种初始化实际最好。能确定的是实验矩阵:第一组固定初始化比较三个学习率;第二组固定学习率、batch、轮数与种子,比较至少两种初始化。
HW03-2025T1-题目.pdf p.4–5 Q4,A 级。实验题面要点完整保留: 2→4→4→3网络,两个隐藏层ReLU、输出softmax;W1为2×4、W2为4×4、W3为4×3;使用train_q4.csv/test_q4.csv,SGD分别比较学习率.4,.1,.001,batch256,100epochs,seed1443与Kaiming初始化,报告训练/测试表现并争取题面95%目标。前向按XW1、H1W2、H2W3逐层计算,交叉熵反传最后一层从P−Y开始,隐藏层乘ReLU掩码;每轮训练shuffle,只用训练批更新,测试时冻结参数。三组保持相同分割、初始化和训练轮数,才可比较学习率。数据文件未提供于本次已核验题面,未运行该实验;95%是题目目标,不是本次测得结果。
题面(Final-Exam-Example-Question-未核.pdf · Part I · p.1)
p.1 Which of the following statement is correct about neural networks?
A. You cannot adjust the learning rate during training of a neural network.
B. Tanh is a non-linear function that is commonly used in current CNN classifiers.
C. Data augmentation helps to increase model capacity.
D. Number of neurons in each layer is a hyperparameter for a neural network architecture.
按这份样题的课程语境选 D。层宽由设计者设定,训练学习的是给定结构中的权重。A 被 p.65–70 的调度直接否定;C 混淆增加数据变化与增加模型容量;B 的前半句成立,但“commonly used in current”是样题的时代性判断,本课 CNN 主要以 ReLU 为典型,不能将它扩展为对今天所有架构的普查结论。
来源与证据
- 原件:L06-Neural-Network-Basics-2025T1.pdf(本地课件);对应页区间见文件头及各节标题。本页是 2025T1 旧材料预习,不代表 2026T1 已讲进度。页码按当前 91 页 PDF,不能直接用仍标到 103 的旧页脚号。p.74 起为 ESTR3108 扩展。
- 数字演示凡非课件原例均明确标为“补充自取”;这些例子用于理解,不是教师布置的作业。
- 附录中的历史题面保留其文件名、年份和题号,与当前作业区分;它们不能证明本学期考试范围。正文的学习检查是通识练习,不作出题预测。