深度学习中的损失函数实战指南:从MSE到BCE的原理、实现与场景选择
1. 损失函数模型训练的“导航仪”刚开始接触深度学习那会儿我总觉得模型训练就像在茫茫大海里开船手里没地图全凭感觉。直到我真正理解了损失函数才恍然大悟——原来它就是那个最精准的“导航仪”。简单来说损失函数就是用来告诉模型“嘿你现在的预测离正确答案还有多远。”这个“距离”用一个具体的数值来衡量我们称之为损失值。模型训练的核心目标就是想尽一切办法通过调整内部的无数个参数把这个损失值降到最低。你可以把它想象成玩游戏时的得分系统。预测得越准得分损失值就越低预测得越离谱得分就越高。我们的目标就是不断刷新最低分记录。这个“导航仪”通常放在模型训练的哪个位置呢它位于前向传播的终点也是反向传播的起点。模型接收输入数据经过层层计算前向传播最终输出一个预测结果。这个结果和真实标签一起被送到损失函数里算出当前的“误差分数”。紧接着反向传播算法会拿着这个分数去计算模型中每一个参数应该朝哪个方向、调整多少才能让下一次的分数更低。如此循环往复模型就在这个“导航仪”的指引下一步步逼近最优解。所以选对损失函数就等于给模型设定了一个正确的优化目标。目标定歪了模型再怎么努力也学不到真东西。接下来我就带你深入看看深度学习中几个最常用、也最核心的损失函数从最基础的回归任务用到复杂的分类任务我会结合我踩过的坑和实战经验告诉你它们到底怎么用以及什么时候该用谁。2. 回归任务的双子星MSE与MAE当我们处理的问题目标是预测一个连续的数值时比如预测房价、预测气温、预测股票走势这类任务就叫回归任务。在这里均方误差MSE和平均绝对误差MAE是出场率最高的两位选手它们看似相似但性格迥异直接决定了模型在面对“异常值”时的表现。2.1 均方误差MSE对“离谱”错误零容忍MSE的计算公式非常直观MSE (1/n) * Σ(真实值 - 预测值)^2。说白了就是把每个样本的预测误差先平方再求平均。我刚开始用的时候觉得这很合理啊平方能让正负误差都变成正的而且避免了相互抵消。但很快我就发现它的“暴脾气”了。因为平方操作误差会被放大。举个例子假设我们预测房价大部分房子的预测误差在10万元以内。这时来了一个特别奇怪的样本误差达到了100万元。在MAE的计算里它只贡献100的误差值但在MSE里它贡献的是10000这个巨大的数字会严重拉高整体的损失值。模型在优化时会拼命去“讨好”这个异常点试图缩小这个巨大的误差哪怕牺牲其他大多数样本的预测精度也在所不惜。这就好比老师批改试卷MSE这个老师对做错难题的学生扣分特别狠误差平方导致学生以后把所有精力都花在攻克难题上反而忽略了基础题。所以MSE对异常值非常敏感。如果你的数据很干净噪声小没有特别离谱的离群点用MSE能让模型收敛得很稳定因为它处处可导梯度计算很顺畅。但如果你处理的是真实世界的数据比如传感器读数偶尔会跳变或者金融数据里突然出现极端行情用MSE训练出的模型可能会表现得非常不稳定。调库实现PyTorch非常简单import torch.nn as nn loss_fn nn.MSELoss() # 定义损失函数 predictions model(inputs) # 模型预测 loss loss_fn(predictions, targets) # 计算损失 loss.backward() # 反向传播手动实现有助于理解本质import numpy as np def mse_loss(y_true, y_pred): # 确保输入是数组 y_true np.array(y_true) y_pred np.array(y_pred) # 计算平方误差的均值 squared_errors (y_true - y_pred) ** 2 return np.mean(squared_errors) # 测试一下 true_values [3.0, -0.5, 2.0, 7.0] pred_values [2.5, 0.0, 2.1, 8.0] print(fMSE损失为{mse_loss(true_values, pred_values):.4f})2.2 平均绝对误差MAE更稳健的“佛系”选择MAE的公式更温和MAE (1/n) * Σ|真实值 - 预测值|。它直接对误差取绝对值然后求平均。还是那个房价预测的例子100万的误差在MAE看来就是100它对异常值的惩罚是线性的而不是平方级的爆炸增长。这意味着MAE更像一个“佛系”的老师对犯错的学生一视同仁错多少扣多少分。这样训练出来的模型不会过分关注那些特别离谱的样本整体表现更加稳健。我在处理一些质量参差不齐的工业数据时就特别喜欢用MAE因为它能让模型更关注整体趋势而不是被几个坏数据带偏。但是MAE有个小麻烦它在误差为零的那个点上不可导。这在数学优化上会带来一点问题不过现代的深度学习框架如PyTorch、TensorFlow都在内部很好地处理了这一点我们直接用就行。另一个特点是它的梯度是常数±1这意味着无论误差大小参数更新的幅度是固定的。这在训练初期是好事收敛快但在接近最优解时可能会因为步长太大而在最优点附近来回震荡这时候通常需要配合一个逐渐减小的学习率学习率衰减策略。调库实现同样方便import torch.nn as nn loss_fn nn.L1Loss() # 注意在PyTorch中MAE叫做L1Loss loss loss_fn(outputs, targets)手动实现也很直接def mae_loss(y_true, y_pred): y_true np.array(y_true) y_pred np.array(y_pred) absolute_errors np.abs(y_true - y_pred) return np.mean(absolute_errors) # 使用同样的数据测试 print(fMAE损失为{mae_loss(true_values, pred_values):.4f})你会发现对于同一组数据MAE的值通常会比MSE小因为它没有放大误差。2.3 实战选择MSE还是MAE那么到底该怎么选呢我总结了一个简单的决策流程先看数据拿出你的训练数据画个散点图或者箱线图看看。如果数据分布比较均匀没有明显的、远离群体的“孤岛”点MSE是首选它的优化特性更好。再看任务如果你的任务要求对“大错误”必须极其敏感比如某些安全临界系统预测希望模型不惜代价也要避免巨大误差那么MSE的平方惩罚特性正好符合要求。追求稳健选MAE如果数据中不可避免存在噪声和异常值而你更希望模型得到一个整体上更可靠、更通用的预测那么MAE的鲁棒性优势就体现出来了。高级玩法你甚至可以尝试Huber Loss。这个损失函数是MSE和MAE的“结合体”。当误差较小时它像MSE一样有良好的曲率利于精细优化当误差超过一个阈值δ后它又像MAE一样线性增长避免异常值干扰。在PyTorch中就是nn.SmoothL1Loss这个我后面有机会再细说。3. 分类任务的基石从NLL到交叉熵如果说回归任务是在拟合一条线那么分类任务就是在划分边界。这里的损失函数衡量的是“概率分布”的差异核心思想是让模型为真实类别赋予更高的预测概率。最基础的概念就是负对数似然损失NLL。3.1 负对数似然损失NLL最直接的想法NLL的原理非常朴素。对于一个分类问题模型通常会输出一个经过Softmax函数处理后的概率分布比如预测一张图片是猫、狗、兔子输出可能是[0.7, 0.2, 0.1]。如果真实标签是“猫”对应索引0那么NLL损失就是-log(0.7)。为什么是负对数第一概率值在0到1之间取对数后变成负数再加个负号就变成正损失符合我们的习惯。第二对数函数有个很棒的特性当预测概率p越接近1完全正确-log(p)越接近0当p越接近0完全错误-log(p)会趋近于无穷大。这意味着模型如果对正确答案非常不自信将会受到“严厉的惩罚”。这种惩罚是指数级增长的能强力地推动模型去修正自己的错误。我刚开始用的时候犯过一个错直接把模型的原始输出logits送进了NLLLoss。结果损失值直接爆炸了。因为PyTorch的nn.NLLLoss()期望的输入是对数概率log-probabilities通常需要先对模型输出做一次log_softmax。而更常用的做法是直接使用nn.CrossEntropyLoss()它内部帮你把Softmax和NLL两步合并了而且数值计算更稳定。NLL的调库实现import torch.nn as nn # 假设模型最后一层是LogSoftmax log_probs model(inputs) # 输出是对数概率 loss_fn nn.NLLLoss() loss loss_fn(log_probs, targets) # targets是类别的索引如[0, 2, 1]手动实现NLL能帮你彻底理解这个过程def nll_loss_manual(log_probs, targets): log_probs: [batch_size, num_classes] 对数概率矩阵 targets: [batch_size] 真实类别索引 batch_size log_probs.shape[0] # 关键步骤取出每个样本在真实类别位置上的对数概率 # 这行代码是理解NLL的核心它只关心模型对真实类别的预测信心 selected_log_probs log_probs[np.arange(batch_size), targets] # 取负号并求平均 loss -np.mean(selected_log_probs) return loss # 示例3个样本3个类别 log_probs np.log(np.array([[0.7, 0.2, 0.1], # 真实类为0 [0.1, 0.8, 0.1], # 真实类为1 [0.6, 0.3, 0.1]])) # 真实类为0 targets np.array([0, 1, 0]) print(fNLL损失为{nll_loss_manual(log_probs, targets):.4f})3.2 交叉熵损失CEL信息论的视角交叉熵是信息论中衡量两个概率分布差异的概念。在分类任务中真实标签可以看作一个“one-hot”分布正确类别概率为1其余为0模型的预测输出是另一个概率分布。交叉熵损失就是衡量这两个分布有多“不像”。对于多分类问题其公式是CEL -Σ (真实标签_onehot * log(预测概率))。由于真实标签是one-hot编码只有真实类别那一项是1其他都是0所以这个公式最终化简的结果和上面NLL的公式是完全等价的。也就是说在多分类任务中结合Softmax输出交叉熵损失就是负对数似然损失。那为什么我们更常听到“交叉熵损失”呢因为它的概念更通用不仅限于one-hot标签。而且从理论上看最小化交叉熵等价于最小化真实分布与预测分布之间的KL散度一种分布距离这让它的数学解释更优美。交叉熵的调库实现最常用import torch.nn as nn # 注意CrossEntropyLoss的输入是原始的logits未经过Softmax内部会自动做Softmax # 目标targets是类别索引不是one-hot编码 loss_fn nn.CrossEntropyLoss() logits model(inputs) # 模型原始输出如 [batch_size, num_classes] loss loss_fn(logits, targets) # targets形状为 [batch_size]手动实现交叉熵使用one-hot标签def cross_entropy_loss(y_true_onehot, y_pred_probs, eps1e-12): y_true_onehot: [batch_size, num_classes] one-hot编码 y_pred_probs: [batch_size, num_classes] 概率分布每行和为1 eps: 一个小数防止对0取对数 # 裁剪概率值避免log(0)导致无穷大 y_pred_probs np.clip(y_pred_probs, eps, 1.0 - eps) # 计算每个样本的交叉熵-Σ y_true * log(y_pred) per_sample_loss -np.sum(y_true_onehot * np.log(y_pred_probs), axis1) # 求批次平均损失 return np.mean(per_sample_loss) # 将索引标签转为one-hot def to_onehot(labels, num_classes): onehot np.zeros((len(labels), num_classes)) onehot[np.arange(len(labels)), labels] 1 return onehot num_classes 3 y_true_idx np.array([0, 1, 0]) y_true_oh to_onehot(y_true_idx, num_classes) y_pred np.array([[0.8, 0.1, 0.1], [0.1, 0.7, 0.2], [0.6, 0.3, 0.1]]) print(f交叉熵损失为{cross_entropy_loss(y_true_oh, y_pred):.4f})你会发现这个结果和之前手动计算NLL的结果是一致的。在实际项目中我几乎百分之百使用nn.CrossEntropyLoss()因为它接口简单且框架级的实现经过了高度优化数值稳定性最好。4. 二分类与多标签分类的利器二元交叉熵BCE前面说的交叉熵处理的是“多选一”问题一张图只能是猫、狗、兔子中的一种。但还有很多场景是“多选多”比如给一段文本打上多个标签例如科技、金融、正面情感。判断一张图中是否同时包含多种物体人、车、狗。医疗诊断中一个病人可能同时患有多种疾病。这类任务我们称为多标签分类。又或者最简单的“二选一”二分类问题如是/否真/假。处理这些任务的王牌损失函数就是二元交叉熵BCE。4.1 BCE的原理与公式BCE可以看作是交叉熵在二分类情况下的特例但它更强大的地方在于能够独立处理多个二元判断。它的公式是BCE - [y * log(p) (1-y) * log(1-p)]其中y是真实标签0或1p是模型预测该类别为真的概率。理解这个公式的关键在于它的两部分y * log(p)当真实标签y1时这一项生效。我们希望概率p越大越好接近1这样log(p)就接近0损失小。(1-y) * log(1-p)当真实标签y0时这一项生效。我们希望概率p越小越好接近0这样(1-p)就接近1log(1-p)接近0损失小。对于多标签分类假设有K个独立的标签那么总损失就是这K个BCE损失的平均或求和。模型最后一层通常会使用Sigmoid函数而不是Softmax将每个神经元的输出压缩到(0,1)之间独立地解释为每个标签成立的概率。4.2 使用BCE的实战细节与坑在PyTorch中使用BCE主要有两种方式这里有个坑我早期经常踩import torch import torch.nn as nn # 方式一使用BCELoss —— 要求输入已经是Sigmoid处理后的概率 model_output model(inputs) # 假设模型最后一层是Sigmoid probabilities torch.sigmoid(model_output) # 确保值在[0,1] loss_fn1 nn.BCELoss() loss1 loss_fn1(probabilities, targets) # targets形状需与probabilities一致 # 方式二使用BCEWithLogitsLoss —— 推荐输入原始logits即可 loss_fn2 nn.BCEWithLogitsLoss() # 内部整合了Sigmoid和BCE logits model(inputs) # 模型原始输出无需Sigmoid loss2 loss_fn2(logits, targets)强烈推荐使用BCEWithLogitsLoss原因有两个一是方便不用自己加Sigmoid层更重要的是第二点——数值稳定性。自己先算Sigmoid再算log在概率接近0或1时容易产生数值溢出得到inf或nan。BCEWithLogitsLoss内部采用了巧妙的计算方式直接从未归一化的logits出发避免了这个问题。手动实现BCE理解原理用def binary_cross_entropy(y_true, y_pred_prob, eps1e-12): # 裁剪防止对数计算出错 y_pred_prob np.clip(y_pred_prob, eps, 1-eps) # 按元素计算损失 loss_elements -(y_true * np.log(y_pred_prob) (1 - y_true) * np.log(1 - y_pred_prob)) return np.mean(loss_elements) # 示例4个样本判断是否包含“猫”这个标签 y_true np.array([1, 0, 1, 0]) # 1表示有猫0表示无猫 y_pred np.array([0.9, 0.2, 0.3, 0.8]) # 模型预测有猫的概率 print(fBCE损失为{binary_cross_entropy(y_true, y_pred):.4f})在多标签分类中y_true和y_pred都会变成二维数组样本数 × 标签数计算方式是一样的只是最后求平均的维度可能不同通常是先对每个样本的所有标签求平均再对所有样本求平均。5. 超越基础损失函数的选择艺术与高级技巧了解了这些基础损失函数后你可能会问难道我的选择就这些吗当然不是。在实际项目中选择和应用损失函数是一门艺术常常需要根据具体任务进行微调甚至自定义。5.1 根据任务和数据特性做选择我们可以用一个简单的决策表格来总结核心选择任务类型典型场景推荐损失函数关键原因与注意事项单值回归房价预测、温度预测MSE (L2 Loss)数据干净、无异常值时优化效率高对大方差误差惩罚重。存在明显离群点的回归MAE (L1 Loss)或Huber Loss对异常值不敏感模型更稳健。Huber Loss是两者的折中。多分类互斥图像分类猫/狗/车、手写数字识别交叉熵损失 (CrossEntropyLoss)标准选择与Softmax搭配等价于最大化正确类别的对数似然。二分类垃圾邮件识别、疾病诊断二元交叉熵 (BCEWithLogitsLoss)标准选择与Sigmoid搭配。务必使用BCEWithLogitsLoss保证稳定。多标签分类图像多标签标注、文本多主题分类二元交叉熵 (BCEWithLogitsLoss)每个标签独立判断损失是各标签BCE的平均。序数回归评分预测1-5星、严重程度分级MSE或带序数权重的交叉熵将等级视为连续值用MSE或设计考虑等级距离的交叉熵变体。除了任务类型还要考虑数据的不平衡性。比如在疾病筛查中健康样本阴性远多于患病样本阳性。如果直接用BCE模型可能会倾向于把所有样本都预测为健康因为这样总损失也能很低。这时就需要引入加权交叉熵或Focal Loss。Focal Loss是我在目标检测任务中常用的它通过降低“容易分类样本”的权重让模型更专注于学习那些难分的、稀有的样本。5.2 组合与自定义损失函数很多时候一个损失函数不够用。比如在图像分割任务中我经常将Dice Loss和BCE Loss结合起来用。Dice Loss直接优化预测区域和真实区域的重叠度IoU对类别不平衡不敏感而BCE Loss则提供稳定的梯度。将它们加权相加往往能取得比单独使用任何一个都好的效果。在PyTorch中自定义一个组合损失函数非常简单class DiceBCELoss(nn.Module): def __init__(self, weight_bce1.0, weight_dice1.0, smooth1e-6): super().__init__() self.weight_bce weight_bce self.weight_dice weight_dice self.smooth smooth self.bce nn.BCEWithLogitsLoss() def forward(self, inputs, targets): # 计算BCE损失 bce_loss self.bce(inputs, targets) # 将logits通过sigmoid转为概率并 flatten inputs torch.sigmoid(inputs) inputs inputs.view(-1) targets targets.view(-1) # 计算Dice系数 intersection (inputs * targets).sum() dice_score (2. * intersection self.smooth) / (inputs.sum() targets.sum() self.smooth) dice_loss 1 - dice_score # 返回加权和 total_loss self.weight_bce * bce_loss self.weight_dice * dice_loss return total_loss自定义损失函数让你能直接将业务逻辑或先验知识注入到模型训练中。例如在自动驾驶中误将行人判断为背景的代价远高于将背景误判为行人。你可以设计一个损失函数对不同类别的错误施加不同的惩罚权重。5.3 实现中的避坑指南最后分享几个我实践中总结的“血泪教训”数值稳定性是第一要务任何涉及对数运算的损失NLL, CE, BCE都必须对输入概率进行裁剪np.clip(p, eps, 1-eps)或直接使用框架提供的稳定版本如BCEWithLogitsLoss,CrossEntropyLoss。检查输入形状这是最常见的bug来源。确保你的预测值outputs和真实标签targets的维度匹配。特别是CrossEntropyLoss要求outputs是[Batch, Classes]而targets是[Batch]的类别索引。理解“reduction”参数PyTorch的损失函数通常有reductionmean默认求平均、sum求和、none返回每个样本的损失。在需要自定义样本权重或特殊聚合时none模式非常有用。损失不下降先看损失函数如果训练一开始损失就纹丝不动或者变成NaN别急着调模型结构或学习率。首先检查你的损失函数用对了没有输入的数据和标签格式是否正确特别是分类任务的标签是否在有效的类别范围内。说到底损失函数是连接模型预测与现实目标的桥梁。选对了训练事半功倍选错了可能南辕北辙。最好的学习方式就是动手实验用同一组数据、同一个模型分别换上MSE和MAE看看训练曲线有何不同在分类任务中尝试不同的损失函数感受它们如何影响模型对“信心”的校准。这些经验远比死记硬背公式来得深刻。

