Skip to content

神经网络概述和模型训练的一般步骤

"激活函数,博大精深"

神经网络按最简单的分类,就是输入层、隐藏层和输出层,举一个最简单的例子:你现在有一张灰度图像,假设为 1000×1000 的格式,现在要用神经网络检测它是否是猫的图像。首先这张图像的 (1000, 1000) 数组被输入层处理后,被提取为不同的特征进入隐藏层,或许在第一层隐藏层中,神经网络的各个神经元都在处理不同的、很小的图像像素,这一层提取到的特征将通过激活函数传递给下一层,下一层也许会处理比较大块的图像像素,然后将提取的特征又通过激活函数传递给下一层……如果我们的需求是:图像里的是猫就输出 1,不是猫就输出 0,那么最后一层完全可以就是一个逻辑回归,只有一个神经元输出 0 或 1。

激活函数

激活函数的设置,就是为了引入非线性。激活函数当然可以是线性函数,但是如果所有层都使用线性激活函数,那么线性函数套线性函数还是线性函数,这个神经网络只做了个线性回归。

经常使用的激活函数除了逻辑回归的 sigmoid 函数,还有 Tanh、ReLU(最常用,几乎是 CNN 和 MLP 隐藏层首选)、GELU(Transformer 最常用)、Softmax(多分类)。

"激活函数,博大精深",ReLU 的魅力所在可以去各大平台听讲解,这里不再赘述。

同一层的神经元共用一个激活函数,只不过每个神经元有自己的处理参数。(这一块可以去 b 站找吴恩达的教程)

我如何开始我的项目

  1. 确定任务内容、创新点。
  2. 收集数据集。
  3. 把数据集划分为训练集(train set)、验证集(validation set)和测试集(test set),这么做是为了验证模型的泛化能力,避免过拟合。比如在训练集上表现很好的模型,如果它过拟合了,那么它在验证集上会表现得很差,在简单的任务或者小工程中,查看模型在验证集上的表现一般就能知道模型的泛化能力了。
  4. 选择模型进行构建。

怎么判断模型好不好

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)在所有预测为正的结果中,真正为正的比例;反映模型的防错检能力Precision=TPTP+FP
召回率(Recall)在所有实际为正的样本中,被预测正确的比例;反映模型的防漏检能力Recall=TPTP+FN
F1 分数(F1 Score)精确率与召回率的调和平均,用于平衡二者(一般二者相斥)F1=2×Precision×RecallPrecision+Recall

一般来说,训练完模型后查看它在验证集上的表现时,我们先查看 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 模型质量的标准。