转自公众号:olive随笔
本文仅用于学术分享,如有侵权,请联系后台作删文处理
刚开始接触深度学习时,我们常常会遇到一连串陌生的词语:神经网络、权重、损失函数、梯度、反向传播、优化器……这些概念单独看似乎能理解,但放在一起,就容易弄不清它们之间的关系。
这篇文章从零基础出发,用简单的例子解释深度学习中的基本概念,并把模型训练的过程串起来。
一、深度学习到底在做什么?
深度学习通过多层神经网络,对输入数据进行逐步处理,学习输入与目标之间的关系。
例如:
•输入一张图片,判断图片中是什么;•输入一段文字,分析其中表达的情绪;•输入过去一段时间的温度,预测下一时刻的温度;•输入房屋面积、房龄等信息,预测房价。
以房价预测为例,我们希望模型完成这样的任务:
房屋信息 → 神经网络 → 预测房价
刚开始时,模型的预测往往不准确。我们需要给它提供训练数据,让它比较预测结果与真实结果,再不断调整内部参数。
因此,可以先把深度学习的训练理解为:
先预测,再比较误差,然后调整参数,反复进行。
这里的“学习”不是计算机像人一样理解知识,而是通过计算调整参数,使模型在目标任务上的表现得到改善。
二、什么是神经网络?
神经网络是一种由许多计算单元连接而成的模型。这些计算单元通常被称为“神经元”。
它受到生物神经系统的启发,但人工神经元本质上是数学计算,并不等同于大脑中的真实神经元。
一个基础的神经网络通常包括三部分:
输入层 → 隐藏层 → 输出层
1. 输入层:接收数据
输入层是数据进入模型的入口。
假设我们要预测房价,输入的信息可以包括:
•房屋面积;•房龄;•所在楼层;•距离地铁站的距离。
这些信息需要转换成数字,才能参与计算。
图片同样如此。一张图片在计算机中可以表示为大量像素数值。文字则通常会经过编码,转换成模型可以处理的数字表示。
神经网络实际处理的是数据的数字表示。
2. 隐藏层:加工信息
隐藏层位于输入层与输出层之间,负责对数据进行计算和转换。
例如,在图像识别中,较浅的层可能学习边缘、纹理等信息,后续层将这些信息进一步组合,形成更复杂的特征表示。
可以把它理解为:模型不是直接看一眼原始数据就给出答案,而是经过多步加工,逐渐提取对任务有用的信息。
“隐藏”只是层的位置名称,并不表示这些层完全无法观察或分析。
3. 输出层:给出预测
输出层负责产生模型的最终结果。
输出层的设计需要与具体任务匹配。
4. “深度”是什么意思?
深度学习中的“深度”,主要与神经网络连续进行多层计算有关。
多层结构让模型能够逐步转换信息,表达较复杂的关系。
但要注意:
网络并不是越深越好。
如果数据量不足、结构不合适或训练方法存在问题,增加层数也可能让训练更困难。
三、什么是神经元?
神经元是神经网络中的基本计算单元。
一个神经元通常完成三件事:
1.接收输入;2.对输入进行加权求和,并加上偏置;3.通过激活函数得到输出。
可以用一个简化公式表示:
神经元输出 = 激活函数(输入1 × 权重1 + 输入2 × 权重2 + 偏置)
假设某个神经元接收到两个输入:
输入1 = 2输入2 = 3
权重1 = 0.5权重2 = 0.2
偏置 = 1
加权计算结果为:
2 × 0.5 + 3 × 0.2 + 1 = 2.6
接下来,再将 2.6 传入激活函数,得到这个神经元的输出。
许多神经元连接起来,就可以组成神经网络。
四、权重、偏置和参数是什么?
1. 权重:控制输入如何影响计算结果
权重是与输入相乘的数值。
在一个简单模型中:
面积对应的权重决定了面积变化时,预测价格如何变化。
如果权重为正,其他条件不变时,面积增大,预测价格会升高;如果权重为负,预测价格会降低。
在复杂神经网络中,多个权重共同作用,因此不能简单地把某一个权重解释为某项特征的整体重要性。
2. 偏置:调整计算的基准
偏置是加权求和之后额外加上的数值。
以直线公式为例:
其中:
•w 控制直线的斜率;•b 控制直线的位置。
加入偏置后,模型可以更灵活地调整输出。
3. 参数:模型需要学习的数值
权重和偏置通常都属于模型参数。
训练开始前,参数通常按照一定规则初始化。随后,模型根据训练数据不断更新这些参数。
我们常说“训练模型”,很大一部分工作就是在寻找一组更合适的参数。
五、激活函数有什么作用?
激活函数负责对神经元的加权计算结果进行转换。
它的核心作用是:
引入非线性,使神经网络能够表达更复杂的关系。
为什么需要非线性?
如果每一层都只进行线性计算,那么无论叠加多少层,整体上仍然相当于一次线性变换。
但现实中的关系往往很复杂。例如,房价与面积、位置、房龄之间的关系,不一定能用一条直线描述。
非线性激活函数可以帮助模型表达这些复杂关系。
常见激活函数
以 ReLU 为例:
输入 -3,输出 0输入 0,输出 0输入 5,输出 5
此外,多分类任务的输出端经常使用 Softmax,将一组分数转换成总和为 1 的数值,作为模型对各类别的预测概率。
不过,预测概率高并不保证预测一定正确,模型的概率估计也可能不够准确。
六、什么是前向传播?
前向传播,就是输入数据经过神经网络各层计算,得到预测结果的过程。
以房价预测为例:
1.输入房屋面积、房龄等信息;2.隐藏层对信息进行计算;3.输出层给出预测房价。
假设真实房价是 200 万元,模型预测为 180 万元。
这个 180 万元,就是本次前向传播得到的预测结果。
接下来,需要衡量这个预测与真实结果之间的差距。
七、什么是损失函数?
损失函数用来衡量预测结果与目标之间的差异。
它会将这种差异转换成一个数值,这个数值叫作“损失”,英文为 Loss。
通常,在同一个任务和损失定义下,损失越小,表示预测越符合训练目标。
1. 用房价预测理解损失
假设真实房价为 200 万元:
显然,第二次预测更接近真实结果。
一种简单的损失计算方式是平方误差:
于是:
第一次损失 = (180 - 200)² = 400
第二次损失 = (195 - 200)² = 25
第二次的损失更小。
如果对一批样本的平方误差取平均,就得到常见的均方误差,也就是 MSE。
2. 不同任务使用不同损失函数
交叉熵可以帮助模型学习分类。例如,一张图片实际属于“猫”,但模型给“猫”的预测概率很低,就会受到较大的损失惩罚。
3. 损失不等于准确率
损失是训练时优化的目标,准确率则是一种评价指标。
二者有关,但不是同一个概念。
例如,模型两次都把图片判断为“猫”,准确率可能没有变化,但它给“猫”的预测概率提高了,交叉熵损失就可能下降。
因此,观察模型时,通常需要同时关注损失和与任务相关的评价指标。
八、什么是梯度?
损失告诉我们“当前预测有多差”,梯度则进一步告诉我们:
参数发生微小变化时,损失会怎样变化。
只有一个参数时,可以先把梯度理解为损失对这个参数的导数。模型有很多参数时,梯度由各个参数对应的偏导数组成。
1. 梯度为正是什么意思?
假设我们关注一个权重 w。
如果损失对 w 的梯度为正,表示在当前位置附近:
因此,为了降低损失,通常应该适当减小 w。
2. 梯度为负是什么意思?
如果梯度为负,表示在当前位置附近:
因此,为了降低损失,通常应该适当增大 w。
可以先记住:
梯度为正,参数往小调;梯度为负,参数往大调。
注意,梯度的正负描述的是当前位置附近的变化趋势,不是参数本身的正负。
一个权重即使是正数,它的梯度也可能为负数。
3. 梯度的大小是什么意思?
梯度的绝对值反映了损失对参数变化的局部敏感程度。
在最基础的梯度下降中,如果学习率相同:
•梯度绝对值较大,参数更新幅度较大;•梯度绝对值较小,参数更新幅度较小。
4. 梯度为零,就一定最好了吗?
不一定。
梯度为零可能出现在局部最低点,也可能出现在其他位置,例如鞍点。
因此,不能仅凭梯度为零,就认定模型已经找到了最佳参数。
九、什么是梯度下降?
梯度下降是一种沿着梯度反方向调整参数、尝试降低损失的方法。
最基础的更新规则是:
为什么要减去梯度?
因为梯度指向损失局部上升最快的方向,而我们希望降低损失,所以要向相反方向移动。
例子一:梯度为正
假设:
那么:
参数从 2 减小到 1.7。
例子二:梯度为负
假设:
那么:
参数从 2 增大到 2.3。
这也解释了为什么“减去梯度”并不意味着参数一定减小:如果梯度为负,减去负数就相当于加上正数。
十、学习率是什么?
学习率控制每次更新参数时的步幅。
在更新公式中:
学习率与梯度一起决定参数改变多少。
1. 学习率过大
步子太大,可能越过较好的位置,导致损失来回震荡,甚至训练不稳定。
2. 学习率过小
步子太小,参数更新缓慢,训练可能需要更长时间。
3. 学习率可以变化
学习率不一定始终保持不变。
训练过程中可以按照一定规则调整学习率,例如在后期降低学习率,让参数更新更加细致。这类规则通常称为学习率调度。
需要注意:方向合适,并不意味着每次更新后损失都一定下降。步幅大小、批次差异等因素,都可能影响损失变化。
十一、什么是反向传播?
一个神经网络可能包含大量参数。我们需要知道每个参数对损失的影响,才能进行更新。
反向传播是一种利用链式法则,高效计算这些梯度的方法。
它从输出端的损失开始,沿着计算关系向前面的各层传递梯度信息。
可以把几个步骤分清楚:
反向传播的主要职责是计算梯度。参数具体怎么更新,则由优化器负责。
十二、什么是优化器?
优化器是负责更新模型参数的算法。
它按照选定的规则,利用梯度、学习率,以及某些历史信息,计算参数如何变化。
优化器不是每次自动尝试所有方法,再挑出最好的一个。训练时,我们通常会选定一种优化器,并设置相应的超参数。
1. SGD:根据当前梯度更新
在常见的小批量 SGD 中,模型使用当前一批数据计算梯度,再更新参数。
基础更新方式就是:
由于不同批次的数据不同,梯度可能存在波动,损失曲线也不一定平滑。
2. Momentum:加入过去的更新趋势
Momentum 通常翻译为“动量”。
带动量的 SGD 会结合过去的梯度信息,让更新保留一定的历史趋势。
可以把它理解为:如果多个批次都提示参数应该向某个方向调整,动量可以帮助更新持续向这个方向推进,并缓解部分来回震荡。
3. Adam:利用梯度的历史统计
Adam 会维护梯度及其平方的移动平均,并利用这些信息,为不同参数计算更新步幅。
它通常比较容易上手,但也需要合适的学习率等设置。
不存在对所有任务都最好的优化器。 实际选择需要结合模型、数据和验证结果。
十三、Batch、Step 和 Epoch 是什么?
这三个词经常出现在训练日志中。
1. Batch:一批数据
训练时,通常会把数据分成多个小批次。
假设有 1,000 条训练数据,每次处理 100 条,那么:
也就是每个批次包含 100 条数据。
在普通的小批量训练中,模型根据这批数据计算平均损失和梯度,然后更新参数。
批大小会影响内存占用、计算效率和梯度的波动程度,并不是越大越好。
2. Step:一次更新
在常见训练设置中,一个 Step 通常对应一次优化器参数更新。
不过,使用梯度累积等方法时,可能处理多个批次才更新一次参数,因此 Step 与 Batch 不一定始终一一对应。
3. Epoch:完整遍历一次训练集
模型完整遍历一次训练集,通常称为一个 Epoch。
例如:
训练数据:1,000 条Batch Size:100
如果每批更新一次参数,完整学习一遍数据需要 10 次更新,也就是:
训练 20 个 Epoch,表示训练集被完整遍历了 20 次。
但训练轮数更多,不一定意味着新数据上的表现更好。
十四、参数和超参数有什么区别?
这两个概念容易混淆。
1. 参数:通过训练学习
例如:
•神经网络的权重;•神经网络的偏置。
它们通常由训练算法根据数据更新。
2. 超参数:控制模型和训练过程
例如:
•学习率;•Batch Size;•网络层数;•隐藏层宽度;•优化器类型;•最大训练轮数。
它们通常由我们设定,或通过调参方法进行选择。
十五、为什么需要训练集、验证集和测试集?
模型的目标是对没见过的数据也能做出合理预测,因此不能只观察训练数据上的表现。
通常会将数据分为三个部分:
1. 训练集:学习参数
训练集用于计算损失和梯度,更新模型参数。
2. 验证集:选择训练方案
验证集用于观察模型表现,帮助选择超参数、模型结构和停止训练的时机。
在常规流程中,验证集不用于通过反向传播更新参数,但它会影响我们对模型方案的选择。
3. 测试集:评估最终表现
测试集用于在方案确定后,评估模型处理新数据的能力。
如果反复根据测试结果调整模型,测试集就逐渐参与了模型选择,最终评估可能过于乐观。
另外,划分数据时要避免数据泄漏。例如,同一张图片的不同修改版本同时出现在训练集和测试集,可能使测试结果虚高。
十六、什么是欠拟合、过拟合和泛化?
1. 欠拟合:有效规律还没学好
欠拟合是指模型没有充分学习数据中的有效规律。
常见表现是:
训练集表现不好,验证集表现也不好。
可能的原因包括:
•模型表达能力不足;•输入信息不够;•训练不充分;•训练设置不合适。
2. 过拟合:过多适应训练数据
过拟合是指模型过多地适应了训练数据中的细节、噪声或偶然特征,影响了对新数据的预测。
常见表现是:
训练集表现越来越好,验证集表现却不再改善,甚至变差。
就像学生记住了练习题的答案,但题目稍微变化就不会做了。
3. 泛化:处理新数据的能力
泛化能力是指模型将学到的规律应用于新数据的能力。
训练的目标不仅是降低训练损失,还要让模型在与实际应用相关的新数据上表现良好。
4. 常见的过拟合应对方法
•增加有效数据:让模型接触更丰富的样本。•数据增强:在保持标签有效的前提下,对图片等数据进行合理变换。•正则化:通过约束参数等方式,减少模型对训练数据的过度适应。•Dropout:训练时随机将部分单元的输出置零,减少对固定组合的依赖。•提前停止:当验证集表现持续不再改善时,结束训练,并保留表现较好的模型。
这些方法需要与任务匹配。例如,图片翻转是否合理,要看翻转之后是否仍然保持原来的含义。
十七、常见的深度学习网络有哪些?
不同网络结构适合处理不同类型的数据。
以 CNN 为例,卷积核可以理解为在图片上移动的小型计算模板,用来提取局部特征。
Transformer 中的注意力机制,则让模型在处理某个位置的信息时,根据计算结果组合其他位置的信息。这里的“注意力”是数学机制,不等同于人的主观注意。
初学时,可以先理解这些网络的基本思路,再深入学习它们的具体结构。
十八、模型训练的完整过程是什么?
将前面的概念串起来,一次常见的训练流程如下:
第一步:准备数据
整理输入和目标,检查错误,进行必要的预处理,并划分训练集、验证集和测试集。
第二步:建立模型
选择合适的网络结构,初始化权重和偏置。
第三步:进行前向传播
将一批训练数据输入模型,得到预测结果。
第四步:计算损失
比较预测结果与目标,得到损失数值。
第五步:进行反向传播
计算各个参数对应的梯度。
第六步:使用优化器更新参数
优化器根据梯度、学习率等信息调整参数。
第七步:重复训练并观察验证结果
不断处理新的批次,同时检查验证集表现,选择合适的模型。
第八步:评估最终模型
使用独立测试集,评估模型对新数据的表现。
这一过程中,训练损失不一定每一步都下降。更有意义的是观察整体趋势,以及验证集是否真正得到改善。
十九、训练和推理有什么区别?
训练是学习参数,推理是使用已经学好的参数进行预测。
例如,用大量带标签的图片调整模型,是训练;将一张新图片输入训练好的模型,判断其中是什么,是推理。
训练完成并不意味着模型永远可靠。如果实际数据与训练数据差异很大,预测效果也可能下降。
二十、用一张表记住核心概念
学习深度学习时,可以先抓住这条主线:
输入数据 → 得到预测 → 计算损失 → 计算梯度 → 更新参数。
理解这几个环节后,神经网络、损失函数、反向传播和优化器就不再是彼此孤立的名词,而是共同完成模型训练的不同部分。
本文借助 AI 辅助整理,面向初学者介绍深度学习基础知识,部分概念采用了简化表述。如发现错误或有修改建议,欢迎留言交流。