1. 深度学习概述
深度学习(Deep Learning,简称 DL)是机器学习(Machine Learning,简称 ML)领域中一个新的研究方向。它属于人工智能的一个子领域,基于人工神经网络的概念和结构,通过模拟人脑的工作方式来执行机器学习任务。
深度学习的主要特点是使用多层次的神经网络来提取和学习数据中的特征,并通过反向传播算法来优化网络参数,从而实现对复杂数据的建模与分类。目前,深度学习在图像识别、语音识别、自然语言处理等领域取得了显著的成果,并被广泛应用于各种实际场景。
在理解深度学习之前,需要先厘清几个核心概念之间的关系:
机器学习:让计算机从数据中自动学习规律的一类方法的总称。
神经网络:一种由大量节点(或称"神经元")及其相互连接构成的计算模型,模拟生物神经系统中神经元之间的连接方式。
深度学习:使用多层神经网络进行特征提取与建模的机器学习方法,是机器学习的一个重要分支。
2. 神经网络的基本构造
神经网络是一种由多个神经元(或称为节点)组成的计算模型,它模拟了生物神经系统中神经元之间的连接方式。一个典型的神经网络由输入层、隐藏层和输出层组成,其中输入层用于接收外界的输入信号,输出层用于输出预测结果,隐藏层则用于处理输入信号并产生中间结果。
在神经网络中,每个节点代表一种特定的输出函数,称为激励函数或激活函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),这相当于人工神经网络的记忆。
以输入层神经元为例,外部传入的信号为 x1、x2、x3、x4、x5......这些电信号在传入途中可能会有所损耗,损耗后实际传入神经元的值用 w1x1、w2x2、w3x3、w4x4、w5x5......来表示,其中 w 称为权重。神经元的计算过程可以概括为:对输入信号进行加权求和,再经过激活函数(如 sigmoid)得到输出。
从数学角度看,神经元的计算可以类比线性方程。例如,从 y = kx + b 出发,可以逐步推导出 0 = kx + b - y、k1x + k2y + b = 0、w1x1 + w2x2 + b = 0,最终写成 w1x1 + w2x2 + 1 * w3 = 0 的形式。这一系列推导展示了如何将线性分类问题转化为神经网络中权重与输入的点积运算。
3. 感知器与多层感知器
3.1 感知器
由两层神经元组成的神经网络称为"感知器"(Perceptron)。感知器只能对数据进行线性划分,其计算公式本质上是线性代数方程组,因此可以用矩阵乘法来表达。例如,输入向量 x 与权重矩阵 W 相乘后,再经过激活函数 g,即可得到输出 z,即 g(W * x) = z。输出的结果与训练集标签进行损失函数计算,其思路与逻辑回归基本一致。
神经网络的本质,是通过参数与激活函数来拟合特征与目标之间的真实函数关系。但在一个神经网络的程序中,并不需要显式地画出神经元和连线,其本质上是矩阵的运算。因此,实现一个神经网络最需要的是线性代数库。
3.2 多层感知器
多层感知器(Multi-Layer Perceptron,MLP)在感知器的基础上增加了一个中间层,即隐含层。隐藏层是神经网络能够做非线性分类的关键。假设我们的预测目标是一个向量,那么与前面类似,只需要在"输出层"再增加节点即可。
3.3 偏置单元
在神经网络中,需要默认增加偏置神经元(节点),这些节点是默认存在的。它本质上是一个只含有存储功能、且存储值永远为 1 的单元。在神经网络的每个层次中,除了输出层以外,都会含有这样一个偏置单元。偏置节点没有输入(前一层中没有箭头指向它)。一般情况下,我们都不会明确画出偏置节点。
4. 神经网络设计要点
在设计一个神经网络时,有几个要点需要牢记:
- 输入层与输出层的节点数往往是固定的,中间层则可以自由指定。
- 神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别。
- 结构图里的关键不是圆圈(代表"神经元"),而是连接线(代表"神经元"之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。
关于中间层的节点数如何确定,业界目前没有完善的理论来指导这个决策,一般是根据经验来设置。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。其中,输入层的节点数与特征的维度匹配,输出层的节点数与目标的维度匹配。
5. 训练方法与损失函数
5.1 模型训练的目标
模型训练的目的,是使得参数尽可能与真实的模型逼近。具体做法分为两步:
- 首先给所有参数赋上随机值,使用这些随机生成的参数值来预测训练数据中的样本。
- 计算预测值 yi 与真实值 y 之间的误差,定义一个损失值 loss,用于判断预测结果和真实值的误差,误差越小越好。
5.2 常用的损失函数
常用的损失函数包括:
- 0-1 损失函数
- 均方差损失
- 平均绝对差损失
- 交叉熵损失
- 合页损失
5.3 多分类情况下的损失计算
在多分类的情况下,如何计算损失值呢?以猫、狗分类为例,如果传入一张猫的照片,猫对应的神经元输出数值相比其他类别越大,计算出的损失值会越小,表明越靠近真实结果;如果训练时类别分错了,则会出现大的损失值。
具体计算时,先对各个神经元的输出进行归一化(softmax),得到各个结果的概率,使值落在 0 到 1 之间;然后对正确类别的概率取 -log 运算,得到最终的损失值。取 -log 的原因是:当概率越接近 1 时,-log 值越接近 0,损失越小;当概率越小时,-log 值越大,损失越大,从而能够有效衡量预测与真实结果的差距。
6. 正则化惩罚
正则化惩罚的功能,主要用于惩罚权重参数 w,一般有 L1 和 L2 正则化两种方式。L1 正则化的形式为对所有权重取绝对值求和,即 ∑|wi|。
为什么需要正则化?考虑两种不同的权重值,输入为 x = 1,1,1,1:
- w1 = 1,0,0,0:w1 与输入的乘积为 1,但 w1 只和第 1 个输入信息有关系,容易出现过拟合现象。
- w2 = 0.25,0.25,0.25,0.25:w2 与输入的乘积同样为 1,但 w2 与每一个输入数据都进行了计算,使得 w2 能够学习到每一个特征信息,效果会比 w1 更好。
正则化惩罚项鼓励"雨露均沾",让每一个输入数据的特征信息都被获取到,从而抑制过拟合,提升模型的泛化能力。
7. 梯度下降
7.1 偏导数与梯度
我们知道,一个多变量函数的偏导数,就是它关于其中一个变量的导数而保持其他变量恒定。例如,计算像 f(w0, w1) = w0x1² * w1x2 这样的多变量函数的求导过程,可以分解为对 w0 和 w1 分别求偏导。其中,x1、x2 是数据集中的特征,b0、b1 是随机赋值且后续会更新,x 是常量。
梯度可以定义为一个函数的全部偏导数构成的向量,梯度向量的方向即为函数值增长最快的方向。
7.2 梯度下降法
梯度下降法(Gradient Descent)是一个一阶最优化算法,通常也称为最陡下降法。要使用梯度下降法找到一个函数的局部极小值,需要沿着梯度的反方向迭代更新参数。
步长(学习率)决定了我们采取步长的大小:梯度可以确定移动的方向,学习率则决定移动的步长。学习率不宜过小,也不宜过大。至于如何解决全局最小的问题,一种常见做法是产生多个随机数,在不同的位置分别求最小值,从而尽可能逼近全局最优。
8. BP 神经网络与反向传播
BP(Back-propagation,反向传播)神经网络的核心思想是:前向传播得到误差,反向传播调整误差,再前向传播,再反向传播,一轮一轮迭代得到最优解。具体步骤如下:
- 计算正向传播输出的结果:g(W * x) = yp。
- 计算损失函数,并加入正则化惩罚项。
- 计算 w 值的梯度下降,对多层隐含函数求偏导。
- 误差反向传播:将每个维度的偏导数导入本次的 w 值(初次 w 值为随机初始化),并乘以步长,即得到新的 w 值。
- 循环调整 w 的值,直到损失值小于允许的范围。
至此,整个神经网络从前往后的数据计算方法已经全部完成,同时通过反向传播实现了 w 的更新,构成了一个完整的训练闭环。
9. 总结
本文从深度学习的定义出发,系统梳理了神经网络的基本构造、感知器与多层感知器、偏置单元、网络设计要点、损失函数、正则化惩罚、梯度下降以及 BP 反向传播等核心概念。理解这些基础内容,是进一步学习卷积神经网络、循环神经网络以及各类深度学习框架的重要前提。
深度学习本质上是通过多层神经网络对数据进行特征提取与建模,其底层实现依赖矩阵运算与线性代数库。掌握神经网络的构造原理与训练方法,能够帮助我们在实际项目中更好地设计模型、调试参数并优化效果。