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

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

在人工智能(AI)浪潮的席卷下,深度学习(Deep Learning)无疑是最耀眼的明星之一。它以强大的模式识别和特征学习能力,在图像识别、语音识别、自然语言处理、推荐系统等众多领域取得了突破性进展。对于想要踏入AI领域的朋友来说,理解深度学习的基础——神经网络及其核心训练算法反向传播——是至关重要的一步。

本文将带领您从最基础的神经网络概念出发,循序渐进地揭开反向传播的神秘面纱,为您打下坚实的深度学习入门基础。

一、 什么是神经网络?

想象一下我们的大脑。它由数十亿个相互连接的神经元组成,通过传递电信号来处理信息。神经网络,也称为人工神经网络(Artificial Neural Networks, ANN),正是受到这种生物学结构的启发而设计的计算模型。

一个基本的人工神经网络单元(神经元)接收多个输入信号,每个信号都乘以一个权重,然后将这些加权输入以及一个偏置项(bias)加起来,最后通过一个激活函数(activation function)输出一个结果。

数学表示: 如果一个神经元接收到输入 x1,x2,…,xnx_1, x_2, \dots, x_nx1,x2,…,xn,它们分别对应的权重是 w1,w2,…,wnw_1, w_2, \dots, w_nw1,w2,…,wn,加上偏置项 bbb,最后通过激活函数 fff,则输出 yyy 为: z=w1x1+w2x2+⋯+wnxn+b=∑i=1nwixi+bz = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b = \sum_{i=1}^n w_i x_i + bz=w1x1+w2x2+⋯+wnxn+b=∑i=1nwixi+b y=f(z)y = f(z)y=f(z)

1.1 神经网络的结构

人工神经网络通常由以下几个部分组成:

输入层 (Input Layer): 接收原始数据,每个节点代表输入特征的一个维度。

隐藏层 (Hidden Layers): 介于输入层和输出层之间,可以有一层或多层。隐藏层负责从输入数据中提取更抽象、更高级的特征。

输出层 (Output Layer): 产生最终的预测结果。其节点数量和激活函数取决于具体的任务(如分类、回归)。

层次结构 (Feedforward Neural Network): 在最常见的“前馈神经网络”(Feedforward Neural Network)中,信息单向流动,从输入层经过隐藏层,最终到达输出层,中间不存在循环。

层与层之间: 通常是全连接的,即前一层的所有神经元都连接到后一层的所有神经元。

深度学习的“深度”: 指的是拥有多个隐藏层。多层隐藏层使得网络能够学习到更复杂、更具层次性的特征表示。

1.2 激活函数 (Activation Function)

激活函数的作用是引入非线性,使得神经网络能够学习和逼近复杂的非线性关系。如果激活函数是线性的,那么多层网络就等价于一个单层线性模型,无法处理非线性问题。

常见的激活函数包括:

Sigmoid (S型函数): 公式:σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+e−z1

输出范围:(0, 1)

特点:早期常用,但存在梯度消失问题(在输入过大或过小时,梯度接近于0)。

Tanh (双曲正切): 公式:tanh(z)=ez−e−zez+e−z\text{tanh}(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}tanh(z)=ez+e−zez−e−z

输出范围:(-1, 1)

特点:比Sigmoid中心化更好,但仍有梯度消失问题。

ReLU (Rectified Linear Unit): 公式:ReLU(z)=max⁡(0,z)\text{ReLU}(z) = \max(0, z)ReLU(z)=max(0,z)

输出范围:[0, ∞\infty∞)

特点:计算简单,能有效缓解梯度消失问题,是目前最常用的激活函数。

变种:Leaky ReLU, PReLU, ELU 等,用来解决ReLU的“死亡神经元”问题(当输入为负时,梯度始终为0)。

二、 学习的目标:损失函数与权重

神经网络的学习过程,本质上是找到一组合适的权重和偏置,使得网络的输出能够尽可能地逼近真实标签。

2.1 损失函数 (Loss Function)

为了衡量网络输出与真实标签之间的差距,我们需要定义一个损失函数。损失函数的值越大,表示网络的预测效果越差。

回归问题: 均方误差 (Mean Squared Error, MSE): L(y,y^)=1N∑i=1N(yi−y^i)2L(y, \hat{y}) = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2L(y,y^)=N1∑i=1N(yi−y^i)2

