前馈神经网络权重计算实战:从输入x=[2,3]到隐含层输出的完整推导与实现

1次阅读
没有评论

共计 904 个字符,预计需要花费 3 分钟才能阅读完成。

image.webp

神经网络基础回顾

前馈神经网络是最基础的神经网络结构,由输入层、隐含层和输出层组成。数据从输入层流向输出层,中间不循环。今天我们以最简单的单隐含层网络为例,输入层有 2 个节点,隐含层 1 个节点,输出层 1 个节点。

前馈神经网络权重计算实战:从输入 x =[2,3]到隐含层输出的完整推导与实现

  • 输入层:接收原始数据,这里假设输入 x =[2,3]
  • 隐含层:对输入进行加权求和并通过激活函数转换
  • 输出层:对隐含层输出再做一次加权求和

数学推导与分步计算

给定输入 x =[2,3],权重 w1=[0,1](输入层到隐含层),w2=[1,0](隐含层到输出层)。计算过程如下:

  1. 隐含层加权求和
    $$ z = x \cdot w1^T = 20 + 31 = 3 $$

  2. 通过激活函数(假设使用 sigmoid)
    $$ a = \sigma(z) = \frac{1}{1+e^{-3}} \approx 0.9526 $$

  3. 输出层计算
    $$ y = a \cdot w2 = 0.95261 + 00 = 0.9526 $$

Python 代码实现

import numpy as np

# 定义输入和权重
x = np.array([2, 3])
w1 = np.array([[0, 1]])  # 注意权重矩阵形状
w2 = np.array([[1], [0]])

# 隐含层计算
z = np.dot(x, w1.T)  # 3
a = 1 / (1 + np.exp(-z))  # 0.9526

# 输出层计算
y = np.dot(a, w2.T)  # [[0.9526]]

print(f"隐含层输出: {a[0]:.4f}")
print(f"最终输出: {y[0][0]:.4f}")

常见错误分析

初学者经常遇到以下问题:

  • 维度不匹配:比如 w1 写成 [0,1] 而不是[[0,1]],会导致 np.dot 报错
  • 忘记转置:输入 x 和权重 w1 的点积需要 w1 转置
  • 激活函数选择:某些情况下使用 ReLU 会导致输出为 0

激活函数比较

  1. Sigmoid 函数
  2. 输出范围(0,1)
  3. 容易出现梯度消失
  4. 本例中输出 0.9526

  5. ReLU 函数

  6. 计算简单:max(0,z)
  7. 本例中输出 3(如果用 ReLU)

总结与思考题

通过这个简单例子,我们完整走通了神经网络的前向传播过程。关键是要注意矩阵维度和激活函数的选择。

思考题:如果输入是批量数据 X =[[2,3],[1,4]],如何修改网络结构?提示:可以利用 numpy 的广播机制,保持权重矩阵形状不变。

正文完
 0
评论(没有评论)