一个神经网络的正向传播过程

本文详细解析了神经网络的前向传播过程,重点在于权重w和偏置b的表示。w表示第l-1层到第l层的节点间的权重,b表示第l层节点的偏置。每个全连接层执行的是输入向量的仿射变换,即矩阵乘法和加法操作。不考虑激活函数时,网络可以视为多层线性结构,与卷积层的计算不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我们用一个网络为例,试图把一前向传播的每个细节说清楚,图中为了强调传递函数的矩阵表达,特意忽略了激活函数这一步骤,可以将其看成一个多层的线性网络。

要想把这个过程说清楚,首先需要将神经网络中各个参数用文字表达清楚,就是把图中的w和b以及上下标定义清楚.

对于形如

w _{jk} ^l

表示的是神经网络中第l-1层的第k个节点,向神经网络中第l层的第j个节点之间的权重,注意w的下标是首位表示的是节点后层节点的位置,末尾表示是前层节点的位置。理解这样的表达方式在后面的计算中会很好理解。

同理,b的表示相比于w要简单一些,符号

b _j ^l

表示第l层网络在第j个节点的偏置。无论w还是b的表示,上标都是表示层数。并且

w _{jk} ^l

b _j ^l

表示都是第l层网络第j个节点的参数。所以该节点的输出可以表示为:

y_{j}=\sum_{k=1}^{3} w_{j k}^{1} x_{k}+b_{j}^{1} \quad \quad j\in 1,2,3,4

z_{j}=\sum_{k=1}^{4} w_{j k}^{2} y_{k}+b_{j}^{2} \quad \quad j\in 1,2

也就是:

\begin{bmatrix} y_1\\ y_2\\ y_3\\ y_4 \end{bmatrix}=\begin{bmatrix} w_{11}^1 & w_{12}^1&w_{13}^1 \\ w_{21}^1 & w_{22}^1 &w_{23}^1 \\ w_{31}^1 & w_{32}^1 &w_{33}^1 \\ w_{41}^1 & w_{42}^1 &w_{43}^1 \end{bmatrix}\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix}+\begin{bmatrix}b_1^1\\ b_2^1\\ b_3^1 \\b_4^1 \end{bmatrix}

\begin{bmatrix} z_1\\ z_2 \end{bmatrix}=\begin{bmatrix} w_{11}^2 & w_{12}^2&w_{13}^2 & w_{14}^2\\ w_{21}^2 & w_{22}^2&w_{23}^2 & w_{24}^2 \end{bmatrix} \begin{bmatrix} y_1\\ y_2\\ y_2\\ y_3 \end{bmatrix} + \begin{bmatrix} b_1^2\\ b_2^2 \end{bmatrix}

联立两式,即可得到输入和输出的关系:

\\ \begin{bmatrix} z_1\\ z_2 \end{bmatrix}=\begin{bmatrix} w_{11}^2 & w_{12}^2&w_{13}^2 & w_{14}^2\\ w_{21}^2 & w_{22}^2&w_{23}^2 & w_{24}^2 \end{bmatrix}\bigg(\begin{bmatrix} w_{11}^1 & w_{12}^1&w_{13}^1 \\ w_{21}^1 & w_{22}^1 &w_{23}^1 \\ w_{31}^1 & w_{32}^1 &w_{33}^1 \\ w_{41}^1 & w_{42}^1 &w_{43}^1 \end{bmatrix}\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix}+\begin{bmatrix}b_1^1\\ b_2^1\\ b_3^1 \\b_4^1 \end{bmatrix}\bigg) + \begin{bmatrix} b_1^2\\ b_2^2 \end{bmatrix}

\boldsymbol{\\ \begin{bmatrix} z_1\\ z_2 \end{bmatrix}=\begin{bmatrix} w_{11}^2 & w_{12}^2&w_{13}^2 & w_{14}^2\\ w_{21}^2 & w_{22}^2&w_{23}^2 & w_{24}^2 \end{bmatrix}\begin{bmatrix} w_{11}^1 & w_{12}^1&w_{13}^1 \\ w_{21}^1 & w_{22}^1 &w_{23}^1 \\ w_{31}^1 & w_{32}^1 &w_{33}^1 \\ w_{41}^1 & w_{42}^1 &w_{43}^1 \end{bmatrix}\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix}+\begin{bmatrix} w_{11}^2 & w_{12}^2&w_{13}^2 & w_{14}^2\\ w_{21}^2 & w_{22}^2&w_{23}^2 & w_{24}^2 \end{bmatrix}\begin{bmatrix}b_1^1\\ b_2^1\\ b_3^1 \\b_4^1 \end{bmatrix}+ \begin{bmatrix} b_1^2\\ b_2^2 \end{bmatrix}}

以上就是神经网络的正向传递函数表达式。

基本上,不考虑非线性激活函数的情况下,每一个全连接层都是对输入向量的仿射变换,线性变换矩阵是权重矩阵,平移向量是偏置向量,全连接层是直接进行矩阵乘法得到当前层的输出。这和卷积层的计算是有所区别的。

结束!

