interview questions 01 basic

interview questions 01 basic
Tony Cao基础知识
深度学习基础问题
- 前向传播和反向传播分别是什么样的?请问你可以手推一下神经网络的前向和反向传播的过程吗?
- 什么是激活函数?常见的激活函数有哪些?
- 什么是损失函数?列举一些常见的损失函数
- 什么是优化算法?优化算法的目的是什么?有哪些优化算法?
- 过拟合,欠拟合分别是什么?分别怎么解决?
- 梯度消失/梯度爆炸分别是什么?分别怎么解决?
- 正则化/归一化分别是什么?都是干嘛用的?
- 什么是RNN?它的作用是什么?
- 什么是CNN?它在计算机视觉中的作用是什么?
1. 前向传播和反向传播分别是什么样的?请问你可以手推一下神经网络的前向和反向传播过程吗?
前向传播(Forward Propagation): 假设我们有一个包含L层的神经网络,其中第l层的激活单元为$a^l$。前向传播是指从输入层(第0层)开始,逐层计算每个激活单元的值,直到得到输出层的预测结果。
首先,输入层的激活单元即为输入数据 x。对于第 l 层(1 <= l <= L),前向传播的计算过程如下:
$z^l = W^l * a^{(l-1)} + b^l = g^l(z^l)$
$𝑎^{(𝑙)}=𝜎(𝑧^{(𝑙)})$
其中 𝜎 为 激活函数,如Sigmoid,ReLU,PReLU等。
其中,$W^l$ 和 $b^l$ 分别表示第 l 层的权重和偏差,$g^l(z^l)$ 是第 l 层的激活函数。$a^{(l-1)}$ 表示第 l 层前一层的激活值。这样逐层计算,直到得到输出层 $a^L$,即为神经网络的预测结果。
反向传播(Backpropagation): 反向传播是指在前向传播后,通过计算损失函数对每个参数的梯度,从输出层反向更新参数。目的是最小化损失函数,使得预测结果与真实标签尽可能接近。
假设我们有一个损失函数$ L(y, y_{pred})$,其中 y 是真实标签,$y_{pred}$ 是神经网络的预测结果。反向传播的计算过程如下:
计算输出层的误差:$ δ^L = ∂L/∂z^L$
逐层反向传播误差: 对于$ l = L-1, L-2, …, 2 δ^l = ((W^(l+1))^T * δ^(l+1)) * g’^l(z^l)$
计算梯度:$ ∂L/∂W^l = δ^l * (a^(l-1))^T ∂L/∂b^l = δ^l $其中,$g’^l(z^l) $是 $g^l(z^l)$ 的导数。
更新参数: 通过梯度下降等优化算法,更新参数$ W^l $和 $b^l$。
为什么要从后向前算?
因为计算损失的时候是从最终的计算结果和预期值开始计算的
从后向前可以利用后面算完的结果,节省资源
2. 什么是激活函数?常见的激活函数有哪些?
因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
激活函数在神经网络的每一层中引入非线性,使得神经网络能够拟合复杂的非线性模式。常见的激活函数有 Sigmoid、ReLU(Rectified Linear Unit)、Tanh、Leaky ReLU 等。
激活函数:
ReLU 修正线性单元(Rectified Linear Unit)
ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题,在目前的深度神经网络中被广泛使用。ReLU函数本质上是一个斜坡(ramp)函数,公式及函数如下:
$$ 𝑓(𝑥)\ =\ \begin{cases} x, {(x>=0)}\ 0,{(x<0)} \end{cases} $$
ReLU 函数是深度学习中较为流行的一种激活函数,相比于 sigmoid 函数和 tanh 函数,它具有如下优点:
- 当输入为正时,导数为1,一定程度上改善了梯度消失问题,加速梯度下降的收敛速度;
- 计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。
- 被认为具有生物学合理性(Biological Plausibility),比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高)
- ReLU函数的不足:
Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零;
【Dead ReLU问题】ReLU神经元在训练时比较容易“死亡”。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU 神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡ReLU问题,并且也有可能会发生在其他隐藏层。
不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心,ReLU 函数的输出为 0 或正数,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。
Leaky ReLU
为了解决 ReLU 激活函数中的梯度消失问题,当 x < 0 时,我们使用 Leaky ReLU——该函数试图修复 dead ReLU 问题。
$$ 𝑓(𝑥)\ =\ \begin{cases} x, {(x>0)}\ 𝛾 x,{(x<=0)} \end{cases} $$
其中 𝛾 是一个很小的数,如0.1,0.01等等。这里,令 𝛾=0.1 进行展示
为什么使用Leaky ReLU会比ReLU效果要好呢?
- Leaky ReLU 通过把 x 的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度(zero gradients)问题,当 x < 0 时,它得到 0.1 的正梯度。该函数一定程度上缓解了 dead ReLU 问题,
- leak 有助于扩大 ReLU 函数的范围,通常 a 的值为 0.01 左右;
- Leaky ReLU 的函数范围是(负无穷到正无穷)
尽管Leaky ReLU具备 ReLU 激活函数的所有特征(如计算高效、快速收敛、在正区域内不会饱和),但并不能完全证明在实际操作中Leaky ReLU 总是比 ReLU 更好。
Sigmoid
函数的表达式如下:$𝑓(𝑥)=\frac{1}{1+𝑒^{−𝑥}}$
图像类似一个S形曲线,Sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。sigmoid是一个十分常见的激活函数。
- 在什么情况下适合使用 Sigmoid 激活函数呢?
- Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到1,因此它对每个神经元的输出进行了归一化;
- 用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;
- 梯度平滑,避免「跳跃」的输出值;
- 函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;
- 明确的预测,即非常接近 1 或 0。
- Sigmoid 激活函数存在的不足:
梯度消失:注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
不以零为中心:Sigmoid 输出不以零为中心的,,输出恒大于0,非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。
计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂,计算机运行起来速度较慢。
Tanh双曲正切激活函数(hyperbolic tangent activation function)
函数表达式:
$𝑓(𝑥)=tanh(𝑥)=\frac{𝑒^𝑥−𝑒^{−𝑥}}{𝑒^𝑥+𝑒^{−𝑥}}=\frac{2}{1+𝑒^{−2𝑥}}−1$
我们可以发现Tanh 函数可以看作放大并平移的Logistic 函数,其值域是(−1, 1)。Tanh与sigmoid的关系如下:
$𝑡𝑎𝑛ℎ(𝑥)=2𝑠𝑖𝑔𝑚𝑜𝑖𝑑(2𝑥)−1$
tanh 激活函数的图像也是 S 形,作为一个双曲正切函数,tanh 函数和 sigmoid 函数的曲线相对相似。但是它比 sigmoid 函数更有一些优势。
优点:
- 当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,tanh 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;
- 在 tanh 图中,负输入将被强映射为负,而零输入被映射为接近零。
- 缺点:
- 与sigmoid类似,Tanh 函数也会有梯度消失的问题,因此在饱和时(x很大或很小时)也会「杀死」梯度。
注意:在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。
3. 什么是损失函数?列举一些常见的损失函数
损失函数用于度量神经网络的预测结果与真实标签之间的误差。常见的损失函数有均方误差(Mean Squared Error, MSE)、交叉熵损失函数(Cross-Entropy Loss)、Huber Loss 等。
- 什么是损失函数?
一言以蔽之,损失函数(loss function)就是用来度量模型的预测值f(x)与真实值Y的差异程度的运算函数,它是一个非负实值函数,通常 使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。
- 为什么使用损失函数?
损失函数使用主要是在模型的训练阶段,每个批次的训练数据送入模型后,通过前向传播输出预测值,然后损失函数会计算出预测值和真实值 之间的差异值,也就是损失值。得到损失值之后,模型通过反向传播去更新各个参数,来降低真实值与预测值之间的损失,使得模型生成的预 测值往真实值方向靠拢,从而达到学习的目的。
主要是用来求偏导,用来反向传播的。
以下是一些常见的损失函数:
基于距离度量的损失函数
均方误差(Mean Squared Error, MSE):这是回归问题中最常用的损失函数。在线性回归中,可以通过极大似然估计(MLE)推导。
公式:
$𝐿(𝑌|𝑓(𝑥))=\frac1𝑛∑^n_{𝑖=1}(𝑌_𝑖−𝑓(𝑥_𝑖))^2$
在回归问题中,均方误差损失函数用于度量样本点到回归曲线的距离,
平均绝对值误差(Mean Absolute Error, MAE)。
公式:
$𝐿(𝑌|𝑓(𝑥))=\frac1𝑛∑^n_{𝑖=1}|𝑌_𝑖−𝑓(𝑥_𝑖)|$平均绝对值百分比误差(Mean Absolute Percentage Error, MAPE)
公式:
$𝐿(𝑌|𝑓(𝑥))=\frac1𝑛∑^n_{𝑖=1}|\frac{𝑌_𝑖−𝑓(𝑥_𝑖)}{Y_i}|$平方对数误差(Mean Squared Logarithmic Error, MSLE)。
L2损失函数
L2损失又被称为欧氏距离,是一种常用的距离度量方法,通常用于度量数据点之间的相似度。由于L2损失具有凸性和可微性,且在独立、同分布的高斯噪声情况下,它能提供最大似然估计,使得它成为回归问题、模式识别、图像处理中最常使用的损失函数。公式:
$𝐿(𝑌|𝑓(𝑥))=\sqrt[2]{\frac1𝑛∑^n_{𝑖=1}(𝑌_𝑖−𝑓(𝑥_𝑖))^2}$L1损失函数
L1损失又称为曼哈顿距离,表示残差的绝对值之和。L1损失函数对离群点有很好的鲁棒性,但它在残差为零处却不可导。另一个缺点是更新的梯度始终相同,也就是说,即使很小的损失值,梯度也很大,这样不利于模型的收敛。针对它的收敛问题,一般的解决办法是在优化算法中使用变化的学习率,在损失接近最小值时降低学习率。
公式:
$𝐿(𝑌|𝑓(𝑥))=∑_{𝑖=1}^n|𝑌_𝑖−𝑓(𝑥_𝑖)|$Smooth L1损失函数
huber损失函数
Hinge损失函数和Squared Hinge损失函数:
常被用于支持向量机(SVM)算法中,使得SVM仅通过少量的支持向量就能确定最终超平面。
基于概率分布度量的损失函数
KL散度函数(相对熵):
KL散度( Kullback-Leibler divergence)也被称为相对熵,是一种非对称度量方法,常用于度量两个概率分布之间的距离。KL散度也可以衡量两个随机分布之间的距离,两个随机分布的相似度越高的,它们的KL散度越小,当两个随机分布的差别增大时,它们的KL散度也会增大,因此KL散度可以用于比较文本标签或图像的相似性。基于KL散度的演化损失函数有JS散度函数。JS散度也称JS距离,用于衡量两个概率分布之间的相似度,它是基于KL散度的一种变形,消除了KL散度非对称的问题,与KL散度相比,它使得相似度判别更加准确。
相对熵是恒大于等于0的。当且仅当两分布相同时,相对熵等于0。
公式:
$𝐿(𝑌|𝑓(𝑥))=∑^n_{𝑖=1}=1𝑛𝑌_𝑖×𝑙𝑜𝑔(𝑌_𝑖𝑓(𝑥_𝑖))$公式中Y代表真实值,f(x)代表预测值
交叉熵损失:
交叉熵是信息论中的一个概念,最初用于估算平均编码长度,引入机器学习后,用于评估当前训练得到的概率分布与真实分布的差异情况。为了使神经网络的每一层输出从线性组合转为非线性逼近,以提高模型的预测精度,在以交叉熵为损失函数的神经网络模型中一般选用tanh、sigmoid、softmax或ReLU作为激活函数。
这是分类问题中最常用的损失函数。当使用Sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。
交叉熵损失函数刻画了实际输出概率与期望输出概率之间的相似度,也就是交叉熵的值越小,两个概率分布就越接近,特别是在正负样本不均衡的分类问题中,常用交叉熵作为损失函数。目前,交叉熵损失函数是卷积神经网络中最常使用的分类损失函数,它可以有效避免梯度消散。在二分类情况下也叫做对数损失函数。
公式:
$𝐿(𝑌|𝑓(𝑥))=−∑^n_{𝑖=1}𝑌_𝑖𝑙𝑜𝑔𝑓(𝑥_𝑖)$当正负样本不均衡的时候,通常会在交叉熵损失函数类别前面加个参数α
$ 𝑓(𝑥)\ =\ \begin{cases}−𝛼𝑙𝑜𝑔(𝑝) {(y = 1)}\ −(1−𝛼)𝑙𝑜𝑔(1−𝑝) {(y = 0)} \end{cases}$
- Focal loss:
focal loss的引入主要是为了解决难易样本不均衡的问题,注意有区别于正负样本不均衡的问题。
如何选择损失函数?
通常情况下,损失函数的选取应从以下方面考虑:
(1)选择最能表达数据的主要特征来构建基于距离或基于概率分布度量的特征空间。
(2)选择合理的特征归一化方法,使特征向量转换后仍能保持原来数据的核心内容。
(3)选取合理的损失函数,在实验的基础上,依据损失不断调整模型的参数,使其尽可能实现类别区分。
(4)合理组合不同的损失函数,发挥每个损失函数的优点,使它们能更好地度量样本间的相似性。
(5)将数据的主要特征嵌入损失函数,提升基于特定任务的模型预测精确度。
4. 什么是优化算法?优化算法的目的是什么?有哪些优化算法?
优化算法用于更新神经网络的参数,以最小化损失函数。常见的优化算法有梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent, SGD)、自适应时刻估计方法 Adam(Adaptive Moment Estimation) 等。这些算法的目标是在参数空间中找到损失函数的最优解。
5. 过拟合,欠拟合分别是什么?分别怎么解决?
- 过拟合(Overfitting): 过拟合是指模型在训练数据上表现非常好,但在未见过的新数据(测试数据)上表现较差。这种现象是由于模型在训练时过度拟合了训练数据的细节和噪声,导致在新数据上泛化能力较差。
过拟合主要的问题是在神经网络中$y = ∂(wx + b)$中的w影响较大,因为 $w$ 影响的是拟合曲线的形状,而 $b$ 只是影响曲线的位置
解决过拟合的方法:
数据增强:通过对训练数据进行随机变换(例如旋转、翻转、平移等),增加数据的多样性,从而减少过拟合的可能性。
正则化:添加正则化项(如L1正则化或L2正则化)到损失函数中,限制模型的参数大小,降低过拟合风险。
提前停止(Early Stopping):在训练过程中,通过监控验证集的性能,当性能不再提升时,停止训练,防止过度拟合。
使用更多数据:增加训练数据量可以降低过拟合风险,让模型更好地学习数据的真实分布。
简化模型:减少模型的复杂度,如减少网络的层数、每层的神经元数量等。
欠拟合(Underfitting): 欠拟合是指模型在训练数据和新数据上都表现较差。这种现象通常是由于模型的复杂度不足,无法捕捉数据中的重要特征和模式。
解决欠拟合的方法:
- 增加模型复杂度:增加神经网络的层数或每层的神经元数量,使模型能够更好地学习数据中的复杂模式。
- 特征工程:添加更多的特征或进行特征变换,以提供更多信息给模型。
- 减少正则化:如果使用了正则化项,可以考虑减少正则化的强度,使模型更自由地拟合数据。
- 使用更多数据:增加训练数据量有助于提高模型的泛化能力,减少欠拟合问题。
- 更换更复杂的模型:尝试使用更复杂的模型,如卷积神经网络(CNN)、循环神经网络(RNN)等。
6. 梯度消失/梯度爆炸分别是什么?分别怎么解决?
梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)是深度神经网络中常见的问题,涉及到梯度在反向传播过程中的变化。它们分别是:
梯度消失(Vanishing Gradient): 梯度消失指的是在深度神经网络的反向传播过程中,梯度逐层传递时逐渐变小,导致靠近输入层的参数更新非常缓慢,从而让底层网络难以学习到有效的特征和模式。这个问题特别在使用某些激活函数(如Sigmoid和Tanh)时更为明显。
梯度爆炸(Exploding Gradient): 梯度爆炸是在反向传播过程中梯度逐层传递时逐渐变大,导致梯度迅速增大,甚至可能超过计算机能表示的范围,从而导致数值不稳定和训练过程失败。
解决梯度消失问题的方法:
- 使用恰当的激活函数:某些激活函数(如ReLU和Leaky ReLU)在反向传播过程中更不容易出现梯度消失问题,可以考虑使用它们替代Sigmoid和Tanh。
- 批量归一化(Batch Normalization):批量归一化可以加速训练过程,还可以缓解梯度消失问题,使得网络更稳定和更易训练。
- 使用残差连接(Residual Connections):残差连接可以跳过某些层,将输入直接与输出相加,有助于信息的传递和梯度的流动,减少梯度消失问题。
- 调整网络架构:适当调整网络的深度,避免设计过深的网络结构,也有助于减少梯度消失的影响。
解决梯度爆炸问题的方法:
- 梯度截断(Gradient Clipping):设置一个梯度阈值,在反向传播过程中,如果梯度超过该阈值,则将其裁剪为阈值以内的数值,避免梯度爆炸。
- 使用恰当的权重初始化:合适的权重初始化可以减少梯度爆炸问题。例如,Xavier/Glorot初始化针对Sigmoid和Tanh激活函数的网络效果较好,而He初始化针对ReLU激活函数的网络效果较好。
- 减少学习率:较小的学习率可以缓解梯度爆炸的影响,但要注意不要将学习率设置得过小,以免影响收敛速度。
- 批量归一化(Batch Normalization):同样,批量归一化在训练过程中有助于控制梯度的大小,减少梯度爆炸问题。
7. 正则化/归一化分别是什么?都是干嘛用的?
正则化(Regularization)和归一化(Normalization)是深度学习中两种常用的技术,它们用于提高模型的泛化能力和加速训练过程。
正则化: 正则化是通过在损失函数中添加一个额外的项,来限制模型参数的大小,从而避免过拟合问题。常见的正则化项有L1正则化和L2正则化。
- L1正则化:在损失函数中添加模型参数的绝对值之和。L1正则化有助于稀疏模型,即将一些参数的值压缩为0,从而减少模型的复杂度。
- L2正则化:在损失函数中添加模型参数的平方之和。L2正则化对参数的惩罚更加平滑,通常会让参数接近于0,但不会严格地等于0。
正则化的目的是防止模型在训练集上过度拟合,使得模型能够更好地泛化到未见过的新数据上。
归一化: 归一化是将数据按比例缩放,使其值落在特定范围内。在深度学习中,常见的归一化方法是将输入特征缩放到0和1之间,或者使其均值为0,方差为1。
- 最小-最大归一化:将数据缩放到指定的最小值和最大值之间,公式为:(x - min) / (max - min)
- 均值-方差归一化:将数据缩放为均值为0,方差为1的分布,公式为:(x - mean) / std
归一化的目的是将特征的值统一到相似的范围内,加速模型的训练过程,同时有助于梯度的传播和优化算法的收敛。
- 两者的作用:
- 正则化用于防止过拟合,通过约束模型参数的大小,减少模型的复杂度,提高模型的泛化能力。
- 归一化用于将数据的特征缩放到统一的范围内,使得训练过程更稳定,加速优化算法的收敛,并且有助于避免梯度消失或梯度爆炸问题。
在实际应用中,正则化和归一化通常是一起使用的,以提高深度学习模型的性能和训练效果。
8. 什么是RNN?它的作用是?
RNN(循环神经网络)是一种特殊的神经网络架构,它具有循环连接,使得信息可以在网络内部进行传递。相比传统的前馈神经网络,RNN在处理序列数据时能够更好地捕捉数据中的时序信息,因此在自然语言处理、语音识别、时间序列预测等任务中得到广泛应用。
RNN的作用是对序列数据进行处理,其中序列数据是按时间顺序排列的数据。每个时间步,RNN会接收当前时间步的输入和上一个时间步的隐藏状态(hidden state),并输出当前时间步的隐藏状态和预测结果。这样,RNN可以在处理序列数据时考虑到数据中的时序信息,从而对序列进行建模和预测。
RNN的主要特点是它在网络内部引入了循环连接,这使得信息可以在不同时间步之间传递。这种循环连接允许RNN对任意长度的序列进行处理,因此适用于各种长度的序列数据。
然而,传统的RNN也存在梯度消失或梯度爆炸等问题,导致在处理长期依赖关系时效果不佳。为了解决这个问题,后来出现了一些改进的RNN结构,如长短期记忆网络(LSTM)和门控循环单元(GRU)。这些改进的结构增加了特殊的门控机制,有助于更好地捕捉长期依赖关系,从而在序列建模任务中取得更好的效果。
总的来说,RNN是一种用于处理序列数据的神经网络结构,通过引入循环连接,能够更好地考虑时序信息,广泛应用于自然语言处理、时间序列分析和语音识别等任务。
9. 什么是CNN?它在计算机视觉中的作用是什么?
CNN(卷积神经网络)是一种特殊的神经网络结构,它在计算机视觉中起到了重要的作用。CNN主要用于图像处理和计算机视觉任务,如图像分类、目标检测、图像分割等。它的主要特点是引入了卷积层和池化层,能够有效地捕捉图像中的局部特征和空间结构。
CNN的作用在计算机视觉中包括以下几个方面:
- 局部感知: CNN中的卷积层通过滑动窗口(卷积核)在图像上提取局部特征。这种局部感知使得CNN能够捕捉图像中的细节和局部结构,从而有效地识别图像中的对象和模式。
- 参数共享: 在CNN中,卷积核在整个图像上共享参数,这意味着它们对于不同位置的输入都使用相同的权重。这样可以大大减少模型的参数量,同时增加了模型的泛化能力。
- 空间不变性: 由于参数共享的特性,CNN对于图像的平移、旋转和缩放等变换具有一定的鲁棒性,即使目标出现在不同位置或角度,CNN仍能识别出它们。
- 池化: 池化层用于降低特征图的维度,减少模型计算量,并增强模型的泛化能力。常见的池化操作有最大池化和平均池化,它们能够提取主要特征并保持空间结构。
- 深层表示: CNN通常是深层次的网络,包含多个卷积层和全连接层。通过多层抽象,CNN可以逐渐学习到图像的高级语义特征,从而实现更准确的图像分类和目标检测。
由于CNN在图像处理和计算机视觉任务中的优秀表现,它在过去几年里成为了计算机视觉领域的主流方法。从最早的LeNet到后来的AlexNet、VGG、ResNet、Inception和EfficientNet等,不断涌现出的CNN模型在各种图像任务中取得了显著的成就。这些进展使得计算机视觉在图像理解、目标识别和自动驾驶等领域取得了巨大的进步。




