【机器学习】神经网络通过梯度下降学习的步骤以及前向传播的详细步骤
引言
神经网络中的梯度下降是一种优化算法,用于训练网络,即调整网络的权重和偏置,以最小化损失函数
文章目录
- 引言
- 一、神经网络通过梯度下降学习的步骤
- 1.1 初始化网络参数
- 1.2 前向传播(Forward Propagation)
- 1.3 计算损失(Loss)
- 1.4 反向传播(Back Propagation)
- 1.5 参数更新
- 1.6 迭代
- 1.7 详细说明反向传播中的梯度计算
- 1.8 总结
- 二、前向传播
- 2.1 输入层
- 2.2 第一层(隐藏层或输入层)
- 2.3 后续隐藏层
- 2.4 输出层
- 2.5 总结
一、神经网络通过梯度下降学习的步骤
1.1 初始化网络参数
- 随机初始化权重 W W W 和偏置 b b b
- 这些参数将随着训练过程的进行而更新
1.2 前向传播(Forward Propagation)
- 对于每个训练样本 x x x 和其对应的标签 y y y:
- 输入层:将输入 x x x传递到网络的第一层。
- 隐藏层:
- 计算加权输入: z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] z^{[l]} = W^{[l]}a^{[l-1]} + b^{[l]} z[l]=W[l]a[l−1]+b[l],其中 l l l 表示层数, a [ l − 1 ] a^{[l-1]} a[l−1] 是前一层激活输出。
- 应用激活函数: a [ l ] = σ ( z [ l ] ) a^{[l]} = \sigma(z^{[l]}) a[l]=σ(z[l]),其中 σ \sigma σ 是激活函数,如
ReLU
、Sigmoid
或Tanh
- 输出层:
- 计算加权输入和激活输出,对于分类问题,通常使用Softmax函数计算最终输出
1.3 计算损失(Loss)
- 使用损失函数计算预测输出 y ^ \hat{y} y^和实际标签 y y y之间的差异。
- 常见的损失函数包括:
- 对于回归问题:均方误差(MSE) L ( y , y ^ ) = 1 2 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 L(y, \hat{y}) = \frac{1}{2m}\sum_{i=1}^{m}(y^{(i)} - \hat{y}^{(i)})^2 L(y,y^)=2m1∑i=1m(y(i)−y^(i))2
- 对于分类问题:交叉熵损失 L ( y , y ^ ) = − 1 m ∑ i = 1 m y ( i ) log ( y ^ ( i ) ) L(y, \hat{y}) = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\log(\hat{y}^{(i)}) L(y,y^)=−m1∑i=1my(i)log(y^(i))
1.4 反向传播(Back Propagation)
- 计算损失函数关于输出层激活的梯度。
- 逆向遍历网络,计算每一层的梯度:
- 对于输出层:
- KaTeX parse error: Can't use function '\)' in math mode at position 58: …igma'(z^{[L]}) \̲)̲,其中 \( \nabla_{…是损失函数关于 a [ L ] a^{[L]} a[L]的梯度, σ ′ \sigma' σ′是激活函数的导数。
- 对于隐藏层:
- δ [ l ] = ( ( W [ l + 1 ] ) T δ [ l + 1 ] ) ⋅ σ ′ ( z [ l ] ) \delta^{[l]} = ((W^{[l+1]})^T \delta^{[l+1]}) \cdot \sigma'(z^{[l]}) δ[l]=((W[l+1])Tδ[l+1])⋅σ′(z[l])
- 计算损失函数关于参数的梯度:
- ∂ L ∂ W [ l ] = 1 m δ [ l ] ( a [ l − 1 ] ) T \frac{\partial L}{\partial W^{[l]}} = \frac{1}{m} \delta^{[l]} (a^{[l-1]})^T ∂W[l]∂L=m1δ[l](a[l−1])T
- ∂ L ∂ b [ l ] = 1 m ∑ i = 1 m δ [ l ] ( i ) \frac{\partial L}{\partial b^{[l]}} = \frac{1}{m} \sum_{i=1}^{m} \delta^{[l] (i)} ∂b[l]∂L=m1∑i=1mδ[l](i)
- 对于输出层:
1.5 参数更新
- 使用梯度下降更新权重和偏置:
- W [ l ] = W [ l ] − α ∂ L ∂ W [ l ] W^{[l]} = W^{[l]} - \alpha \frac{\partial L}{\partial W^{[l]}} W[l]=W[l]−α∂W[l]∂L - b [ l ] = b [ l ] − α ∂ L ∂ b [ l ] b^{[l]} = b^{[l]} - \alpha \frac{\partial L}{\partial b^{[l]}} b[l]=b[l]−α∂b[l]∂L
- 其中, α \alpha α是学习率
1.6 迭代
- 重复步骤2到5,直到满足停止条件,如达到预定的迭代次数、损失低于某个阈值或验证集上的性能不再提升
1.7 详细说明反向传播中的梯度计算
- 输出层梯度:对于不同的损失函数,计算方式不同。例如,对于交叉熵损失, δ [ L ] = y ^ − y \delta^{[L]} = \hat{y} - y δ[L]=y^−y
- 隐藏层梯度:通过链式法则,将输出层的梯度传递回前一层,计算每一层的梯度
- 参数梯度:最终计算得到的梯度用于更新权重和偏置
1.8 总结
通过这个过程,神经网络能够通过不断调整参数来学习数据中的模式,并减少预测误差
二、前向传播
前向传播(Forward Propagation)是神经网络中用于计算网络输出的一系列步骤。在这个过程中,输入数据通过网络层传递,每层都对数据进行变换,直到到达输出层。以下是前向传播的详细步骤:
2.1 输入层
- 输入数据:网络接收输入数据 X X X,它是一个维度为 [ n , d ] [n, d] [n,d]的矩阵,其中 n n n 是样本数量, d d d 是每个样本的特征数量
2.2 第一层(隐藏层或输入层)
- 加权输入:计算每个神经元的加权输入 KaTeX parse error: Can't use function '\)' in math mode at position 9: Z^{[1]} \̲)̲。这通过将输入 \( X \)…相乘,并加上偏置向量 b [ 1 ] b^{[1]} b[1]来完成。
Z [ 1 ] = W [ 1 ] X + b [ 1 ] Z^{[1]} = W^{[1]}X + b^{[1]} Z[1]=W[1]X+b[1] - 激活函数:将加权输入 Z [ 1 ] Z^{[1]} Z[1]通过激活函数 σ \sigma σ 来获得该层的激活输出 A [ 1 ] A^{[1]} A[1]
A [ 1 ] = σ ( Z [ 1 ] ) A^{[1]} = \sigma(Z^{[1]}) A[1]=σ(Z[1])
常用的激活函数包括ReLU
、Sigmoid
、Tanh
等
2.3 后续隐藏层
- 对于网络的每一个隐藏层 l ( l = 2 , 3 , . . . , L − 1 ) l( l = 2, 3, ..., L-1 ) l(l=2,3,...,L−1),其中 L L L是网络的总层数:
- 加权输入:计算每个神经元的加权输入 Z [ l ] Z^{[l]} Z[l],这是通过将前一层的激活输出 A [ l − 1 ] A^{[l-1]} A[l−1]与权重矩阵 W [ l ] W^{[l]} W[l]相乘,并加上偏置向量 b [ l ] b^{[l]} b[l]来完成的。
Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] Z^{[l]} = W^{[l]}A^{[l-1]} + b^{[l]} Z[l]=W[l]A[l−1]+b[l] - 激活函数:将加权输入 Z [ l ] Z^{[l]} Z[l]通过激活函数 σ \sigma σ 来获得该层的激活输出 A [ l ] A^{[l]} A[l]
A [ l ] = σ ( Z [ l ] ) A^{[l]} = \sigma(Z^{[l]}) A[l]=σ(Z[l])
- 加权输入:计算每个神经元的加权输入 Z [ l ] Z^{[l]} Z[l],这是通过将前一层的激活输出 A [ l − 1 ] A^{[l-1]} A[l−1]与权重矩阵 W [ l ] W^{[l]} W[l]相乘,并加上偏置向量 b [ l ] b^{[l]} b[l]来完成的。
2.4 输出层
- 对于网络的输出层 L L L:
- 加权输入:计算每个神经元的加权输入 Z [ L ] Z^{[L]} Z[L],这是通过将最后一层的激活输出 A [ L − 1 ] A^{[L-1]} A[L−1]与权重矩阵 W [ L ] W^{[L]} W[L]相乘,并加上偏置向量 b [ L ] b^{[L]} b[L] 来完成的。
Z [ L ] = W [ L ] A [ L − 1 ] + b [ L ] Z^{[L]} = W^{[L]}A^{[L-1]} + b^{[L]} Z[L]=W[L]A[L−1]+b[L] - 激活函数:根据问题的性质,选择合适的激活函数。对于分类问题,通常使用Softmax函数来获得概率分布输出 Y ^ \hat{Y} Y^
Y ^ = softmax ( Z [ L ] ) \hat{Y} = \text{softmax}(Z^{[L]}) Y^=softmax(Z[L])
其中,Softmax函数将 Z [ L ] Z^{[L]} Z[L]转换为概率分布,使得每个输出 y ^ [ i ] \hat{y}^{[i]} y^[i] 都在0和1之间,并且所有输出之和为1
- 加权输入:计算每个神经元的加权输入 Z [ L ] Z^{[L]} Z[L],这是通过将最后一层的激活输出 A [ L − 1 ] A^{[L-1]} A[L−1]与权重矩阵 W [ L ] W^{[L]} W[L]相乘,并加上偏置向量 b [ L ] b^{[L]} b[L] 来完成的。
2.5 总结
前向传播的整个过程可以总结为以下步骤:
- 对于每个层 l l l,计算加权输入 Z [ l ] Z^{[l]} Z[l]
- 应用激活函数 σ \sigma σ 来获得激活输出 A [ l ] A^{[l]} A[l]
- 重复步骤1和2,直到到达输出层
- 在输出层应用适当的激活函数(如
Softmax
)以获得最终输出。
前向传播是神经网络进行预测的基础,它将输入数据转换为输出预测,为后续的反向传播和参数更新提供了必要的信息