社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

深度学习入门:从神经元到模型训练,一次读懂基本概念

新机器视觉 • 3 周前 • 100 次点击  

转自公众号:olive随笔

本文仅用于学术分享,如有侵权,请联系后台作删文处理


刚开始接触深度学习时,我们常常会遇到一连串陌生的词语:神经网络、权重、损失函数、梯度、反向传播、优化器……

这些概念单独看似乎能理解,但放在一起,就容易弄不清它们之间的关系。

这篇文章从零基础出发,用简单的例子解释深度学习中的基本概念,并把模型训练的过程串起来。

一、深度学习到底在做什么?

深度学习通过多层神经网络,对输入数据进行逐步处理,学习输入与目标之间的关系。

例如:

•输入一张图片,判断图片中是什么;•输入一段文字,分析其中表达的情绪;•输入过去一段时间的温度,预测下一时刻的温度;•输入房屋面积、房龄等信息,预测房价。

以房价预测为例,我们希望模型完成这样的任务:

房屋信息 → 神经网络 → 预测房价

刚开始时,模型的预测往往不准确。我们需要给它提供训练数据,让它比较预测结果与真实结果,再不断调整内部参数。

因此,可以先把深度学习的训练理解为:

先预测,再比较误差,然后调整参数,反复进行。

这里的“学习”不是计算机像人一样理解知识,而是通过计算调整参数,使模型在目标任务上的表现得到改善。

二、什么是神经网络?

神经网络是一种由许多计算单元连接而成的模型。这些计算单元通常被称为“神经元”。

它受到生物神经系统的启发,但人工神经元本质上是数学计算,并不等同于大脑中的真实神经元。

一个基础的神经网络通常包括三部分:

输入层 → 隐藏层 → 输出层

1. 输入层:接收数据

输入层是数据进入模型的入口。

假设我们要预测房价,输入的信息可以包括:

•房屋面积;•房龄;•所在楼层;•距离地铁站的距离。

这些信息需要转换成数字,才能参与计算。

图片同样如此。一张图片在计算机中可以表示为大量像素数值。文字则通常会经过编码,转换成模型可以处理的数字表示。

神经网络实际处理的是数据的数字表示。

2. 隐藏层:加工信息

隐藏层位于输入层与输出层之间,负责对数据进行计算和转换。

例如,在图像识别中,较浅的层可能学习边缘、纹理等信息,后续层将这些信息进一步组合,形成更复杂的特征表示。

可以把它理解为:模型不是直接看一眼原始数据就给出答案,而是经过多步加工,逐渐提取对任务有用的信息。

“隐藏”只是层的位置名称,并不表示这些层完全无法观察或分析。

3. 输出层:给出预测

输出层负责产生模型的最终结果。

任务
输出形式
预测房价
一个价格数值
判断图片是否包含猫
一个用于判断的分数或概率
识别手写数字
数字 0~9 对应的预测分数或概率

输出层的设计需要与具体任务匹配。

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. 偏置:调整计算的基准

偏置是加权求和之后额外加上的数值。

以直线公式为例:

y = wx + b

其中:

•w 控制直线的斜率;•b 控制直线的位置。

加入偏置后,模型可以更灵活地调整输出。

3. 参数:模型需要学习的数值

权重和偏置通常都属于模型参数。

训练开始前,参数通常按照一定规则初始化。随后,模型根据训练数据不断更新这些参数。

我们常说“训练模型”,很大一部分工作就是在寻找一组更合适的参数。

五、激活函数有什么作用?

激活函数负责对神经元的加权计算结果进行转换。

它的核心作用是:

引入非线性,使神经网络能够表达更复杂的关系。

为什么需要非线性?

如果每一层都只进行线性计算,那么无论叠加多少层,整体上仍然相当于一次线性变换。

但现实中的关系往往很复杂。例如,房价与面积、位置、房龄之间的关系,不一定能用一条直线描述。

非线性激活函数可以帮助模型表达这些复杂关系。

常见激活函数

名称
基本特点
常见用途
ReLU
负数变成 0,正数保持不变
常用于隐藏层
Sigmoid
将数值映射到 0~1 之间
常用于二分类输出
Tanh
将数值映射到 −1~1 之间
用于部分网络结构

以 ReLU 为例:

输入 -3,输出 0输入 0,输出 0输入 5,输出 5

此外,多分类任务的输出端经常使用 Softmax,将一组分数转换成总和为 1 的数值,作为模型对各类别的预测概率。

不过,预测概率高并不保证预测一定正确,模型的概率估计也可能不够准确。

六、什么是前向传播?

前向传播,就是输入数据经过神经网络各层计算,得到预测结果的过程。

以房价预测为例:

1.输入房屋面积、房龄等信息;2.隐藏层对信息进行计算;3.输出层给出预测房价。

