神经网络概述和模型训练的一般步骤
"激活函数,博大精深"
层
神经网络按最简单的分类,就是输入层、隐藏层和输出层,举一个最简单的例子:你现在有一张灰度图像,假设为 1000×1000 的格式,现在要用神经网络检测它是否是猫的图像。首先这张图像的 (1000, 1000) 数组被输入层处理后,被提取为不同的特征进入隐藏层,或许在第一层隐藏层中,神经网络的各个神经元都在处理不同的、很小的图像像素,这一层提取到的特征将通过激活函数传递给下一层,下一层也许会处理比较大块的图像像素,然后将提取的特征又通过激活函数传递给下一层……如果我们的需求是:图像里的是猫就输出 1,不是猫就输出 0,那么最后一层完全可以就是一个逻辑回归,只有一个神经元输出 0 或 1。
激活函数
激活函数的设置,就是为了引入非线性。激活函数当然可以是线性函数,但是如果所有层都使用线性激活函数,那么线性函数套线性函数还是线性函数,这个神经网络只做了个线性回归。
经常使用的激活函数除了逻辑回归的 sigmoid 函数,还有 Tanh、ReLU(最常用,几乎是 CNN 和 MLP 隐藏层首选)、GELU(Transformer 最常用)、Softmax(多分类)。
"激活函数,博大精深",ReLU 的魅力所在可以去各大平台听讲解,这里不再赘述。
同一层的神经元共用一个激活函数,只不过每个神经元有自己的处理参数。(这一块可以去 b 站找吴恩达的教程)
我如何开始我的项目
- 确定任务内容、创新点。
- 收集数据集。
- 把数据集划分为训练集(train set)、验证集(validation set)和测试集(test set),这么做是为了验证模型的泛化能力,避免过拟合。比如在训练集上表现很好的模型,如果它过拟合了,那么它在验证集上会表现得很差,在简单的任务或者小工程中,查看模型在验证集上的表现一般就能知道模型的泛化能力了。
- 选择模型进行构建。
怎么判断模型好不好
1. 混淆矩阵
假设我们要查看类别 A 的预测情况。假设混淆矩阵横向为真实值记为 P(Positive)和 N(Negative),表示真实结果是否是类别 A;纵向为预测值,同样记为 P(Positive)和 N(Negative),表示预测的结果是否为 A。如果预测的结果与真实值相同,就在前面加上 T(True),预测错误则在前面加上 F(False),第二个字母则是预测值(P 或 N),这样就把预测结果和真实结果的关系对应起来了。
假设我们正在处理一个"疾病诊断"问题:
- 正例:患病
- 负例:健康
| 实际\预测 | 预测为正例 | 预测为负例 |
|---|---|---|
| 实际为正例 | True Positive (TP) 真正例:病人被正确诊断 | False Negative (FN) 假负例:病人被误诊为健康 |
| 实际为负例 | False Positive (FP) 假正例:健康人被误诊为病人 | True Negative (TN) 真负例:健康人被正确诊断 |
2. 精确率、召回率与 F1 分数
| 指标 | 含义 | 公式 |
|---|---|---|
| 精确率(Precision) | 在所有预测为正的结果中,真正为正的比例;反映模型的防错检能力 | |
| 召回率(Recall) | 在所有实际为正的样本中,被预测正确的比例;反映模型的防漏检能力 | |
| F1 分数(F1 Score) | 精确率与召回率的调和平均,用于平衡二者(一般二者相斥) |
一般来说,训练完模型后查看它在验证集上的表现时,我们先查看 F1 分数的大小来判断模型是否合格。
3. mAP(mean Average Precision)
这是模型评价的核心指标,它综合了不同置信度和 IOU 的检测表现。首先要计算 AP(Average Precision)——Precision-Recall 曲线下的面积(AUC),而 mAP 就是对所有类别的 AP 取平均(mean),例如 mAP@[IOU=0.5] 就是在 IOU=0.5 的阈值下,对所有类别的 AP 取平均。YOLO 官方也就是将 mAP 对比图作为 YOLO 模型质量的标准。
