题目
实现单隐藏层神经网络的前向传播
信息
- 类型:问答
- 难度:⭐
考点
神经网络基础结构,前向传播流程,激活函数应用
快速回答
实现单隐藏层神经网络前向传播的关键步骤:
- 定义网络结构:输入层3节点 → 隐藏层4节点 → 输出层1节点
- 初始化权重和偏置(通常使用随机小数值)
- 隐藏层计算:
Z1 = X·W1 + b1→ 应用ReLU激活 - 输出层计算:
Z2 = A1·W2 + b2→ 应用Sigmoid激活
原理说明
前向传播是神经网络的基础计算流程,数据从输入层经加权求和和激活函数逐层传递。核心公式:层输出 = 激活函数(输入数据×权重矩阵 + 偏置向量)
ReLU函数(max(0,x))引入非线性并缓解梯度消失,Sigmoid函数(1/(1+e⁻ˣ))将输出压缩到(0,1)区间适合二分类。
代码示例
import numpy as np
def relu(x):
return np.maximum(0, x)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 初始化参数 (示例值)
W1 = np.random.randn(3, 4) * 0.01 # 输入层到隐藏层权重
b1 = np.zeros((1, 4)) # 隐藏层偏置
W2 = np.random.randn(4, 1) * 0.01 # 隐藏层到输出层权重
b2 = np.zeros((1, 1)) # 输出层偏置
def forward_prop(X):
# 隐藏层计算
Z1 = np.dot(X, W1) + b1
A1 = relu(Z1) # ReLU激活
# 输出层计算
Z2 = np.dot(A1, W2) + b2
A2 = sigmoid(Z2) # Sigmoid激活
return A2
# 测试输入 (2个样本)
X_test = np.array([[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6]])
print(forward_prop(X_test))最佳实践
- 权重初始化:使用小随机数(如
np.random.randn()*0.01)打破对称性 - 维度验证:确保矩阵乘法的维度匹配:(样本数, 特征数)×(特征数, 神经元数)
- 向量化实现:使用NumPy矩阵运算加速批量数据处理
常见错误
- 维度不匹配:权重矩阵维度设置错误导致无法相乘
- 忘记偏置项:缺失
+b会导致模型表达能力下降 - 激活函数误用:输出层用ReLU可能导致概率输出超出[0,1]范围
- 未处理批量数据:输入X应为二维矩阵(样本数×特征数)
扩展知识
- 反向传播:前向传播后通过链式法则计算梯度更新权重
- 其他激活函数:隐藏层可用Tanh,输出层多分类用Softmax
- 深度扩展:通过堆叠多个隐藏层形成深度神经网络
- 框架实现:实际开发中建议使用TensorFlow/PyTorch等框架