当前位置: 首页 > news >正文

【人工智能99问】神经网络的工作原理是什么?(4/99)

文章目录

  • 神经网络的工作原理
    • 一、神经网络的工作原理
      • (一)神经元模型
      • (二)网络结构
      • (三)前向传播
      • (四)损失函数
      • (五)反向传播
      • (六)权重更新
    • 二、神经网络的工作步骤
      • (一)数据准备
      • (二)网络构建
      • (三)前向传播
      • (四)损失计算
      • (五)反向传播
      • (六)迭代训练
      • (七)模型评估
    • 三、举例说明
      • (一)数据准备
      • (二)网络构建
      • (三)前向传播
        • 1. 隐藏层计算:
        • 2. 输出层计算:
      • (四)损失计算
      • (五)反向传播
        • 1. 计算输出层梯度:
        • 2. 计算隐藏层梯度:
        • 3. 更新权重和偏置:
      • (六)迭代训练
      • (七)模型评估

神经网络的工作原理

神经网络是一种模仿生物神经网络的结构和功能的人工智能模型,广泛应用于图像识别、语音识别、自然语言处理等领域。以下是对神经网络的工作原理、工作步骤的详细介绍,并通过一个简单的例子来说明。

一、神经网络的工作原理

(一)神经元模型

神经网络的基本单元是神经元,也称为节点。每个神经元接收多个输入信号,对这些信号进行加权求和,然后通过一个非线性激活函数(如 Sigmoid、ReLU 等)进行处理,输出一个信号。神经元的数学模型可以表示为:

y=f(∑i=1nwixi+b)y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) y=f(i=1nwixi+b)

  • xix_ixi 是输入信号;
  • wiw_iwi 是输入信号的权重,表示输入信号的重要性;
  • bbb 是偏置项,用于调整神经元的激活阈值;
  • fff 是激活函数,用于引入非线性特性。

(二)网络结构

神经网络通常由输入层、隐藏层和输出层组成。输入层接收外部数据,隐藏层对数据进行特征提取和转换,输出层输出最终结果。隐藏层的数量和每层的神经元数量可以根据具体问题进行调整。

(三)前向传播

在神经网络中,数据从输入层经过隐藏层逐层传递到输出层的过程称为前向传播。每一层的神经元都会对前一层的输出进行加权求和和激活处理,最终得到输出层的结果。

(四)损失函数

损失函数用于衡量神经网络的预测值与真实值之间的差异。常见的损失函数有均方误差(MSE)、交叉熵损失等。损失函数的值越小,表示神经网络的预测越准确。

(五)反向传播

反向传播是神经网络训练的核心算法。通过计算损失函数对每个权重的梯度,利用梯度下降法更新权重,从而最小化损失函数。反向传播的过程是从输出层开始,逐层向前计算梯度,并更新权重。

(六)权重更新

权重更新是根据梯度下降法进行的。具体公式为:

wnew=wold−η⋅∂L∂ww{\text{new}} = w{\text{old}} - \eta \cdot \frac{\partial L}{\partial w} wnew=woldηwL

  • woldw{\text{old}}wold 是旧权重;
  • wneww{\text{new}}wnew 是新权重;
  • η\etaη 是学习率,控制权重更新的步长;
  • ∂L∂w\frac{\partial L}{\partial w}wL 是损失函数对权重的梯度。

二、神经网络的工作步骤

(一)数据准备

  • 收集数据:根据问题需求,收集相关的数据集。
  • 数据预处理:包括数据清洗、归一化、标准化等操作,使数据适合神经网络的输入。

(二)网络构建

  • 确定网络结构:选择输入层、隐藏层和输出层的神经元数量,以及隐藏层的数量。
  • 初始化权重和偏置:通常使用随机初始化的方法,为权重和偏置赋予初始值。

(三)前向传播

  • 输入数据:将预处理后的数据输入到神经网络的输入层。
  • 计算每一层的输出:逐层计算每一层的输出,直到得到输出层的结果。

(四)损失计算

  • 计算损失函数的值:根据预测值和真实值,计算损失函数的值,评估神经网络的性能。

(五)反向传播

  • 计算梯度:从输出层开始,逐层向前计算损失函数对每个权重的梯度。
  • 更新权重:根据梯度下降法,更新每个权重的值。

(六)迭代训练

  • 重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值,或者达到预设的训练轮数。

(七)模型评估

  • 使用测试集评估模型的性能,计算准确率、召回率等指标,判断模型是否满足要求。

三、举例说明

假设我们有一个简单的二分类问题,目标是根据输入的两个特征 x1x_1x1x2x_2x2 判断样本属于类别 0 还是类别 1。我们将使用一个简单的神经网络来解决这个问题。

(一)数据准备

假设我们有以下数据集:

x1x_1x1x2x_2x2标签
0.10.20
0.30.40
0.50.61
0.70.81

(二)网络构建

我们构建一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。输入层有 2 个神经元(对应 x1x_1x1x2x_2x2),隐藏层有 2 个神经元,输出层有 1 个神经元(用于输出类别概率)。

