神经网络的作用
- 特征提取与表示学习
神经网络能够自动从原始数据中提取有效的特征。在图像领域,卷积神经网络(CNN)可以提取图像的边缘、纹理、形状等特征。例如,在人脸识别任务中,CNN 可以通过卷积层提取人脸的五官轮廓等特征,这些特征比原始像素更具有代表性和区分性。在自然语言处理中,循环神经网络(RNN)或其变体(如长短期记忆网络(LSTM)和门控循环单元(GRU))可以学习单词的语义、句子的语法结构等特征。通过这种自动的特征提取,神经网络能够将原始数据转换为更有利于分类、回归等任务的特征表示。 - 复杂函数逼近
神经网络可以看作是一个复杂的函数逼近器。它能够学习到输入和输出之间的复杂非线性关系。例如,在时间序列预测任务中,如预测股票价格,神经网络可以学习到历史价格数据与未来价格之间的复杂函数关系。通过足够的训练数据和合适的网络结构,神经网络可以逼近几乎任何连续函数,从而实现对各种复杂系统的建模和预测。 - 决策与分类任务
在分类任务中,神经网络可以根据提取的特征对输入数据进行分类。例如,在垃圾邮件识别任务中,神经网络可以学习到垃圾邮件和正常邮件的特征差异,将邮件分为垃圾邮件或正常邮件两类。在图像分类任务中,神经网络可以区分不同种类的物体,如猫、狗、汽车等。通过在大量标注数据上进行训练,神经网络能够在各种分类任务中取得很高的准确率。同时,在决策任务中,神经网络可以根据输入的多种因素做出合理的决策,如在自动驾驶系统中,根据传感器的数据(如摄像头图像、雷达距离等)决定车辆的行驶方向、速度等。
神经网络的运算过程
- 前向传播(Forward Propagation)
(1)输入层接收数据:神经网络的运算从输入层开始,输入层的神经元接收外部数据,这些数据可以是图像的像素值、文本的词向量等各种形式的数据。例如,在一个用于图像分类的卷积神经网络(CNN)中,输入层接收图像的像素矩阵。如果是彩色图像,通常每个像素点有 RGB 三个通道的值,所以输入的维度会根据图像的大小和颜色通道数而定。
(2)隐藏层进行计算:数据从输入层传入隐藏层,隐藏层中的神经元通过加权求和与激活函数处理输入数据。以一个简单的全连接层为例,每个神经元会对输入数据进行加权求和,假设神经元接收的输入为,对应的权重为,则加权求和的结果为,其中为偏置项。然后,将这个结果通过激活函数(如 Sigmoid、ReLU 等)进行非线性变换,得到神经元的输出。例如,使用 ReLU 激活函数,输出。这种非线性变换是非常关键的,它使得神经网络能够学习到复杂的非线性关系。
(3)输出层生成结果:经过多个隐藏层的处理后,数据最终到达输出层。输出层的神经元根据任务类型产生相应的输出。在分类任务中,输出层可能会使用 Softmax 函数将神经元的输出转换为类别概率。例如,在一个多类别图像分类任务中有个类别,输出层有个神经元,经过 Softmax 函数处理后,每个神经元的输出代表输入图像属于相应类别的概率,这些概率之和为。在回归任务中,输出层的神经元直接输出预测的数值。 - 反向传播(Backward Propagation)
(1)计算损失函数:在神经网络有了输出之后,需要衡量输出与真实目标之间的差距,这通过损失函数来实现。常见的损失函数有均方误差(MSE)用于回归任务,交叉熵损失(Cross - Entropy Loss)用于分类任务等。例如,在分类任务中,假设真实类别标签为(通常是一个 one - hot 向量,只有对应正确类别的位置为,其他位置为),网络输出的类别概率为,交叉熵损失函数为。
(2)梯度计算与参数更新:通过反向传播算法,计算损失函数对每个参数(权重和偏置)的梯度。从输出层开始,根据链式法则,逐步计算每个神经元的梯度。例如,对于一个权重,计算其梯度。然后,使用优化算法(如随机梯度下降(SGD)、Adam 等)根据计算得到的梯度更新参数。以随机梯度下降为例,更新公式为,其中为学习率,决定了参数更新的步长。通过不断地重复前向传播和反向传播过程,神经网络逐渐调整参数,使得损失函数的值不断减小,从而提高模型的性能。
前向传播和反向传播
- 前向传播(Forward Propagation)
类比理解:可以把神经网络想象成一个工厂的生产流水线。输入数据就像是原材料,从流水线的开头(输入层)进入。
具体过程:
输入层接收数据:这些原材料(数据)首先被送到输入层。例如,在一个用于识别手写数字的神经网络中,如果是识别一张 28×28 像素的手写数字图像,那么输入层就有 784 个神经元来接收这 784 个像素点的值。
隐藏层加工数据:输入层把数据传递给隐藏层,隐藏层的神经元就像是流水线上的工人。每个神经元会对收到的数据进行加工。加工的方式是加权求和(每个输入数据乘以一个权重,再把这些乘积相加),然后通过一个激活函数进行非线性变换。比如,一个神经元收到三个输入数据、、,对应的权重是、、,那么加权求和就是。然后通过激活函数,如 ReLU 函数(如果,输出;如果,输出)得到这个神经元的输出。这样的操作在隐藏层的每个神经元中都会进行,就好像每个工人都在按照自己的规则加工原材料。
输出层产生结果:经过隐藏层的加工后,数据被送到输出层。输出层会根据任务产生最终的结果。如果是分类任务,比如识别手写数字是 0 - 9 中的哪一个,输出层可能有 10 个神经元,每个神经元的输出代表这个数字是对应数字的概率。例如,输出层第一个神经元输出 0.1,第二个神经元输出 0.05,以此类推,概率最高的那个神经元对应的数字类别就是模型预测的结果。 - 反向传播(Backward Propagation)
类比理解:还是以工厂流水线为例,现在我们要检查最终的产品(输出结果)是否合格。如果不合格,我们需要沿着流水线反向查找是哪个环节出了问题。
具体过程:
计算损失函数:首先,我们需要一个标准来衡量输出结果的好坏,这就是损失函数。比如在手写数字识别中,如果真实的数字是 5,但是模型预测是 3,那就说明模型有误差。损失函数会根据输出结果和真实结果计算出这个误差的大小。常见的损失函数有均方误差(MSE),如果输出是,真实值是,那么均方误差就是。
梯度计算与参数更新:计算出损失后,我们要沿着神经网络反向查找是哪些参数(权重和偏置)导致了这个损失。这就像是沿着流水线找是哪个工人的操作有问题。通过链式法则,我们可以计算出损失函数对每个参数的梯度(可以理解为每个参数对损失的 “贡献程度”)。例如,对于一个权重,我们算出它的梯度是(是损失函数)。然后,我们根据这个梯度来更新参数,就好像告诉工人如何调整他们的操作。一般使用像随机梯度下降(SGD)这样的优化算法来更新参数,更新公式是,其中是学习率,它决定了参数调整的步长。通过不断地反向传播和更新参数,神经网络就会逐渐调整自己的参数,让输出结果越来越接近真实结果,就像工厂不断改进生产流程,让产品质量越来越好。