神经网络原理通俗讲解:结构、偏置、损失函数与梯度下降

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


一、什么是神经网络?

神经网络(Neural Network)是一种模拟人脑神经元工作方式的计算模型,广泛应用于图像识别、语音识别、自然语言处理等领域。

它的核心思想是:通过大量简单单元的连接与学习,实现对复杂问题的建模和预测。

在计算机中,神经网络并不是真正的生物神经,而是由数学公式和程序构成的模型,但其结构和信息传递方式受到了生物神经系统的启发。

二、神经网络的基本结构

一个典型的神经网络通常由以下三部分组成:

1.输入层(Input Layer)

用于接收原始数据

每一个神经元对应一个输入特征

不进行复杂计算,只负责传递数据

例如,在图像识别中,输入层可以是图像的像素值。

2.隐藏层(Hidden Layer)

位于输入层和输出层之间

负责对输入数据进行特征提取和非线性变换

可以有一层或多层

隐藏层的数量和每层神经元的个数,通常需要根据任务复杂度进行设计。

3.输出层(Output Layer)

输出模型的最终结果

用于分类或回归任务

例如:

二分类问题:输出 0 或 1

多分类问题:输出各类别的概率

三、神经网络的构造

图中左侧为多个输入变量,分别表示为 x1、x2、x3、...、xn。

每一个输入变量都对应一个权重参数,表示为 ω1、ω2、ω3、...、ωn,权重用于衡量不同输入对神经元输出结果的影响程度。

所有输入 xi 在进入神经元之前,会先与各自对应的权重 ωi 相乘,然后汇聚到中间的神经元节点中。神经元内部会对这些加权后的输入进行求和运算,并通常加入偏置项,随后通过激活函数得到输出结果。

右侧的箭头表示神经元的输出,该输出可以作为下一层神经元的输入,或者作为整个神经网络的最终输出。

最左边是一个二维平面,上面有两类数据点,用不同的颜色和形状表示。中间画了一条直线,把这两类点分开,说明这是一个可以用直线解决的分类问题。

上方给出了这条直线的推导过程。

从常见的直线表达式 y = kx + b 开始,把它整理成 kx + b − y = 0。

当问题扩展到多个输入时,就可以写成 k1x1 + k2x2 + b = 0。

为了和神经网络的形式一致,把系数统一记为权重,就得到 w1x1 + w2x2 + b = 0。

最后,把偏置 b 看成是一个固定为 1 的输入,就可以写成 w1x1 + w2x2 + 1·w3 = 0。

中间部分画的是一个神经元的结构。

输入包括 x1、x2 以及一个常数 1,它们分别乘以对应的权重 w1、w2、w3,然后一起送进求和单元。求和结果再经过一个函数处理,得到最终输出,用来判断数据属于哪一类。

右边展示的是一个常见的激活函数曲线(Sigmoid)。

它的作用是把神经元算出来的结果压缩到 0 到 1 之间,这样输出就可以理解成"属于某一类的可能性"。

整体来看,这张图表达出:

分类直线 → 加权求和 → 神经元 → 激活函数输出,也就是神经网络中最基本的工作思路。

最左侧是输入层,这一层的节点用来接收原始数据。每一个节点通常对应一个输入特征,比如数据的某一维数值,本身并不进行复杂计算,只负责把数据传给下一层。

中间是多层隐藏层。每一层都由多个神经元组成,并且相邻两层之间是全连接的,也就是说,上一层的每一个神经元都会和下一层的所有神经元相连。

隐藏层的作用是对输入数据进行逐层处理,把原始、简单的信息不断组合和转换,提取出更有用的特征。层数越多,网络能够表达的关系也就越复杂。

最右侧是输出层,用于给出最终结果。输出的形式取决于具体任务,比如在分类问题中,输出可以表示不同类别的可能性,在回归问题中则是一个具体的数值。

整体来看,这个网络的数据流向是从左到右逐层传递的:

输入层接收数据 → 隐藏层不断加工信息 → 输出层给出结果。

这正是深度神经网络的基本工作方式,也是"深度学习"中"深度"二字的来源。

四、神经网络的介绍

经网络是一种模仿人脑神经系统工作方式建立的计算模型,主要用于让计算机从数据中自动学习规律,并完成预测或分类等任务。它的基本思想是:通过大量简单计算单元的组合,来解决复杂问题。

从结构上看,神经网络由多层节点组成,通常包括输入层、隐藏层和输出层。输入层负责接收原始数据,隐藏层对数据进行逐层处理和特征提取,输出层给出最终结果。数据在网络中按照一定的方向逐层传递,完成一次预测过程。