假设真实房价是 200 万元,模型预测为 180 万元。

这个 180 万元,就是本次前向传播得到的预测结果。

接下来,需要衡量这个预测与真实结果之间的差距。

七、什么是损失函数?

损失函数用来衡量预测结果与目标之间的差异。

它会将这种差异转换成一个数值,这个数值叫作“损失”,英文为 Loss。

通常,在同一个任务和损失定义下,损失越小,表示预测越符合训练目标。

1. 用房价预测理解损失

假设真实房价为 200 万元:

第一次预测:180 万元第二次预测:195 万元

显然,第二次预测更接近真实结果。

一种简单的损失计算方式是平方误差:

损失 = (预测值 - 真实值)²

于是:

第一次损失 = (180 - 200)² = 400
第二次损失 = (195 - 200)² = 25

第二次的损失更小。

如果对一批样本的平方误差取平均,就得到常见的均方误差,也就是 MSE。

2. 不同任务使用不同损失函数

任务
常见损失函数
预测价格、温度等连续数值
均方误差 MSE、平均绝对误差 MAE
判断是否属于某一类别
二元交叉熵 BCE
在多个类别中选择一个
多分类交叉熵

交叉熵可以帮助模型学习分类。例如,一张图片实际属于“猫”,但模型给“猫”的预测概率很低,就会受到较大的损失惩罚。

3. 损失不等于准确率

损失是训练时优化的目标,准确率则是一种评价指标。

二者有关,但不是同一个概念。

例如,模型两次都把图片判断为“猫”,准确率可能没有变化,但它给“猫”的预测概率提高了,交叉熵损失就可能下降。

因此,观察模型时,通常需要同时关注损失和与任务相关的评价指标。

八、什么是梯度?

损失告诉我们“当前预测有多差”,梯度则进一步告诉我们:

参数发生微小变化时,损失会怎样变化。

只有一个参数时,可以先把梯度理解为损失对这个参数的导数。模型有很多参数时,梯度由各个参数对应的偏导数组成。

1. 梯度为正是什么意思?

假设我们关注一个权重 w。

如果损失对 w 的梯度为正,表示在当前位置附近:

稍微增大 w → 损失增大

因此,为了降低损失,通常应该适当减小 w。

2. 梯度为负是什么意思?

如果梯度为负,表示在当前位置附近:

稍微增大 w → 损失减小

因此,为了降低损失,通常应该适当增大 w。

可以先记住:

梯度为正,参数往小调;梯度为负,参数往大调。

注意,梯度的正负描述的是当前位置附近的变化趋势,不是参数本身的正负。

一个权重即使是正数,它的梯度也可能为负数。

3. 梯度的大小是什么意思?

梯度的绝对值反映了损失对参数变化的局部敏感程度。

在最基础的梯度下降中,如果学习率相同:

•梯度绝对值较大,参数更新幅度较大;•梯度绝对值较小,参数更新幅度较小。

4. 梯度为零,就一定最好了吗?

不一定。

梯度为零可能出现在局部最低点,也可能出现在其他位置,例如鞍点。

因此,不能仅凭梯度为零,就认定模型已经找到了最佳参数。

九、什么是梯度下降?

梯度下降是一种沿着梯度反方向调整参数、尝试降低损失的方法。

最基础的更新规则是:

新参数 = 旧参数 - 学习率 × 梯度

为什么要减去梯度?

因为梯度指向损失局部上升最快的方向,而我们希望降低损失,所以要向相反方向移动。

例子一:梯度为正

假设:

旧参数 = 2梯度 = 3学习率 = 0.1

那么:

新参数 = 2 - 0.1 × 3 = 1.7

参数从 2 减小到 1.7。

例子二:梯度为负

假设:

旧参数 = 2梯度 = -3学习率 = 0.1

那么:

新参数 = 2 - 0.1 ×(-3)= 2.3

参数从 2 增大到 2.3。

这也解释了为什么“减去梯度”并不意味着参数一定减小:如果梯度为负,减去负数就相当于加上正数。

十、学习率是什么?

学习率控制每次更新参数时的步幅。

在更新公式中:

新参数 = 旧参数 - 学习率 × 梯度

学习率与梯度一起决定参数改变多少。

1. 学习率过大

步子太大,可能越过较好的位置,导致损失来回震荡,甚至训练不稳定。

2. 学习率过小

步子太小,参数更新缓慢,训练可能需要更长时间。

3. 学习率可以变化

学习率不一定始终保持不变。

训练过程中可以按照一定规则调整学习率,例如在后期降低学习率,让参数更新更加细致。这类规则通常称为学习率调度。

需要注意:方向合适,并不意味着每次更新后损失都一定下降。步幅大小、批次差异等因素,都可能影响损失变化。

