[深度学习入门] --- 神经网络基础
人工神经网络中常用到激活函数(activation function):ReLu和Sigmoid。定义:卷积核大小是指卷积核在输入数据上滑动时所覆盖的维度大小。通常用一个二维的数字表示,如 3×3 或 5×5,表示卷积核是一个 3 行 3 列或 5 行 5 列的矩阵。影响:卷积核的大小决定了它能够捕捉的局部特征的范围。较小的卷积核(如 3×3)更适合于捕获细粒度的特征,如边缘、纹理等。较大的卷积核
1 神经网络术语
1.1 前向传播(forward propagation)
前向传播是神经网络通过层级结构和参数,将输入数据逐步转换为预测结果的过程,实现输入与输出之间的复杂映射。
在正向传播中,信息沿着一个单一的方向前进,从输入层经过隐藏层到输出层,最终输出。这个过程没有反向运动。
(输入层 - - - - - (隐藏层) - - - - - - - - -> 输出层)
1.2 成本/损失函数(cost function)
当建立一个神经网络的时候,神经网络会试图将输出预测尽可能地接近实际值。使用成本函数(Cost function)函数来衡量网络的准确性。Cost function 会在发生错误的时候处罚网络。
我们的目的是为了能够提高我们的预测精度,减少误差,从而最大限度的降低成本。最优化的输出即使成本/损失函数最小的输出。
损失函数 = 数据损失 + 正则化惩罚项
1.3 softmax分类器
1.3.1 Softmax函数作用
Softmax分类器是一种常用的输出层技术,用于多分类问题。它将神经网络最后一层的原始输出(称为“logits”)转换为概率分布,这样就可以根据这些概率来预测输入数据的类别。
1.3.2 Softmax函数
Softmax 函数的作用是将一组数值转换成概率分布。给定一个向量 zz,Softmax 函数定义如下:

