前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
https://www.captainbed.cn/north
文章目录
引言
浅层神经网络(Shallow Neural Network)是深度学习的基础模型之一,通常包含一个输入层、一个隐藏层和一个输出层。前向传播(Forward Propagation)是神经网络的核心计算过程,用于将输入数据通过网络的各层传递,最终得到预测结果。本文将详细介绍浅层神经网络的前向传播计算方法,并通过代码示例帮助读者深入理解。
1. 浅层神经网络的结构
浅层神经网络的结构通常包括以下部分:
- 输入层:接收输入数据,每个神经元对应输入数据的一个特征。
- 隐藏层:通过激活函数对输入数据进行非线性变换,提取特征。
- 输出层:输出最终的预测结果。
以单隐藏层的浅层神经网络为例,其结构如下:
- 输入层:( n ) 个神经元。
- 隐藏层:( m ) 个神经元。
- 输出层:( k ) 个神经元。
2. 前向传播的计算步骤
前向传播的计算过程可以分为以下几个步骤:
2.1 输入层到隐藏层
-
线性变换:将输入数据与隐藏层的权重矩阵相乘,并加上偏置。
-
激活函数:对线性输出应用激活函数(如ReLU、Sigmoid)。
2.2 隐藏层到输出层
-
线性变换:将隐藏层的激活输出与输出层的权重矩阵相乘,并加上偏置。
-
激活函数:对线性输出应用激活函数(如Softmax、Sigmoid)。
3. 代码实现
以下是一个简单的浅层神经网络前向传播的Python实现,使用NumPy库进行矩阵运算。
import numpy as np
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def relu(x):
return np.maximum(0, x)
def softmax(x):
exp_x = np.exp(x - np.max(x, axis=1, keepdims=True)) # 防止溢出
return exp_x / np.sum(exp_x, axis=1, keepdims=True)
# 定义浅层神经网络类
class ShallowNeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 初始化权重和偏置
self.W1 = np.random.randn(self.input_size, self.hidden_size)
self.b1 = np.zeros((1, self.hidden_size))
self.W2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.zeros((1, self.output_size))
def forward(self, X):
# 输入层到隐藏层
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = relu(self.z1)
# 隐藏层到输出层
self.z2 = np.dot(self.a1, self.W2) + self.b2
self.a2 = softmax(self.z2)
return self.a2
# 示例数据
X = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]])
nn = ShallowNeuralNetwork(input_size=3, hidden_size=4, output_size=2)
output = nn.forward(X)
print("预测结果:\n", output)
4. 前向传播的详细解释
4.1 输入层到隐藏层
-
线性变换:
-
激活函数:
- 对线性输出 ( z_1 ) 应用激活函数(如ReLU),得到激活输出 ( a_1 )。
4.2 隐藏层到输出层
-
线性变换:
-
激活函数:
- 对线性输出 ( z_2 ) 应用激活函数(如Softmax),得到最终的预测结果 ( a_2 )。
5. 总结
浅层神经网络的前向传播是深度学习的基础,通过线性变换和激活函数的组合,可以将输入数据转换为预测结果。本文详细介绍了前向传播的计算步骤,并通过代码示例展示了如何实现这一过程。掌握前向传播的原理和实现方法,是理解更复杂神经网络模型的关键。
参考资料
注意:本文中的代码示例仅供参考,实际应用中可能需要根据具体需求进行调整和优化。