(三)前向传播

假设输入样本为 (0.1,0.2)(0.1, 0.2)(0.1,0.2),权重和偏置的初始值如下:

  • 输入层到隐藏层的权重:W1=[0.50.60.70.8]\mathbf{W_1} = \begin{bmatrix} 0.5 & 0.6 \\ 0.7 & 0.8 \end{bmatrix}W1=[0.50.70.60.8],偏置:b1=[0.10.2]\mathbf{b_1} = \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix}b1=[0.10.2]
  • 隐藏层到输出层的权重:W2=[0.30.4]\mathbf{W_2} = \begin{bmatrix} 0.3 & 0.4 \end{bmatrix}W2=[0.30.4],偏置:b2=0.5\mathbf{b_2} = 0.5b2=0.5
1. 隐藏层计算:

z1=W1⋅[0.10.2]+b1=[0.5×0.1+0.6×0.2+0.10.7×0.1+0.8×0.2+0.2]=[0.270.33]\mathbf{z_1} = \mathbf{W_1} \cdot \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix} + \mathbf{b_1} = \begin{bmatrix} 0.5 \times 0.1 + 0.6 \times 0.2 + 0.1 \\ 0.7 \times 0.1 + 0.8 \times 0.2 + 0.2 \end{bmatrix} = \begin{bmatrix} 0.27 \\ 0.33 \end{bmatrix} z1=W1[0.10.2]+b1=[0.5×0.1+0.6×0.2+0.10.7×0.1+0.8×0.2+0.2]=[0.270.33]
使用 ReLU 激活函数:
a1=ReLU(z1)=[0.270.33]\mathbf{a_1} = \text{ReLU}(\mathbf{z_1}) = \begin{bmatrix} 0.27 \\ 0.33 \end{bmatrix} a1=ReLU(z1)=[0.270.33]

2. 输出层计算:

z2=W2⋅a1+b2=0.3×0.27+0.4×0.33+0.5=0.689z_2 = \mathbf{W_2} \cdot \mathbf{a_1} + b_2 = 0.3 \times 0.27 + 0.4 \times 0.33 + 0.5 = 0.689 z2=W2a1+b2=0.3×0.27+0.4×0.33+0.5=0.689
使用 Sigmoid 激活函数:
a2=Sigmoid(z2)=11+e−0.689≈0.666a_2 = \text{Sigmoid}(z_2) = \frac{1}{1 + e^{-0.689}} \approx 0.666 a2=Sigmoid(z2)=1+e0.68910.666

(四)损失计算

假设真实标签为 0,使用二元交叉熵损失函数:
L=−[y⋅log⁡(a2)+(1−y)⋅log⁡(1−a2)]=−[0⋅log⁡(0.666)+1⋅log⁡(0.334)]≈1.098L = -[y \cdot \log(a_2) + (1 - y) \cdot \log(1 - a_2)] = -[0 \cdot \log(0.666) + 1 \cdot \log(0.334)] \approx 1.098 L=[ylog(a2)+(1y)log(1a2)]=[0log(0.666)+1log(0.334)]1.098

(五)反向传播

1. 计算输出层梯度:

∂L∂a2=−ya2+1−y1−a2=−00.666+10.334≈3.0\frac{\partial L}{\partial a_2} = -\frac{y}{a_2} + \frac{1 - y}{1 - a_2} = -\frac{0}{0.666} + \frac{1}{0.334} \approx 3.0 a2L=a2y+1a21y=0.6660+0.33413.0
∂a2∂z2=a2(1−a2)=0.666×0.334≈0.222\frac{\partial a_2}{\partial z_2} = a_2 (1 - a_2) = 0.666 \times 0.334 \approx 0.222 z2a2=a2(1a2)=0.666×0.3340.222
∂L∂z2=∂L∂a2⋅∂a2∂z2=3.0×0.222≈0.666\frac{\partial L}{\partial z_2} = \frac{\partial L}{\partial a_2} \cdot \frac{\partial a_2}{\partial z_2} = 3.0 \times 0.222 \approx 0.666 z2L=a2Lz2a2=3.0×0.2220.666

2. 计算隐藏层梯度:

∂L∂a1=W2T⋅∂L∂z2=[0.30.4]×0.666=[0.20.266]\frac{\partial L}{\partial \mathbf{a_1}} = \mathbf{W_2}^T \cdot \frac{\partial L}{\partial z_2} = \begin{bmatrix} 0.3 \\ 0.4 \end{bmatrix} \times 0.666 = \begin{bmatrix} 0.2 \\ 0.266 \end{bmatrix} a1L=W2Tz2L=[0.30.4]×0.666=[0.20.266]
∂a1∂z1=[11](ReLU 的导数)\frac{\partial \mathbf{a_1}}{\partial \mathbf{z_1}} = \begin{bmatrix} 1 \\ 1 \end{bmatrix} \quad (\text{ReLU 的导数}) z1a1=[11](ReLU 的导数)
∂L∂z1=∂L∂a1⊙∂a1∂z1=[0.20.266]\frac{\partial L}{\partial \mathbf{z_1}} = \frac{\partial L}{\partial \mathbf{a_1}} \odot \frac{\partial \mathbf{a_1}}{\partial \mathbf{z_1}} = \begin{bmatrix} 0.2 \\ 0.266 \end{bmatrix} z1L=a1Lz1a1=[0.20.266]