其中 yiy_iyi 是真实值,y^i\hat{y}_iy^i 是预测值,NNN 是样本数量。

分类问题: 交叉熵损失 (Cross-Entropy Loss): 二分类:L(y,y^)=−[ylog⁡(y^)+(1−y)log⁡(1−y^)]L(y, \hat{y}) = -[y \log(\hat{y}) + (1-y) \log(1-\hat{y})]L(y,y^)=−[ylog(y^)+(1−y)log(1−y^)]

多分类:L(y,y^)=−∑j=1Cyijlog⁡(y^ij)L(y, \hat{y}) = -\sum_{j=1}^C y_{ij} \log(\hat{y}_{ij})L(y,y^)=−∑j=1Cyijlog(y^ij)

其中 yyy 是真实标签(通常是One-hot编码),y^\hat{y}y^ 是模型输出的概率分布。

2.2 优化目标

我们的目标是最小化损失函数。当给定训练数据和对应的标签时,神经网络需要通过调整其内部的权重和偏置,来找到使损失函数最小化的最优解。

三、 反向传播算法 (Backpropagation)

理解了神经网络的结构、激活函数和损失函数,我们就可以引入反向传播算法来学习这些权重和偏置了。反向传播是一种用于训练神经网络的梯度下降优化算法。

核心思想: 反向传播算法通过链式法则(Chain Rule)计算损失函数关于网络中每个权重和偏置的梯度(导数)。得到的梯度表示当该权重或偏置发生微小变化时,损失函数的变化率(方向和大小)。然后,我们根据梯度来更新权重和偏置,使得损失函数朝着减小的方向移动。

反向传播的步骤:

前向传播 (Forward Pass):

将一个或一批训练样本输入到神经网络。

信号从输入层逐层传递,经过隐藏层,最终计算出输出层的预测结果。

计算预测结果与真实标签之间的损失。

反向传播 (Backward Pass):

计算输出层梯度: 首先,计算损失函数关于输出层激活输出 (yyy) 的梯度,记为 ∂L∂y\frac{\partial L}{\partial y}∂y∂L。

然后,根据链式法则,计算损失函数关于输出层加权输入 (zzz) 的梯度:∂L∂z=∂L∂y⋅∂y∂z\frac{\partial L}{\partial z} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z}∂z∂L=∂y∂L⋅∂z∂y。这里的 ∂y∂z\frac{\partial y}{\partial z}∂z∂y 就是输出层激活函数的导数。

计算隐藏层梯度: 利用输出层的梯度,反向传播到前一层。

计算损失函数关于隐藏层加权输入的梯度:∂L∂zhidden=∂L∂zoutput⋅∂zoutput∂yhidden⋅∂yhidden∂zhidden\frac{\partial L}{\partial z_{\text{hidden}}} = \frac{\partial L}{\partial z_{\text{output}}} \cdot \frac{\partial z_{\text{output}}}{\partial y_{\text{hidden}}} \cdot \frac{\partial y_{\text{hidden}}}{\partial z_{\text{hidden}}}∂zhidden∂L=∂zoutput∂L⋅∂yhidden∂zoutput⋅∂zhidden∂yhidden。

这里的 ∂zoutput∂yhidden\frac{\partial z_{\text{output}}}{\partial y_{\text{hidden}}}∂yhidden∂zoutput 是输出层与隐藏层之间的权重,而 ∂yhidden∂zhidden\frac{\partial y_{\text{hidden}}}{\partial z_{\text{hidden}}}∂zhidden∂yhidden 是隐藏层激活函数的导数。

需要将后一层所有神经元的贡献加起来。

计算权重和偏置的梯度: 一旦我们得到了 ∂L∂z\frac{\partial L}{\partial z}∂z∂L(某个层的加权输入),就可以很容易地计算出该层权重和偏置的梯度:

∂L∂wij=∂L∂zj⋅xi\frac{\partial L}{\partial w_{ij}} = \frac{\partial L}{\partial z_j} \cdot x_i∂wij∂L=∂zj∂L⋅xi (其中 wijw_{ij}wij 是输入 xix_ixi 到神经元 jjj 的权重)

