当前位置: 首页 > 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.lryc.cn/news/589107.html

相关文章:

  • Android中Launcher简介
  • MySQL索引与事务详解:用大白话讲透核心概念
  • compose、 pipe 组合函数实现
  • 从底层技术到产业落地:优秘企业智脑的 AI 革命路径解析
  • Basilisk库教程(二)
  • QT——QList的详细讲解
  • SpringBoot3.0 +GraalVM17 + Docker
  • AI大模型训练相关函数知识补充
  • MongoDB基础增删改查命令
  • vscode配置运行完整C代码项目
  • B/S 架构通信原理详解
  • 高标准农田气象站的功能
  • 亚矩阵云手机:破解 Yandex 广告平台多账号风控难题的利器
  • 云服务器如何管理数据库(MySQL/MongoDB)?
  • 《大数据技术原理与应用》实验报告四 MapReduce初级编程实践
  • Keepalived双机热备概述
  • 死锁问题以及读写锁和自旋锁介绍【Linux操作系统】
  • Sersync和Rsync部署
  • 免杀学习篇(1)—— 工具使用
  • Dify的默认端口怎么修改
  • 算法学习day16----Python数据结构--模拟队列
  • Nuxt3宝塔PM2管理器部署
  • linux系统------LVS+KeepAlived+Nginx高可用方案
  • LVS(Linux Virtual Server)详细笔记(理论篇)
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent
  • Jfinal+SQLite java工具类复制mysql表数据到 *.sqlite
  • 设计模式笔记_结构型_适配器模式
  • Redis 中的持久化机制:RDB 与 AOF
  • 基于STM32设计的智能厨房
  • redis快速入门教程