目录

一、情景导入

二、模型介绍

(一)BP 神经网络:一个会 “学习” 的 “小型脑瓜”

(二)激活函数:给 “小成员” 装上 “开关”

三、模型原理

01、模型结构

02、前向传播(Forward Propagation)

03. 损失函数(Loss Function)

04. 反向传播(Back Propagation)

05. 激活函数(Activation Function)

四、应用场景

五、示例代码:用 Python 实现简单 BP 神经网络


一、情景导入

你有没有想过,手机刷脸解锁时,它是怎么一眼认出你的?语音助手能听懂你的指令,背后又藏着什么玄机?其实,这些黑科技的背后,都少不了一个 “幕后功臣”——BP 神经网络。今天,咱们就用几分钟,把这个听起来高深的模型聊得明明白白。

二、模型介绍

(一)BP 神经网络:一个会 “学习” 的 “小型脑瓜”

别急着被 “神经网络” 这四个字吓住,其实它很接地气。咱们可以把 BP 神经网络想象成一个 “小型决策团队”。

这个团队里有很多 “小成员”(神经元),它们分成好几排(层):最前面的是 “接收信息员”(输入层),负责接收各种数据,比如图片的像素点、声音的波形;中间的是 “分析员”(隐藏层),会对信息进行层层处理;最后面的是 “输出员”(输出层),给出最终结果,比如 “这是张三的脸”“这句话是让打开空调”。

而 “BP”(反向传播)呢,就是这个团队的 “学习秘籍”。就像我们做错题目后会回头检查哪里出错一样,当输出结果不对时,它会从后往前找原因,调整各个 “成员” 之间的配合(权重),下次就能做得更好。

从数学角度看,BP 神经网络的学习过程是通过梯度下降算法来最小化损失函数的。损失函数用于衡量预测值与实际值之间的差异,比如均方误差损失函数。反向传播就是利用链式法则计算损失函数对各权重的偏导数,进而更新权重,使损失函数不断减小。

图片

(二)激活函数:给 “小成员” 装上 “开关”

要是每个 “小成员” 只是简单传递信息,那和传话筒没啥区别。激活函数就是给它们装上 “智能开关”,决定什么时候该 “兴奋”(输出信号),什么时候该 “安静”(不输出信号)。

Sigmoid 函数:像个 “犹豫的判官”。它会把输入的信息处理成 0 到 1 之间的数,数值越接近 1,说明 “越想发言”。比如在判断 “这张图是不是猫” 时,它可能给出 0.8 的结果,意思是 “有 80% 的把握是猫”,适合需要概率判断的场景。

图片


     ReLU 函数:像个 “急性子门卫”。只要输入是正数,它就直接放行(输出原来的数);要是负数,就直接关门(输出 0)。它计算快、效率高,在处理大量图片、视频数据时特别给力,现在很多场景都爱用它。

图片


    Tanh 函数:像个 “爱憎分明的评论家”。它会把输入变成 - 1 到 1 之间的数,正数越大表示 “越支持”,负数越小表示 “越反对”。在处理语音信号这类有正有负的波动数据时,它表现得很出色。激活函数的作用是引入非线性因素,使得神经网络可以拟合复杂的非线性函数。如果没有激活函数,无论神经网络有多少层,都只能实现线性映射,难以处理复杂的现实问题。
 

图片

三、模型原理

BP(Back Propagation,反向传播)神经网络是一种多层前馈神经网络,通过误差反向传播算法进行训练,广泛应用于分类、回归、模式识别等任务。

01、模型结构

BP神经网络通常由三部分组成:

  1. 输入层(Input Layer):接收原始数据(如像素、特征向量)。

  2. 隐藏层(Hidden Layer):1层或多层,负责非线性变换。

  3. 输出层(Output Layer):输出预测结果(如分类概率、回归值)。

每层由多个神经元(Neuron)组成,神经元之间通过权重(Weight)连接,并经过激活函数(Activation Function)进行非线性映射。

02、前向传播(Forward Propagation)

输入数据从输入层逐层计算,直至输出层。

数学表示

输入层→隐藏层

隐藏层→输出层


03. 损失函数(Loss Function)


04. 反向传播(Back Propagation)

核心思想:链式求导,从输出层反向调整权重和偏置,使损失最小化。

步骤


05. 激活函数(Activation Function)

引入非线性,使网络能拟合复杂函数。常见激活函数:

函数 公式 特点
Sigmoid σ(z)=11+e−zσ(z)=1+e−z1​ 输出(0,1),适合概率
ReLU ReLU(z)=max⁡(0,z)ReLU(z)=max(0,z) 计算快,缓解梯度消失
Tanh tanh⁡(z)=ez−e−zez+e−ztanh(z)=ez+e−zez−e−z​ 输出(-1,1),适合有正负的数据

四、应用场景

BP 神经网络的 “超能力”:在生活中无处不在

别以为它只存在于实验室,其实它早就渗透到我们生活的方方面面啦。

人脸识别:手机解锁、支付宝刷脸付款时,BP 神经网络在飞快地对比你脸上的特征点,几毫秒内就完成 “是不是本人” 的判断。

语音助手:当你对着手机说 “明天天气怎么样”,它能把你的声音转换成文字,再理解意思,这背后就有 BP 神经网络在帮它 “听懂” 人话。

用户画像:刷短视频时,平台总能推你喜欢的内容;逛电商平台时,“猜你喜欢” 栏目总能戳中你的心。这都离不开BP神经网络对用户画像的分类识别。

五、示例代码:用 Python 实现简单 BP 神经网络

# 导入所需库 
from sklearn.datasets import load_iris 
from sklearn.model_selection import
train_test_split 
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score 
# 加载数据 
iris = load_iris() 
X = iris.data 
# 特征数据,包括花萼长度、花萼宽度、花瓣长度、花瓣宽度 
y = iris.target 
# 标签数据,0、1、2分别代表三种鸢尾花
# 划分训练集和测试集 
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size=0.3, random_state=42) 
# 创建BP神经网络模型,这里使用MLPClassifier,其底层实现了BP算法
# hidden_layer_sizes=(10,)表示隐藏层有10个神经元,activation='relu'使用ReLU激活函数 
# solver='adam'使用adam优化器,max_iter=300表示最大迭代次数
model = MLPClassifier(hidden_layer_sizes=(10,),
activation='relu', solver='adam', max_iter=300, random_state=42) 
# 训练模型 
model.fit(X_train, y_train) 
# 在测试集上进行预测 
y_pred = model.predict(X_test) 
# 计算准确率 
accuracy = accuracy_score(y_test, y_pred) 
print(f"模型在测试集上的准确率为:{accuracy:.2f}") 

Python实现简单BP神经网络,以鸢尾花数据集为例进行分类任务。代码使用sklearn库的MLPClassifier,创建模型包含输入层、隐藏层(10个神经元)和输出层。加载数据后,划分训练集和测试集,模型通过fit方法训练,学习特征与标签关系。激活函数选用ReLU,优化器为Adam,最大迭代300次。训练过程调整权重,最小化损失,提升泛化能力。

测试集预测后,计算准确率评估模型性能。示例中准确率可达95%以上,显示模型高效性。代码可修改参数,如隐藏层大小或激活函数类型,观察对结果的影响。例如,增加神经元至20个或改用Sigmoid,分析准确率变化。这种实践帮助用户深入理解反向传播机制,应用于实际项目如数据分析或AI开发。

关注【小小科研】公众号,学习更多模型哦,感谢支持!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