[论文阅读]Deeply-Supervised Nets
摘要
我们提出的深度监督网络(DSN)方法在最小化分类误差的同时,使隐藏层的学习过程更加直接和透明。我们尝试通过研究深度网络中的新公式来提升分类性能。我们关注卷积神经网络(CNN)架构中的三个方面:(1)中间层对整体分类的透明性;(2)学习特征的区分性和鲁棒性,特别是在早期层;(3)由于梯度爆炸和梯度消失问题,训练效果的有效性。我们引入了“伴随目标”,除了输出层的整体目标外,还为每个隐藏层引入了独立的目标(这与逐层预训练策略不同)。我们扩展了随机梯度方法中的技术来分析我们的算法。我们方法的优势显而易见,实验结果表明,在基准数据集上的实验结果(如MNIST、CIFAR-10、CIFAR-100和SVHN)相较于现有方法显著提高了性能。
1.简介
近年来,神经网络,尤其是深度学习(DL)得到了广泛关注,深度学习可以是无监督的[10]、有监督的[12],或是混合形式的[18]。当深度学习技术用于图像分类[11, 16]和语音识别[4]时,尤其是在大量训练数据的情况下,已经观察到显著的性能提升。一方面,层次化和递归网络[7, 10, 12]在自动学习数千甚至数百万个特征以进行模式识别方面展现了巨大的潜力;另一方面,关于深度学习的担忧也被提出,许多基本问题仍然悬而未解。
当前深度学习(DL)框架的潜在问题包括:隐藏层学习到的特征的透明度和区分性降低[31];由于梯度爆炸和梯度消失导致的训练困难[8, 22];尽管在理论方面做出了一些尝试,但仍缺乏对算法行为的透彻数学理解[6];对大量训练数据的依赖[11];训练过程中的手动调参复杂度[15]。尽管如此,深度学习能够在一个集成框架中自动学习和融合丰富的层次化特征。最近的开源活动和经验分享[11, 5, 2]也极大促进了深度学习在机器学习社区及其他领域的采纳和发展。为了增强深度学习的性能,除了各种工程技巧(如调整特征规模、步长和收敛速率),还提出了许多技术,如dropout[11]、dropconnect[19]、预训练[4]和数据增强[24]。CNN算法[12]自动学习的特征是直观的[31]。一些特征,特别是早期层的特征,也表现出一定程度的不透明性[31]。这一发现与另一个观察一致,即特征学习早期层的不同初始化对最终分类几乎没有影响[4]。此外,梯度消失的存在也使得深度学习的训练变得缓慢且低效[8]。在本文中,我们通过提出一种新算法——深度监督网络(DSN),来解决深度学习中的特征学习问题,该算法对隐藏层和输出层都进行直接和早期的监督。我们为每个隐藏层引入伴随目标,作为学习过程中的附加约束(或新正则化)。我们新的公式显著提升了现有监督深度学习方法的性能。我们还尝试使用随机梯度技术为我们的公式提供理论依据。我们展示了在假设优化函数具有局部强凸性(这一假设较为宽松,但指向了一个有前景的方向)下,所提方法在收敛速率上的改进。
有几种现有方法特别值得提及,并与我们的方法进行比较。在[1]中,进行了逐层监督预训练。我们提出的方法不进行预训练,而是强调最小化输出分类误差,同时减少每个单独层的预测误差。这一点很重要,因为反向传播是在一个集成框架中同时进行的。在[26]中,标签信息被用于无监督学习。深度学习中也进行了半监督学习[30]。在[28]中,输出层使用了SVM分类器,而不是CNN[12]中的标准softmax函数。我们的框架(DSN),在选择使用SVM、softmax或其他分类器时,强调了对每个中间层的直接监督。在实验中,我们展示了DSN-SVM和DSN-Softmax在CNN-SVM和CNN-Softmax上的一致性改进。我们观察到在MNIST、CIFAR-10、CIFAR-100和SVHN上的所有最新技术结果。值得一提的是,我们的公式也包含了最近提出的各种技术,如平均[24]、dropconnect[19]和Maxout[9]。我们预计通过对DSN进行精心工程设计,能进一步减少分类误差。
2.深度监督网络
在本节中,我们给出了所提出的深度监督网络(DSN)的主要公式。我们专注于围绕有监督的CNN风格框架[12,5,2]构建我们的基础设施,通过向每一层引入分类器,例如SVM模型[29]。[28]中有一个早期的将SVM与DL结合的尝试,但与我们的动机不同,只研究了输出层,有一些初步的实验结果。
2.1 动机
我们的动机来源于以下简单的观察:通常来说,基于高度可区分特征训练的判别分类器,其表现会比基于较少可区分特征训练的判别分类器更好。如果所讨论的特征是深度网络中的隐藏层特征图,这一观察意味着,使用这些隐藏层特征图训练的判别分类器的表现,可以作为这些隐藏层特征图质量/区分性的代理,进而作为上层特征图质量的代理。通过在网络的每个隐藏层适当利用这种特征质量反馈,我们能够直接影响隐藏层权重/滤波器的更新过程,从而偏向于生成高度可区分的特征图。这是一种在网络内部每一层深处起作用的监督方式;当我们的特征质量代理良好时,我们预期能够比仅依赖于从输出层进行的逐步反向传播更快地接近良好特征的区域。我们还预期能缓解“爆炸”或“消失”梯度的常见问题。直接追求每一隐藏层特征区分性的一个顾虑是,这可能会干扰整体网络的表现,因为最终用于最终分类的特征图是输出层的特征图;但我们的实验结果表明,这种情况并不存在。
我们的基本网络架构将类似于CNN框架中使用的标准架构。我们额外的深度反馈通过将每个隐藏层与一个伴随的局部输出关联来引入。我们可以将这个伴随局部输出看作是一个被截断的网络最终会产生的输出的类比。现在,误差的反向传播按常规进行,关键的不同在于,我们不仅从最终层进行反向传播,还同时从我们的局部伴随输出进行反向传播。实验结果表明,伴随目标具有以下主要特性:(1)它充当一种特征正则化(尽管是不同寻常的),能够显著减少测试误差,但不一定减少训练误差;(2)它导致更快的收敛,尤其是在训练数据较少的情况下(见图(2),它展示了一个运行示例)。
2.2 公式化
我们专注于监督学习情况,并设定 S = { ( X i , y i ) , i = 1.. N } S = \{(X_i, y_i), i = 1..N\} S={(Xi,yi),i=1..N} 作为我们的输入训练数据集,其中样本 X i ∈ R n X_i \in \mathbb{R}^n Xi∈Rn 表示原始输入数据, y i ∈ { 1 , … , K } y_i \in \{1, \dots, K\} yi∈{1,…,K} 是样本 X i X_i Xi 对应的真实标签。为了简化记法,我们省略了索引 i i i,因为每个样本都是独立考虑的。深度网络,特别是卷积神经网络(CNN)的目标[12]是学习滤波器和权重,以最小化输出层的分类误差。在这里,我们将偏置项合并到权重参数中,并且不区分滤波器和权重,定义每一层 m = 1.. M m = 1..M m=1..M 的递归函数为:
Z ( m ) = f ( Q ( m ) ) , Z ( 0 ) = X , (1) Z^{(m)} = f(Q^{(m)}), \quad Z^{(0)} = X, \tag{1} Z(m)=f(Q(m)),Z(0)=X,(1)
Q ( m ) = W ( m ) ∗ Z ( m − 1 ) . (2) Q^{(m)} = W^{(m)} * Z^{(m-1)}. \tag{2} Q(m)=W(m)∗Z(m−1).(2)
其中, M M M 表示层的总数; W ( m ) , m = 1.. M W^{(m)}, m = 1..M W(m),m=1..M 是要学习的滤波器/权重; Z ( m − 1 ) Z^{(m-1)} Z(m−1) 是第 m − 1 m-1 m−1 层生成的特征图; Q ( m ) Q^{(m)} Q(m) 表示对前一层特征图进行卷积/滤波后的响应; f ( ) f() f() 是对 Q Q Q 的池化函数;将所有层的权重组合为:
W = ( W ( 1 ) , … , W ( M ) ) . (1) W = (W^{(1)}, \dots, W^{(M)}).\tag{1} W=(W(1),…,W(M)).(1)
现在我们引入一组分类器,例如SVM(可以应用其他分类器如Softmax,我们将在实验中展示使用SVM和Softmax的结果),每个隐藏层一个分类器,定义为:
w = ( w ( 1 ) , … , w ( M − 1 ) ) , (2) w = (w^{(1)}, \dots, w^{(M-1)}),\tag{2} w=(w(1),…,w(M−1)),(2)
除了标准CNN框架中的 W W W 。我们将 w ( o u t ) w^{(out)} w(out) 表示为输出层的SVM权重。因此,我们构建整体的组合目标函数为:
∥ w ( o u t ) ∥ 2 + L ( W , w ( o u t ) ) + ∑ m = 1 M − 1 α m [ ∥ w ( m ) ∥ 2 + ℓ ( W , w ( m ) ) − γ ] + (3) \| w^{(out)} \|^2 + L(W, w^{(out)}) + \sum_{m=1}^{M-1} \alpha_m [\| w^{(m)} \|^2 + \ell(W, w^{(m)}) - \gamma ]_+ \tag{3} ∥w(out)∥2+L(W,w(out))+m=1∑M−1αm[∥w(m)∥2+ℓ(W,w(m))−γ]+(3)
其中,
L ( W , w ( o u t ) ) = ∑ y k ≠ y [ 1 − ⟨ w ( o u t ) , ϕ ( Z ( M ) , y ) − ϕ ( Z ( M ) , y k ) ⟩ ] + 2 (4) L(W, w^{(out)}) = \sum_{y_k \neq y} [ 1 - \langle w^{(out)}, \phi(Z^{(M)}, y) - \phi(Z^{(M)}, y_k) \rangle ]^2_+ \tag{4} L(W,w(out))=yk=y∑[1−⟨w(out),ϕ(Z(M),y)−ϕ(Z(M),yk)⟩]+2(4)
和
ℓ ( W , w ( m ) ) = ∑ y k ≠ y [ 1 − ⟨ w ( m ) , ϕ ( Z ( m ) , y ) − ϕ ( Z ( m ) , y k ) ⟩ ] + 2 (5) \ell(W, w^{(m)}) = \sum_{y_k \neq y} [ 1 - \langle w^{(m)}, \phi(Z^{(m)}, y) - \phi(Z^{(m)}, y_k) \rangle ]^2_+ \tag{5} ℓ(W,w(m))=yk=y∑[1−⟨w(m),ϕ(Z(m),y)−ϕ(Z(m),yk)⟩]+2(5)
我们将 L ( W , w ( M ) ) L(W, w^{(M)}) L(W,w(M))(应该是 L ( W , w ( o u t ) ) L(W, w^{(out)}) L(W,w(out))) 称为整体损失(输出层),将 ℓ ( W , w ( m ) ) \ell(W, w^{(m)}) ℓ(W,w(m)) 称为伴随损失(隐藏层),这两个损失都是预测误差的平方和。上述公式可以直观地理解:除了学习卷积核和权重 W ∗ W^* W∗ 外,就像标准CNN框架[12]一样,我们还强制添加了一个约束,要求在每个隐藏层中直接影响每个层的学习,进而推动每一层学习到具有区分性和合理性的特征。在式 (3) 中, ∥ w ( o u t ) ∥ 2 \| w^{(out)} \|^2 ∥w(out)∥2 和 L ( W , w ( o u t ) ) L(W, w^{(out)}) L(W,w(out)) 分别表示输出层SVM分类器的边际和平方hinge损失(L2SVM)[4];在式 (3) 中, ∥ w ( m ) ∥ 2 \| w^{(m)} \|^2 ∥w(m)∥2 和 ℓ ( W , w ( m ) ) \ell(W, w^{(m)}) ℓ(W,w(m)) 分别是每个隐藏层SVM分类器的边际和平方hinge损失。需要注意的是, w ( m ) w^{(m)} w(m) 直接依赖于 Z ( m ) Z^{(m)} Z(m),而 Z ( m ) Z^{(m)} Z(m) 取决于 W 1 , … , W m W^1, \dots, W^m W1,…,Wm 直到第 m m m 层。 L ( W , w ( o u t ) ) L(W, w^{(out)}) L(W,w(out)) 依赖于 w ( o u t ) w^{(out)} w(out),它由整个 W W W 决定。式 (3) 中的第二项通常随着训练过程的进行,逐渐趋向于零;这样,输出层的分类没有改变,伴随目标仅作为一个代理进行正则化。通过将 γ \gamma γ 作为阈值(一个超参数),在式 (3) 中,我们得到当隐藏层达到或低于 γ \gamma γ 时,整体损失的影响消失(变为0),不再参与训练过程。 α m \alpha_m αm 平衡了输出层损失与伴随损失的影响。在训练中,我们还可以使用逐步衰减因子,例如 α m ≈ 0.1 × ( 1 − t / N ) → α m \alpha_m \approx 0.1 \times (1 - t / N) \to \alpha_m αm≈0.1×(1−t/N)→αm,以强制第二项在一定的迭代次数后消失,其中 t t t 是当前训练轮次, N N N 是总训练轮数(这个衰减因子在不同实验条件下也许会变化但是这个差异可能不会很大)。
总结来说,我们描述这个优化问题如下:我们希望学习整个网络的滤波器/权重 W W W,使得在输出特征图上训练的SVM分类器 w ( o u t ) w^{(out)} w(out) 能够表现出良好的性能。我们追求输出性能的同时,还要求隐藏层分类器能够达到某种“令人满意”的性能。我们的意思是:将注意力集中于特征空间的部分区域,当考虑到内部层时,可以得到高度区分性的隐藏层特征图(通过我们对隐藏层分类器性能的代理来衡量)。公式 (3) 和以往的逐层监督训练的主要区别在于,我们在优化过程中同时进行正则化(或规范化)隐藏层。例如,逐层的贪婪预训练要么作为初始化进行,要么作为微调进行,最终可能导致某些过拟合[1]。最新的基准结果展示了我们公式的特殊优势。如图2©所示,实际上CNN和DSN都达到了接近零的训练误差,但DSN在更好的一般化能力方面展现出了明显的优势。(感觉DSN明显的error更小啊)
为了使用SGD训练DSN模型,模型参数关于目标函数的梯度为:
∂ F ∂ w ( o u t ) = 2 w ( o u t ) − 2 ∑ y k ≠ y [ ϕ ( Z ( M ) , y ) − ϕ ( Z ( M ) , y k ) ] [ 1 − ⟨ w ( o u t ) , ϕ ( Z ( M ) , y ) − ϕ ( Z ( M ) , y k ) ⟩ ] + \frac{\partial F}{\partial w^{(out)}} = 2 w^{(out)} - 2 \sum_{y_k \neq y} \left[ \phi(Z^{(M)}, y) - \phi(Z^{(M)}, y_k) \right] \left[ 1 - \langle w^{(out)}, \phi(Z^{(M)}, y) - \phi(Z^{(M)}, y_k) \rangle \right]_+ ∂w(out)∂F=2w(out)−2yk=y∑[ϕ(Z(M),y)−ϕ(Z(M),yk)][1−⟨w(out),ϕ(Z(M),y)−ϕ(Z(M),yk)⟩]+
∂ F ∂ w ( m ) = { α m { 2 w ( m ) − 2 ∑ y k ≠ y [ ϕ ( Z ( m ) , y ) − ϕ ( Z ( m ) , y k ) ] [ 1 − ⟨ w ( m ) , ϕ ( Z ( m ) , y ) − ϕ ( Z ( m ) , y k ) ⟩ ] + } , otherwise 0 , if ∥ w ( m ) ∥ 2 + ℓ ( W , w ( m ) ) ≤ γ \frac{\partial F}{\partial w^{(m)}} = \begin{cases} \alpha_m \left\{ 2 w^{(m)} - 2 \sum_{y_k \neq y} \left[ \phi(Z^{(m)}, y) - \phi(Z^{(m)}, y_k) \right] \left[ 1 - \langle w^{(m)}, \phi(Z^{(m)}, y) - \phi(Z^{(m)}, y_k) \rangle \right]_+ \right\}, & \text{otherwise} \\ 0, & \text{if} \ \| w^{(m)} \|^2 + \ell(W, w^{(m)}) \leq \gamma \end{cases} ∂w(m)∂F={αm{2w(m)−2∑yk=y[ϕ(Z(m),y)−ϕ(Z(m),yk)][1−⟨w(m),ϕ(Z(m),y)−ϕ(Z(m),yk)⟩]+},0,otherwiseif ∥w(m)∥2+ℓ(W,w(m))≤γ
W W W 的梯度遵循传统的CNN基础模型再加上来自隐藏层监督的梯度。
接下来,我们将进行更多讨论,并尝试直观理解我们的公式(公式 (3)。为了方便参考,我们将目标函数写成:
F ( W ) ≡ P ( W ) + Q ( W ) , (7) F(W) \equiv P(W) + Q(W), \tag{7} F(W)≡P(W)+Q(W),(7)
其中:
P ( W ) = ∥ w ( o u t ) ∥ 2 + L ( W , w ( o u t ) ) , Q ( W ) = ∑ m = 1 M − 1 α m ∥ w ( m ) ∥ 2 + ℓ ( W , w ( m ) ) − γ ∥ + . P(W) = \| w^{(out)} \|^2 + L(W, w^{(out)}), \quad Q(W) = \sum_{m=1}^{M-1} \alpha_m \| w^{(m)} \|^2 + \ell(W, w^{(m)}) - \gamma \|_+. P(W)=∥w(out)∥2+L(W,w(out)),Q(W)=m=1∑M−1αm∥w(m)∥2+ℓ(W,w(m))−γ∥+.
(就是简化为两部分,一部分是输出层的损失函数,另一部分是中间层的损失函数)
2.3 随机梯度下降场景
我们关注的是DSN在收敛性方面的优势,而不是对泛化方面的正则化。除了当前CNN的学习到的特征并不总是直观且具有区分性的问题之外,深度神经网络的训练难度也被讨论过[8, 22]。
从公式(1)和(2)可以看出,底层权重的变化通过各层的函数传播,导致梯度爆炸或梯度消失[22]。为了更好地训练深度神经网络,已经提出了各种技术和参数调优技巧,如预训练和dropout[11]。在这里,我们对我们提出的公式进行了一些较为宽松的分析,旨在理解其在有效性方面的优势。
深度神经网络中的目标函数是高度非凸的。在这里,我们做出以下假设/观察:(1)深度学习的目标/能量函数在“最优”解附近存在一个较大的“平坦”区域,在该区域内任何结果的性能都相似;(2)在局部范围内,我们仍然假设该函数是凸的(甚至是λ-强凸的),其优化通常通过随机梯度下降算法进行[3]。
λ-强凸的定义是标准的:一个函数 F ( W ) F(W) F(W) 是 λ-强凸的,如果对所有 W , W ′ ∈ W W, W' \in \mathcal{W} W,W′∈W 和任何在 W W W 处的梯度 g g g,都有:
F ( W ′ ) ≥ F ( W ) + ⟨ g , W ′ − W ⟩ + λ 2 ∥ W ′ − W ∥ 2 , (8) F(W') \geq F(W) + \langle g, W' - W \rangle + \frac{\lambda}{2} \| W' - W \|^2,\tag{8} F(W′)≥F(W)+⟨g,W′−W⟩+2λ∥W′−W∥2,(8)
并且随机梯度下降(SGD)在第t步中的更新规则为:
W t + 1 = Π W ( W t − η t g ^ ) , W_{t+1} = \Pi_{\mathcal{W}} (W_t - \eta_t \hat g ), Wt+1=ΠW(Wt−ηtg^),
其中 η t = Θ ( 1 / t ) \eta_t = \Theta(1/t) ηt=Θ(1/t) 表示步长, Π W \Pi_{\mathcal{W}} ΠW 有助于将更新投影到 W \mathcal{W} W 空间。设 W ∗ W^* W∗ 为最优解,强凸函数的上界为 E [ ∥ W T − W ∗ ∥ 2 ] E[\| W_T - W^* \|^2] E[∥WT−W∗∥2] 和 E [ ( F ( W T ) − F ( W ∗ ) ) 2 ] E[(F(W_T) - F(W^*))^2] E[(F(WT)−F(W∗))2] [23]。我们尝试理解公式(8)的收敛性,具体是 E [ ( F ( W T ) − F ( W ∗ ) ) 2 ] E[(F(W_T) - F(W^*))^2] E[(F(WT)−F(W∗))2],由于图1(b)中显示了大量的平坦区域,导致了函数的收敛性问题。在[21]中,给出了具有组合损失和正则化项的局部凸函数的收敛速率。
公式(8)中的两项即为伴随目标。我们的动机是双重的:(1)鼓励每一层学习到的特征能够直接用于类别标签预测,同时保持输出层的最终目标是最小化类别标签预测错误;(2)缓解梯度爆炸和消失的问题,进一步提高每一层的监督能力。一种可能的担忧是,学习高度区分的阶段性特征可能不一定会导致最好的预测,如图1(b)中所示。接下来,我们对我们的方法给出了松散的理论分析,并通过全面的实验研究证明其在现有方法上的压倒性优势。
定义 我们将 S γ ( F ) = { W : F ( W ) ≤ γ } S_{\gamma}(F) = \{ W : F(W) \leq \gamma \} Sγ(F)={W:F(W)≤γ} 称为函数 F ( W ) ≡ P ( W ) + Q ( W ) F(W) \equiv P(W) + Q(W) F(W)≡P(W)+Q(W) 的 γ \gamma γ-可行集。
首先,我们证明一个 Q ( W ) Q(W) Q(W) 的可行解会导致 P ( W ) P(W) P(W) 的可行解。即:
引理 1 对于 m , m ′ = 1.. M − 1 , m ′ > m m, m' = 1..M-1, \, m' > m m,m′=1..M−1,m′>m,如果 ∥ w ( m ) ∥ 2 + ℓ ( ( W ^ ( 1 ) , … , W ^ ( m ) ) , w ( m ) ) ≤ γ \| w^{(m)} \|^2 + \ell((\hat{W}^{(1)}, \dots, \hat{W}^{(m)}), w^{(m)}) \leq \gamma ∥w(m)∥2+ℓ((W^(1),…,W^(m)),w(m))≤γ,那么存在 ( W ^ ( 1 ) , … , W ^ ( m ) , … , W ^ ( m ′ ) ) (\hat{W}^{(1)}, \dots, \hat{W}^{(m)}, \dots, \hat{W}^{(m')}) (W^(1),…,W^(m),…,W^(m′)) 使得
∥ w ( m ′ ) ∥ 2 + ℓ ( ( W ^ ( 1 ) , … , W ^ ( m ) ) , W ^ ( m ′ ) ) ≤ γ . \| w^{(m')} \|^2 + \ell((\hat{W}^{(1)}, \dots, \hat{W}^{(m)}), \hat{W}^{(m')}) \leq \gamma. ∥w(m′)∥2+ℓ((W^(1),…,W^(m)),W^(m′))≤γ.
证明 如图(1a)所示,假设对于 ( W ^ ( 1 ) , … , W ^ ( m ) ) (\hat{W}^{(1)}, \dots, \hat{W}^{(m)}) (W^(1),…,W^(m)),有 ℓ ( ( W ^ ( 1 ) , … , W ^ ( m ) ) , w ( m ) ) ≤ γ \ell((\hat{W}^{(1)}, \dots, \hat{W}^{(m)}), w^{(m)}) \leq \gamma ℓ((W^(1),…,W^(m)),w(m))≤γ。那么,对于每一层 j > m j > m j>m,我们设 W ^ ( j ) = I \hat{W}(j) = I W^(j)=I 且 w ( j ) = w ( m ) w^{(j)} = w^{(m)} w(j)=w(m),这意味着滤波器将是单位矩阵。这导致了
ℓ ( ( W ^ ( 1 ) , … , W ^ ( m ) , W ^ ( m ′ ) ) , w ( m ′ ) ) ≤ γ . \ell((\hat{W}^{(1)}, \dots, \hat{W}^{(m)}, \hat{W}^{(m')}), w^{(m')}) \leq \gamma. ℓ((W^(1),…,W^(m),W^(m′)),w(m′))≤γ.
备注 引理1表明, Q ( W ) Q(W) Q(W) 的一个好的解也是 P ( W ) P(W) P(W) 的一个好的解,但反过来不一定成立。也就是说,一个使得 P ( W ) P(W) P(W) 较小的 W W W 不一定能够为隐藏层产生具有区分性的特征,从而使得 Q ( W ) Q(W) Q(W) 较小。然而, Q ( W ) Q(W) Q(W) 可以被视为正则化项。由于 P ( W ) P(W) P(W) 在训练数据上观察到一个接近零的非常平坦的区域,最终我们关心的是测试误差,因此我们仅关注 W W W 和 W ∗ W^* W∗,使得 Q ( W ) Q(W) Q(W) 和 P ( W ) P(W) P(W) 都很小。因此,假设 F ( W ) ≡ P ( W ) + Q ( W ) F(W) \equiv P(W) + Q(W) F(W)≡P(W)+Q(W) 和 P ( W ) P(W) P(W) 共享相同的最优解 W ∗ W^* W∗ 是合情合理的。
令 P ( W ) P(W) P(W) 和 P ( W ′ ) P(W') P(W′) 在 W ∗ W^* W∗ 附近强凸,满足 ∥ W ′ − W ∗ ∥ 2 ≤ D \| W' - W^* \|^2 \leq D ∥W′−W∗∥2≤D 和 ∥ W − W ∗ ∥ 2 ≤ D \| W - W^* \|^2 \leq D ∥W−W∗∥2≤D,且 P ( W ′ ) ≥ P ( W ) + ⟨ g p , W ′ − W ⟩ + λ 2 ∥ W ′ − W ∥ 2 P(W') \geq P(W) + \langle gp, W' - W \rangle + \frac{\lambda}{2} \| W' - W \|^2 P(W′)≥P(W)+⟨gp,W′−W⟩+2λ∥W′−W∥2 和 Q ( W ′ ) ≥ Q ( W ) + ⟨ g q , W ′ − W ⟩ Q(W') \geq Q(W) + \langle gq, W' - W \rangle Q(W′)≥Q(W)+⟨gq,W′−W⟩,其中 g p gp gp 和 g q gq gq 分别是 P P P 和 Q Q Q 在 W W W 处的次梯度。可以直接看到, F ( W ) F(W) F(W) 也是强凸的,并且对于 F ( W ) F(W) F(W) 在 W W W 处的次梯度 g f gf gf,有 g f = g p + g q gf = gp + gq gf=gp+gq。
引理 2 假设 E [ ∥ g ^ p ∥ 2 ] ≤ G 2 E[\| \hat{g}_p \|^2] \leq G^2 E[∥g^p∥2]≤G2 和 E [ ∥ g ^ q ∥ 2 ] ≤ G 2 E[\| \hat{g}_q \|^2] \leq G^2 E[∥g^q∥2]≤G2,并且我们使用更新规则 W t + 1 = Π W ( W t − η t ( g p t + g q t ) ) W_{t+1} = \Pi_{\mathcal{W}} (W_t - \eta_t (g_p t + g_q t)) Wt+1=ΠW(Wt−ηt(gpt+gqt)),其中 E [ g ^ p t ] = g p t E[\hat{g}_p t] = g_p t E[g^pt]=gpt 和 E [ g ^ q t ] = g q t E[\hat{g}_q t] = g_q t E[g^qt]=gqt,如果我们使用 η t = 1 / ( 1 + λ t ) \eta_t = 1/(1 + \lambda t) ηt=1/(1+λt),则在时间戳 T T T 时:
E [ ∥ W T − W ∗ ∥ 2 ] ≤ 12 G 2 ( λ 1 + λ 2 ) 2 T (9) E[\| W_T - W^* \|^2] \leq \frac{12G^2}{(\lambda_1 + \lambda_2)^2 T} \tag{9} E[∥WT−W∗∥2]≤(λ1+λ2)2T12G2(9)
证明 由于 F ( W ) = P ( W ) + Q ( W ) F(W) = P(W) + Q(W) F(W)=P(W)+Q(W),可以直接得出:
F ( W ′ ) ≥ F ( W ) + ⟨ g p , W ′ − W ⟩ + ⟨ g q , W ′ − W ⟩ + λ 1 + λ 2 2 ∥ W ′ − W ∥ 2 . F(W') \geq F(W) + \langle g_p, W' - W \rangle + \langle g_q, W' - W \rangle + \frac{\lambda_1 + \lambda_2}{2} \| W' - W \|^2. F(W′)≥F(W)+⟨gp,W′−W⟩+⟨gq,W′−W⟩+2λ1+λ2∥W′−W∥2.
根据[23]中的引理1,这个上界直接成立。
引理 3 在假设引理2的基础上,但现在我们假设 η t = 1 / t \eta_t = 1/t ηt=1/t,因为 λ 1 \lambda_1 λ1 和 λ 2 \lambda_2 λ2 并非总是可用的,那么从 ∥ W 1 − W ∗ ∥ 2 ≤ D \| W_1 - W^* \|^2 \leq D ∥W1−W∗∥2≤D 开始,收敛速率被界定为:
E [ ∥ W T − W ∗ ∥ 2 ] ≤ e − 2 λ ( ln ( T + 0.578 ) ) D + ( T − 1 ) e − 2 λ ( ln ( T − 1 ) ) G 2 (10) E[\| W_T - W^* \|^2] \leq e^{-2\lambda ( \ln(T + 0.578))} D + (T - 1) e^{-2\lambda (\ln(T-1))} G^2 \tag{10} E[∥WT−W∗∥2]≤e−2λ(ln(T+0.578))D+(T−1)e−2λ(ln(T−1))G2(10)
证明 设 λ = λ 1 + λ 2 \lambda = \lambda_1 + \lambda_2 λ=λ1+λ2,我们有:
F ( W ∗ ) − F ( W t ) ≥ ⟨ g f , W ∗ − W t ⟩ + λ 2 ∥ W ∗ − W t ∥ 2 , F(W^*) - F(W_t) \geq \langle g_f, W^* - W_t \rangle + \frac{\lambda}{2} \| W^* - W_t \|^2, F(W∗)−F(Wt)≥⟨gf,W∗−Wt⟩+2λ∥W∗−Wt∥2,
并且:
F ( W ∗ ) − F ( W t ) ≥ λ 2 ∥ W t − W ∗ ∥ 2 . F(W^*) - F(W_t) \geq \frac{\lambda}{2} \| W_t - W^* \|^2. F(W∗)−F(Wt)≥2λ∥Wt−W∗∥2.
因此,利用 η t = 1 / t \eta_t = 1/t ηt=1/t,
E [ ∥ W t + 1 − W ∗ ∥ 2 ] ≤ E [ ∥ W t − W ∗ ∥ 2 ] − 2 η t E [ ⟨ g f , W t − W ∗ ⟩ ] + G 2 / t 2 (11) E[\| W_{t+1} - W^* \|^2] \leq E[\| W_t - W^* \|^2] - 2\eta_t E[\langle g_f, W_t - W^* \rangle] + G^2 / t^2 \tag{11} E[∥Wt+1−W∗∥2]≤E[∥Wt−W∗∥2]−2ηtE[⟨gf,Wt−W∗⟩]+G2/t2(11)
当 2 λ / t 2\lambda/t 2λ/t 很小,我们有 1 − 2 λ / t ≈ e − 2 λ / t 1 - 2\lambda/t \approx e^{-2\lambda/t} 1−2λ/t≈e−2λ/t。
E [ ∥ W T − W ∗ ∥ 2 ] ≤ e − 2 λ ( 1 2 + 1 3 + ⋯ + 1 T ) D + G 2 ∑ t = 1 T − 1 G 2 t 2 e − 2 λ ( ln ( T − 1 ) − ln ( t ) ) E[\| W_T - W^* \|^2] \leq e^{-2\lambda (\frac{1}{2} + \frac{1}{3} + \dots + \frac{1}{T})} D + G^2 \sum_{t=1}^{T-1} \frac{G^2}{t^2} e^{-2\lambda(\ln(T-1) - \ln(t))} E[∥WT−W∗∥2]≤e−2λ(21+31+⋯+T1)D+G2t=1∑T−1t2G2e−2λ(ln(T−1)−ln(t))
定理 1 设 P ( W ) P(W) P(W) 为 λ 1 \lambda_1 λ1-强凸,且 Q ( W ) Q(W) Q(W) 为 λ 2 \lambda_2 λ2-强凸,关于最优解 W ∗ W^* W∗,并且令 W ( F ) W^{(F)} W(F) 和 W ( P ) W^{(P)} W(P) 分别为应用SGD后经过 T T T 次迭代得到的解,即求解 P ( W ) P(W) P(W) 和 Q ( W ) Q(W) Q(W) 的解。我们的深度监督框架公式(3)通过:
E [ ∥ W T ( P ) − W ∗ ∥ 2 ] E [ ∥ W T ( P ) − W ∗ ∥ 2 ] = Θ ( 1 + λ 1 2 λ 2 2 ) , \frac{E[\| W^{(P)}_T - W^* \|^2]}{E[\| W^{(P)}_T - W^* \|^2]} = \Theta \left( 1 + \frac{\lambda_1^2}{\lambda_2^2} \right), E[∥WT(P)−W∗∥2]E[∥WT(P)−W∗∥2]=Θ(1+λ22λ12),
当 η t = 1 / λ t \eta_t = 1/\lambda t ηt=1/λt,并且:
E [ ∥ W T ( P ) − W ∗ ∥ 2 ] E [ ∥ W T ( P ) − W ∗ ∥ 2 ] = Θ ( ( ln ( T ) ) λ 2 ) , \frac{E[\| W^{(P)}_T - W^* \|^2]}{E[\| W^{(P)}_T - W^* \|^2]} = \Theta \left( (\ln(T))\lambda_2 \right), E[∥WT(P)−W∗∥2]E[∥WT(P)−W∗∥2]=Θ((ln(T))λ2),
证明了在 t = 1 / t t = 1/t t=1/t 时, P ( W ) P(W) P(W) 和 Q ( W ) Q(W) Q(W) 在最优解上共享相同的最优解 W ∗ W^* W∗。
证明 引理1展示了伴随目标 Q Q Q 与输出目标 P P P 的兼容性。第一个方程可以直接从引理2推导出来,第二个方程可以从引理3中看到。一般情况下, λ 2 ≫ λ 1 \lambda_2 \gg \lambda_1 λ2≫λ1,这将大大提高收敛速度,并且每个隐藏层中的约束也有助于学习出直接具有区分性的滤波器。
3. 实验
我们在四个标准基准数据集上评估了提出的DSN方法:MNIST、CIFAR-10、CIFAR-100和SVHN。在所有实验中,我们遵循Krizhevsky等人[15]使用的常见训练协议。我们使用SGD求解器,mini批次(这里其实就是咱们常用的batchsize,具体解释可以看这个链接https://blog.csdn.net/weixin_45698935/article/details/106477624)大小为128,固定动量值为0.9。学习率和权重衰减因子的初始值是基于验证集确定的。为了公平比较并清晰地展示DSN的有效性,我们将我们的模型复杂度与[20]和[9]中使用的网络架构相匹配,以获得相当数量的参数。我们还引入了两个dropout层,dropout率为0.5。卷积层的伴随目标用于将分类误差引导反向传播到底层卷积层。在训练过程中,学习率按照基于验证集确定的周期安排,每训练一个周期衰减20倍。提出的DSN框架不难训练,并且没有采用特别的工程技巧。我们的系统建立在广泛使用的Caffe基础设施[14]之上。对于网络架构设置,我们采用了[20]中介绍的mlpconv层和全局平均池化方案。DSN可以配备不同类型的损失函数,如Softmax和SVM。我们展示了DSN-SVM和DSN-Softmax相对于CNN-SVM和CNN-Softmax的性能提升(见图2.a)。在小训练数据的情况下,性能提升更加明显(见图2.b);这可能部分缓解了深度学习需要大量训练数据的负担。总体而言,我们在所有四个数据集上观察到最先进的分类错误率(没有数据增强),MNIST为0.39%,CIFAR-10为9.78%,CIFAR-100为34.57%,SVHN为1.92%(CIFAR-10数据增强后的结果为8.22%)。所有结果均未使用平均[24],该方法并非我们独有。图3展示了部分学习到的特征。
3.1 MNIST
我们首先验证了提出的DSN在MNIST手写数字分类任务[17]上的有效性,这是一个在机器学习中广泛采用的基准数据集。MNIST数据集由10个不同类别(0到9)的28 × 28大小的图像组成,包含60,000个训练样本和10,000个测试样本。图2(a)和(b)展示了四种方法的结果,分别是:(1)传统的CNN与softmax损失(CNN-Softmax),(2)提出的DSN与softmax损失(DSN-Softmax),(3)CNN与最大边际目标(CNN-SVM),以及(4)提出的DSN与最大边际目标(DSN-SVM)。DSN-Softmax和DSN-SVM优于它们的竞争CNN算法(在没有数据白化和增强的单个模型下,DSN-SVM的分类错误率为0.39%)。图2(b)展示了当训练样本大小变化时,竞争方法的分类错误率(在500个样本时,DSN-SVM比CNN-Softmax提高了26%的准确率)。图2( c )展示了CNN和DSN之间的泛化误差比较。
3.2CIFAR-10 和CIFAR-100
CIFAR-10数据集由32 × 32彩色图像组成,共有60,000张图像,分为50,000张训练图像和10,000张测试图像。数据集经过全局对比度归一化预处理。为了与之前的最先进结果进行比较,在此情况下,我们还通过在每一边零填充4个像素,然后在训练过程中进行角裁剪和随机翻转来增强数据。在测试阶段没有进行模型平均,我们仅对测试样本的中心进行裁剪。表2展示了我们的结果。我们的DSN模型在没有数据增强的情况下达到了9.78%的错误率,在进行了数据增强后达到了8.22%(这是我们所知的最佳已知结果)。
DSN还提供了对超参数选择的额外鲁棒性,因为早期层通过直接分类损失进行引导,从而加快了收敛速度,减轻了对重度超参数调优的负担。我们还比较了DSN和CNN中的梯度,观察到在第一个卷积层中,DSN的梯度方差是CNN的4.55倍。这与[9]中的观察一致,也与我们在本工作中做出的假设和动机相符。为了查看DSN与CNN学到的特征,我们从CIFAR-10数据集的每个十个类别中选择一张示例图像,进行一次前向传播,并展示从第一层(底部)卷积层学习到的特征图,见图3。每个特征图中只显示了前30%的激活值。DSN学习到的特征图比CNN学习到的特征图更直观。
CIFAR-100数据集与CIFAR-10数据集类似,不同之处在于它有100个类别。每个类别的图像数量是500张,而不是CIFAR-10中的5,000张,这使得分类任务更加具有挑战性。我们使用与CIFAR-10相同的网络设置。表2展示了之前的最佳结果,DSN报告的结果为34.57%。在CIFAR-10和CIFAR-100上持续显示的性能提升再次证明了DSN方法的优势。
3.3 街景门牌号
Street View House Numbers (SVHN) 数据集包含73,257个用于训练的数字,26,032个用于测试的数字,以及53,113个额外的训练样本,图像尺寸为32 × 32的彩色图像。我们按照之前的工作进行数据准备,即:从训练集中选择每个类别400个样本,从额外集选择每个类别200个样本。其余的598,388张图像用于训练。我们按照[9]的处理方法,通过局部对比度归一化(LCN)对数据集进行了预处理。在训练中我们没有进行数据增强,并且在测试中只使用单个模型。表3展示了最近的可比结果。请注意,Dropconnect[19]使用了数据增强和多模型投票。
4. 结论
在本文中,我们提出了一个新的公式,深度监督网络(DSN),试图为深度学习创造一个更透明的学习过程。与现有方法相比,获得了明显的性能增强。随机梯度的观点也有助于理解我们的公式。
相关文章:
[论文阅读]Deeply-Supervised Nets
摘要 我们提出的深度监督网络(DSN)方法在最小化分类误差的同时,使隐藏层的学习过程更加直接和透明。我们尝试通过研究深度网络中的新公式来提升分类性能。我们关注卷积神经网络(CNN)架构中的三个方面:&…...
使用零样本LLM在现实世界环境中推广端到端自动驾驶——论文阅读
《Generalizing End-To-End Autonomous Driving In Real-World Environments Using Zero-Shot LLMs》2024年12月发表,来自纽约stony brook大学、UIC和桑瑞思(数字化医疗科技公司)的论文。 传统的自动驾驶方法采用模块化设计,将任务…...
多视图密集对应学习:细粒度3D分割的自监督革命
原文标题:Multi-view Dense Correspondence Learning (MvDeCor) 引言 在计算机视觉与图形学领域,3D形状分割一直是一个基础且具有挑战性的任务。如何在标注稀缺的情况下,实现对3D模型的细粒度分割?近期,斯坦福大学视觉…...
【论文阅读】——Articulate AnyMesh: Open-Vocabulary 3D Articulated Objects Modeling
文章目录 摘要一、介绍二、相关工作2.1. 铰接对象建模2.2. 部件感知3D生成 三、方法3.1. 概述3.2. 通过VLM助手进行可移动部件分割3.3. 通过几何感知视觉提示的发音估计3.4. 通过随机关节状态进行细化 四、实验4.1. 定量实验发音估计设置: 4.2. 应用程序 五、结论六、思考 摘要…...
Docker Compose 的详细使用总结、常用命令及配置示例
以下是 Docker Compose 的详细使用总结、常用命令及配置示例,帮助您快速掌握这一容器编排工具。 一、Docker Compose 核心概念 定位:用于定义和管理多容器 Docker 应用,通过 YAML 文件配置服务、网络、卷等资源。核心概念: 服务 …...
2025.05.08-得物春招研发岗-第三题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 矩阵魔法变换 问题描述 A先生是一位著名的魔法师,他最近发明了一种特殊的矩阵魔法。这种魔法可以同时改变矩阵中特定区域内所有元素的值。 A先生有一个 n m n \times m...
【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析
【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析 前沿:本地化 AI 推理的新范式 随着大语言模型(LLM)应用的普及,本地化部署与灵活扩展成为企业级 AI 开发的核心需求。Do…...
【数据机构】2. 线性表之“顺序表”
- 第 96 篇 - Date: 2025 - 05 - 09 Author: 郑龙浩/仟墨 【数据结构 2】 文章目录 数据结构 - 2 -线性表之“顺序表”1 基本概念2 顺序表(一般为数组)① 基本介绍② 分类 (静态与动态)③ 动态顺序表的实现**test.c文件:****SeqList.h文件:****SeqList.c文件:** 数据结构 - 2 …...
Django ORM: values() 和 annotate() 方法详解
1. values()方法 1.1 基本概念 values()方法用于返回一个包含字典的QuerySet,而不是模型实例。每个字典表示一个对象,键对应于模型字段名称。 1.2 基本用法 # 获取所有书籍的标题和出版日期 from myapp.models import Bookbooks Book.objects.value…...
数据结构篇-二叉树
抽象定义CFG文法具体表示基本操作性质 抽象定义 二叉树是一个抽象的数学概念。它的定义是递归的 一棵二叉树可以是一个外部节点,一棵二叉树可以是内部节点,连接到一对二叉树,分别是它的左子树,和右子树。 这个抽象定义描述了二…...
前端面试每日三题 - Day 29
这是我为准备前端/全栈开发工程师面试整理的第29天每日三题练习: ✅ 题目1:Web Components技术全景解析 核心三要素 Custom Elements(自定义元素) class MyButton extends HTMLElement {constructor() {super();this.attachShado…...
Java设计模式之抽象工厂模式:从入门到精通
一、抽象工厂模式概述 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 1.1 专业定义 抽象工厂模式定义了一个工厂接口,用于创建一系列相关或依赖的对象,客户端通过调用抽象工…...
Rust中记录日志:fast_log
在Rust程序中记录日志,可以使用fast_log。 根据fast_log 的介绍,这是一个性能非常高的日志实现,还支持文件追加模式、压缩、切分与回滚等操作。 而且,这个库记录日志是异步的,即不会因为日志而影响程序的运行。只有当…...
构筑芯片行业的“安全硅甲”
在半导体行业,数据就是生命线。一份芯片设计图纸的泄露,可能让企业数亿研发投入付诸东流;一段核心代码的外传,甚至可能影响国家产业安全。然而,现实情况却是——许多芯片企业的数据防护,仍处于“裸奔”状态…...
C++ Dll创建与调用 查看dll函数 MFC 单对话框应用程序(EXE 工程)改为 DLL 工程
C Dll创建 一、添加 DllMain(必要) #include <fstream>void Log(const char* msg) {std::ofstream f("C:\\temp\\dll_log.txt", std::ios::app);f << msg << std::endl; }BOOL APIENTRY DllMain(HMODULE hModule, DWORD u…...
使用智能表格做FMEDA
一、优点 使用智能表格替代excel做FMEDA具备以下优势: 减少维护成本(数据库关联,修改方便)便于持续优化(失效率分布,失效率模型可重复使用)多人同步编写(同时操作,同步…...
电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档
电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档 概述 本脚本real_data_model.m基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》(鲍志远,胡泽春)实现了电动汽车充电设施的负荷预测和可调能力评估。使用混合模型(LSTM神经网络线…...
Tomcat 日志体系深度解析:从访问日志配置到错误日志分析的全链路指南
一、Tomcat 核心日志文件架构与核心功能 1. 三大基础日志文件对比(权威定义) 日志文件数据来源核心功能典型场景catalina.out标准输出 / 错误重定向包含 Tomcat 引擎日志与应用控制台输出(System.out/System.err)排查 Tomcat 启…...
MSF 生成不同的木马 msfvenom 框架命令
目录 什么是 msfvenom? 一、针对 Windows 的木马生成命令 1. EXE 格式(经典可执行文件) 2. VBS 脚本(Visual Basic Script) 3. PowerShell 脚本 4. DLL 文件(动态链接库) 5. Python 脚本…...
Linux云计算训练营笔记day05(Rocky Linux中的命令:管道操作 |、wc、find、vim)
管道操作 | 作用: 将前面命令的输出,传递给后面命令,作为后面命令的参数 head -3 /etc/passwd | tail -1 取第三行 head -8 /etc/passwd | tail -3 | cat -n 取6 7 8行 ifconfig | head -2 | tail -1 只查看IP地址 ifconfig | grep 192 过滤192的ip…...
【相机标定】OpenCV 相机标定中的重投影误差与角点三维坐标计算详解
摘要: 本文将从以下几个方面展开,结合典型代码深入解析 OpenCV 中的相机标定过程,重点阐述重投影误差的计算方法与实际意义,并通过一个 calcBoardCornerPositions() 函数详细讲解棋盘格角点三维坐标的构建逻辑。 在计算机视觉领域…...
传统销售VS智能销售:AI如何重构商业变现逻辑
如今最会赚钱的企业早就不靠堆人力了,他们都在悄悄用AI做商业变现。当普通销售还在手动记录客户信息时,AI销售系统已经能实时追踪客户在商品页的停留时长,甚至精确到秒。 传统客服人员还在机械地复制粘贴标准话术,AI销售却已经能根…...
从设计到开发,原型标注图全流程标准化
一、原型标注图是什么? 原型标注图(Annotated Prototype)是设计原型(Prototype)的详细说明书,通过图文结合的方式,将设计稿中的视觉样式、交互逻辑、适配规则等技术细节转化为开发可理解的标准…...
Mac QT水平布局和垂直布局
首先上代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QPushButton> #include<QVBoxLayout>//垂直布局 #include<QHBoxLayout>//水平布局头文件 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …...
部署Superset BI(四)连接sql server数据库
sqlserver没有出现在Superset的连接可选菜单上,这一点让我奇怪。既然没有那就按着HANA的配置方式,照猫画虎。更奇怪的是安装好还不能出现,难道superset和微软有仇? --修改配置文件 rootNocobase:/usr/superset/superset# cd docke…...
Python爬虫(22)Python爬虫进阶:Scrapy框架动态页面爬取与高效数据管道设计
目录 一、背景:Scrapy在现代爬虫中的核心价值二、Scrapy项目快速搭建1. 环境准备与项目初始化2. 项目结构解析 三、动态页面处理:集成Splash与中间件1. 配置Splash渲染服务(Docker部署)2. 修改settings.py启用中间件3. 在Spider中…...
全球实物文件粉碎服务市场洞察:合规驱动下的安全经济与绿色转型
一、引言:从纸质堆叠到数据安全的“最后一公里” 在数字化转型浪潮中,全球企业每年仍产生超过1.2万亿页纸质文件,其中包含大量机密数据、客户隐私及商业敏感信息。据QYResearch预测,2031年全球实物文件粉碎服务市场规模将达290.4…...
使用Python 打造多格式文件预览工具 — 图、PDF、Word、Excel 一站式查看
在日常办公或文件管理场景中,我们经常面临这样的问题:在一个文件夹中短时间内产生了大量不同类型的文件(如图片、PDF、Word、Excel),我们需要快速浏览和筛选这些文件的内容,却不希望一个个打开它们。有没有…...
Microsoft 365 Copilot:为Teams在线会议带来多语言语音交流新体验
随着AI技术的飞速发展,Microsoft 365 Copilot将大型语言模型(LLM)与业务数据深度融合,为用户带来了前所未有的办公体验。在Teams在线会议中,Copilot不仅能够作为智能助手提升会议效率,还能通过实时辅助同声…...
c++:双向链表容器(std::list)
目录 🧱 一、什么是 std::list? ⚙️ 二、底层结构图解 🧪 三、list 的常见操作 📦 四、完整示例代码 📌 五、特点总结对比 🛠 六、特殊函数 📚 七、list 迭代器操作 ⚠️ 八、使用场景…...
jenkins 启动报错
java.lang.UnsatisfiedLinkError: /opt/application/jdk-17.0.11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory。 解决方案: yum install freetype-devel 安装完成之后重启jenkins。...
输入顶点坐标输出立方体长宽高的神经网络
写一个神经网络,我输入立方体投影线段的三视图坐标,输出分类和长宽高 import torch from torch import nn import torch.nn.functional as F# 假设每个视图有8个顶点,每个顶点有2个坐标值,因此每种视图有16个输入特征 input_dim…...
Layui表格行点击事件监听
在 Layui 中,如果想监听表格行的点击事件,可以通过以下步骤实现: 初始化表格:首先确保你已经使用 Layui 的 table.render 方法成功渲染了你的表格。绑定行点击事件:Layui 并没有直接提供针对表格行点击的事件监听器…...
2025数维杯数学建模竞赛B题完整参考论文(共38页)(含模型、代码、数据)
2025数维杯数学建模竞赛B题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、定义与符号说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2…...
TCP套接字通信核心要点
TCP套接字通信核心要点 通信模型架构 客户端-服务端模型 CS架构:客户端发起请求,服务端响应和处理请求双向通道:建立连接后实现全双工通信 服务端搭建流程 核心步骤 创建套接字 int server socket(AF_INET, SOCK_STREAM, 0); 参数说明&am…...
Android屏蔽通话功能和短信功能
需求开发中,有个要求屏蔽电话功能和短信功能,禁止应用打电话或短信,禁止api开发出的应用打电话或短信。这个约束怎么做呢? framework/base/core/res/res/values/config.xml.....<!-- Flag indicating whether the current devi…...
STM32TIM定时中断(6)
一、TIM介绍 1、TIM简介 TIM(Timer)定时器 定时器的基本功能:定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。 即定时触发中断,同时也可以看出,定时器就是一个计数器,当…...
hz2新建Keyword页面
新建一个single-keywords.php即可,需要筛选项再建taxonomy-knowledge-category.php 参考:https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF创建了自定义产品分类products,现在想实现自定义产品分类下的…...
STL?vector!!!
一、前言 之前我们借助手撕string加深了类和对象相关知识,今天我们将一起手撕一个vector,继续深化类和对象、动态内存管理、模板的相关知识 二、vector相关的前置知识 1、什么是vector? vector是一个STL库中提供的类模板,它是存储…...
Android SDK
Windows纯净卸载Android SDK 1.关闭所有安卓相关的程序 Android StudioEmulators 如模拟器Command prompts using SDK 如appium服务 2.移除SDK相关目录 # Delete your SDK directory F:\android_sdk\android-sdk-windows# Also check and remove if present: $env:LOCALAPP…...
老旧 LabVIEW 系统升级改造
在工业自动化领域,LabVIEW 凭借其直观的图形化编程方式和强大的数据处理能力,成为开发测试测量与控制系统的主流平台。然而,随着技术的快速迭代和业务需求的不断变化,许多早期开发的 LabVIEW 系统逐渐暴露出性能不足、功能缺失或兼…...
【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径
【IDEA_Maven】永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径 问题解决 问题 Maven使用在线导入,在网络不佳时,往往加载很慢。十分浪费时间,所以我们需要在maven官网找到合适版本的maven,将其压缩包下载下来…...
VSCode远程无法选择虚拟环境问题
1. 无法选择虚拟环境 1.先保证扩展安装正确, 安装python,pylance和intelliCode 2. 直接在设置(ctrl shift p)里面搜索,点击“Python:Select Interpreter”选项 3. 可能有人会出现第三步的问题,参考链接…...
七、Hadoop 历史追踪、数据安全阀与 MapReduce初体验
Hadoop 实战拾遗:作业历史追踪、数据安全阀与 MapReduce 巧算 π 一、追溯作业足迹:JobHistory Server 的配置与使用 Hadoop 集群高效运行的背后,离不开对已完成作业的细致分析。JobHistory Server (JHS) 就像是作业的“黑匣子”࿰…...
【MySQL】联合查询
个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 一、什么是联合查询 1.概念 2.语法要求 3.示例 4.为什么要使用联合查询 内连接 1.概念 2.语法 3.步骤: 外连接 1.概念 2.分类: 左外连…...
Java 原生实现代码沙箱(OJ判题系统第1期)——设计思路、实现步骤、代码实现
设计思路: 1、保存代码文件 ✅ 目的: 将用户提交的源码以字符串形式写入磁盘,生成 .java 文件。 📌 原因: Java 是静态语言,必须先编译成 .class 文件才能运行。 需要物理文件路径来调用 javac 或使用 Java…...
课程设计。。。。
人脸考勤系统 需求分析 需求 1.实现企业日常人脸打卡需求 2.管理员要可以管理相关数据 3.可以移植到相关嵌入式设备 …..需求主要是这些,还可以让ai拓展一点 实现 1.介于可移植性这个需求,选用Qt框架,Qt框架跨平台性特比好࿰…...
gitlab相关面试题及答案
一、GitLab 基础 1. 什么是 GitLab?它与 GitHub 有什么区别? 答案: GitLab 是一个开源的 DevOps 平台,提供代码托管、CI/CD、问题跟踪等功能。与 GitHub 的主要区别: 开源与商业:GitLab 社区版开源&#x…...
『不废话』之Python 3.14 Beta版新特性
Python 3.14 的第一个Beta版已发布,有几个新特性可以提高我们的编码效率。 未来注释 在上一篇《『不废话』之Python高级特性技巧-CSDN博客》中提到3.7中新增了 “未来注释”,可以使用“from __future__ import annotations”或双引号包括的方式解决当类…...
AWS之数据分析类产品
以下是 Amazon Athena、Amazon QuickSight、AWS Lake Formation、AWS Glue、Amazon OpenSearch Service(原 Elasticsearch Service)、Amazon Kinesis Data Analytics 和 Amazon Redshift 的核心区别及典型使用场景的对比分析: 1. Amazon Athe…...