相关新闻

Janus-Pro-7B多模态理解:支持数学公式、化学方程式、电路图识别

Janus-Pro-7B多模态理解:支持数学公式、化学方程式、电路图识别

Janus-Pro-7B多模态理解:支持数学公式、化学方程式、电路图识别 1. 为什么你需要关注Janus-Pro-7B 如果你经常需要处理各种图片内容,比如分析图表、识别公式、理解复杂图示,那你一定遇到过这样的烦恼:不同的AI工具各有所长&…

2026/7/3 7:33:53 阅读更多 →
零基础玩转Ostrakon-VL-8B:手把手教你用AI分析店铺图片

零基础玩转Ostrakon-VL-8B:手把手教你用AI分析店铺图片

零基础玩转Ostrakon-VL-8B:手把手教你用AI分析店铺图片 你是不是经常需要处理店铺里的各种图片?比如要盘点货架上的商品、检查厨房的卫生状况、分析竞争对手的陈列方式,或者只是想快速了解一张店铺照片里有什么。一张张看,一个个…

2026/7/4 15:40:54 阅读更多 →
5分钟上手:让文字秒变手写体的实用工具

5分钟上手:让文字秒变手写体的实用工具

#5分钟上手:让文字秒变手写体的实用工具 【免费下载链接】text-to-handwriting So your teacher asked you to upload written assignments? Hate writing assigments? This tool will help you convert your text to handwriting xD 项目地址: https://gitcode…

