游乐游手机版
首页/AI热点日报/热点详情

神经网络工作原理全面解析

类型:热点整理2026-07-09
提及人工神经网络,很多人会联想到它与生物神经网络之间的渊源。没错,其设计灵感确实源自我们大脑中神经元的运作机制:当某个神经元兴奋时,它会向邻近的神经元释放化学物质,从而改变后者的电位;一旦电位超过特定阈值,该神经元就会被激活,继续传递信号。而人工神经网络则对这一过程进行了数学抽象——它由大量按层次结

提及人工神经网络,很多人会联想到它与生物神经网络之间的渊源。没错,其设计灵感确实源自我们大脑中神经元的运作机制:当某个神经元兴奋时,它会向邻近的神经元释放化学物质,从而改变后者的电位;一旦电位超过特定阈值,该神经元就会被激活,继续传递信号。而人工神经网络则对这一过程进行了数学抽象——它由大量按层次结构连接的“神经元”构成,能够从输入的计算值中提取特征,并通过分布式并行处理完成信息加工。简单来说,就是通过不断调整内部节点之间的连接权值,来逼近任意复杂的函数,最终实现对真实数据的拟合,从而提升预测的准确性。

听起来有些抽象?没关系,我们先从一个具体的案例入手,完整走一遍神经网络在机器学习中处理数据的全流程。

01 神经网络的实战案例

1.1 案例介绍

实例:训练一个神经网络模型,用于拟合三种广告投放渠道(电视、广播、报纸)与产品销量之间的关系,目标是基于广告投入来预测销量。

样本数据:如下表所示,TV、radio 和 newspaper 是三个特征,sales 是标签(即待预测的值)。

样本数据

1.2 准备数据

#添加引用
import tensorflow as tf
import pandas as pd
import numpy as np

#加载数据
data = pd.read_csv('../dataset/Advertising.csv')
#pd 是数据分析库pandas
# 建立模型 根据tv,广播,报纸投放额 预测销量
print(type(data),data.shape)
### (200, 5)

#取特征 x取值除去第一列和最后一列的值取出所有投放广告的值
x = data.iloc[:,1:-1]#200*3
#y取值最后一列销量的值 标签
y = data.iloc[:,-1] #200*1

1.3 构建神经网络模型

建立顺序模型:Sequential

隐藏层:采用一个多层感知器,包含10个神经元(Dense(10)),输入形状为 (3,),对应三个特征,激活函数选用 ReLU。

输出层:预测一个数值,因此维度为1。

model = tf.keras.Sequential([
    tf.keras.layers.Dense(10,input_shape=(3,),activation="relu"),
    tf.keras.layers.Dense(1)
])

模型结构如下图所示:

说明:

1)在 Keras 中,Sequential 表示顺序模型。由于层与层之间是全连接的,因此选用这种结构。

2)tf.keras.layers.Dense 是用于添加全连接层的 API。

3)隐藏层共有40个参数:10个神经元,每个神经元有4个参数(w1,w2,w3,b),总计 10×4=40。

4)输出层有11个参数:1个神经元,参数包含10个权重和一个偏置 b,共11个。

5)模型总参数:40+11=51个。

1.4 为模型加入优化器和损失函数

# 优化器adam,线性回归模型损失函数为均方差(mse)
model.compile(optimizer="adam",loss="mse")

1.5 启动训练

# 训练模型
model.fit(x,y,epochs=100)

这里 x 是样本特征,y 是样本标签。epochs 是梯度下降中的一个概念:一个完整的数据集通过神经网络一次并返回一次,记为一个 epoch。当数据量较大时,需要将其分成多个小块(batch),这部分将在后面的梯度下降章节详细介绍。

1.6 使用模型进行预测

# 使用该模型在现有数据上预测前10个样本的销量
test = data.iloc[:10,1:-1]
print('测试值',model.predict(test))

以上步骤展示了从构建神经网络模型、训练到预测的完整流程。接下来,我们深入探讨背后的原理。

02 神经元的数学模型

上图展示了一个标准的人工神经元模型。其组成部分包括:

输入 input

(x1, x2, x3) 是来自外部的输入信号,对应一个样本的多个属性或特征——在广告案例中,这代表三种投放方式的费用。

权重 weights

(w1,w2,w3) 是每个输入信号对应的权重值。举例来说,x1 的权重可能是0.92,x2 的权重可能是0.2,x3 的权重可能是0.03,这些权重之和不需要等于1。

偏置 bias

偏置 b 是如何产生的?很多资料会提到表达式 y = wx + b,b 是偏移值,它让直线能够上下移动。从生物学角度理解,脑神经细胞需要一个临界阈值——只有当输入电流/电平大于某个值时,神经元才会兴奋。这个 b 实际上就是该临界值的相反数。换句话说,当 w1*x1 + w2*x2 + w3*x3 >= t 时神经元兴奋,将 t 移到左边,令 b = -t,就得到了 w1*x1 + w2*x2 + w3*x3 + b >= 0。

03 神经网络的训练过程

仍然以广告投放为例。在训练之前先搭建网络,然后填充带有特征和标签的样本数据。训练的核心就是不断更新权重 w 和偏置 b。对于输入层(有10个神经元),每个神经元对应三个特征,因此每个神经元有4个参数(w1,w2,w3,b),全连接时10层共有40个参数。下面是一个单层神经网络(两个神经元)的示意图:

训练流程

整个过程就是反复调整 w 和 b,直到模型的整体误差达到最小。具体流程如下图所示:

04 神经网络相关的核心概念

4.1 反向传播

