它学的是组合方式
每个神经元把输入乘上不同权重,加上偏置,再经过激活函数。训练调整这些参数;图上的小地图,显示它对不同输入的响应。
让网络把两种颜色分开。看一条边界,怎样从数据里学出来。
开始训练,观察白色边界怎样围住绿点。保留结果,再把隐藏层减到 0 做对照。
输入 → 隐藏层 → 输出
同一个位置,表示同一组输入。每层重新组合这些响应,最后决定分到哪一类。
底色是网络判断,圆点是真实类别
点击任意圆点,核对“真实类别”和“网络判断”。
前面只计算;到“更新参数”才真正改变网络。
训练集用来学,验证集用来看是否学偏
把本次结果留住,作为下一次实验的参照
先训练一会儿,点“留作对照”。
再改隐藏层、激活函数或正则化,
观察边界和验证集表现的差别。
从头再来会保留数据与随机种子,便于重复比较。
每个神经元把输入乘上不同权重,加上偏置,再经过激活函数。训练调整这些参数;图上的小地图,显示它对不同输入的响应。
前向计算给出预测,损失衡量差距,反向传播算出每个参数该怎样调整。学习率决定改多大;一次更新不保证错误率立刻下降。
训练损失下降、验证损失持续回升,是过拟合的信号。更深的网络不一定更好;验证集参与选模型和早停,最终评价仍需独立测试集。
300 个合成样本,按类别分层随机划分训练集与验证集。页面所有预测、错误率和曲线均由当前网络实时计算;这是一项二维分类教学实验,不代表真实科研任务的模型性能。
位置噪声控制坐标扰动的幅度,不是错标样本的比例。小批量采用有放回随机抽样,全批量每个训练样本恰好用一次。坐标先除以 3,再构造平方与乘积特征;隐藏层激活可选,输出固定为 Tanh,标签为 −1 / +1。输出是倾向分数,并非概率。训练目标为平均半平方误差,加上 L2 权重惩罚;“损失”曲线只显示数据误差项。Dropout 对每个样本的隐藏激活独立采样,训练时按保留率缩放,评估和小地图均关闭 Dropout。
“拆开一步”的梯度柱取每个样本的数据损失对各层激活前数值的导数,在样本与神经元上计算均方根,用对数刻度展示,不含 L2 项。柱高比较的是本次计算的梯度信号,不等于各层权重更新量;学习率决定实际更新幅度。早停每 10 步检查一次验证损失,改善阈值为 0.00001,耐心为 400 步。
参考:scikit-learn · 多层感知器 · Google · 训练、验证与测试数据划分 · PyTorch · Dropout
这一页是一个真的能训练的神经网络:你决定给它什么数据、搭几层、每层几个神经元、学习率多大,然后按下开始,看那条分类边界怎样从一片混沌里长出来。它最有价值的地方不是「训练成功」,而是让你亲手把它搞坏,看清楚是怎么坏的。
底色是网络当前的判断,圆点是真实类别。刚开始底色一片random,因为权重是随机初始化的。训练开始后边界逐渐成形,下方两条曲线分别是训练集和验证集上的表现——要盯的是后面那条。中间那些小方块是每个神经元的「响应地图」:同一个位置代表同一组输入,每层都在把上一层的响应重新组合一次。
选「同心圆」这组数据,先把隐藏层减到 0:无论训练多久边界都是一条直线,圆心永远围不住。加回一层神经元,边界立刻能弯。这就是隐藏层的作用——它不是让模型「更强」,而是让模型能表达原本表达不了的形状。
再选「训练好就够了吗」那个实验:少量带噪声的样本,训练集误分率一路降到很低,验证集误分率却在某一刻掉头往上。那个拐点就是过拟合开始的地方,模型从学规律转向了背样本。
本页使用 300 个合成教学点,分层划分训练与验证集;所有数值由浏览器内的模型实时计算,验证集不作为独立测试成绩。