神经网络中的每一个节点可以看作一个"神经元"。神经元会对输入信息进行加权求和,并通过激活函数输出结果。不同神经元之间通过连接线相连,每一条连接线都对应一个权重参数。这些权重并不是固定的,而是通过训练过程不断调整得到的。

神经网络的学习过程,本质上是一个不断优化参数的过程。模型先根据当前参数给出预测结果,再通过损失函数衡量预测值与真实值之间的差距,然后利用反向传播和梯度下降等方法逐步调整权重,使误差不断减小。

由于具备较强的非线性表达能力,神经网络在图像识别、语音识别、自然语言处理等领域得到了广泛应用。随着网络层数的增加,模型可以学习到更加复杂和抽象的特征,这也是"深度学习"名称的由来。

总体来说,神经网络是一种通过数据驱动、自动学习特征的模型,是现代人工智能系统中的重要基础。

五、神经网络学习的核心思想

1.在设计一个神经网络时,输入层和输出层的节点数量通常是确定的。

输入层的节点数由数据本身决定,比如有多少个特征就需要多少个输入节点;输出层的节点数则取决于任务类型,比如分类类别数或回归输出的维度。相比之下,中间的隐藏层结构更加灵活,包括层数以及每一层的节点数量,都可以根据实际需求进行调整。

2.在神经网络的结构示意图中,节点之间的连线和箭头表示的是数据在预测(前向计算)时的传递方向。需要注意的是,这种数据流向主要描述的是从输入到输出的计算过程,而在训练阶段,还会存在参数反向更新的过程,其方向与图中箭头并不完全一致。

3.另外,在理解神经网络结构时,真正的核心并不是图中的圆圈本身。圆圈只是用来表示神经元,而决定模型效果的关键在于神经元之间的连接关系。每一条连接线都对应一个权重参数,不同的权重会对输入信息产生不同的影响。这些权重的具体数值并不是人为设定的,而是通过训练过程不断调整得到的。

六、确定中间层

在实际使用中,中间层并没有一个固定的标准答案,更多是根据任务特点和实验效果来确定的。一般可以从以下几个方面来考虑。

首先是问题的复杂程度。

如果任务本身比较简单,比如线性关系明显、特征数量不多,使用较少的隐藏层甚至一层隐藏层就可以取得不错的效果。而对于关系复杂、特征之间非线性较强的问题,往往需要更多的隐藏层来逐层提取特征。

其次是数据规模的大小。

当训练数据较少时,网络结构如果设计得过深、节点过多,容易出现过拟合的问题,也就是模型在训练集上表现很好,但在新数据上效果较差。这种情况下,隐藏层数量和每层节点数通常需要控制得更简单一些。相反,当数据量较大时,模型可以适当增加复杂度。

第三是隐藏层中节点数量的选择。

常见的做法是让隐藏层节点数介于输入层和输出层之间,或者逐层递减。例如第一隐藏层节点较多,后面的隐藏层逐渐减少,以便逐步压缩和提取有效信息。当然,这并不是硬性规则,而是一种经验做法。

最后是通过实验不断调整。

在神经网络中,隐藏层结构往往需要多次尝试。可以先从较简单的结构开始,根据训练结果和验证效果,再逐步增加层数或节点数量,找到在性能和计算开销之间较为合适的平衡点。

总体来说,中间层的设计是一种经验与实验相结合的过程,需要根据具体问题不断调整,而不是一次就能确定。

七、正则化惩罚

图中假设输入为 x = [1, 1, 1, 1],在这种情况下,给出了两种不同的权重设置方式。

第一种权重为 w1 = [1, 0, 0, 0],可以看到,模型几乎只依赖第一个输入特征,其余特征基本不起作用。

第二种权重为 w2 = [0.25, 0.25, 0.25, 0.25],每个输入特征都会参与计算,并且贡献相同。

虽然这两组权重与输入相乘后得到的结果相同,但它们背后的含义不同。第一种情况下,模型只"记住"了某一个特征,容易对个别输入过度依赖,从而产生过拟合问题;而第二种情况下,信息分布更加均匀,模型能够综合利用多个特征,通常具有更好的泛化能力。

图中下方给出了均方误差损失函数的形式,在原有预测误差的基础上,引入了一个正则化项。这个正则化项的作用是对权重大小进行约束,防止某些权重变得过大,从而降低模型过拟合的风险。

常见的两种正则化方式:

L1 正则化,通过对权重绝对值求和,鼓励部分权重变为 0;

L2 正则化,通过对权重平方求和,倾向于让权重分布得更加平滑。

右侧的曲线示意图对比了加入正则化前后的效果,可以看出,加入正则化后,模型的输出变化更加平稳,不容易出现剧烈波动。

合理的权重分布和正则化机制,可以有效提升模型的稳定性和泛化能力。

#八、 梯度下降

