《人工智能考核试卷》
一、基础简答题(共 70 分)
题 1:矩阵运算(10 分)
给定两个矩阵 a 和 b,维度分别为 (2, 3) 和 (3, 2)。目标是创建一个矩阵 c,使其元素 c[i][j] 等于 a[i][j] 与 b[j][i] 的乘积。
- 用循环的方式实现。
- 用向量化的方式实现。
答案:
- 循环实现:
c = np.zeros((2, 2))
for i in range(2):
for j in range(2):
c[i][j] = np.sum(a[i] * b[:, j])
- 向量化实现:
c = np.dot(a, b)
题 2:矩阵转置(5 分)
给定矩阵 a,维度为 (3, 4),执行转置操作得到矩阵 b。请写出 b 的维度。
答案:b 的维度为 (4, 3)
题 3:损失函数选择(10 分)
在回归任务中,为什么通常使用均方误差(MSE)而不是绝对误差(MAE)作为损失函数?
答案:均方误差对异常值更敏感,能更好地反映模型对整体数据的拟合程度,而绝对误差对异常值的惩罚较轻,可能导致模型对异常值不够敏感,影响模型的泛化能力。
题 4:激活函数(15 分)
列举三种常见的激活函数,并简要说明它们的特点和应用场景。
答案:
- Sigmoid:输出范围为 (0, 1),适用于二分类问题的输出层,但存在梯度消失问题,不适合隐藏层。
- ReLU:输出范围为 [0, +∞),能有效缓解梯度消失问题,加速训练,常用于隐藏层,但可能导致部分神经元死亡。
- Tanh:输出范围为 (-1, 1),相比 Sigmoid 在零点附近更对称,梯度更大,但同样存在梯度消失问题,常用于隐藏层。
题 5:过拟合与正则化(10 分)
解释什么是过拟合,并列举三种缓解过拟合的方法。同时,解释什么是正则化以及如何缓解正则化问题。
答案:
过拟合是指模型在训练集上表现很好,但在测试集上表现较差的现象。缓解过拟合的方法包括:
- 数据增强:通过对训练数据进行变换或生成新的数据,增加数据的多样性。
- Dropout:在训练过程中随机丢弃一部分神经元,防止神经元之间的共适应。
- 早停:在训练过程中,当验证集的损失不再下降时,提前停止训练。
正则化是通过在损失函数中添加正则项来限制模型的复杂度,防止模型过拟合。常见的正则化方法有 L1 正则化和 L2 正则化。缓解正则化问题的方法包括选择合适的正则化系数,以及结合其他正则化方法。
题 6:反向传播(10 分)
解释什么是反向传播,列举两种优化反向传播训练过程的方法。
答案:
反向传播是一种用于训练神经网络的算法,通过计算损失函数对网络参数的梯度,利用梯度下降法更新参数,从而优化网络性能。优化反向传播训练过程的方法包括:
- 动量优化:在梯度下降过程中引入动量项,使参数更新方向更加稳定,加速收敛。
- Adam 优化器:结合了动量优化和自适应学习率的优点,能够自适应地调整学习率,提高训练效率和稳定性。
题 7:模型评估(10 分)
在一个图像分类任务中,假设模型在训练集上有 99% 的准确率,在测试集上有 90% 的准确率。讨论哪些尝试可能有助于改善模型的性能。
答案:
- 数据增强:通过对训练数据进行旋转、缩放、裁剪等操作,增加数据的多样性,提高模型的泛化能力。
- 调整模型结构:增加隐藏层的数量或神经元的数量,提高模型的表达能力。
- 调整超参数:调整学习率、批大小、正则化系数等超参数,找到更适合模型的参数组合。
- 使用预训练模型:利用在大规模数据集上预训练的模型作为起点,进行微调,提高模型的性能。
- 集成学习:将多个模型组合在一起,通过投票或平均等方法得到最终结果,提高模型的鲁棒性和准确性。
题 8:医疗诊断模型评估(10 分)
你正在开发一个用于早期检测某种疾病的诊断模型,该疾病的早期检测非常重要。假设模型对该疾病的诊断结果是阳性或阴性。请回答以下问题:
- 解释什么是精度(Precision)和召回率(Recall),并说明它们在该场景中的重要性。
- 如果更关注误诊(假阳性),应侧重优化精度还是召回率,为什么?
- 如果更关注早期发现尽可能多的病例(假阴性),应侧重优化精度还是召回率,为什么?
- 介绍一种在模型中平衡精度和召回率的方法,并解释其工作原理。
答案:
- 精度:预测为阳性的样本中实际为阳性的比例,反映了模型预测阳性的准确性。召回率:实际为阳性的样本中预测为阳性的比例,反映了模型发现阳性病例的能力。在医疗诊断中,精度和召回率都很重要。高精度可以减少误诊,避免不必要的治疗和焦虑;高召回率可以确保尽可能多地发现疾病病例,及时进行治疗。
- 如果更关注误诊(假阳性),应侧重优化精度。因为误诊可能导致患者接受不必要的治疗和检查,给患者带来身体和心理上的负担。
- 如果更关注早期发现尽可能多的病例(假阴性),应侧重优化召回率。因为漏诊可能导致患者错过最佳治疗时机,影响治疗效果和预后。
- F1 分数:是精度和召回率的调和平均数,可以平衡精度和召回率。其工作原理是通过同时考虑精度和召回率,找到一个综合性能较好的模型。计算公式为:F1 = 2 * (Precision * Recall) / (Precision + Recall)。
二、基础公式+导题目(共 30 分)
题目:单层前馈神经网络(30 分)
假设你正在训练一个简单的单层前馈神经网络,用于二分类任务。该神经网络包括一个输入层、一个隐藏层和一个输出层。隐藏层使用 ReLU 激活函数,输出层使用 Sigmoid 激活函数。输入数据为二维向量 x = [x1, x2],隐藏层有两个神经元。请详细说明以下步骤中的公式和计算过程:
- 前向传播(10 分)
- 隐藏层的线性变换公式,应用 ReLU 激活函数得到隐藏层输出。
- 输出层的线性变换公式,应用 Sigmoid 激活函数得到最终输出。
- 损失函数(5 分)
- 定义二分类任务中常用的交叉熵损失函数,并给出其公式。
- 反向传播(10 分)
- 计算输出层的损失函数对输出层输出的梯度。
- 计算隐藏层输出对隐藏层输出的梯度。
- 计算损失函数对隐藏层权重的梯度。
- 计算损失函数对输出层权重的梯度。
- 权重更新(5 分)
- 说明如何使用梯度下降法更新网络的权重,并给出更新公式。
答案:
- 前向传播:
- 隐藏层的线性变换公式:Z(1)=W(1)x+b(1)Z^{(1)} = W^{(1)}x + b^{(1)}Z(1)=W(1)x+b(1),其中 W(1)W^{(1)}W(1) 是隐藏层的权重矩阵,b(1)b^{(1)}b(1) 是隐藏层的偏置向量。
- 隐藏层的输出:A(1)=ReLU(Z(1))A^{(1)} = \text{ReLU}(Z^{(1)})A(1)=ReLU(Z(1)),ReLU 函数定义为 ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)。
- 输出层的线性变换公式:Z(2)=W(2)A(1)+b(2)Z^{(2)} = W^{(2)}A^{(1)} + b^{(2)}Z(2)=W(2)A(1)+b(2),其中 W(2)W^{(2)}W(2) 是输出层的权重矩阵,b(2)b^{(2)}b(2) 是输出层的偏置向量。
- 输出层的输出:y^=Sigmoid(Z(2))\hat{y} = \text{Sigmoid}(Z^{(2)})y^=Sigmoid(Z(2)),Sigmoid 函数定义为 Sigmoid(x)=11+e−x\text{Sigmoid}(x) = \frac{1}{1 + e^{-x}}Sigmoid(x)=1+e−x1。
- 损失函数:
- 交叉熵损失函数公式:Loss=−1m∑i=1m[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]\text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)})]Loss=−m1∑i=1m[y(i)log(y^(i))+(1−y(i))log(1−y^(i))],其中 mmm 是样本数量,y(i)y^{(i)}y(i) 是第 iii 个样本的真实标签,y^(i)\hat{y}^{(i)}y^(i) 是第 iii 个样本的预测标签。
- 反向传播:
- 输出层的损失函数对输出层输出的梯度:∂Loss∂y^=−yy^+1−y1−y^\frac{\partial \text{Loss}}{\partial \hat{y}} = -\frac{y}{\hat{y}} + \frac{1 - y}{1 - \hat{y}}∂y^∂Loss=−y^y+1−y^1−y。
- 隐藏层输出对隐藏层输出的梯度:∂Loss∂A(1)=∂Loss∂Z(2)⋅W(2)\frac{\partial \text{Loss}}{\partial A^{(1)}} = \frac{\partial \text{Loss}}{\partial Z^{(2)}} \cdot W^{(2)}∂A(1)∂Loss=∂Z(2)∂Loss⋅W(2),其中 ∂Loss∂Z(2)=∂Loss∂y^⋅∂y^∂Z(2)\frac{\partial \text{Loss}}{\partial Z^{(2)}} = \frac{\partial \text{Loss}}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial Z^{(2)}}∂Z(2)∂Loss=∂y^∂Loss⋅∂Z(2)∂y^。
- 损失函数对隐藏层权重的梯度:∂Loss∂W(1)=∂Loss∂Z(1)⋅xT\frac{\partial \text{Loss}}{\partial W^{(1)}} = \frac{\partial \text{Loss}}{\partial Z^{(1)}} \cdot x^T∂W(1)∂Loss=∂Z(1)∂Loss⋅xT,其中 ∂Loss∂Z(1)=∂Loss∂A(1)⋅∂A(1)∂Z(1)\frac{\partial \text{Loss}}{\partial Z^{(1)}} = \frac{\partial \text{Loss}}{\partial A^{(1)}} \cdot \frac{\partial A^{(1)}}{\partial Z^{(1)}}∂Z(1)∂Loss=∂A(1)∂Loss⋅∂Z(1)∂A(1)。
- 损失函数对输出层权重的梯度:∂Loss∂W(2)=∂Loss∂Z(2)⋅A(1)T\frac{\partial \text{Loss}}{\partial W^{(2)}} = \frac{\partial \text{Loss}}{\partial Z^{(2)}} \cdot A^{(1)T}∂W(2)∂Loss=∂Z(2)∂Loss⋅A(1)T。
- 权重更新:
- 使用梯度下降法更新权重:W(1)=W(1)−α∂Loss∂W(1)W^{(1)} = W^{(1)} - \alpha \frac{\partial \text{Loss}}{\partial W^{(1)}}W(1)=W(1)−α∂W(1)∂Loss,W(2)=W(2)−α∂Loss∂W(2)W^{(2)} = W^{(2)} - \alpha \frac{\partial \text{Loss}}{\partial W^{(2)}}W(2)=W(2)−α∂W(2)∂Loss,其中 α\alphaα 是学习率。