ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

深度学习入门指南:从神经网络原理到CNN实战与避坑手册

深度学习入门指南:从神经网络原理到CNN实战与避坑手册 算起来我接触神经网络和深度学习也有不少年头了。还记得最早的时候很多人觉得这是个玄学调参像炼丹模型跑起来像黑盒。这几年深度学习已经完全不一样了它渗透到了图像识别、语音合成、工业检测、流体仿真、量化交易、生物信息这些数不过来的领域。但很有意思的是不管外面炒得多热闹真正决定你能不能把深度学习用起来的还是那些最基础的东西——神经网络的结构、训练的思路、以及踩坑之后的排查能力。这篇内容我打算换个讲法不整那种从数学公式到论文复现的学院派路线而是站在一个“想动手把深度学习跑起来”的人的角度把神经网络到底是什么、为什么图像处理要用 CNN 而不是普通前馈网络、入门阶段应该先做哪几个项目、以及训练时最容易栽的坑一条一条说清楚。无论你是学生、工程师还是想转行做算法的人这篇文章应该都能帮你省下不少自己瞎摸索的时间。1. 神经网络到底在学什么一张图讲透核心机制1.1 从“神经元”到“函数逼近器”的认知转换很多人一听到“神经网络”这个名字就容易往生物大脑的方向联想觉得它是在模拟人脑。这个说法对也不对。它确实借用了神经元、突触、激活这些生物学概念但本质上神经网络是一个非常纯粹的数学工具。你可以把它理解成一个超级灵活的“万能函数逼近器”。什么意思就是说只要给你足够多的数据神经网络就能学出一个函数把输入映射到输出。比如输入是一张图片的像素输出是“猫”还是“狗”输入是过去 30 天的房价数据输出是未来一周的走势输入是一个句子的文字输出是这个句子表达的是正面还是负面情绪。所有这些任务本质上都是在找一个足够复杂的函数而神经网络就是那个函数本身。那这个函数是怎么被“找”出来的答案在参数里。神经网络里面包含了大量的“权重”和“偏置”参数这些参数一开始是随机初始化的整个网络的表现就像是一个什么都不懂的小孩。训练的过程就是不断调整这些参数让网络在训练数据上的表现越来越好。这个调整参数的机制就是大名鼎鼎的“反向传播”加“梯度下降”。1.2 前馈神经网络的一次完整“思考”过程先别被“前馈神经网络”这个术语吓到它其实就是神经网络家族里最基础、最朴素的一种结构。你可以把它想象成一条单向流水的管道输入数据从最左边进去经过中间一层又一层的“加工车间”最后从最右边出来一个结果。数据在这个管道里只能往前走不能回头所以叫“前馈”。每一层“加工车间”做的事情其实很简单先把输入的数据做一次加权求和也就是每个输入值乘上对应的权重再加一个偏置然后把这个求和结果扔进一个“激活函数”里做一次非线性变换最后把处理完的结果传给下一层。这里的关键是那个“非线性变换”。你想想如果每一层都只是做线性加权求和那不管叠多少层整个网络最终仍然是一个线性函数根本学不了复杂的东西。激活函数的作用就是给这个“管道”引入非线性能力。常用的 ReLU、Sigmoid、Tanh都是干这个的。我自己的体会是新手入门第一个要记住的结论就是没有激活函数的神经网络叠再多层也白搭。1.3 训练的本质拿着“梯度”找下山的路那神经网络是怎么学会映射关系的这就得说训练了。训练的核心思路特别朴素拿一批数据喂给网络得到预测结果把预测结果和真实答案放在一起算一个“损失值”损失越大说明错得越离谱然后根据这个损失去计算每个参数应该往哪个方向调、调多少。这个东西在数学上就叫“梯度下降”。你可以把整个损失函数想象成一片高低起伏的山地网络当前的一组参数对应山上的某一个点你的目标就是走到山谷最低处。梯度就是当前这个点最陡峭的下降方向你沿着这个方向迈出一小步就完成了一次参数更新。至于迈多大步子由“学习率”来控制。步子太大会跨过山谷步子太小则半天走不到底。反向传播这个算法解决的就是“如何高效地计算每个参数的梯度”这个问题。它利用链式求导法则从输出层开始把误差一层一层地往回传计算每一层参数的梯度。这个过程听起来复杂但现在主流的深度学习框架——比如 PyTorch 和 TensorFlow——都已经帮你全自动实现好了。你要做的就是搞清楚概念别把“前向传播”和“反向传播”搞混了就行。2. 图像处理为什么必须用 CNN前馈网络在图像任务上的致命短板2.1 一张 32x32 的图片就能让全连接层直接“爆掉”很多刚入门的人会有一个疑问既然前馈神经网络已经能做非线性映射了那图像分类这种任务是不是也能用它来做答案是能但代价极为惨重。这里面的核心问题是“参数爆炸”。我们来做一道简单的算术题。假设输入是一张 32x32 像素的彩色图片也就是有 32x32x3 3072 个输入值。如果第一层全连接层设置 1000 个神经元那这一层的权重参数数量就是 3072x1000 3072000三百零七万个参数。这才只是第一层。而 32x32 在图像任务里算是非常小的尺寸了现在随便一个相机拍出来的照片都是 1920x1080 甚至更高分辨率。如果用全连接网络来处理这种图像参数量会膨胀到天文数字别说训练了光是存模型都够呛。更重要的是图像这种数据天然具有“局部相关性”——相邻像素之间的关系远比相隔很远的像素重要。全连接网络把每个像素一视同仁地连到下一层完全没有利用空间结构信息纯粹是“蛮力硬算”。2.2 卷积层的三个核心思想局部感知、权值共享、平移不变性CNN也就是卷积神经网络正是为了解决上面的问题而设计的。它和普通前馈网络最大的区别在于用了“卷积”这种运算来提取特征。卷积层有个特别直观的思想用一个小的“窗口”在图片上滑动每次只关注窗口范围内的像素提取一个局部特征。这个小窗口就是“卷积核”也叫“滤波器”。这就像你在一张照片上用一个放大镜到处移动每次只看一个局部区域。通过这种“局部感知”参数数量被大大压缩了。第二个关键设计是“权值共享”。在全连接网络里每个连接都有自己的权重但在卷积层里同一个卷积核会滑过整张图片的所有位置也就是说同一个特征检测器在不同位置使用的是同一套权重。这样参数数量就只跟卷积核的大小和数量有关跟图片尺寸没有直接关系。这就是为什么 CNN 能处理任意尺寸图片的根本原因。第三个思想是“平移不变性”。一个物体出现在图片的左上角还是右下角它的特征本质上是一样的。卷积操作通过在整个图上共享同一个卷积核天然就具备了这个性质——无论目标出现在哪里都能被同一个卷积核检测到。这一点对于图像识别来说太重要了。2.3 用参数数量对比看清 CNN 的降维打击我们还是用刚才那个 32x32x3 的输入来做个对比。如果用卷积层来提取特征假设我用 32 个 3x3 的卷积核那这层参数数量就是 3x3x3x32 864 个参数。你没看错864 个参数比全连接层的三百多万个少了三个数量级。参数少了好处是显而易见的训练速度更快需要的数据量更少还不容易过拟合。而 CNN 的表现反而更好因为它的设计天然符合图像数据的结构特点。这就是为什么现在谈到图像处理大家默认用 CNN 而不是前馈网络。像 LeNet-5、VGG、ResNet 这些经典网络本质上都是在前馈网络的基础上把全连接层替换成卷积层和池化层的组合再叠加深度。2.4 池化层和感受野CNN 不可分割的两个同伴除了卷积层CNN 还有一个标配组件——池化层。池化层做的事情是降采样相当于把一张图的分辨率缩小。最常用的是最大池化也就是在一个小窗口里取最大值代表整个区域。池化层的作用有两个一是进一步减少计算量让后续层处理的数据量更小二是提供一定的平移不变性。虽然现在有些观点认为池化层可以被步长更大的卷积层替代但在主流的 CNN 结构里池化依然非常常见。顺便提一嘴“感受野”这个概念。在卷积网络里越深的层它单个神经元对应的原始图像区域就越大。这个区域就叫感受野。这也是为什么 CNN 可以一层一层地从局部特征逐步组合出全局特征——浅层识别边缘、纹理中间层识别部件、形状深层识别整个物体。这种从局部到全局的层级结构和人类视觉系统的处理方式非常相似。3. 入门必做的三个项目从 BP 拟合到 CNN 实战3.1 第一个项目用 BP 神经网络拟合一条曲线先说一个我认为最值得新手做的项目——用 BP 神经网络拟合一条曲线。别小看这个任务它虽然简单但能帮你把神经网络的前向传播、反向传播、梯度下降、损失函数这一整套流程全部打通。我当时的做法是用 MATLAB 来做。原因很简单MATLAB 的神经网络工具箱封装得很好不需要你一开始就面对 PyTorch 那一堆张量操作和 GPU 配置问题。你只需要准备好一组输入和输出数据调用feedforwardnet建一个网络设置好隐藏层神经元数量然后用train函数训练再用sim函数测试结果就行。这里有一个很关键的经验拟合曲线时隐藏层神经元数量和激活函数的选择会直接决定拟合效果。拿正弦函数来举例如果隐藏层只有 3 个神经元你得到的拟合曲线会非常粗糙几乎看不出正弦的形状加到 10 个神经元曲线就开始像模像样了加到 50 个基本就能完美贴合。这个现象的深层原因就是前面说的“函数逼近能力”——神经元越多网络能表示的函数越复杂。用 Python 做这个项目的时候我建议你手动实现一遍反向传播而不是直接调库。具体来说可以只用 NumPy 实现一个两层的全连接网络包含一个隐藏层用 Sigmoid 或 Tanh 激活函数然后自己写梯度下降更新参数。这个过程大概只需要 100 多行代码但对理解神经网络内部机制的效果远胜于直接调 PyTorch。3.2 第二个项目手写数字识别CNN 的第一个实战舞台曲线拟合跑通之后第二个项目我强烈推荐做手写数字识别数据集用经典的 MNIST。这个项目堪称深度学习的“Hello World”因为它的数据规模适中、任务定义清晰、而且特别适合用来体验 CNN 的完整流程。MNIST 数据集包含 6 万张 28x28 的灰度手写数字图片每张图对应一个 0 到 9 的标签。用 PyTorch 实现一个简单的两层卷积网络网络结构就是“卷积层 ReLU 池化层 卷积层 ReLU 池化层 全连接层”。这个结构参考的就是 LeNet-5深度学习历史上第一个成功的卷积神经网络架构。训练过程中我建议你把注意力放在几个关键环节。第一个是数据预处理要把像素值从 0-255 归一化到 0-1 之间第二个是定义损失函数多分类任务用交叉熵损失第三个是设置优化器先从 Adam 开始学习率设成 0.001。训练 5 到 10 个 epoch 之后准确率应该就能达到 99% 以上。要知道这种效果在二三十年前是不可想象的。这个项目能让你直观感受到深度学习管线的完整流程数据加载、模型定义、训练循环、评估指标、模型保存和加载。你还会第一次体会到 GPU 和大批量训练带来的速度差异这对后续做更复杂的项目非常重要。3.3 第三个项目从一个真实场景出发做端到端实战前两个项目做完之后你可能还是不满足觉得自己做的东西太“玩具”了。这时候我建议你找一个真实场景做一次端到端的实战。我见过很多不错的入门项目比如用 CNN 做猫狗图像分类用 Kaggle 的 Dogs vs Cats 数据集训练一个能区分猫和狗的分类器。这个任务比 MNIST 难很多需要处理真实图片的差异和噪声。用深度学习做情感分析输入一段影评文本输出正面或负面。这个涉及文本的向量化表示和简单的循环神经网络或 Transformer 结构。用深度学习做圆柱绕流的流场预测这个偏学术一些但如果你搞流体力学会很有意思。用 CNN 或者 LSTM 预测圆柱绕流尾流区域的流场演化是近年来深度学习结合计算流体力学的热门方向。我自己更推荐从图像任务入手因为视觉反馈直观你训练完可以立刻看到效果成就感最强。不管选哪个方向重点是要走完“数据收集与清洗 → 模型构建 → 训练调优 → 部署测试”这完整的闭环。只跑通别人写好的代码不是真本事能自己从一个原始数据集出发做出一个有实用价值的模型才算真正入门。4. 训练过程中的五个典型坑与排查手册4.1 Loss 不下降先别急着调模型检查数据和代码我见过太多人一上来就怀疑自己模型写得不对结果问题出在最基础的地方。Loss 长时间不下降第一件事应该检查输入数据的预处理。最典型的问题是数据没有归一化。很多新手直接把 0-255 范围内的像素值喂给网络导致梯度计算极不稳定训练根本无法收敛。正确的做法是先除以 255把范围缩放到 0-1 之间。第二件事是检查数据标签是否对齐。这个坑很隐蔽尤其在处理自己收集的数据时经常出现图片和标签错位的情况。你可以随机挑几张训练数据打印出图片和对应的标签肉眼核对一下。第三件事是检查损失函数是否用对了。二分类用二元交叉熵多分类用交叉熵回归用均方误差。如果任务和损失函数不匹配训练再久也白搭。我之前就见过有人把回归问题当成分类问题来做的Loss 自然降不下去。4.2 过拟合训练集表现很好验证集一塌糊涂这是深度学习里最经典的问题之一。模型的参数太多、训练数据太少导致网络把训练集的细节全部“背”下来了而不是学到通用的规律。判断过拟合的方法很简单训练 Loss 持续下降但验证集 Loss 不降反升这就是典型的过拟合信号。解决过拟合有几个从浅到深的手段。最简单的是增加数据量比如做数据增强——对图片做随机旋转、裁剪、翻转让模型看到更多变化其次是降低模型复杂度减少层数或神经元数量再次是加入正则化手段比如 L2 正则化SGD 和 Adam 优化器里都有weight_decay参数这就是在做 L2 正则最后是 Dropout也就是在训练时随机“丢弃”一部分神经元迫使网络学会冗余表示而不是过度依赖某几个节点。我自己的习惯是先用小模型跑通流程确认一切正常之后再逐步加大模型规模。这样能在出问题时最快定位到原因。毕竟模型越大排查问题的范围就越大越难定位。4.3 学习率设置与 Epoch 数量的平衡艺术学习率可能是全局最重要的超参数没有之一。学习率太大Loss 会出现震荡甚至发散学习率太小训练进度极为缓慢可能几百轮都收不到理想效果。一个实用的调参策略是先用一个较大的学习率比如 0.01 或 0.1观察 Loss 的变化趋势如果 Loss 剧烈震荡就调低到 0.001 或 0.0001如果 Loss 稳步下降就继续保持。Epoch 数量也同样关键。很多新手喜欢一口气训练几百个 epoch觉得跑得越多越好。但实际上epoch 太多会过拟合epoch 太少则欠拟合。比较稳妥的办法是配合“早停法”使用——在训练过程中监控验证集 Loss如果它连续若干个 epoch 都没有下降就提前终止训练并回滚到表现最好的那个模型权重。PyTorch 里实现早停非常简单几十行代码就能搞定。4.4 训练速度慢到怀疑人生环境配置与硬件选型经验环境配置是折磨新手最多的地方我自己也在这上面踩过不少坑。先说结论如果你只是入门学习不是做大规模训练一台带 NVIDIA 显卡的电脑就够用了不一定要上服务器。说实话跑 MNIST 这种小数据集CPU 也能跑但速度会明显慢一些一旦涉及到真实图像和较深的网络CPU 就显得很吃力了。Windows 系统下配置 PyTorch 的 GPU 环境核心是 CUDA 和 cuDNN 的版本要与 PyTorch 匹配。不过现在 PyTorch 已经提供了预编译的 wheel 包直接通过 pip 安装就可以不再需要手动去配 CUDA 环境变量了。例如pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118就可以直接装好支持 CUDA 11.8 的 PyTorch。装完之后一定要用torch.cuda.is_available()检查一下 GPU 是否可用。如果返回 False多半是显卡驱动版本太低或者安装的 PyTorch 是 CPU 版本。这一步是排查环境问题的入口。4.5 常见问题速查表与避坑技巧现象可能原因应对措施Loss 一直不下降数据未归一化 / 标签错位 / 损失函数选错检查数据预处理、随机抽样核对标签、确认任务类型训练 Loss 下降但验证 Loss 上升过拟合增加数据增强、加 Dropout、调小模型、调大 weight decayLoss 剧烈震荡学习率过大 / batch size 过小降低学习率、增大 batch sizeLoss 出现 NaN学习率过大 / 数据里有异常值降低学习率、检查输入数据是否包含 NaN 或 InfGPU 显存不足batch size 太大 / 输入图片太大减小 batch size / 调整输入尺寸 / 使用梯度累积准确率卡在 10% 左右多分类随机水平模型根本没学进去检查代码里是否正确调用了 model.train() / model.eval()这条表格基本上覆盖了新手训练模型时遇到的大部分问题。最后一个“准确率卡在随机水平”的问题我特别强调一下。很多人在 PyTorch 里写了测试循环但忘了在训练前调用model.train()、在测试前调用model.eval()。这两个模式会影响 Dropout 和 BatchNorm 的行为忘了设置哪怕代码看起来完全正确结果也会完全不对。这是我见过最容易被忽视的坑没有之一。5. 深度学习工具链选型框架、硬件与资源利用的务实建议5.1 深度学习框架新手首选 PyTorch工业部署看情况关于框架选型我个人的立场非常明确新手首选 PyTorch。原因有三个一是它采用动态计算图写代码的思路跟写普通 Python 非常接近调试体验友好二是在学术和工业界的使用量已经形成了绝对优势绝大多数开源项目都基于它遇到问题能找到最多参考三是社区生态完善从数据加载到可视化工具都有现成的库可以用。TensorFlow 和 Keras 不是不好但它们在 API 上经历了太多变化新手很容易被各种版本差异搞晕。而且很多经典的教程和开源代码已经是基于旧版本写的照搬到新版本上根本跑不起来这种挫败感对刚入门的人来说是很伤积极性的事。如果你的专业背景是工业视觉检测方向那你可能还会遇到 Halcon 这个工具。它里面有深度学习工具模块不需要写任何代码通过图形界面就能完成标注、训练和推理部署。对于快速验证某个视觉检测需求Halcon 确实很方便。但它本身不是一个通用的深度学习框架遇到比较特殊的网络结构或者复杂的预处理逻辑时写代码仍然更灵活。所以我的建议是会用 Halcon 不丢人但千万别因此忽略了真正掌握 PyTorch 或 TensorFlow 的能力。5.2 硬件资源不够用云平台和轻量化方案了解一下深度学习对硬件的要求确实劝退过不少人但说实话入门阶段完全没有必要被这方面吓住。如果你手上只有一台普通电脑甚至只有 CPU照样可以把基础项目跑起来。MNIST、CIFAR-10 这种数据集用 CPU 训练也就是多等几分钟的事。我最初学 CNN 的时候就是用一台没有任何独立显卡的老笔记本跑的白天跑训练晚上去看结果一样能学完整个入门阶段。等你的项目真正大到 CPU 跑不动了再考虑云平台也不迟。现在国内外的云平台都有按需付费的 GPU 实例按小时计费跑完就释放成本完全可控。Kaggle Notebook 和 Google Colab 都是免费的 GPU 资源唯一的门槛是你需要能稳定访问这些服务。如果你的网络环境不方便那就老老实实租个国内云服务器的 GPU 实例也没有多贵。还有一类方案值得关注比如摩尔线程这类国产 GPU 产品在推理场景已经有一些落地案例。但如果你是初学者我不建议在国产 GPU 上折腾训练环境驱动和框架适配的坑比 NVIDIA 生态要多不少。等到你真正有余力折腾部署优化了再考虑这些选择也不迟。5.3 深度学习“鱼书”和《动手深度学习》两本我最推荐的书提到学习资源很多人会问该读哪本书。我的推荐非常固定斋藤康毅的《深度学习入门基于 Python 的理论与实现》因为封面是条鱼大家习惯叫它“鱼书”以及李沐老师的《动手深度学习》。这两本书的风格完全互补是我眼中入门深度学习最好的一套组合拳。“鱼书”最大的优点是它不依赖任何深度学习框架用纯 Python 和 NumPy 从零实现了一个完整的神经网络包括前向传播、反向传播、损失函数、训练循环。你把这本书的例子敲一遍对神经网络的理解会扎实到骨子里。它的代码很精简逻辑非常清晰适合作为第一本深度学习书。《动手深度学习》则刚好反过来它直接用 PyTorch书里有不同框架版本实现各种主流模型同时配有很详细的理论讲解。它更贴近工程实践你能第一时间知道真实项目里是怎么写代码的。我建议的学习顺序是先啃“鱼书”把基础网络写一遍再打开《动手深度学习》把经典的 CNN、RNN、Transformer 这些模型跑一遍。这个顺序下来你对深度学习的理解和动手能力会远超那些只刷网课的同学。6. 深度学习的进阶方向从 CNN 走向更广阔的网络家族6.1 循环神经网络、图神经网络与强化学习把 CNN 玩明白之后你可能会问除了 CNN深度学习还有哪些方向这里我说几个我认为值得关注的方向。第一个是循环神经网络也就是 RNN以及它的变体 LSTM 和 GRU。RNN 解决的是一个跟 CNN 完全不同的场景序列数据处理。文本、语音、时间序列这些数据前后有依赖关系前一刻的输出会影响后一刻的状态。RNN 的核心理念就是让网络拥有“记忆”——每个时间步的输入都会同时接收当前输入和上一步的隐藏状态。语音识别、机器翻译、语音合成也就是热搜里的“神经网络 TTS”、股票预测这些任务都离不开循环神经网络。第二个是图神经网络也就是 GNN。它专门处理图结构数据比如社交网络、分子结构、知识图谱。CNN 处理的是规则的网格数据而图数据是不规则的、每个节点的邻居数量都不一样。图神经网络通过“消息传递”机制让每个节点聚合邻居节点的信息来更新自己的表示。这几年在制药分子性质预测、推荐系统、物理系统模拟等领域GNN 的表现非常亮眼。第三个是强化学习特别是深度强化学习。如果说监督学习是从“标注好的答案”里学那强化学习就是从“试错反馈”里学。智能体通过执行动作、获得奖励或惩罚学会一套最大化长期收益的策略。AlphaGo 就是强化学习最出圈的代表。现在深度强化学习在自动驾驶决策、机器人控制、游戏 AI、资源调度等领域都有大量应用。6.2 卷积神经网络的进阶形态与新架构CNN 这个方向本身也在不断进化。最早期的 LeNet-5 只有 5 层到 VGG 做到了 19 层再到 ResNet 做到了上百层。这些模型结构上的演进解决的核心问题是“网络加深之后如何训练”。ResNet 的残差连接是这里面里程碑式的设计——它让梯度可以走“高速公路”直接传到前面的层从根本上缓解了深层网络的梯度消失问题。今天你看到的几乎所有主流视觉模型不管是 MobileNet、EfficientNet 还是 Swin Transformer都在使用残差连接的思想。EfficientNet 是另一个很有意思的方向它通过“复合缩放”的方法同时平衡网络的深度、宽度和输入分辨率用较小的参数量达到了很高的精度。而 Vision Transformer也就是 ViT直接把 Transformer 架构从 NLP 搬到了图像领域把图片切成一块块 patch 当成“词”来处理。这条路后来催生了 Swin Transformer 等一系列新架构在图像分类、目标检测、分割任务上都取得了非常好的成绩。我的建议是你不必追求把所有新模型都搞懂但至少要建立“视觉任务的新方法不只有 CNN”这个认知。在实际项目中把这些模型当成工具箱里的不同工具先根据任务数据量和设备算力选一个合适的跑起来再说。6.3 数学理论泛化误差界为什么值得你花时间最后想花一点篇幅说说数学理论。很多做工程的人会忽略理论觉得“能跑就行”。但有一块数学理论我建议你有余力的时候一定要补上那就是泛化误差界。泛化误差界讨论的是一个很本质的问题模型在训练集上表现好凭什么在没见过的数据上也表现好这套理论给出了一个分析框架把模型的误差分解为“训练误差”和“泛化差距”然后用 VC 维、Rademacher 复杂度、PAC 学习这些工具来分析数据和模型复杂度如何影响这个差距。简单说它回答的是“为什么简单模型有时候比复杂模型更好”这个问题。我之所以推荐你看这块内容是因为它能帮你建立“模型选型”的判断力。当你面对一个新任务时理论直觉会告诉你数据量少就该选简单模型数据量充足才能撑得起大模型模型容量和正则化强度之间需要平衡。这些直觉没法通过跑几个项目获得但它能让你在调参时更有方向感而不是像无头苍蝇一样乱试。写在最后的一点个人建议如果你问我学了这么多神经网络和深度学习的知识最后沉淀下来的是什么我的体会是技术更新太快了但底层的东西一直没变。从我最早用 MATLAB 的神经网络工具箱到今天用 PyTorch 训练大规模的 Transformer变的是工具和模型结构不变的是数据、模型、损失函数、优化器这四个核心组件之间的相互作用逻辑。只要你能把这四者的关系搞透不管未来出现什么新架构你都能很快上手。还有一个很具体的建议是每学一个新模型不要只满足于调库跑通尽量做到“能徒手实现出来”。哪怕只是实现一个简化版这个过程带给你的理解深度是任何教程都无法替代的。我刚学 CNN 的时候曾经手写过纯 NumPy 版本的卷积操作性能比框架慢了几百倍但对卷积的运算逻辑和梯度反传的理解就是从那段慢代码里建立的。技术这东西别人讲一百遍不如自己上手写一遍。
返回列表