这张图展示的是梯度下降算法寻找最优解的过程。

图中的彩色三维曲面可以理解为损失函数的形状,横轴表示模型参数,纵轴表示损失值的大小。不同颜色代表损失的高低,颜色越高的位置,损失越大;越低的地方,表示模型效果越好。

图中间的黑色折线和箭头表示参数更新的轨迹。模型一开始通常处在曲面上的某个较高位置,然后沿着"下降最快"的方向一步一步移动,每走一步,损失都会减小一些。

梯度下降的核心思想就是:

在当前位置,找一个能让损失下降最快的方向,然后朝这个方向走一小步。

不断重复这个过程,参数就会逐渐靠近曲面的低点,也就是损失函数的最小值。

从图中可以看到,路径并不是一条直线,而是随着地形的变化不断调整方向。这说明在复杂问题中,损失函数往往不是简单的"碗状",梯度下降需要不断修正前进方向,才能逐步逼近最优解。

梯度下降就是在一张"起伏的地形图"上,一步步往最低点走的过程,而这个最低点对应的,就是模型参数的较优取值。

偏导数、梯度与梯度下降

在处理多变量函数时,常常会用到偏导数。

偏导数可以理解为:当函数中有多个变量时,只对其中一个变量求导,而把其他变量暂时当作不变。通过分别对每一个变量求偏导,就可以了解各个变量对函数变化的影响情况。

在此基础上,就引出了梯度的概念。

梯度可以看作是由一个函数对所有变量的偏导数组成的向量。这个向量不仅包含了各个方向上的变化信息,它的方向还具有明确的意义------梯度指向的是函数值上升最快的方向。因此,如果希望函数值减小,就需要沿着梯度的反方向移动。

**梯度下降法(Gradient Descent)**正是基于这一思想提出的一种优化方法。

它是一种常用的一阶优化算法,也被称为最陡下降法。其基本做法是:在当前位置计算梯度,然后沿着梯度的反方向更新参数,使函数值不断减小,从而逐步逼近函数的局部最小值。

在梯度下降过程中,**步长(也称学习率)**起着非常重要的作用。

梯度只决定了前进的方向,而学习率则决定每一步走多远。如果学习率过大,参数可能在最优值附近来回震荡,甚至无法收敛;如果学习率过小,虽然过程更稳定,但收敛速度会非常慢。因此,学习率通常需要合理设置,不能过大也不能过小。

由于实际问题中的函数往往存在多个极小值,梯度下降有可能停留在局部最小值。一种常见的应对方式是:
从多个不同的初始位置开始进行梯度下降,分别求解最小值,再从中选择效果最好的结果,以提高找到全局最优解的可能性。

BP神经网络训练过程

这张图从整体上展示了 BP(Backpropagation)神经网络是如何完成一次训练的,包括前向计算、损失计算以及反向更新参数的全过程。

第一步:前向传播计算输出

输入数据从输入层开始,经过隐藏层逐层计算。每一层都会对输入进行加权求和,并通过激活函数处理,最终在输出层得到预测结果,记为 yp。这一步的本质就是:用当前的权重,算出模型的预测值。

第二步:计算损失函数

将预测结果 yp 与真实值 y 进行比较,计算两者之间的误差。图中使用的是均方误差损失函数,同时在损失函数中加入了正则化项,用于限制权重大小,防止模型过拟合。

第三步:计算权重的梯度

接下来需要计算损失函数对各个权重的偏导数,也就是每个权重对误差的影响程度。由于网络是多层结构,梯度的计算需要按照链式法则逐层展开,这一步也体现了多层神经网络"逐层求导"的过程。

第四步:误差反向传播

误差信息从输出层开始,沿着网络结构反向传递到隐藏层,再传回输入层。每一层都会根据误差大小,计算出对应权重需要调整的方向和幅度。

第五步:更新权重并重复训练

将计算得到的梯度乘以学习率,对权重进行更新,得到新的权重值。随后重复上述过程,不断调整参数,直到损失函数减小到设定的范围内,或者训练达到停止条件。

感知器

感知器是最简单的神经网络模型,可以看成是一个"带权重的加法器 + 判断器"。

它的工作过程很简单:

1.把输入数据按权重相乘

2.求和

3.通过一个激活函数(如阶跃函数)给出输出结果

核心特点:

只有一层(没有隐藏层)

本质上是 线性模型

只能解决 线性可分问题

局限性:

当数据无法用一条直线(或一个平面)分开时,感知器就无能为力了。

总结:

感知器只能做线性划分。

多层感知器

多层感知器是在感知器基础上的升级版。

它在输入层和输出层之间,加入了一个或多个隐藏层。

多出来的隐藏层有什么用?

1.每一层都会对数据做一次"变形"

2.再加上非线性激活函数

