FAFormular and AlgorithmCNNConvoluation Neural Network1. 写在前面为什么用多项式讲模型选择在深度学习中模型选择听起来抽象但它的本质问题非常朴素给定一份数据我们该选多复杂的模型模型太简单连训练数据都拟合不好这叫欠拟合模型太复杂把训练数据里的噪声也当成规律学了进去这叫过拟合。这两种情况都会让模型在新数据上表现糟糕。本文用一个最经典的例子——多项式拟合——把这两个概念讲透。它足够简单可以手算、可以可视化又足够典型能完整复现深度学习里容量—误差的核心矛盾。2. 核心概念模型容量、欠拟合与过拟合2.1 模型容量模型容量model capacity指模型能够拟合的函数复杂程度。在多项式拟合中容量就是多项式的最高次方一次多项式只能拟合直线容量很低三次多项式能拟合带拐点的曲线容量适中十九次多项式能穿过任意 20 个点容量极高。2.2 特征维度与参数个数设输入特征为xxx我们用xxx的 0 次方到d−1d-1d−1次方构造特征向量ϕ(x)[1, x, x22!, x33!, …, xd−1(d−1)!] \phi(x) \left[1,\ x,\ \frac{x^2}{2!},\ \frac{x^3}{3!},\ \dots,\ \frac{x^{d-1}}{(d-1)!}\right]ϕ(x)[1,x,2!x2,3!x3,…,(d−1)!xd−1]其中ddd是特征向量的维度111对应偏置项bbb的维度。每个维度对应一个可学习权重因此参数个数 特征维度 多项式阶数 1。这里除以阶乘是为了数值稳定x19x^{19}x19会爆炸而x19/19!x^{19}/19!x19/19!不会。2.3 欠拟合与过拟合的直观判断现象训练损失测试损失原因欠拟合高高模型容量不足连训练集规律都没学到合适低低容量与数据复杂度匹配过拟合极低高容量过大把噪声也拟合了判断过拟合的关键信号是训练损失持续下降但测试损失先降后升两条曲线出现明显分叉。3. 数据生成构造一个真实的三阶多项式我们使用以下三阶多项式来生成训练和测试数据的标签y51.2x−3.4x22!5.6x33!ϵ,ϵ∼N(0,0.12) y 5 1.2x - 3.4\frac{x^2}{2!} 5.6\frac{x^3}{3!} \epsilon,\quad \epsilon \sim \mathcal{N}(0, 0.1^2)y51.2x−3.42!x25.63!x3ϵ,ϵ∼N(0,0.12)需要强调这个式子只是一个三次多项式并不是哪个函数的泰勒展开。除以阶乘只是为了让各阶项的量级接近方便优化。真实权重为w[5, 1.2, −3.4, 5.6]w [5,\ 1.2,\ -3.4,\ 5.6]w[5,1.2,−3.4,5.6]其余高阶项权重为 0。我们的任务是只给模型看(x,y)(x, y)(x,y)数据看它能否把权重学回来。4. 代码实现从数据生成到训练4.1 生成多项式特征与标签importmathimportnumpyasnpimporttorchfromtorchimportnnfromd2limporttorchasd2l max_degree20# 特征维度为 20每个样本是 [20, 1] 的 tensorn_train,n_test100,100# 100 个训练样本、100 个测试样本true_wnp.zeros(max_degree)true_w[0:4]np.array([5,1.2,-3.4,5.6])# 真实权重只有前 4 项非零featuresnp.random.normal(size(n_trainn_test,1))np.random.shuffle(features)# 对每个特征取 0 次方、1 次方、2 次方……19 次方poly_featuresnp.power(features,np.arange(max_degree).reshape(1,-1))foriinrange(max_degree):poly_features[:,i]/math.gamma(i1)# i 次方的特征除以 (i1) 阶乘# 根据多项式生成 y并加入噪声labelsnp.dot(poly_features,true_w)labelsnp.random.normal(scale0.1,sizelabels.shape)# 转为 tensortrue_w,features,poly_features,labels[torch.tensor(x,dtypetorch.float32)forxin[true_w,features,poly_features,labels]]print(features[:2])# 前两个样本的 xprint(poly_features[:2,:])# 前两个样本的 x 的所有次方print(labels[:2])# 前两个样本的 x 对应的 y4.2 评估函数defevaluate_loss(net,data_iter,loss):评估给定数据集上模型的损失metricd2l.Accumulator(2)# 两个数的累加器损失总和、样本个数forX,yindata_iter:outnet(X)yy.reshape(out.shape)# 统一形状lloss(out,y)metric.add(l.sum(),l.numel())returnmetric[0]/metric[1]# 返回平均损失4.3 训练函数deftrain(train_features,test_features,train_labels,test_labels,num_epochs400):lossnn.MSELoss()input_shapetrain_features.shape[-1]netnn.Sequential(nn.Linear(input_shape,1,biasFalse))# 单层线性回归batch_sizemin(10,train_labels.shape[0])train_iterd2l.load_array((train_features,train_labels.reshape(-1,1)),batch_size)test_iterd2l.load_array((test_features,test_labels.reshape(-1,1)),batch_size,is_trainFalse)trainertorch.optim.SGD(net.parameters(),lr0.01)animatord2l.Animator(xlabelepoch,ylabelloss,yscalelog,xlim[1,num_epochs],ylim[1e-3,1e2],legend[train,test])forepochinrange(num_epochs):d2l.train_epoch_ch3(net,train_iter,loss,trainer)ifepoch0or(epoch1)%200:animator.add(epoch1,(evaluate_loss(net,train_iter,loss),evaluate_loss(net,test_iter,loss),))print(weight,net[0].weight.data.numpy())5. 三组实验欠拟合、恰好拟合与过拟合5.1 三阶多项式恰好拟合train(poly_features[:n_train,:4],poly_features[n_train:,:4],labels[:n_train],labels[n_train:])# weight [[ 4.988501 1.2836959 -3.3589993 5.405713 ]]学到的权重与真实权重[5,1.2,−3.4,5.6][5, 1.2, -3.4, 5.6][5,1.2,−3.4,5.6]非常接近训练损失和测试损失都收敛到很低这是容量与数据复杂度匹配的理想状态。5.2 一阶多项式欠拟合train(poly_features[:n_train,:2],poly_features[n_train:,:2],labels[:n_train],labels[n_train:])# weight [[3.6593914 3.0195978]]用直线去拟合一条三次曲线无论训练多久损失都降不下去。模型根本没有能力表达数据的真实规律这就是欠拟合。5.3 十九阶多项式过拟合train(poly_features[:n_train,:],poly_features[n_train:,:],labels[:n_train],labels[n_train:])# weight [[ 4.95713 1.2931961 -3.142203 5.1588063 -0.683433 1.3676366# -0.22168443 0.30410182 0.22201246 -0.01267278 -0.06214145 -0.1347487# -0.16502385 -0.16112421 -0.10519557 -0.06851828 0.03842303 0.07775125# 0.12161571 -0.05093227]]前 4 项权重依然接近真实值但后面 16 项本应为 0 的权重被学成了各种非零小数。模型把训练集里的噪声也当成了规律训练损失极低测试损失却明显偏高。6. 结果对比与结论否是是否选择模型容量训练损失是否足够低欠拟合增大容量/增加特征测试损失是否也低容量合适训练/测试损失都低过拟合正则化/减少容量/增加数据三组实验的结论可以浓缩成一句话容量不足 → 欠拟合训练损失和测试损失都高模型学不动容量匹配 → 恰好拟合训练损失和测试损失都低权重接近真实值容量过大 → 过拟合训练损失极低测试损失升高权重出现大量虚假非零项。7. 实践建议先看损失曲线再调模型训练/测试损失同时高先加容量训练低测试高先加正则。用验证集做模型选择不要用测试集反复调参否则测试集也会被过拟合。正则化是过拟合的常用解药权重衰减L2、Dropout、早停都能抑制高阶项乱跳。数据量是最朴素的正则样本越多过拟合越难发生。特征工程要克制像本文这样构造 20 维多项式特征本质是在人为放大模型容量。8. 小结多项式拟合是理解模型选择的最佳入门实验它把容量具象成多项式阶数把欠拟合/过拟合具象成损失曲线分叉。掌握这套直觉后再去看神经网络里的层数、宽度、正则化系数你会发现它们讨论的是同一件事——在拟合能力与泛化能力之间找平衡。
企业数字化 ERP 产品动态
相关推荐
经验丰富的汽车安装车载手机互联苹果Carplay和华为Hicar哪家专业 最近好几个朋友都问我,车子上想装个CarPlay或者HiCar,到底去哪里弄靠谱。说真的,我太懂这种纠结了。我自己那台车,当初就是冲着车机互联去的,结果在路边店装完,先是连不上,后来好不容易连上了&a… · 2026/11/3 2:47:27
GitLab 私有化部署太吃内存:只留仓库和合并请求 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 2:46:27
[Python-3] 分支与循环 一、程序执行流程
程序的执行流程,可以理解为:程序按照什么顺序执行语句,以及在什么情况下执行哪些语句。
我们先认识三种基本流程:顺序、分支和循环。
1、顺序结构
顺序结构是最基本的执行方式。在没有被分支、循环等结构改变执行… · 2026/11/3 2:46:27
基于Java的校园新闻发布平台架构设计与实践 1. 项目背景与核心价值校园新闻发布平台是高校信息化建设中的基础性应用系统,它解决了传统纸质公告和微信群通知带来的信息分散、留存困难、管理低效等问题。我们团队基于Java技术栈开发的这套系统,在三个重点院校实际运行两年间,日均处理新闻… · 2026/11/3 3:18:32
制造业采购:如何有效获取工厂样品的策略与方法 1. 为什么工厂不愿意提供样品?在制造业领域,工厂拒绝提供样品的情况并不少见。作为从业多年的采购专家,我经常遇到这种情况。工厂拒绝提供样品的原因通常有以下几种:成本考量:样品生产需要单独开模、调试设备ÿ… · 2026/11/3 3:18:32
看懂AArch64汇编:从崩溃反汇编到A64指令集核心机制 简介:面向Armv8-A架构下AArch64汇编语言学习者与底层开发者的指令集参考资料,适合需要系统查阅64位ARM指令、补齐体系结构细节的中高级读者。压缩包内为1个PDF文档,约9.7MB,内容以Arm官方A64指令集参考为主线,便于按指… · 2026/11/3 3:18:32
MySQL锁机制解析:行锁、间隙锁与临键锁实战 1. MySQL锁机制深度解析:行锁、间隙锁与临键锁实战指南作为数据库领域的核心并发控制机制,MySQL的锁系统设计直接影响着系统的吞吐量和数据一致性。在实际生产环境中,我们经常遇到这样的场景:高并发更新导致大量锁等待、范围查询意… · 2026/11/3 3:18:32
ArcGIS栅格重采样前必须统一投影的深度解析 1. 为什么重采样前必须统一投影?在ArcGIS中进行栅格数据重采样时,投影一致性是经常被忽视却至关重要的前置条件。去年处理某省DEM数据时,我曾遇到一个典型案例:团队直接将WGS84坐标系的30米分辨率DEM重采样到CGCS2000坐标系的10米… · 2026/11/3 3:18:32
SRC漏洞挖掘入门与实战指南 1. SRC漏洞挖掘行业现状与入门路径2023年国内企业SRC平台新增注册白帽子数量同比增长47%,其中通过CTF赛事转型的安全研究员占比达63%。这个数据背后反映的是网络安全行业对实战型人才的需求激增。我接触过上百名刚入行的白帽子,发现他们普遍存在三个认知… · 2026/11/3 3:17:32
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18