<think>好的,我现在需要处理用户关于神经网络正向传播的问题。用户明确要求了解其原理和实现,所以我得先整理这方面的知识。首先,正向传播神经网络中的基础,涉及输入数据通过各层处理得到输出的过程。根据用户提供的引用,特别是引用[1]和[4],我需要确保覆盖输入层、隐藏层、输出层的传递过程,激活函数的作用,以及具体的数学表达式。 接下来,我需要考虑如何结构化回答。用户希望过程分步骤讲解,可能包括数学公式、实现代码和相关问题。根据系统指令,数学公式要用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$。例如,输入到隐藏层的线性组合公式应写成$z^{(1)}= W^{(1)}x+ b^{(1)}$,激活函数如ReLU写成$a^{(1)}= \text{ReLU}(z^{(1)})$。确保每个公式正确无误,单独成段的公式用双美元符号。然后,关于实现部分,用户可能希望看到Python代码示例。我需要编写一个简单的前向传播函数,可能包括输入处理、权重初始化、各层计算和激活函数的应用。代码中需要注释,帮助用户理解每一步。例如,使用NumPy库进行矩阵运算,定义层的大小,如输入层4节点,隐藏层6节点,输出层2节点。同时,需要展示如何计算每一层的输出,并最终得到预测结果。 生成的相关问题要围绕正向传播展开,可能涉及激活函数的选择、权重初始化的影响、多隐藏层的处理、与反向传播的关系,以及不同应用场景的例子。这些问题需要自然延伸,帮助用户进一步学习。 同时,需要引用用户提供的参考资料。例如,在讲解激活函数时,引用[1]提到激活函数的关键作用,应在相应位置添加引用标识[^1]。在讨论权重和节点连接时,引用[4]中的权重表示方法,可以引用[^4]。注意引用要自然,不破坏回答的流畅性。还要检查是否符合中文回答的要求,避免使用专业术语时过于晦涩,保持语言通俗易懂。例如,解释矩阵乘法时,可以提到“权重矩阵的每一行对应下一层节点的权重”,这样用户更容易理解。最后,确保回答结构清晰,分步骤讲解,代码正确,问题相关。可能还需要检查是否有遗漏点,比如偏置项的处理、不同激活函数的选择对正向传播的影响等,确保覆盖用户的需求。</think>### 神经网络正向传播过程及实现 神经网络正向传播是输入数据通过各层加权计算和激活函数处理,最终得到预测输出的过程。以下分步骤说明其原理与实现方法: --- #### 一、正向传播原理(分步骤) 1. **输入层处理** 输入数据$x$(例如图像像素、文本向量)作为第一层输入,维度为$n \times 1$(n为特征数量)。 2. **隐藏层线性组合** 输入与权重矩阵$W^{(1)}$相乘并加上偏置$b^{(1)}$,得到线性输出: $$z^{(1)} = W^{(1)}x + b^{(1)}$$ 其中$W^{(1)}$维度为$m \times n$(m为当前层神经元数量),$b^{(1)}$为$m \times 1$[^4]。 3. **激活函数非线性化** 对$z^{(1)}$应用激活函数(如ReLU、Sigmoid),得到激活值: $$a^{(1)} = \text{ReLU}(z^{(1)})$$ 激活函数引入非线性,使网络能拟合复杂模式[^1]。 4. **逐层传递至输出层** 重复步骤2-3,直到最后一层(输出层): $$z^{(L)} = W^{(L)}a^{(L-1)} + b^{(L)}$$ 输出层激活函数根据任务选择(如Softmax用于分类)。 --- #### 二、Python代码实现(以3层网络为例) ```python import numpy as np def forward_propagation(x, weights, biases): # 输入层:x.shape = (4,1)(假设输入特征数为4) a = x # 隐藏层1:6个神经元,使用ReLU激活 z1 = np.dot(weights['W1'], a) + biases['b1'] a1 = np.maximum(0, z1) # ReLU # 隐藏层2:4个神经元,使用Sigmoid激活 z2 = np.dot(weights['W2'], a1) + biases['b2'] a2 = 1 / (1 + np.exp(-z2)) # Sigmoid # 输出层:2个神经元,使用Softmax(分类任务) z3 = np.dot(weights['W3'], a2) + biases['b3'] exp_z = np.exp(z3 - np.max(z3)) # 防溢出 a3 = exp_z / np.sum(exp_z) return a3 # 初始化参数示例 input_size = 4 hidden1_size = 6 hidden2_size = 4 output_size = 2 weights = { 'W1': np.random.randn(hidden1_size, input_size) * 0.01, 'W2': np.random.randn(hidden2_size, hidden1_size) * 0.01, 'W3': np.random.randn(output_size, hidden2_size) * 0.01 } biases = { 'b1': np.zeros((hidden1_size, 1)), 'b2': np.zeros((hidden2_size, 1)), 'b3': np.zeros((output_size, 1)) } # 执行正向传播 x_input = np.random.randn(input_size, 1) output = forward_propagation(x_input, weights, biases) print("预测结果概率分布:", output.flatten()) ``` --- #### 三、关键数学公式 1. **通用层计算** 对第$l$层: $$z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}$$ $$a^{(l)} = g(z^{(l)})$$ 其中$g(\cdot)$为激活函数。 2. **常用激活函数** - ReLU:$g(z) = \max(0,z)$ - Sigmoid:$g(z) = \frac{1}{1+e^{-z}}$ - Softmax:$g(z_i) = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}$ ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值