2026/7/3 10:29:05 阅读更多 →

最新新闻

Blender UV编辑终极指南:UvSquares插件一键重塑UV网格

Blender UV编辑终极指南:UvSquares插件一键重塑UV网格

Blender UV编辑终极指南:UvSquares插件一键重塑UV网格 【免费下载链接】UvSquares Blender addon for reshaping UV quad selection into a grid. 项目地址: https://gitcode.com/gh_mirrors/uv/UvSquares 想要彻底告别繁琐的UV调整工作吗?UvSqua…

2026/7/5 14:32:21 阅读更多 →
vue学习笔记(持续更新)

vue学习笔记(持续更新)

目录vue的学习笔记使用emit的步骤使用vue-Router的坑点报错信息报错原因总结错误代码正确代码一句话最终结论箭头函数速记口诀涓滴之水终可磨损大石,不是由于它力量强大,而是由于昼夜不舍的滴坠。 —贝多芬 vue的学习笔记 使用emit的步骤 在子组件定义…

2026/7/5 14:32:21 阅读更多 →
【ESP32】ESP-IDF开发环境搭建(cursor)

【ESP32】ESP-IDF开发环境搭建(cursor)

1 前言 ESP-IDF 是乐鑫主推的ESP32的开发框架,旨在协助用户快速开发物联网 (IoT) 应用,可满足用户对 Wi-Fi、蓝牙、低功耗等方面的要求。 [https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html] 如需在 ESP32 上使用…

2026/7/5 14:32:21 阅读更多 →
解锁Mi-Create:打造个性化小米手表表盘的完整指南

解锁Mi-Create:打造个性化小米手表表盘的完整指南

解锁Mi-Create:打造个性化小米手表表盘的完整指南 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 想要为你的小米智能手表设计独一无二的个性化表盘…

2026/7/5 14:32:21 阅读更多 →
ConvNeXt 的 torchvision 版本 模型结构的代码实现

ConvNeXt 的 torchvision 版本 模型结构的代码实现

ConvNeXt 的 torchvision 版本 模型结构的代码实现 flyfish # flyfish convnext_tiny.py from collections.abc import Sequence from functools import partial from typing import Any, Callable, Optionalimport torch from torch import nn, Tensor from torch.nn import …

2026/7/5 14:28:21 阅读更多 →
一站式解决Windows C++运行时库依赖:VisualCppRedist AIO深度解析

一站式解决Windows C++运行时库依赖:VisualCppRedist AIO深度解析

一站式解决Windows C运行时库依赖:VisualCppRedist AIO深度解析 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾因"缺少msvcr120.dll&q…

2026/7/5 14:28:21 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