深度学习入门:从神经网络到反向传播

发布于:2025-09-10 ⋅ 阅读:(22) ⋅ 点赞:(0)

深度学习作为人工智能领域最活跃、最具影响力的分支之一,正以前所未有的速度改变着我们的世界。从图像识别、自然语言处理到自动驾驶、医疗诊断,深度学习的应用无处不在。本篇文章将作为深度学习的入门指南,带你逐步了解其核心概念:神经网络的构成,以及驱动神经网络学习的关键算法——反向传播。

一、 神经网络:模仿大脑的计算模型

神经网络(Neural Network)是深度学习的基础,其灵感来源于人脑神经元的连接方式。一个人工神经网络通常由大量相互连接的节点(或称为神经元)组成,这些节点被组织成层次结构。

1.1 神经元(Neuron)

最基本的单元是单个神经元。一个神经元接收来自其他神经元的输入信号,对这些信号进行加权求和,然后通过一个激活函数(Activation Function)来决定是否“激活”并输出信号。

输入 (Inputs, x1,x2,...,xnx_1, x_2, ..., x_nx1,x2,...,xn): 来自上一层神经元或原始数据的信号。

权重 (Weights, w1,w2,...,wnw_1, w_2, ..., w_nw1,w2,...,wn): 每个输入信号都有一个对应的权重,表示该信号的重要性。

偏置 (Bias, bbb): 一个额外的可学习参数,用于调整神经元的激活阈值。

加权求和 (Weighted Sum): z=w1x1+w2x2+...+wnxn+bz = w_1x_1 + w_2x_2 + ... + w_nx_n + bz=w1x1+w2x2+...+wnxn+b

激活函数 (Activation Function, fff): 将加权求和结果映射到一个输出值,如:

Sigmoid: f(z)=11+e−zf(z) = \frac{1}{1 + e^{-z}}f(z)=1+e−z1,输出值在(0, 1)之间,常用于二分类输出层。

ReLU (Rectified Linear Unit): f(z)=max⁡(0,z)f(z) = \max(0, z)f(z)=max(0,z),计算简单,收敛速度快,是目前最常用的激活函数。

Tanh (Hyperbolic Tangent): f(z)=ez−e−zez+e−zf(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}f(z)=ez+e−zez−e−z,输出值在(-1, 1)之间。

1.2 神经网络的层 (Layers)

神经网络通常包含以下几种类型的层:

输入层 (Input Layer): 接收原始数据,其神经元数量等于输入数据的特征数量。

隐藏层 (Hidden Layers): 位于输入层和输出层之间,可以是一层或多层。隐藏层越多,网络的“深度”越大,模型学习复杂特征的能力越强。

输出层 (Output Layer): 产生网络的最终预测结果。神经元数量和激活函数取决于任务类型:

二分类问题: 1个神经元,Sigmoid激活函数,输出该样本属于正类的概率。

多分类问题: N个神经元(N为类别数),Softmax激活函数,输出样本属于每个类别的概率分布。

回归问题: 1个或多个神经元,通常不使用激活函数(或使用线性激活函数),输出连续值。

1.3 前向传播 (Forward Propagation)

当输入数据通过神经网络时,信号会从输入层逐层向前传递,经过每一层的加权求和与激活函数计算,最终到达输出层产生预测结果。这个过程就是前向传播。

数学表示: 如果在第 lll 层,有 n(l)n^{(l)}n(l) 个神经元,其输出为 a(l)a^{(l)}a(l)。则第 l+1l+1l+1 层的加权求和 z(l+1)z^{(l+1)}z(l+1) 和激活输出 a(l+1)a^{(l+1)}a(l+1) 可以表示为: z(l+1)=W(l+1)a(l)+b(l+1)z^{(l+1)} = W^{(l+1)} a^{(l)} + b^{(l+1)}z(l+1)=W(l+1)a(l)+b(l+1) a(l+1)=f(z(l+1))a^{(l+1)} = f(z^{(l+1)})a(l+1)=f(z(l+1)) (其中 W(l+1)W^{(l+1)}W(l+1) 是权重矩阵,b(l+1)b^{(l+1)}b(l+1) 是偏置向量,a(l)a^{(l)}a(l) 是第 lll 层的输出)

二、 损失函数:衡量模型预测的精确度

