Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 神经网络的计算原理之前向传播

神经网络的计算原理之前向传播

1. 前向传播的基本概念

前向传播(Forward Propagation)是神经网络进行预测的核心计算过程。它描述了输入数据如何通过网络的每一层逐步变换,最终得到输出结果的过程。

关键特点:

  • 单向计算:从输入层 → 隐藏层 → 输出层
  • 无反馈循环
  • 逐层进行线性变换和非线性激活

2. 数学表示

对于一个具有L层的神经网络:

单神经元计算

zj(l)=∑iwji(l)ai(l−1)+bj(l)z_j^{(l)} = \sum_{i} w_{ji}^{(l)}a_i^{(l-1)} + b_j^{(l)} zj(l)​=i∑​wji(l)​ai(l−1)​+bj(l)​

aj(l)=σ(zj(l))a_j^{(l)} = \sigma(z_j^{(l)}) aj(l)​=σ(zj(l)​)

其中:

  • wji(l)w_{ji}^{(l)}wji(l)​:第l层第j个神经元与第l-1层第i个神经元的连接权重
  • bj(l)b_j^{(l)}bj(l)​:偏置项
  • σ\sigmaσ:激活函数

矩阵形式表示

Z(l)=W(l)A(l−1)+b(l)\mathbf{Z}^{(l)} = \mathbf{W}^{(l)}\mathbf{A}^{(l-1)} + \mathbf{b}^{(l)} Z(l)=W(l)A(l−1)+b(l)

A(l)=σ(Z(l))\mathbf{A}^{(l)} = \sigma(\mathbf{Z}^{(l)}) A(l)=σ(Z(l))

3. 计算过程示例(以3层网络为例)

  1. 输入层:接收原始数据 X=A(0)\mathbf{X} = \mathbf{A}^{(0)}X=A(0)
  2. 第一隐藏层:
    • Z(1)=W(1)X+b(1)\mathbf{Z}^{(1)} = \mathbf{W}^{(1)}\mathbf{X} + \mathbf{b}^{(1)}Z(1)=W(1)X+b(1)
    • A(1)=ReLU(Z(1))\mathbf{A}^{(1)} = \text{ReLU}(\mathbf{Z}^{(1)})A(1)=ReLU(Z(1))
  3. 输出层:
    • Z(2)=W(2)A(1)+b(2)\mathbf{Z}^{(2)} = \mathbf{W}^{(2)}\mathbf{A}^{(1)} + \mathbf{b}^{(2)}Z(2)=W(2)A(1)+b(2)
    • A(2)=softmax(Z(2))\mathbf{A}^{(2)} = \text{softmax}(\mathbf{Z}^{(2)})A(2)=softmax(Z(2))

4. 激活函数的作用

常用激活函数在前向传播中的表现:

函数名称数学表达式特点
Sigmoidσ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}}σ(z)=1+e−z1​输出范围(0,1),适合概率输出
ReLUReLU(z)=max⁡(0,z)\text{ReLU}(z) = \max(0,z)ReLU(z)=max(0,z)计算简单,缓解梯度消失
Tanhtanh⁡(z)=ez−e−zez+e−z\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}tanh(z)=ez+e−zez−e−z​输出范围(-1,1),中心对称

5. 实现伪代码

def forward_propagation(X, parameters):
    """
    X: 输入数据 (n_x, m)
    parameters: 包含各层W和b的字典
    """
    A = X
    L = len(parameters) // 2  # 网络层数
    
    for l in range(1, L+1):
        Z = np.dot(parameters['W'+str(l)], A) + parameters['b'+str(l)]
        if l == L:
            A = softmax(Z)  # 输出层用softmax
        else:
            A = relu(Z)     # 隐藏层用ReLU
    
    return A

6. 数值稳定性问题

在前向传播中需要注意:

  • 输入标准化:避免某些维度数值过大/过小
  • 权重初始化:使用Xavier或He初始化防止激活值爆炸/消失
  • 中间值检查:各层输出应在合理范围内

7. 与后续过程的联系

前向传播的结果将用于:

  1. 计算损失函数(预测值与真实值的差异)
  2. 作为反向传播的起点(计算各层梯度)
  3. 模型推理时的最终输出

关键理解:前向传播是神经网络"思考"的过程,通过层层变换将原始输入映射到目标输出空间。

Last Updated:: 6/17/25, 10:13 AM