3.就能把原本线性不可分的数据,变成可分的

核心特点:

1.至少包含一个隐藏层

2.可以使用 ReLU、Sigmoid 等非线性激活函数

3.能完成 非线性分类和回归任务

关键点:

隐藏层是神经网络能够进行非线性分类的关键。

总结:

多层感知器通过隐藏层 + 非线性激活,实现复杂问题的建模。

偏置

在神经网络中,通常会在各层神经元中引入偏置(bias)。

偏置可以理解为一个输出恒为 1 的特殊神经元,其主要作用是为神经元提供一个可学习的常数项。

神经元的线性加权形式通常表示为:

z = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b

其中:

x_i 表示输入特征

w_i 表示对应的权重

b 表示偏置项

从计算角度看,偏置也可以等价写成:

z = w_1 x_1 + w_2 x_2 + ... + w_n x_n + w_b * 1

其中 1 即为偏置神经元的固定输出值。

偏置节点本身不接收来自上一层的输入,一般在网络结构示意图中不会被单独画出,而是通过偏置项 b 体现。

引入偏置可以增强模型的表达能力,使模型不受"必须经过原点"的限制,从而提高神经网络对复杂数据的拟合能力。

为什么需要偏置?

如果没有偏置:

所有输出都被迫经过原点

模型的灵活性会很差

加入偏置之后:

可以整体平移函数

更容易拟合真实数据

提高模型的表达能力

直观理解:
偏置就像一条直线的"截距"。

八、训练方法------损失函数

为什么需要损失函数?

损失函数(Loss Function)的作用是:

把"预测得准不准"变成一个可以计算、可以优化的数值

损失值 越小,说明预测结果 越接近真实值

训练的本质:让 loss 不断下降

常见损失函数

0-1 损失函数(分类)

均方误差损失(回归)

平均绝对误差损失(回归)

交叉熵损失(分类、多分类)

合页损失(SVM)

均方误差损失函数(MSE,回归问题)

适用于:预测连续数值

定义公式:

loss = (1 / N) * Σ(y_i - ŷ_i)^2

或者写成完整形式:

loss = (1 / N) * Σ_{i=1}^{N} (y_i - y_hat_i)^2

各符号含义:

y_i:第 i 个样本的真实值

y_hat_i:第 i 个样本的预测值

N:样本总数

特点:

误差越大,平方后惩罚越大

连续、可导,适合用梯度下降优化

交叉熵损失函数(多分类的情况)

1. Softmax 函数(输出概率)

p_i = exp(z_i) / Σ exp(z_j)

z_i:第 i 类的模型输出

p_i:预测为第 i 类的概率

所有 p_i 之和等于 1

2. 交叉熵损失函数(单样本)

loss = - Σ y_i * log(p_i)

y_i:真实标签(one-hot 编码,正确类为 1,其余为 0)

p_i:模型预测的概率

实际上只计算真实类别对应的那一项。

3. 多样本平均交叉熵损失

loss = -(1 / N) * Σ Σ y_{k,i} * log(p_{k,i})

N:样本数量

k:样本索引

i:类别索引

为什么要使用 -log?

原因很简单:

当 p 接近 1 时,-log§ 接近 0(预测正确,损失小)

当 p 接近 0 时,-log§ 非常大(预测错误,惩罚极重)

这使模型既追求准确,又避免"自信但错误"

总结

神经网络训练的本质,是通过损失函数量化预测误差,并利用梯度下降不断调整模型参数,使预测结果逐步逼近真实值。

相关推荐
weixin_377634842 小时前
【2026目标检测】高质量模型汇总
人工智能·目标检测·目标跟踪
光羽隹衡2 小时前
机器学习——PCA数据降维
人工智能·机器学习
棒棒的皮皮2 小时前
YOLO 拓展应用全解析(目标跟踪 / 实例分割 / 姿态估计 / 多目标检测)
深度学习·yolo·目标检测·计算机视觉·目标跟踪
KAI智习2 小时前
大模型榜单周报(2026/1/17)
人工智能·大模型
PNP Robotics2 小时前
PNP机器人分享具身操作策略和数据采集
大数据·人工智能·学习·机器人
AI白艿2 小时前
先知AI如何破解男装行业的数据迷局?
人工智能·aigc
子午2 小时前
【2026原创】眼底眼疾识别系统~Python+深度学习+人工智能+CNN卷积神经网络算法+图像识别
人工智能·python·深度学习
Akamai中国3 小时前
Akamai Cloud客户案例 | 全球教育科技公司TalentSprint依托Akamai云计算服务实现八倍增长并有效控制成本
人工智能·云计算·云服务·云存储
企业智能研究3 小时前
数据治理是什么?数据治理对企业有什么价值
大数据·人工智能