十一、什么是反向传播?

一个神经网络可能包含大量参数。我们需要知道每个参数对损失的影响,才能进行更新。

反向传播是一种利用链式法则,高效计算这些梯度的方法。

它从输出端的损失开始,沿着计算关系向前面的各层传递梯度信息。

可以把几个步骤分清楚:

环节
作用
前向传播
计算预测结果
计算损失
衡量预测与目标的差异
反向传播
计算各参数对应的梯度
参数更新
根据更新规则调整参数

反向传播的主要职责是计算梯度。参数具体怎么更新,则由优化器负责。

十二、什么是优化器?

优化器是负责更新模型参数的算法。

它按照选定的规则,利用梯度、学习率,以及某些历史信息,计算参数如何变化。

优化器不是每次自动尝试所有方法,再挑出最好的一个。训练时,我们通常会选定一种优化器,并设置相应的超参数。

1. SGD:根据当前梯度更新

在常见的小批量 SGD 中,模型使用当前一批数据计算梯度,再更新参数。

基础更新方式就是:

新参数 = 旧参数 - 学习率 × 当前梯度

由于不同批次的数据不同,梯度可能存在波动,损失曲线也不一定平滑。

2. Momentum:加入过去的更新趋势

Momentum 通常翻译为“动量”。

带动量的 SGD 会结合过去的梯度信息,让更新保留一定的历史趋势。

可以把它理解为:如果多个批次都提示参数应该向某个方向调整,动量可以帮助更新持续向这个方向推进,并缓解部分来回震荡。

3. Adam:利用梯度的历史统计

Adam 会维护梯度及其平方的移动平均,并利用这些信息,为不同参数计算更新步幅。

它通常比较容易上手,但也需要合适的学习率等设置。

方法
更新时主要参考的信息
基础 SGD
当前批次的梯度
带动量的 SGD
当前梯度和过去的更新趋势
Adam
梯度及梯度平方的历史统计

不存在对所有任务都最好的优化器。 实际选择需要结合模型、数据和验证结果。

十三、Batch、Step 和 Epoch 是什么?

这三个词经常出现在训练日志中。

1. Batch:一批数据

训练时,通常会把数据分成多个小批次。

假设有 1,000 条训练数据,每次处理 100 条,那么:

Batch Size = 100

也就是每个批次包含 100 条数据。

在普通的小批量训练中,模型根据这批数据计算平均损失和梯度,然后更新参数。

批大小会影响内存占用、计算效率和梯度的波动程度,并不是越大越好。

2. Step:一次更新

在常见训练设置中,一个 Step 通常对应一次优化器参数更新。

不过,使用梯度累积等方法时,可能处理多个批次才更新一次参数,因此 Step 与 Batch 不一定始终一一对应。

3. Epoch:完整遍历一次训练集

模型完整遍历一次训练集,通常称为一个 Epoch。

例如:

训练数据:1,000 条Batch Size:100

如果每批更新一次参数,完整学习一遍数据需要 10 次更新,也就是:

1 Epoch = 10 Steps

训练 20 个 Epoch,表示训练集被完整遍历了 20 次。

但训练轮数更多,不一定意味着新数据上的表现更好。

十四、参数和超参数有什么区别?

这两个概念容易混淆。

1. 参数:通过训练学习

例如:

•神经网络的权重;•神经网络的偏置。

它们通常由训练算法根据数据更新。

2. 超参数:控制模型和训练过程

例如:

•学习率;•Batch Size;•网络层数;•隐藏层宽度;•优化器类型;•最大训练轮数。

它们通常由我们设定,或通过调参方法进行选择。

概念
例子
如何确定
参数
权重、偏置
通过训练更新
超参数
学习率、批大小、网络层数
通过设定和验证选择

十五、为什么需要训练集、验证集和测试集?

模型的目标是对没见过的数据也能做出合理预测,因此不能只观察训练数据上的表现。

通常会将数据分为三个部分:

1. 训练集:学习参数

训练集用于计算损失和梯度,更新模型参数。

2. 验证集:选择训练方案

验证集用于观察模型表现,帮助选择超参数、模型结构和停止训练的时机。

在常规流程中,验证集不用于通过反向传播更新参数,但它会影响我们对模型方案的选择。

3. 测试集:评估最终表现

测试集用于在方案确定后,评估模型处理新数据的能力。

如果反复根据测试结果调整模型,测试集就逐渐参与了模型选择,最终评估可能过于乐观。

另外,划分数据时要避免数据泄漏。例如,同一张图片的不同修改版本同时出现在训练集和测试集,可能使测试结果虚高。

十六、什么是欠拟合、过拟合和泛化?

1. 欠拟合:有效规律还没学好

欠拟合是指模型没有充分学习数据中的有效规律。

