很多朋友第一次接触深度学习大多是从某个具体需求开始的毕业论文要做一个人脸识别或图像分类系统工作里要搭一套视觉检测流程又或者只是看到“深度学习”四个字被到处刷屏想知道它到底神在哪里。我自己也是这么走过来的——大二那年想做表情识别一开始只会用OpenCV的Haar特征后来换成CNN再后来发现训练速度上不去才知道GPU和多层网络背后的机制才是关键。现在回看深度学习的发展史如果不把几个关键节点讲明白就很难理解为什么今天所有人都在讨论Transformer和大模型也很难理解为什么一张显卡会成为搞算法的刚需。这篇文章我就按自己的理解把深度学习从萌芽到今天的发展脉络完整梳理一遍顺带把入门路上大家最关心的问题——学什么、怎么配置环境、要不要租服务器、有哪些实战项目——一次性聊透。1. 深度学习到底是什么从感知机到多层神经网络的底层逻辑1.1 一切从“模拟神经元”说起深度学习这个概念听起来高大上但它最原始的出发点其实特别朴素模仿人脑神经元的工作方式。一个神经元接收多个输入信号经过加权求和后再通过一个激活函数决定“要不要往下传递”。把这个结构串起来就形成了神经网络。早期叫感知机只有一层能处理线性可分的问题比如判断一封邮件是不是垃圾邮件。当时很多人以为这就是人工智能的终点结果一盆冷水很快泼了下来。感知机的局限在于它只能处理线性关系。现实世界的问题几乎没有纯线性的猫和狗的图像差异、语音里的情感变化、文本里的语义关联全部都是高度非线性的。要处理非线性就必须引入多层结构并在每一层之间加入激活函数让网络有能力去拟合复杂的映射关系。这正是深度学习与早期神经网络最大的不同它通过多层堆叠把原始输入逐层抽象先学边缘、再学纹理、最后学出“这是一个猫耳朵”这种高层特征。1.2 深度学习“深”在哪里自动特征提取传统机器学习做分类最痛苦的一步是特征工程。你得手工设计特征图像的HOG、SIFT文本的TF-IDF语音的MFCC。这些特征设计得好坏直接决定模型上限。深度学习改写了这个游戏规则——它用大量数据自动学习特征整个过程不需要人工干预。你给它一万张猫狗图片它会自己在中间层学会如何区分毛发纹理、耳朵形状这些判别性信息。这也是为什么“端到端学习”成了深度学习的招牌。输入原始数据输出最终结果中间的加工全交给网络。一开始很多人觉得这不靠谱觉得没有可解释性但实践证明只要数据量够大、算力够强自动学出来的特征往往比人手工设计的更好用。现在很多场景已经把深度学习当作默认工具原因就在这它能省掉最难的人工环节。提醒一下自动特征学习不是万能的它依赖两个东西充足的数据和足够的算力。项目起步前先问自己这两样有没有保障。2. 深度学习发展史上的四个关键转折点2.1 第一次热情与第一次寒冬感知机的天花板深度学习的故事要从1958年感知机问世讲起。当时Frank Rosenblatt设计的感知机能够完成简单的模式识别媒体一度把机器“会看会认”吹成了“会思考”。但很快Minsky和Papert在1969年出版的《Perceptrons》里从数学上证明单层感知机连异或问题都无法解决这相当于直接给当时的神经网络判了死刑。研究经费被砍神经网络进入第一次大寒冬。这段历史的教训很深刻一个技术方向如果不能持续突破上限就会被资本市场和研究机构抛弃。神经网络当时不是不聪明而是受限于理论基础和算力条件它跑不到能让人信服的效果。后来很多学者转向符号主义、专家系统神经网络研究变成了少数人坚持的冷门方向。2.2 反向传播的重新发现让深层网络可训练神经网络能“复活”得感谢反向传播算法。这个思路最早可以追溯到Paul Werbos在1974年的博士论文但真正引爆学术界的是1986年Rumelhart、Hinton和Williams发表的《Learning representations by back-propagating errors》。简单解释一下网络在前向传播中算出预测结果与真实标签产生误差然后通过链式求导把误差从输出层一层一层传回去更新每一层的权重。这个过程就像你在黑灯瞎火的楼梯里往下走每一步都用脚试探哪边更低最终慢慢走到平地。反向传播解决了训练问题但新的瓶颈又出现了网络层数一旦加深梯度在传播过程中要么爆炸要么消失深层网络反而训练不动。这个问题在后来的二十多年里一直是制约深度学习的最大障碍。很多人尝试各种初始化方法、激活函数调整效果都不理想。那个年代就算你知道深层网络理论上更好你也没有手段把它真正训练起来。2.3 2006年的三个关键词预训练、GPU、Dropout2006年Hinton在Science上发表论文提出用逐层预训练的方式初始化深度网络这一下点燃了第三次浪潮。为什么预训练有效因为它先在无监督数据上让每一层学会一个合理的特征表示再去用反向传播做精细微调。这个思路和后来大模型时代“先预训练再微调”的做法本质上一脉相承。与此同时GPU进入了研究者的视野。GPU本来是为图形渲染设计的但它的并行计算结构特别适合做矩阵运算——神经网络的前向和反向传播全是矩阵乘法和加法。2007年前后研究者发现用GPU训练网络可以快几十倍。这就像以前你用小推车拉土突然给你一辆翻斗车效率完全不是一个数量级。加上ReLU激活函数解决了部分梯度消失问题Dropout机制减少了过拟合深度网络终于能从“想法”变成“能跑的东西”。2.4 ImageNet之战与AlexNet的破局如果要在发展史上挑一个最戏剧性的瞬间我选2012年ImageNet图像识别大赛。那年AlexNet把Top-5错误率从26.2%直接砍到15.3%碾压所有传统方法。这个差距当时震惊了整个计算机视觉圈也基本宣告了深度学习成为视觉领域的主流范式。AlexNet之所以能赢归结起来是三件事一是用了ReLU让深层网络训练更快二是用Dropout降低过拟合三是充分挖掘GPU并行计算能力。肖恩·帕克后来在一次采访里评价说那不是一个算法层面的微小进步而是证明“深度学习这条路完全走得通”。从2012年开始图像分类、目标检测、人脸识别、图像分割几乎所有方向都开始转向深度学习。我再回看自己早期做的人脸识别项目从Haar特征切到深度学习之后效果提升是肉眼可见的不仅仅是准确率高而是那种复杂场景下的鲁棒性完全不同。直到今天卷积神经网络依然是图像领域的基石AlexNet的很多思想仍然延续在ResNet、EfficientNet这些现代网络里。它不是一个被淘汰的老古董而是一座被正确攻下的山头。3. Transformer、大模型与LLM深度学习进化的下一站3.1 Transformer架构如何重塑NLP2017年Google团队发表《Attention Is All You Need》提出Transformer架构。这个标题的自信程度现在回头看确实配得上。Transformer的核心是自注意力机制它让模型在处理一个词的时候能够同时“看到”句子中所有其他词根据相关性分配权重。对比RNN和LSTM只能按顺序一步步读Transformer相当于直接打开一整页文字一眼扫完全部内容。自注意力带来两个巨大优势一是并行计算效率大幅提升训练速度上去了二是能捕捉长距离依赖关系理解上下文的能力显著增强。BERT就是基于Transformer的编码器结构GPT则是基于解码器结构。我最早接触Transformer的时候还在怀疑它是不是只会刷榜后来在文本分类、命名实体识别这些任务上试了几轮才彻底服气。这套架构很快从NLP扩展到视觉、语音、多模态成了新一代的通用骨架。3.2 LLM到底算不算深度学习这个问题的答案非常明确LLM就是深度学习而且是深度学习最典型、最庞大的产物。Large Language Model的底层依然是多层神经网络训练方式依然是反向传播加梯度下降模型结构依然是Transformer堆叠这些全部属于深度学习的范畴。它和传统深度学习的区别在于规模——参数动辄几百亿上千亿训练数据覆盖几乎所有公开文本再加上强化学习做人类偏好对齐才出现了“会聊天”“会写代码”“会推理”的能力。你会看到一些讨论说LLM是不是已经超越了深度学习这其实是概念混淆。深度学习就像一座大厦的地基和框架LLM只是在上面盖出的一座超级高楼。你不可能把房子和地基割裂开来看。我在带新人入门时经常说别觉得自己在LLM时代就不用学深度学习基础了反而更该把梯度、注意力、微调这些核心概念吃透否则连Prompt给得再好遇到模型行为不如预期时也无从下手。4. 深度学习在行业场景里的真实现状4.1 医疗影像口腔疾病图像识别医疗是深度学习落地最早也最认真的行业之一。比如基于深度学习的口腔疾病图像识别系统做的就是“让电脑看牙片帮忙标出龋齿、牙周炎、根尖病变这些区域”。这类系统一般用分割网络或目标检测网络在标注好的牙科X光数据集上训练。难点不在于网络结构而在于医疗数据的标注成本极高一个牙片需要专业医生花很长时间去标注边界。我在辅助带过一个类似项目学生问得最多的问题是“网络用U-Net还是DeepLabV3”。我的建议是先不要纠结SOTA模型而是花精力把数据清洗、类别平衡和标注一致性做好。医疗影像数据有一个特点病变更区占比极小如果直接训练模型会倾向于把所有东西都预测为正常。这里可以加Focal Loss或者对少样本类别做过采样。做这类系统还有一个绕不开的动作是跟临床医生反复确认模型输出的使用边界它能辅助筛查但不能代替诊断这是底线。4.2 安全对抗CNN识别恶意软件传统杀毒软件的核心是特征库匹配攻击者通过混淆、加壳就能轻松绕过。深度学习的思路完全不一样——它把恶意软件的二进制字节或API调用序列转化成灰度图或行为特征向量再用CNN或RNN去自动找规律。听起来有点像“把程序当图片看”但实际效果很好。CNN能自动提取局部序列模式而这些模式往往对应恶意代码里常见的恶意行为片段。这种方法的优势在于泛化能力面对没见过的变种恶意软件CNN模型可能仍然能识别出来因为它学的是“恶意行为的样子”而不只是某个具体病毒的特征码。不过也要泼一盆冷水对抗样本是个大问题攻击者可以通过向二进制流中注入微小扰动来欺骗模型。做安全方向的人一定要把模型鲁棒性和对抗防御纳入设计别只看干净数据集上的准确率。4.3 语音处理人声抑制与音频分离人声抑制本质上是一个语音增强问题从带噪声的音频里把人声提取出来或者反过来把背景音乐、环境噪音去掉。常见做法是搭建一个U-Net结构的神经网络输入是音频的频谱图输出是干净人声的掩码这个掩码再去直接过滤原始频谱。这里的训练数据非常关键你需要成对的“带噪混合音频”和“干净人声”简单粗暴的做法是直接把语料库里的干声和噪声素材随机混合生成训练集。我实际测试过几套开源人声分离模型有些在纯音乐场景下分离得很干净但遇到说话带口音、音频采样率低的情况效果就明显下降。这说明语音类深度学习对数据分布非常敏感。在部署时还要考虑推理延迟和内存占用很多场景是在嵌入式设备上实时跑的模型剪枝和量化基本是必选项。5. 新手入门深度学习资源、环境与项目路线5.1 编程语言和框架怎么选问“深度学习需要学什么编程语言”的人特别多答案简短首选Python。不只是因为生态最成熟而是因为你想用的几乎每个深度学习库——PyTorch、TensorFlow、Keras、OpenCV——都优先支持Python接口。有一个小技巧是顺带学一点NumPy和pandas很多数据处理环节根本绕不开。框架层面如果不是工业部署有特殊要求现代入门者可以直接选PyTorch。它的调试体验比TensorFlow好显式计算图写起来更符合直觉社区教程也最多。工业界还有一些工具走的是另一条路线比如HALCON、VisionMaster这类机器视觉软件它们的深度学习模块把训练和推理封装得很友好适合不熟悉编程的工程师直接上手。但如果你打算深入算法本身还是建议把PyTorch作为主武器。表格里放个对比方便你选型框架适合人群特点备注PyTorch研究者、算法工程师、学生动态图、调试直观、生态活跃首选推荐TensorFlow生产部署、部分老项目静态图能力、工业生态成熟与Keras配合使用HALCON/VisionMaster机器视觉工程师图形化操作、行业算法封装适合快速落地MATLAB教学、信号处理场景语法简单、内置工具箱学术使用多性能一般5.2 学习资料推荐从课程到教材被提到最多的入门课程是吴恩达的Deep Learning Specialization。它把一个复杂概念拆得很碎每节课都不长配上代码作业适合零基础。中文用户还可以看《动手学深度学习》这本书厉害在“一边看图一边写代码”每一章都配套可运行的代码环境装好后直接跑起来。建议大家学的时候不要只看视频一定要跟着动手敲代码。看会了和写会了完全是两码事。教材方面《深度学习》俗称“花书”是经典参考书理论密度高适合系统学习数学原理。如果你更偏应用可以先读《Python深度学习》这本面向Keras的书。还有人问“有没有深度学习课本pdf”这类资源现在网上很容易找到不过我更建议去官方出版社或课程主页找合法版本内容更新更及时。另外入门阶段要克制住“狂收资料”的冲动资料越多反而越看不完选一套认真啃下来比囤一百个链接有用。5.3 环境搭建实操Miniconda PyTorch环境配置劝退了很多人其实只要思路对了并没有那么痛苦。核心原则是“用conda管理环境用pip装深度学习库”避免全局环境依赖混乱。我第一次配置环境的时候不懂这个直接往系统Python里装包后来装到OpenCV和PyTorch版本冲突把整个环境搞得乱七八糟浪费了一整天。后来固定用Miniconda再也没有遇到类似问题。一个标准的本地CPU环境配置流程大致是这样# 安装Miniconda后创建一个专属环境 conda create -n dl python3.10 conda activate dl # 安装PyTorch CPU版CPU版体积更小先跑通代码再说 pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu # 装常用库 pip install numpy pandas matplotlib scikit-learn jupyter # 安装深度学习教材配套库 pip install d2lGPU版的逻辑完全一致只需要到PyTorch官网选好CUDA版本再把安装命令里的index-url换成对应CUDA地址。这里有几个细节要注意CUDA、PyTorch、显卡驱动的版本必须相互兼容最简单的方法是先用nvidia-smi看看显卡驱动支持的CUDA最高版本再去PyTorch官网查对应版本。别在环境上硬磕太久能跑起来就行。5.4 硬件CPU、GPU还是租服务器很多人一上来就想买GPU我反而建议先用免费资源跑通流程。Google的Colab、Kaggle Notebook、以及各类深度学习云平台都提供免费的GPU时长足够做课程作业和小型项目。练手阶段用CPU也能跑数据量小、网络浅的情况下慢是慢点但能帮你专注在调试和逻辑本身。当模型规模变大或数据量变多时再考虑租用服务器。租服务器有几个好处一是省掉显卡采购和维护成本二是按需付费钱花在刀刃上。租服务器前要先确认是否提供GPU实例以及是否预装了深度学习镜像。现在很多云平台直接提供一键创建“深度学习环境”的功能连CUDA和cuDNN都配好了省心很多。另外如果你用NPU设备做部署要注意NPU的算子支持和PyTorch之间还有兼容性问题需要额外安装对应厂商的工具链。6. 我踩过的坑和建议6.1 新手最容易犯的5个错误一上来就攻坚复杂模型。有同学第一次做项目就上EfficientNet、预训练微调全套结果数据只有几百张训练半天不收敛代码到处报错。新手的正确姿势是从LeNet、ResNet18这种经典浅网络开始把数据加载、训练循环、测试评估这些基本功打牢。不重视数据只调网络结构。模型是厨师数据是食材。食材不新鲜厨师再牛也做不出好菜。图像分类项目里清洗错误标签、处理类别不平衡、做数据增强这些事的优先级远高于换一个Loss函数。过拟合了还在加轮数。我见过最离谱的情况是训练Loss非常低、验证Loss反弹还在继续加大epoch。这就是典型过拟合信号。正确做法是加正则化、加Dropout、减小模型容量或者做数据增强。无视实验记录。跑了一个月模型说不清哪个参数组合最好全凭感觉。刚开始就养成记录习惯每次实验保存config、数据统计、评价指标甚至随机种子都要记。后面复盘时会感激自己。忽略梯度爆炸和消失。深层网络训练不稳定典型表现是Loss变成NaN或者根本不下降。这时先检查学习率是不是太大再检查初始化方式可以考虑加BatchNorm或梯度裁剪。6.2 一条比较稳妥的实战路线如果你想三个月左右入门并完成一个能写进简历的项目我建议这样安排。第一个月打基础学Python、NumPy过一遍吴恩达课程或《动手学深度学习》的图像分类部分跑通MNIST和CIFAR-10这两个经典数据集。第二个月做小项目选一个领域分类任务比如基于CNN的恶意软件分类、口腔疾病图像识别这种课题找好数据集把迁移学习用起来。第三个月深化和优化加数据增强、调超参数、对比不同网络结构做错误分析写项目总结。很多热门词汇提到的方向也可以作为选题参考深度学习时序预测可以用股票或气象数据练手深度强化学习可以从CartPole环境开始计算位姿并微调属于姿态估计领域也可以用现成数据集跑通流程。项目不一定多高端但必须完整——数据、训练、评估、展示一个环节都不能少。6.3 写在最后深度学习的边界与值得深耕的方向我个人在实际操作中的体会是深度学习不是玄学它本质上是“用大规模数据和计算资源去逼近复杂函数”。能解决的问题都有一个共同特征存在可学习的模式且我们拥有足够的数据去表达这个模式。反过来数据稀缺、因果推理要求高、需要严格可解释性的场景目前依然很难用纯深度学习解决。未来值得深耕的方向我自己比较看好的是多模态模型让文本、图像、语音统一在一个模型里处理、边缘端高效推理让手机和嵌入式设备也能跑大模型以及强化学习与决策类任务的结合。这些方向不是去追热点而是把深度学习的能力边界往外再推一步。任何时候开始学深度学习都不晚关键是别只停留在收藏教程和配置环境这一步跑通一个项目你会看到它真正的样子。
企业数字化 ERP 产品动态
相关推荐
Univer SDK:AI Agent原生办公能力引擎 1. 这不是又一个“AI办公”概念玩具,而是真正能嵌进你产品里的办公能力引擎最近在几个技术社区刷到“Univer”这个词的频率越来越高,尤其在讨论AI Agent开发时,它几乎成了绕不开的基础设施级存在。我第一次接触它是在帮一家做智能会议系统的创… · 2026/11/4 21:17:35
STM32整数插补法:用累加器实现亚微秒级运动控制 简介:本资源是一份面向嵌入式开发工程师与STM32初学者的实践型技术资料,聚焦于利用STM32微控制器实现步进电机高精度直线运动控制,核心解决运动控制中轨迹离散化、速度平滑调节与位置误差抑制等关键问题,适用于自动化设备、机器人… · 2026/11/4 21:17:35
Android考研学习系统开发:智能题库与遗忘曲线算法实践 1. 项目背景与核心价值 作为一名经历过考研的Android开发者,我深知备考过程中面临的信息碎片化、学习效率低下等问题。去年指导学弟完成这个毕业设计时,我们决定开发一款专门针对研究生考试的学习系统,整合高频考点、智能题库和个性化学习路径… · 2026/11/4 21:17:35
迪杰斯特拉算法详解:原理、优化与实战应用 1. 迪杰斯特拉算法核心解析 迪杰斯特拉算法是解决单源最短路径问题的经典算法,由荷兰计算机科学家Edsger W. Dijkstra于1956年提出。这个算法在路由选择、地图导航、网络流量优化等领域有广泛应用,是每个程序员必须掌握的基础算法之一。 算法核心思想是… · 2026/11/4 22:02:59
技术文档写作前提:为何‘ax’无法生成有效博文 我无法根据当前输入生成符合要求的博文。原因如下:项目标题仅为“ax”,无明确语义指向,既非完整技术名词、工具名、协议名,也非可独立解析的缩写(如未说明是 Agent Substrate、AX电机轴向定义、还是其他领域术语&#… · 2026/11/4 22:02:59
Superpowers开源项目:浏览器端多人实时协作游戏开发实战指南 1. 从“superpowers”这个热词说起:它到底指什么第一次看到“superpowers”这个词挂在热搜上,我脑子里冒出来的第一个念头是:这又是哪个游戏或者影视作品里的设定?毕竟“超能力”这个词本身就带着强烈的娱乐属性。但翻了一圈讨论之… · 2026/11/4 22:02:59
35ms 抗量子握手:ESP32-S3 跑通 ML-KEM-768 量子计算机还没造出来,“先存后解”(harvest now, decrypt later)的攻击已经在发生——现在抓走的加密流量,等量子计算成熟后再解。IoT 设备寿命动辄十年,这笔账必须现在算。
最近 Aethyr Research 开源了一套 ESP32-S… · 2026/11/4 22:02:59
电商售后管理接口开发与优化实战 1. 电商售后管理的痛点与破局之道 做电商的朋友们都知道,售后环节是整个业务流程中最让人头疼的部分。每天面对大量的退货退款申请,处理不及时不仅影响用户体验,还可能面临平台处罚。我曾经运营过一家月销百万的抖店,高峰期每天要… · 2026/11/4 22:01:56
双极步进电机控制实战: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/4 3:16:49
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/4 6:59:29
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/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战: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/4 3:16:49
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/4 6:59:29
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/4 7:02:38