Softmax 函数确保了所有输出的概率之和为 1,因此可以被解释为各个类别的概率。
1.3.3 Softmax函数工作原理
- 前向传播:神经网络的最后一层产生一组原始分数 zz,这些分数对应于每个类别的未归一化的预测值。
- Softmax 层:将 zz 通过 Softmax 函数转换为概率分布 S(z)S(z)。
- 分类:选择具有最高概率的类别作为预测结果。
1.4 反向传播
反向传播(Backpropagation)算法利用链式法则,通过从输出层向输入层逐层计算误差梯度,高效求解神经网络参数的偏导数,以实现网络参数的优化和损失函数的最小化。
1.4.1 反向传播基本步骤
下面是反向传播的基本步骤及其在神经网络中的工作原理:
1> 前向传播(Forward Propagation)
首先,执行一次前向传播,将输入数据传递给网络,逐层计算直到得到输出。这一步骤是为了获得网络当前状态下的预测输出。
2> 计算损失(Compute Loss)
接下来,计算预测输出与实际目标值之间的差异,这通常是通过损失函数(如均方误差 MSE 或交叉熵损失)来衡量的。
3> 初始化梯度
初始化所有权重的梯度为零,这些梯度将在后续步骤中被累加。
4> 反向传播(Backpropagation)
从输出层开始,向输入层方向计算梯度:
- 计算输出层的梯度:根据损失函数对输出层的激活函数的导数,计算损失函数相对于输出层的激活值的梯度。
- 传递梯度:将此梯度传递给前一层,这涉及到损失函数相对于当前层的权重的导数,以及当前层的激活函数相对于前一层的输出的导数。
- 重复上述过程:继续向前传递梯度,直到所有层的梯度都被计算出来。
具体来说,对于每一层,我们需要计算三个部分的梯度:
- 损失函数相对于该层输出的梯度(称为delta)。
- 该层的权重相对于损失函数的梯度。
- 该层的输入相对于损失函数的梯度,这将被传递到前一层。
5> 更新权重(Update Weights)
一旦所有层的梯度都计算完毕,就可以根据这些梯度和选定的学习率来更新网络中的权重。更新公式通常如下:
6> 重复训练过程
以上步骤构成了一次迭代的训练过程。为了使模型收敛,通常需要多次迭代,每次迭代使用一批新的训练数据,直到损失函数足够小或者达到预设的最大迭代次数为止。
思考:
前向传播,对x做了什么; 后向传播,对W做了什么
1.5 过拟合(Overfitting)和欠拟合(Underfitting)
过拟合(Overfitting)
过拟合指的是模型在训练数据上表现得非常好(即训练误差很低),但在新的、未见过的数据(如测试集)上表现较差。这意味着模型学习到了训练数据中的噪音或细节,而不是数据背后的真正规律。过拟合通常发生在模型过于复杂或训练数据量不足的情况下。
欠拟合(Underfitting)
欠拟合是指模型在训练数据和测试数据上的表现都不好,即模型没有学到足够的模式来解释数据。这通常发生在模型过于简单或训练次数不足的情况下。
避免过拟合措施
- 增加数据量:更多的训练数据可以使模型更好地学习到数据中的普遍规律,而不是特定的噪声或偏差。
- 数据增强(Data Augmentation):通过对已有数据进行变换(如旋转、缩放、翻转等),生成更多的训练样本,增加数据多样性。
- 正则化(Regularization):通过在损失函数中加入正则化项来限制模型的复杂度。常见的正则化方法包括 L1、L2 正则化和 Dropout。
- 早停(Early Stopping):在训练过程中监测验证集上的性能,当验证集上的性能不再提高时停止训练。
- 模型简化:使用更简单的模型结构,减少模型的参数数量。
- 集成方法(Ensemble Methods):通过组合多个模型的预测结果来提高模型的泛化能力,如 Bagging 和 Boosting。
- 标签平滑(Label Smoothing):减少标签的确信度,使得模型不那么自信于单一标签。
- 批量归一化(Batch Normalization):通过归一化每一批次的数据来减少内部协变量偏移,提高模型的稳定性。
避免欠拟合措施
- 增加模型复杂度:使用更深或更宽的网络结构,以提高模型的表达能力。
- 增加训练轮次(Epochs):让模型有更多的机会去学习数据中的模式。
- 特征工程(Feature Engineering):手动添加更有意义的特征,帮助模型更好地捕捉数据中的模式。
- 使用预训练模型:利用已经在大规模数据上训练好的模型进行迁移学习,可以快速提升模型性能。
- 调整学习率:使用适当的学习率策略,如学习率衰减或动态调整学习率。
- 使用更先进的优化算法:如 Adam、RMSprop 等,这些算法通常比标准的梯度下降法更有效。
1.6 正则化技术
在深度学习中,正则化技术是一种用于防止模型过拟合的重要手段。过拟合是指模型在训练数据上表现很好,但在未见过的数据(如测试数据)上表现较差的现象。正则化技术通过引入额外的约束来限制模型复杂度,从而提高模型的泛化能力。以下是几种常见的深度学习正则化技术及其原理:
1.6.1 L1 正则化(Lasso Regression)
L1 正则化通过在损失函数中加入权重绝对值的和作为惩罚项,使得模型倾向于学习稀疏的权重,即许多权重变为零。这有助于特征选择,使得模型更加简洁。
1.6.2 L2 正则化(Ridge Regression)
L2 正则化通过在损失函数中加入权重平方的和作为惩罚项,使得模型倾向于学习较小的权重值。这有助于减少权重间的相互依赖,提高模型的稳定性。
1.6.3 Dropout
Dropout 是一种随机丢弃部分神经元的技术,通过在训练过程中随机关闭一定比例的神经元,迫使模型学习更加健壮的特征表示。在测试时,所有神经元都保留下来,但权重需要相应调整(通常是乘以丢弃率的倒数)。
2 神经网络(Neural Network)
神经网络整体架构图
2.1 层次结构
输入层(Input Layer)/隐藏层(Hidden Layer)/输出层(Output Layer)
输入层:接受输入的那一层,本质上是网络的第一层。
输出层:生成输出的那一层,本质上是网络的最后一层。
隐藏层:处理信号 的中间层。隐藏层对传入的数据做特定的任务并生成输出,传递到下一层
2.2 神经元
神经元是神经网络中的基本计算单元。每个神经元执行的操作可以概括为以下几个步骤:
- 接收输入:每个神经元从上一层的神经元接收输入信号,这些信号通常是加权后的数据。
- 加权求和(weights):将接收到的所有输入与其对应的权重(weights)相乘并相加,得到一个总和。
- 添加偏置(bias):在加权求和的基础上加上一个偏置项(bias),以允许模型学习更灵活的决策边界。
- 激活函数(activation function):将加权求和后的值通过激活函数进行非线性变换,以产生最终的输出。
2.3 全链接
全连接层意味着每一层的每一个神经元都连接到下一层的所有神经元。这是最常见的一种连接方式,特别是在传统的多层感知器(MLP)中。全连接层通过矩阵乘法操作来实现,每一层的输出向量与权重矩阵相乘,再加上偏置向量,得到下一层的输入。
2.4 非线性(激活函数)
2.4.1 为什么需要激活函数
激活函数(activation function)的作用是去线性化,神经网络节点的计算就是加权求和,再加上偏置项:
这是一个线性模型,将这个计算结果传到下一个节点还是同样的线性模型。只通过线性变换,所有的隐含层的节点就无存在的意义。原因如下:假设每一层的权值矩阵用W(i)表示。那么存在一个W’使:
W’ = W(1)W(2)…W(n)
那么,n层隐含层就可以全部变成一个隐含层,隐含层的数量就没有任何意义。所以使用激活函数将其去线性化。种种情况下,W’ = W(1)W(2)…W(n)不再成立,每层隐含层都有其存在的意义。
2.4.2 非线性激活函数的作用
非线性激活函数是神经网络中的关键组件之一,它引入了非线性因素,使得网络能够学习复杂的映射关系,提高了模型的表达能力和泛化能力。
2.4.3 常见激活函数介绍
人工神经网络中常用到激活函数(activation function):ReLu和Sigmoid。
2.4.3.1 ReLU
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元。其函数表达式如下:
f(x)=max(0,x)
其函数图像图下:
其含义就是,如果输入的 x > 0 x>0 x>0,那么 f ( x ) = x f(x)=x f(x)=x;如果x<0,那么 f ( x ) = 0 f(x)=0 f(x)=0。
2.4.3.2 Sigmoid
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。函数表达式如下:
其函数图像图下:
sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些缺点,下面将根据其导数对其缺点进行分析,导数图像如下:
在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
3 卷积神经网络(CNN Convolutional Neural Network)
3.1 卷积神经网络的层级结构
- 数据输入层(Input Layer)
- 卷积层(Convolutional Layer)
- 激活层(Relu Layer)
- 池化层(Pooling Layer)
- 全连接层(FC Layer)
卷积神经网络主要由卷积层(卷积层一般自带激活函数)、下采样层(Pooling层/池化层) 和 全连接层3种网络层构成。
上述3种网络层经过排列组合,就可以构建一个完整的卷积神经网络,如下图所示。
3.2 数据输入层
数据输入层要做的处理主要是对原始图像数据进行预处理,其中包括:
- 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
- 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
- PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
输入数据通常表示为一个四维张量,格式为 (batch_size, height, width, channels),其中:
batch_size 表示一批输入数据的数量;
height 和 width 表示图像的高度和宽度;
channels 表示颜色通道数(对于灰度图像为 1,对于 RGB 图像为 3)。
3.3 卷积层(提取特征)
卷积层是 CNN 的核心,通过卷积操作提取输入数据的局部特征。下面介绍卷积层的重要名词
3.3.1 卷积层名词介绍
卷积核(filter/kernel)
- 定义:卷积核大小是指卷积核在输入数据上滑动时所覆盖的维度大小。通常用一个二维的数字表示,如 3×3 或 5×5,表示卷积核是一个 3 行 3 列或 5 行 5 列的矩阵。
- 影响:卷积核的大小决定了它能够捕捉的局部特征的范围。较小的卷积核(如 3×3)更适合于捕获细粒度的特征,如边缘、纹理等。较大的卷积核(如 5×5 或更大)则能够捕获更大范围内的特征,适合于捕捉更复杂的模式。
- 设计考虑:在实际应用中,通常会结合使用不同大小的卷积核来捕捉不同尺度的特征。例如,多个 3×3 卷积核可以串联起来模拟一个更大的卷积核,同时保持较低的参数量。
步长(stride)
- 定义:步长指的是卷积核在输入数据上每次滑动的步数。步长可以是任意正整数,默认情况下通常为 11。
- 影响:步长的选择会影响输出特征图的尺寸。较大的步长会导致输出特征图的尺寸减小,因为每次卷积操作后,卷积核移动的距离更远,减少了特征图的分辨率。
- 设计考虑:较小的步长可以保留更多的空间信息,适合于需要精细定位的任务。较大的步长可以加速计算,适用于需要较粗略特征图的情况,比如在池化层之后使用较大的步长来进一步降低空间维度。
填充(padding)
- 定义:填充是在输入数据的边缘添加额外的像素(通常是零值),以便调整输出特征图的尺寸。填充可以是任意整数,通常为 “same” 填充或 “valid” 填充。
Same 填充:在输入数据周围添加足够多的零,使得输出特征图的尺寸与输入尺寸相同。
Valid 填充:不进行任何填充,输出特征图的尺寸可能会小于输入尺寸。 - 影响:使用填充可以防止信息丢失,尤其是在边缘位置。同时,填充还可以使输出特征图的尺寸与输入保持一致,这对于构建网络架构非常有用。
- 设计考虑:在实际应用中,通常会选择适当的填充方式来保持特征图尺寸的一致性,或者根据具体需求调整输出特征图的大小。
卷积深度(depth)
- 定义:卷积深度(Depth)是指卷积层输出的特征图数量,也即该层使用的卷积核数量。每个卷积核负责捕捉输入数据的不同特征。
- 影响:卷积深度决定了卷积层能够同时学习多少种不同的特征。较大的卷积深度意味着可以学习更丰富的特征表示,但也增加了模型的复杂性和参数量。
- 设计考虑:卷积深度的选择依赖于具体的应用场景和可用资源。对于复杂的数据集或需要更高表达能力的任务,可以使用较大的卷积深度。然而,过大的卷积深度可能会导致过拟合问题,因此需要权衡模型容量和泛化能力。
特征图(feature map)
定义:特征图是由卷积层产生的输出,它反映了卷积核在输入数据上滑动过程中检测到的特征。每个特征图对应一个卷积核,因此特征图的数量等于卷积核的数量。
作用:特征图捕捉了输入数据中的局部特征,这些特征可以是边缘、纹理或其他有意义的模式。随着网络的加深,特征图可以表示更加抽象和复杂的特征。
特征图尺寸计算
特征图的尺寸受到以下因素的影响:
输入尺寸:输入数据的尺寸,例如一个图像的尺寸为 H×W×CH×W×C,其中 HH 是高度,WW 是宽度,CC 是通道数。
卷积核大小:卷积核的尺寸,通常表示为 Fh×FwFh×Fw,其中 FhFh 是高度,FwFw 是宽度。
步长(Stride):卷积核在输入数据上滑动的步数,通常用 SS 表示。
填充(Padding):在输入数据周围添加的额外像素数,通常用 PP 表示。
特征图的尺寸可以通过以下公式计算得出:
其中,H′ 和 W′ 是特征图的高度和宽度。
特征图尺寸计算示例
假设输入图像的尺寸为 H=28, W=28, C=1,使用一个 Fh=3, Fw=3 的卷积核,步长 S=1,没有填充 P=0,则特征图的尺寸为:
H′=(28+2×0−3)/1+1=26
W′=(28+2×0−3)/1+1=26
因此,特征图的尺寸为 26×26。
如果使用相同的输入图像,但是步长 S=2,则特征图的尺寸为:
H′=(28+2×0−3)2+1=13
W′=(28+2×0−3)2+1=13
此时,特征图的尺寸为 13×1313×13。
3.3.2 卷积计算过程
这里的蓝色矩阵就是输入的图像,粉色矩阵就是卷积层的神经元,这里表示了有两个神经元(w0,w1)。绿色矩阵就是经过卷积运算后的输出矩阵,这里的步长设置为2。
蓝色的矩阵(输入图像)对粉色的矩阵(filter)进行矩阵内积计算并将三个内积运算的结果与偏置值b相加(比如上面图的计算:2+(-2+1-2)+(1-2-2) + 1= 2 - 3 - 3 + 1 = -3),计算后的值就是绿框矩阵的一个元素。
下面的动态图形象地展示了卷积层的计算过程:
3.4 池化层(pooling layer)(压缩特征)
池化层是对输入的数据进行压缩,提取主要特征的过程。一般池化分为最大池化和一般池化。以最大池化为例,池化的运算跟卷积有些相似,一般以一个2 * 2的矩阵对输入的数据进行扫描,取2 * 2区域的最大值。平均池化与最大池化类似,即2 * 2区域的取平均值。值得注意的是,池化层的输入数据一般是卷积层的输出(经过激活函数后)。
3.5 全连接层
全连接层实际上就是传统的神经网络(DNN),每一神经元与输出层的神经元通过权值相连,激活函数一般为softmax函数。当全连接层输入的数据是二维或三维矩阵矩阵时,应该拉伸成一维的列表运算。
更多推荐
所有评论(0)