3. 更新权重和偏置:

假设学习率 η=0.1\eta = 0.1η=0.1
W2=W2−η⋅∂L∂W2=[0.30.4]−0.1×0.666×[0.270.33]=[0.2870.377]\mathbf{W_2} = \mathbf{W_2} - \eta \cdot \frac{\partial L}{\partial \mathbf{W_2}} = \begin{bmatrix} 0.3 \\ 0.4 \end{bmatrix} - 0.1 \times 0.666 \times \begin{bmatrix} 0.27 \\ 0.33 \end{bmatrix} = \begin{bmatrix} 0.287 \\ 0.377 \end{bmatrix} W2=W2ηW2L=[0.30.4]0.1×0.666×[0.270.33]=[0.2870.377]
b2=b2−η⋅∂L∂b2=0.5−0.1×0.666=0.433b_2 = b_2 - \eta \cdot \frac{\partial L}{\partial b_2} = 0.5 - 0.1 \times 0.666 = 0.433 b2=b2ηb2L=0.50.1×0.666=0.433
W1=W1−η⋅∂L∂W1=[0.50.60.70.8]−0.1×[0.2×0.10.266×0.1]=[0.4980.5980.6970.797]\mathbf{W_1} = \mathbf{W_1} - \eta \cdot \frac{\partial L}{\partial \mathbf{W_1}} = \begin{bmatrix} 0.5 & 0.6 \\ 0.7 & 0.8 \end{bmatrix} - 0.1 \times \begin{bmatrix} 0.2 \times 0.1 \\ 0.266 \times 0.1 \end{bmatrix} = \begin{bmatrix} 0.498 & 0.598 \\ 0.697 & 0.797 \end{bmatrix} W1=W1ηW1L=[0.50.70.60.8]0.1×[0.2×0.10.266×0.1]=[0.4980.6970.5980.797]
b1=b1−η⋅∂L∂b1=[0.10.2]−0.1×[0.20.266]=[0.080.173]\mathbf{b_1} = \mathbf{b_1} - \eta \cdot \frac{\partial L}{\partial \mathbf{b_1}} = \begin{bmatrix} 0.1 \\ 0.2 \end{bmatrix} - 0.1 \times \begin{bmatrix} 0.2 \\ 0.266 \end{bmatrix} = \begin{bmatrix} 0.08 \\ 0.173 \end{bmatrix} b1=b1ηb1L=[0.10.2]0.1×[0.20.266]=[0.080.173]

(六)迭代训练

重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值。

(七)模型评估

使用测试集评估模型的性能,计算准确率等指标。

通过这个简单的例子,我们可以看到神经网络是如何通过前向传播计算输出,通过反向传播更新权重,从而不断优化模型的。

http://www.dtcms.com/a/280488.html

相关文章:

  • 使用Pydantic开发时,如何将返回数据由snake_case自动转为camel case
  • Mac IDEA启动报错:Error occurred during initialization of VM
  • Linux操作系统从入门到实战(九)Linux开发工具(中)自动化构建-make/Makefile知识讲解
  • ubuntu部署kvm
  • AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架,涵盖全参数/PEFT训练与分布式优化
  • 正则表达式深度解析:从LeetCode 3136题说起
  • 028_分布式部署架构
  • OpenCV图像自动缩放(Autoscaling)函数autoscaling()
  • 2025.7.15总结
  • 用Python构建机器学习模型预测股票趋势:从数据到部署的实战指南
  • 希尔排序:突破传统排序的边界
  • 【Java】【企业级应用】学生信息管理系统项目介绍
  • Mybatis05-动态sql
  • 深度解析 AI 提示词工程(Prompt Engineering)
  • 2025世界机器人大赛ICode专属训练平台图形化小学组答案
  • 光伏设计全方位指南
  • B/S 架构通信原理详解
  • sqli-labs靶场通关笔记:第17关 POST请求的密码重置
  • 如何配置maven
  • 【Linux手册】重定向是如何实现的?Linux下为什么一切皆文件?
  • flutter下的webview适配rem问题
  • 【NBA】75 Greatest NBA Players of All Time
  • 春秋云镜 initial
  • Uniapp动态切换主题与老年模式详解
  • 12.6 Google黑科技GShard:6000亿参数MoE模型如何突破显存限制?
  • Zen:一款简洁高效、注重隐私的开源浏览器
  • 小白学HTML,操作HTML网页篇(1)
  • 密码工程原理与技术——总复习
  • 灰度图像,RGB图像和二值图像
  • 从OSI到TCP/IP:Linux网络架构深度解析