常见表现是:

训练集表现不好,验证集表现也不好。

可能的原因包括:

•模型表达能力不足;•输入信息不够;•训练不充分;•训练设置不合适。

2. 过拟合:过多适应训练数据

过拟合是指模型过多地适应了训练数据中的细节、噪声或偶然特征,影响了对新数据的预测。

常见表现是:

训练集表现越来越好,验证集表现却不再改善,甚至变差。

就像学生记住了练习题的答案,但题目稍微变化就不会做了。

3. 泛化:处理新数据的能力

泛化能力是指模型将学到的规律应用于新数据的能力。

训练的目标不仅是降低训练损失,还要让模型在与实际应用相关的新数据上表现良好。

4. 常见的过拟合应对方法

•增加有效数据:让模型接触更丰富的样本。•数据增强:在保持标签有效的前提下,对图片等数据进行合理变换。•正则化:通过约束参数等方式,减少模型对训练数据的过度适应。•Dropout:训练时随机将部分单元的输出置零,减少对固定组合的依赖。•提前停止:当验证集表现持续不再改善时,结束训练,并保留表现较好的模型。

这些方法需要与任务匹配。例如,图片翻转是否合理,要看翻转之后是否仍然保持原来的含义。

十七、常见的深度学习网络有哪些?

不同网络结构适合处理不同类型的数据。

网络结构
基本特点
常见用途
多层感知机 MLP
由全连接层组成,组合输入特征
数值预测、分类
卷积神经网络 CNN
利用局部连接和共享权重提取特征
图像、局部模式识别
Transformer
通过注意力机制建立不同位置之间的联系
文本、图像等任务

以 CNN 为例,卷积核可以理解为在图片上移动的小型计算模板,用来提取局部特征。

Transformer 中的注意力机制,则让模型在处理某个位置的信息时,根据计算结果组合其他位置的信息。这里的“注意力”是数学机制,不等同于人的主观注意。

初学时,可以先理解这些网络的基本思路,再深入学习它们的具体结构。

十八、模型训练的完整过程是什么?

将前面的概念串起来,一次常见的训练流程如下:

第一步:准备数据

整理输入和目标,检查错误,进行必要的预处理,并划分训练集、验证集和测试集。

第二步:建立模型

选择合适的网络结构,初始化权重和偏置。

第三步:进行前向传播

将一批训练数据输入模型,得到预测结果。

第四步:计算损失

比较预测结果与目标,得到损失数值。

第五步:进行反向传播

计算各个参数对应的梯度。

第六步:使用优化器更新参数

优化器根据梯度、学习率等信息调整参数。

第七步:重复训练并观察验证结果

不断处理新的批次,同时检查验证集表现,选择合适的模型。

第八步:评估最终模型

使用独立测试集,评估模型对新数据的表现。

这一过程中,训练损失不一定每一步都下降。更有意义的是观察整体趋势,以及验证集是否真正得到改善。

十九、训练和推理有什么区别?

训练是学习参数,推理是使用已经学好的参数进行预测。

对比项
训练
推理
主要目的
学习和调整模型参数
对新输入给出结果
是否需要目标结果
本文介绍的有标签训练需要
通常不需要
是否进行反向传播
通常进行
通常不进行
是否更新参数
是
通常不更新

例如,用大量带标签的图片调整模型,是训练;将一张新图片输入训练好的模型,判断其中是什么,是推理。

训练完成并不意味着模型永远可靠。如果实际数据与训练数据差异很大,预测效果也可能下降。

二十、用一张表记住核心概念

概念
一句话理解
神经网络
将输入数据经过多层计算,转换为预测结果
神经元
接收输入、进行计算并输出结果的基本单元
权重
控制输入如何影响计算结果
偏置
调整计算的基准
激活函数
引入非线性,帮助模型表达复杂关系
前向传播
从输入计算到预测结果
损失函数
衡量预测与目标之间的差异
梯度
描述参数微小变化时,损失如何变化
反向传播
高效计算各参数的梯度
学习率
控制参数更新的步幅
优化器
按照一定规则更新参数
Batch
一批参与计算的数据
Epoch
完整遍历一次训练集
过拟合
对训练数据适应过多,新数据表现变差
泛化
将学到的规律应用于新数据
推理
使用训练好的模型进行预测

学习深度学习时,可以先抓住这条主线:

输入数据 → 得到预测 → 计算损失 → 计算梯度 → 更新参数。

理解这几个环节后,神经网络、损失函数、反向传播和优化器就不再是彼此孤立的名词,而是共同完成模型训练的不同部分。

本文借助 AI 辅助整理,面向初学者介绍深度学习基础知识,部分概念采用了简化表述。如发现错误或有修改建议,欢迎留言交流。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/202084