监督学习神经网络
用NOAI复赛真题,构建孩子的AI知识图谱
每个知识点后续都会单独展开讲解,欢迎先关注收藏
这道题在做什么
给你两万条NBA球星的投篮记录,每条记录只有两个信息:投篮位置的横坐标和纵坐标。标签是命中或未命中。你要训练一个神经网络,看到一个新的投篮位置,判断这一球能不能进。
约束很紧:网络最多3层,每层最多8个神经元。
这道题看似简单,但要做好它,你需要理解下面这些知识——它们串在一起,构成了机器学习最基本的一条链路。
知识全景
做这道题,至少要理解11个知识点。它们不是孤立的,而是一条链:
数据 → 模型 → 训练 → 评估
下面逐个拆解。
① 监督学习
机器学习有很多分支,但这道题用到的是最经典的一种:监督学习。
什么叫"监督"?就是你给机器看的每一条数据,都附带了正确答案。投篮位置是输入,命中与否是答案。机器的任务是从大量"输入-答案"的配对中找到规律,然后面对新的输入时,给出自己的判断。
这和人类学习很像:老师出题、给答案、让你做练习、然后考试。考试的时候没有答案了,靠的是你从练习中学到的规律。
监督学习是整个机器学习领域的基石,也是NOAI复赛考查最多的方向。
与之对应的概念:无监督学习——数据没有标签,机器自己找结构(比如把相似的东西分成一组);强化学习——没有标准答案,机器通过试错和奖惩来学习(比如下棋)。
② 分类问题
监督学习的任务分两大类:分类和回归。
•分类:输出是离散的类别。"这球命中了吗?"——答案只有两种:命中、未命中。
•回归:输出是连续的数值。"这球的命中概率是多少?"——答案可以是0到1之间的任何值。
这道题要求输出0或1,是一个二分类问题——所有分类问题中最简单的一种,只有两个类别。
二分类在现实中非常常见:邮件是不是垃圾邮件?这张图是不是猫?这笔交易是不是欺诈?虽然场景不同,但背后的数学结构完全一样。
③ 特征与标签
在监督学习中,输入叫特征(Feature),正确答案叫标签(Label)。
这道题的特征是 loc_x 和 loc_y——投篮位置的横纵坐标。标签是 shot_made_flag——0表示未命中,1表示命中。
特征的选择直接决定了模型能学到什么。这道题的数据里其实还有 minutes_remaining(剩余时间)和 shot_distance(投篮距离),但题目限制只能用 loc_x 和 loc_y。这意味着模型只能从位置信息中找规律——比如靠近篮筐的区域命中率更高。
在实际的机器学习项目中,"选哪些特征"是一个关键决策,叫做特征工程。好的特征能让简单的模型也有好表现;坏的特征会让再复杂的模型也束手无策。
④ 数据归一化
题目说数据"已经归一化"——这个看似不起眼的细节,背后是一个重要概念。
假设 loc_x 的范围是 -250 到 250(球场宽度),而 loc_y 的范围是 0 到 900(球场长度)。两个特征的数值范围差了好几倍。如果直接把这些数字丢给神经网络,网络会被数值大的特征主导——它会觉得 loc_y 的变化"更重要",仅仅因为 loc_y 的数字更大。
归一化就是把所有特征缩放到相似的范围(通常是0到1,或者均值为0、标准差为1)。这样,每个特征对模型的影响取决于它本身携带的信息量,而不是它的数值大小。
归一化不改变数据的内在规律,只是换了一把尺子。但这把尺子换得好不好,直接影响模型训练的速度和效果。
⑤ 神经元与线性变换
这道题要求用神经网络来做预测。神经网络的最小单元是神经元。
一个神经元做的事情非常简单:接收若干个输入,给每个输入乘一个权重,加起来,再加一个偏置,输出一个数。用数学写就是:
输出 = w₁ · x₁ + w₂ · x₂ + b
这就是一次线性变换——本质上是画一条直线(二维)或一个平面(三维)。
在这道题里,一个神经元接收 loc_x 和 loc_y,输出一个数。这个数的几何意义是:在球场平面上画了一条直线,直线一侧输出正值,另一侧输出负值。
一个神经元只能画一条直线。但投篮命中率的分布不可能是一条直线能分开的——所以我们需要多个神经元,需要多层网络。
⑥ 激活函数
如果神经网络只做线性变换,不管堆多少层,数学上等价于一层。两次线性变换叠加,还是线性变换。
激活函数打破了这个限制。它是一个非线性的函数,夹在每两层之间。经过激活函数处理后,网络的输出不再是输入的简单线性组合,而是能表达更复杂的关系。
这道题允许使用的激活函数有六种,分两类:
有界激活函数——输出被压缩在固定范围内
•Sigmoid:把任意数字压缩到0和1之间,像一个S形曲线。数字越大越接近1,越小越接近0。常用于输出层,把结果解释为"概率"。
•Tanh:和Sigmoid类似,但输出范围是-1到1。
无界激活函数——正半轴没有上限
•ReLU:最常用的激活函数。规则极其简单——输入为正就原样输出,输入为负就输出0。
•LeakyReLU:ReLU的改进版。输入为负时不是输出0,而是输出一个很小的值(比如输入的0.01倍)。这解决了ReLU的一个问题:如果某个神经元的输入一直为负,它的输出永远是0,梯度也是0,就再也学不了东西了——这叫"死神经元"。
•ELU、PReLU:和LeakyReLU思路类似,处理负值的方式略有不同。
在只有8个神经元的小网络里,一个神经元"死掉"就损失了12.5%的容量。所以这道题更适合用LeakyReLU或PReLU这类不会让神经元彻底失效的激活函数。
⑦ 多层感知机(MLP)
把多个神经元排成一层,把多层串联起来,层与层之间加上激活函数——这就是多层感知机(MLP),最基础的神经网络结构。
这道题的MLP结构是:
输入层(2个特征)→ 隐藏层(最多8个神经元)→ [隐藏层] → 输出层(1个输出)
•输入层不做计算,只是把数据传进去。
•隐藏层是网络的"大脑",负责提取特征、组合信息。层数越多、神经元越多,网络能表达的模式就越复杂。
•输出层给出最终结果。二分类问题通常输出一个数,大于某个阈值判为一类,小于则判为另一类。
MLP有一个重要的理论保证:只要隐藏层足够宽(神经元足够多),一个单隐藏层的MLP可以逼近任意连续函数。这叫万能近似定理。但"足够宽"可能意味着需要天文数字的神经元,所以实践中往往用多层、较窄的网络来代替。
这道题把网络限制在最多3层、每层8个神经元,就是要考验你在有限资源下的设计能力。
⑧ 损失函数
模型搭好了,怎么告诉它"你预测得对不对"?靠损失函数。
损失函数接收模型的预测值和真实标签,输出一个数——损失值。预测越准,损失越小;预测越离谱,损失越大。训练的目标就是让损失值尽可能小。
不同任务用不同的损失函数。这道二分类题最常用的是二元交叉熵损失(Binary Cross-Entropy Loss)。
它的直觉是这样的:如果真实标签是1(命中),模型预测的概率越接近1,损失越小;如果模型预测0.5(不确定),损失中等;如果模型预测0.01(几乎确定未命中),损失非常大。反过来也一样。
交叉熵损失对"自信但错误"的预测惩罚特别重——这迫使模型不仅要预测对,还要对自己不确定的样本不乱给极端预测。
⑨ 梯度下降与优化器
知道了损失有多大,下一步是调整模型参数让损失变小。怎么调?用梯度下降。
想象你站在一座山上,闭着眼,想走到最低点。你能做的就是摸一摸脚下的坡度,然后往下坡方向迈一步。这就是梯度下降——计算损失函数对每个参数的"坡度"(梯度),然后沿着坡度下降的方向更新参数。
梯度是一个数学概念,描述函数在某个点的变化方向和变化速度。对于损失函数来说,梯度告诉我们:如果某个权重增大一点点,损失会增大还是减小,增减幅度有多大。
神经网络计算梯度的方法叫反向传播:从输出层开始,沿着网络层层往回算,把每一层对损失的"贡献"算清楚。这就是为什么深度学习框架(如PyTorch)的核心能力之一是自动求导。
在基础梯度下降之上,人们发明了很多改进算法,统称优化器:
•SGD(随机梯度下降):最基础的版本,每次用一小批数据计算梯度。
•Adam:目前最常用的优化器。它为每个参数维护独立的学习率,并利用梯度的历史信息来调整更新方向。在大多数情况下,Adam比SGD更容易收敛。
⑩ 学习率
梯度下降每一步迈多大?这由学习率决定。
学习率太大,每步跨得太远,可能直接跨过最低点,损失反而上升,甚至震荡发散。学习率太小,每步挪一点点,训练几千轮了还没到位。
学习率是模型训练中最关键的超参数之一。对于这道题的小网络,0.001是一个常见的起步值。
更聪明的做法是用学习率调度器:训练初期用较大的学习率快速逼近,后期自动减小学习率精细调整。就像开车——先上高速,快到了再转小路。
⑪ 过拟合与验证集
训练集上表现很好,不代表面对新数据也行。模型可能把训练数据的噪声和巧合也当成了规律,这叫过拟合。
打个比方:一个学生把所有练习题的答案都背下来了,考试遇到一道变体就不会做——这就是过拟合。真正学到了解题方法的学生,面对新题也能应对——这叫泛化。
怎么发现过拟合?从训练集中留出一部分数据不参与训练,只用来检验——这部分数据叫验证集。如果模型在训练集上的损失一直下降,但在验证集上的损失开始上升,说明过拟合了。
这道题的评分分A榜和B榜,各用测试集的50%。如果你根据A榜分数反复微调模型,实际上是在用A榜数据"训练"——B榜出来可能更低。正确做法是在本地划出验证集,在验证集上调好了再提交。
贯穿全程的概念:决策边界
上面11个知识点是链条上的环节。但还有一个概念贯穿整道题,值得单独说——决策边界。
这道题只有两个特征(loc_x, loc_y),可以在二维平面上画出来。每个投篮是平面上的一个点,红色代表未命中,蓝色代表命中。模型要做的事情,就是在这个平面上画出一组曲线,把红色区域和蓝色区域分开。
这组曲线就是决策边界。
一个神经元画一条直线。一层8个神经元画8条直线,组合起来能围出多边形。两层叠加后,这些多边形可以进一步组合,形成更复杂的曲线。
网络越大,决策边界可以越复杂。但这道题把网络限制得很小——你能画出的曲线是有限的。这迫使你思考:什么样的曲线形状最合理?要不要用更少的层但更宽?还是用满3层但每层窄一些?
理解决策边界,就是理解模型到底在做什么。很多初学者把神经网络当黑箱,调参全靠碰运气。但如果你知道模型其实是在画线,你就能有方向地调整。
知识地图
最后,把这些知识点的依赖关系整理出来。箭头表示"理解前者才能理解后者":
监督学习 →分类问题←特征与标签神经元→激活函数→多层感知机损失函数→梯度下降→学习率→过拟合与验证集决策边界 ← 贯穿以上所有环节
前置知识(不在这道题里考,但你得先会)
• Python编程基础
• PyTorch框架基本用法(张量、模块定义、训练循环)
• 高中数学:函数、向量、基本概率
这道投篮预测题是NOAI复赛最基础的一道,但它覆盖了监督学习从数据到评估的完整链路。把这道题真正搞懂,你就有了一个可以往任何方向延伸的起点。