∂L∂bj=∂L∂zj\frac{\partial L}{\partial b_j} = \frac{\partial L}{\partial z_j}∂bj∂L=∂zj∂L (其中 bjb_jbj 是神经元 jjj 的偏置)

权重更新 (Weight Update):

使用梯度下降(或其他优化器)来更新权重和偏置:

wnew=wold−η∂L∂woldw_{new} = w_{old} - \eta \frac{\partial L}{\partial w_{old}}wnew=wold−η∂wold∂L

bnew=bold−η∂L∂boldb_{new} = b_{old} - \eta \frac{\partial L}{\partial b_{old}}bnew=bold−η∂bold∂L

η\etaη 是学习率 (Learning Rate),控制每次更新的步长。学习率的选择对训练效果至关重要,过大可能导致震荡不收敛,过小则收敛速度慢。

图示反向传播过程(以一个简单的4输入3输出的sigmoid网络为例):

前向传播: 计算输出层的所有值 o1,o2,o3o_1, o_2, o_3o1,o2,o3 以及损失 LLL。

计算输出层梯度: delta_output_1 = dL/do_1 * do_1/dz_1 = (o_1 - y_1) * o_1 * (1 - o_1) (如果用MSE和Sigmoid)

delta_output_2 = ...

delta_output_3 = ...

计算隐藏层梯度: delta_hidden_1 = (delta_output_1 * w_11_out + delta_output_2 * w_12_out + delta_output_3 * w_13_out) * f'(h_1)

delta_hidden_2 = ...

delta_hidden_3 = ...

delta_hidden_4 = ...

其中 wij_outw_{ij\_out}wij_out 是隐藏层到输出层的权重,f′(hi)f'(h_i)f′(hi) 是隐藏层激活函数的导数。

计算权重梯度: dL/dw_11_out = delta_output_1 * o_1

dL/dw_11_hid = delta_hidden_1 * x_1

... 以及所有其他权重和偏置的梯度。

更新权重: w_11_out = w_11_out - learning_rate * dL/dw_11_out

w_11_hid = w_11_hid - learning_rate * dL/dw_11_hid

...

3.1 梯度下降的其他变种

批量梯度下降 (Batch Gradient Descent): 使用整个训练集计算梯度,更新一次。

随机梯度下降 (Stochastic Gradient Descent, SGD): 每次只使用一个训练样本计算梯度并更新。收敛速度快,但可能不稳定。

小批量梯度下降 (Mini-batch Gradient Descent): 每次使用一小批(batch_size)训练样本计算梯度并更新。这是最常用的方法,平衡了收敛速度和稳定性。

更高级的优化器: Momentum, AdaGrad, RMSprop, Adam 等,它们通过调整学习率或引入动量项,能够更有效地处理稀疏梯度或局部最小值,加速训练过程。

四、 训练过程与迭代

神经网络训练是一个迭代的过程:

初始化权重: 将模型的权重和偏置随机初始化(避免全零初始化)。

循环训练: 前向传播: 输入数据,计算输出和损失。

反向传播: 计算损失函数关于所有模型参数的梯度。

参数更新: 使用优化器根据梯度更新权重和偏置。

评估: 在训练过程中或训练完成后,使用一个独立的验证集或测试集来评估模型的性能,以避免过拟合(模型在训练集上表现好,但在新数据上表现差)。

重复: 重复步骤2和3,直到模型达到预期的性能水平或达到预设的训练轮数(epochs)。

五、 总结

深度学习的强大能力,离不开神经网络作为其核心模型,以及反向传播算法作为其学习机制。

神经网络仿生大脑结构,通过分层组织、激活函数和权重连接来处理信息。

损失函数量化了模型预测与真实值之间的差距。

反向传播(Gradient Descent)则是一个巧妙的算法,利用链式法则计算梯度,指引模型参数如何调整才能最小化损失。

理解了这套“前向传播计算输出 → 计算损失 → 反向传播计算梯度 → 更新参数”的完整流程,您就已经触及了深度学习训练的本质。在此基础上,您可以进一步探索更复杂的网络结构(如卷积神经网络CNN、循环神经网络RNN)、更高级的优化技术和 regularization 方法,从而构建出更强大的AI模型。


网站公告

今日签到

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