【人工智能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=1∑nwixi+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−η⋅∂w∂L
- woldw{\text{old}}wold 是旧权重;
- wneww{\text{new}}wnew 是新权重;
- η\etaη 是学习率,控制权重更新的步长;
- ∂L∂w\frac{\partial L}{\partial w}∂w∂L 是损失函数对权重的梯度。
二、神经网络的工作步骤
(一)数据准备
- 收集数据:根据问题需求,收集相关的数据集。
- 数据预处理:包括数据清洗、归一化、标准化等操作,使数据适合神经网络的输入。
(二)网络构建
- 确定网络结构:选择输入层、隐藏层和输出层的神经元数量,以及隐藏层的数量。
- 初始化权重和偏置:通常使用随机初始化的方法,为权重和偏置赋予初始值。
(三)前向传播
- 输入数据:将预处理后的数据输入到神经网络的输入层。
- 计算每一层的输出:逐层计算每一层的输出,直到得到输出层的结果。
(四)损失计算
- 计算损失函数的值:根据预测值和真实值,计算损失函数的值,评估神经网络的性能。
(五)反向传播
- 计算梯度:从输出层开始,逐层向前计算损失函数对每个权重的梯度。
- 更新权重:根据梯度下降法,更新每个权重的值。
(六)迭代训练
- 重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值,或者达到预设的训练轮数。
(七)模型评估
- 使用测试集评估模型的性能,计算准确率、召回率等指标,判断模型是否满足要求。
三、举例说明
假设我们有一个简单的二分类问题,目标是根据输入的两个特征 x1x_1x1 和 x2x_2x2 判断样本属于类别 0 还是类别 1。我们将使用一个简单的神经网络来解决这个问题。
(一)数据准备
假设我们有以下数据集:
x1x_1x1 | x2x_2x2 | 标签 |
---|---|---|
0.1 | 0.2 | 0 |
0.3 | 0.4 | 0 |
0.5 | 0.6 | 1 |
0.7 | 0.8 | 1 |
(二)网络构建
我们构建一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。输入层有 2 个神经元(对应 x1x_1x1 和 x2x_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=W2⋅a1+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+e−0.6891≈0.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=−[y⋅log(a2)+(1−y)⋅log(1−a2)]=−[0⋅log(0.666)+1⋅log(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 ∂a2∂L=−a2y+1−a21−y=−0.6660+0.3341≈3.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 ∂z2∂a2=a2(1−a2)=0.666×0.334≈0.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 ∂z2∂L=∂a2∂L⋅∂z2∂a2=3.0×0.222≈0.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} ∂a1∂L=W2T⋅∂z2∂L=[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 的导数}) ∂z1∂a1=[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} ∂z1∂L=∂a1∂L⊙∂z1∂a1=[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−η⋅∂W2∂L=[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−η⋅∂b2∂L=0.5−0.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−η⋅∂W1∂L=[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−η⋅∂b1∂L=[0.10.2]−0.1×[0.20.266]=[0.080.173]
(六)迭代训练
重复前向传播、损失计算和反向传播的过程,直到损失函数的值收敛到一个较小的值。
(七)模型评估
使用测试集评估模型的性能,计算准确率等指标。
通过这个简单的例子,我们可以看到神经网络是如何通过前向传播计算输出,通过反向传播更新权重,从而不断优化模型的。