侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

实现单隐藏层神经网络的前向传播

2025-12-12 / 0 评论 / 4 阅读

题目

实现单隐藏层神经网络的前向传播

信息

  • 类型:问答
  • 难度:⭐

考点

神经网络基础结构,前向传播流程,激活函数应用

快速回答

实现单隐藏层神经网络前向传播的关键步骤:

  • 定义网络结构:输入层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等框架