反向传播算法是一种高效计算数据流图中梯度的技术。其核心思想就是链式法则:每一层的导数等于后一层的导数乘以前一层的输出。误差从输出层反向逐层传播,从而更新参数。

前馈过程:从输入开始,逐层计算每个隐含层的输出,直到输出层。

正向过程

step1:输入层,随机输入第一个 x 值(假设 x=2)。

step2:第一层计算 a = x²。

step3:第二层计算 b = ln(a)。

step4:第三层计算 c = sqrt(b)。

step5:输出层接收 c。

然后开始计算导数并进行反向传播。为了减少计算量,要对已完成的计算结果进行复用。

反向过程

step6:计算 y 与 c 的差值 Δc = c - y,传回 step4。

step7:step4 接收 Δc,计算 Δb = Δc * 2 * sqrt(b)。

step8:step3 接收 Δb,计算 Δa = Δb * a。

step9:step2 接收 Δa,计算 Δx = Δa / (2*x)。

step10:step1 接收 Δx,更新 x(x - Δx),回到 step1 开始下一轮循环。

4.2 梯度下降

梯度下降是机器学习中寻找最优解(曲线最小值)的一种迭代优化算法。它包含两层含义:

梯度:函数当前位置的最快上升方向。

下降:沿着梯度的反方向移动,这样代价函数就会减小。

其中:

θ(n+1):下一个值

θ(n):当前值

-:减号,表示梯度的反方向

η:学习率或步长,控制每一步移动的距离——太大容易错过极值点,太小则收敛过慢

▽:梯度,函数当前位置的最快上升方向

J(θ):函数

梯度下降是迭代过程,需要多次应用该算法才能得到最优结果。欠拟合的状态会随着迭代逐渐改善,最终获得对数据的最佳拟合。

如上图左所示,刚开始学习率较大,下降步长也大;随着接近最小值,学习率自然变小,步长也随之缩小。与此同时,代价函数(也称损失函数)在逐步减小。

在实际应用中,一次性将整个数据集送入计算机往往不现实,因此需要把数据分成小块,逐块送入,每处理完一块就更新一次权重。这就引出了 epoch、batch size 等概念。

epochs

一个完整的数据集通过神经网络一次并返回一次,称为一个epoch。当数据集过大时,就需要拆分成多个小块。

设置 epoch 的个数

完整的数据集需要在同一个网络中多次传递,因为仅仅更新一次(一个 epoch)远远不够。随着 epoch 数量增加,权重的更新次数增多,曲线会从欠拟合逐渐变为过拟合。那么究竟多少个 epoch 才合适?这并没有标准答案,需要根据数据集特性和经验来设定。

batch

当无法一次性通过全部数据时,就把数据集分成几个batch

迭代

迭代是指完成一个 epoch 所需要的 batch 数。在一个 epoch 中,batch 数等于迭代数。例如,对于2000个训练样本,分成大小为400的 batch(共5个 batch),那么完成一个 epoch 就需要5次迭代。

4.3 损失函数

“损失”是所有样本误差的总和,公式如下(m 为样本数):

常见的损失函数包括:

(1)0-1损失函数

(2)绝对值损失函数

(3)铰链损失函数

(4)对数损失函数

(5)均方差损失函数

(6)交叉熵损失函数

4.4 优化函数

在实例的1.4节中,我们为模型加入了优化器和损失函数:

# 优化器adam,线性回归模型损失函数为均方差(mse)
model.compile(optimizer="adam",loss="mse")

这里使用的是 Adam 优化器。神经网络中的优化方法还有很多,下面简要介绍几种常见的:

1) 梯度下降法(Gradient Descent)——最基本也是最重要的方法。

2) 随机梯度下降法(SGD)——每次只用一个样本更新,计算量小但更新不稳定,容易超调。

3) Mini Batch Gradient Descent ——折中方案,每次用一个 batch 计算 loss,batch 大小可自行设定。

4) Momentum ——引入动量,加速梯度下降。

5) Nesterov ——在 Momentum 的基础上先预演一步,提前调整方向。

6) Adagrad ——让每个参数拥有自己的学习率,根据历史梯度平方和自动衰减。优点是训练过程中无需手动调整学习率,缺点是后期学习率过小,可能导致收敛停滞。

7) AdaDelta ——Adagrad 的改进版,解决了后期学习率过小的问题。

8) Adam ——重点介绍。既然不同参数可以拥有不同的学习率,为什么不能拥有不同的动量呢?Adam 正是这样做的:为每个参数同时维护学习率和动量,更新独立性强,既提升了训练速度,又增强了稳定性。

Adam(Adaptive Moment Estimation)公式如下:

通常 ρ1 设为0.9,ρ2 设为0.999。套用一句话:Adam 在实践中表现优秀,胜过了其他自适应方法。

事实上,如果数据比较稀疏,SGD、NAG 和 Momentum 等统一学习率的方法效果往往较差——那些需要快速更新的参数更新慢,而需要慢慢更新的参数可能因数据噪声而波动。因此,稀疏数据更适合使用自适应方法(Adagrad、AdaDelta、Adam)。同样,对于深度或非常复杂的神经网络,使用 Adam 等自适应方法也能更快收敛。

05 总结

最后回顾一下本文的核心内容:

1)人工神经网络灵感来源于生物神经网络,通过增加隐藏层神经元数量,能够按任意精度逼近连续函数,从而提升模型的拟合能力。

2)通过一个完整的实例,展示了如何利用机器学习实现人工神经网络的构建、训练和预测。

3)详细解释了神经网络的训练过程。

4)介绍了反向传播、梯度下降、损失函数、优化函数、epoch、batch size、学习率等关键概念。

来源:https://m.elecfans.com/article/1931150.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。