在神经网络学习过程中,我们需要一个方法来衡量模型在预测结果上的好坏。这就是损失函数(Loss Function)的作用。损失函数将模型的预测值与真实值(Ground Truth)进行比较,计算出预测误差的大小。

均方误差 (Mean Squared Error, MSE): 常用于回归问题。 MSE=1m∑i=1m(yi−y^i)2MSE = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2MSE=m1∑i=1m(yi−y^i)2 其中 yiy_iyi 是真实值,y^i\hat{y}_iy^i 是模型预测值,mmm 是样本数量。

交叉熵损失 (Cross-Entropy Loss): 常用于分类问题。

二分类交叉熵: −1m∑i=1m[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]-\frac{1}{m} \sum_{i=1}^{m} [y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i)]−m1∑i=1m[yilog(y^i)+(1−yi)log(1−y^i)]

多分类交叉熵: −1m∑i=1m∑j=1Cyijlog⁡(y^ij)-\frac{1}{m} \sum_{i=1}^{m} \sum_{j=1}^{C} y_{ij} \log(\hat{y}_{ij})−m1∑i=1m∑j=1Cyijlog(y^ij) (其中C是类别数,yijy_{ij}yij 是样本i属于类别j的真实标签(one-hot编码),y^ij\hat{y}_{ij}y^ij 是模型预测样本i属于类别j的概率)

目标: 深度学习训练的目标就是最小化损失函数。

三、 反向传播:驱动模型学习的引擎

仅仅有了预测和损失函数还不够,我们需要一种方法来根据损失函数来调整神经网络中的权重和偏置,从而逐步降低损失。这就是反向传播算法(Backpropagation Algorithm)。

反向传播的核心思想是:利用链式法则,计算损失函数关于网络中每一个权重和偏置的梯度(即变化率)。然后,沿着梯度的负方向(最陡峭的下降方向)来更新这些参数。

3.1 梯度下降(Gradient Descent)

在了解反向传播如何计算梯度之前,先理解梯度下降。梯度下降是一种优化算法,用于寻找函数的最小值。 模型参数(权重W和偏置b)的更新规则如下: Wnew=Wold−α∂L∂WW_{new} = W_{old} - \alpha \frac{\partial L}{\partial W}Wnew=Wold−α∂W∂L bnew=bold−α∂L∂bb_{new} = b_{old} - \alpha \frac{\partial L}{\partial b}bnew=bold−α∂b∂L 其中:

α\alphaα 是学习率,一个超参数,控制每次参数更新的步长。

∂L∂W\frac{\partial L}{\partial W}∂W∂L 和 ∂L∂b\frac{\partial L}{\partial b}∂b∂L 分别是损失函数 L 关于权重 W 和偏置 b 的偏导数,即梯度。

3.2 反向传播算法详解

反向传播是一个两阶段的过程:

前向传播 (Forward Propagation): 输入数据通过网络,计算出预测值,并计算出损失函数值。

反向传播 (Backward Propagation): 计算输出层的梯度: 首先计算损失函数关于输出层激活函数输入的偏导数。假设损失为 L,输出层神经元的加权求和为 z(L)z^{(L)}z(L),激活函数为 fff,输出层的激活值为 a(L)=f(z(L))a^{(L)} = f(z^{(L)})a(L)=f(z(L))。那么,损失关于 z(L)z^{(L)}z(L) 的误差 δ(L)\delta^{(L)}δ(L) 可以表示为: δ(L)=∂L∂z(L)=∂L∂a(L)⋅∂a(L)∂z(L)=∂L∂a(L)⋅f′(z(L))\delta^{(L)} = \frac{\partial L}{\partial z^{(L)}} = \frac{\partial L}{\partial a^{(L)}} \cdot \frac{\partial a^{(L)}}{\partial z^{(L)}} = \frac{\partial L}{\partial a^{(L)}} \cdot f'(z^{(L)})δ(L)=∂z(L)∂L=∂a(L)∂L⋅∂z(L)∂a(L)=∂a(L)∂L⋅f′(z(L)) (∂L∂a(L)\frac{\partial L}{\partial a^{(L)}}∂a(L)∂L 来自损失函数对输出值的导数,f′(z(L))f'(z^{(L)})f′(z(L)) 是激活函数的导数,它们一起构成误差项)。

反向传播误差到隐藏层: 利用“误差梯度”链式法则,将输出层的误差反向传播到前一层。假设我们要计算隐藏层 lll 的误差 δ(l)\delta^{(l)}δ(l): δ(l)=∂L∂z(l)=∂L∂a(l+1)⋅∂a(l+1)∂z(l)\delta^{(l)} = \frac{\partial L}{\partial z^{(l)}} = \frac{\partial L}{\partial a^{(l+1)}} \cdot \frac{\partial a^{(l+1)}}{\partial z^{(l)}}δ(l)=∂z(l)∂L=∂a(l+1)∂L⋅∂z(l)∂a(l+1) ∂L∂a(l+1)=∂L∂z(l+1)⋅∂z(l+1)∂a(l+1)=δ(l+1)⋅W(l+1)T\frac{\partial L}{\partial a^{(l+1)}} = \frac{\partial L}{\partial z^{(l+1)}} \cdot \frac{\partial z^{(l+1)}}{\partial a^{(l+1)}} = \delta^{(l+1)} \cdot W^{(l+1)T}∂a(l+1)∂L=∂z(l+1)∂L⋅∂a(l+1)∂z(l+1)=δ(l+1)⋅W(l+1)T (这里 ⋅\cdot⋅ 是矩阵乘法) ∂z(l+1)∂a(l+1)=∂(W(l+1)a(l+1)+b(l+1))∂a(l+1)=W(l+1)\frac{\partial z^{(l+1)}}{\partial a^{(l+1)}} = \frac{\partial (W^{(l+1)} a^{(l+1)} + b^{(l+1)})}{\partial a^{(l+1)}} = W^{(l+1)}∂a(l+1)∂z(l+1)=∂a(l+1)∂(W(l+1)a(l+1)+b(l+1))=W(l+1)。(假设这里是 a(l)a^{(l)}a(l) 到 a(l+1)a^{(l+1)}a(l+1),那为W(l+1)W^{(l+1)}W(l+1))

更准确地说,反向传播误差到层 lll 的加权求和 z(l)z^{(l)}z(l) 如下: δ(l)=((W(l+1))Tδ(l+1))⊙f′(z(l))\delta^{(l)} = \left( (W^{(l+1)})^T \delta^{(l+1)} \right) \odot f'(z^{(l)})δ(l)=((W(l+1))Tδ(l+1))⊙f′(z(l)) (⊙\odot⊙ 是逐元素乘法,即Hadamard乘积)。

计算梯度: 一旦计算出每一层关于其输入的误差 δ(l)\delta^{(l)}δ(l),就可以计算损失函数关于该层权重和偏置的梯度: ∂L∂W(l)=δ(l)(a(l−1))T\frac{\partial L}{\partial W^{(l)}} = \delta^{(l)} (a^{(l-1)})^T∂W(l)∂L=δ(l)(a(l−1))T ∂L∂b(l)=∑iδi(l)\frac{\partial L}{\partial b^{(l)}} = \sum_{i} \delta_i^{(l)}∂b(l)∂L=∑iδi(l) (对误差項按样本求和)

四、 神经网络的训练流程

有了神经网络的基本结构、损失函数和反向传播算法,我们可以描述神经网络的完整训练流程:

初始化: 随机初始化神经网络的所有权重和偏置。

前向传播: 将训练数据输入网络,沿着前向路径计算出预测值,并计算损失函数。

反向传播: 从输出层开始,利用反向传播算法计算损失函数关于每个权重和偏置的梯度。

参数更新: 使用梯度下降(或其他优化器,如Adam、RMSprop),根据计算出的梯度和学习率更新权重和偏置。

重复: 重复步骤2-4,对整个训练数据集(或其一部分,即batch)进行多次迭代(称为Epochs),直到损失函数收敛到足够低的水平。

五、 总结

神经网络是深度学习的基石,它通过多层神经元的连接来模拟大脑的学习机制。前向传播用于计算模型的预测,损失函数用于衡量预测 Accuracy,而反向传播算法则是根据损失函数的梯度来调整网络参数,使模型不断学习和进步的关键。理解了神经网络的结构和反向传播的原理,你就已迈出了深度学习入门的重要一步。当然,深度学习的世界远不止于此,还有更复杂的网络结构、更精妙的优化器、以及大量的实际应用等待你去探索。


网站公告

今日签到

点亮在社区的每一天
去签到