【论文笔记】Layer-Wise Weight Decay for Deep Neural Networks

news2024/11/23 22:30:03

Abstract

本文为了提高深度神经网络的训练效率,提出了逐层权重衰减(layer-wise weight decay)。
本文方法通过逐层设置权重衰减稀疏的不同值,使反向传播梯度的尺度与权重衰减的尺度之比在整个网络中保持恒定。这种设置可以避免过拟合或欠拟合,适当地训练所有层,无需逐层调整系数。
该方法可在不改变网络模型的情况下提升现有DNN的性能。

1 Introduction

很多机器学习研究中,主要通过正则化避免过拟合。在深度学习中,通常使用三种正则化:dropout、数据增强、权重衰减。

本文提出的方法中,不需要任何试错过程就可以设置权重衰减系数,将其公式化,使其在训练时以相同的速率对网络的所有层进行正则化。

权重衰减正则化通过将其加入目标函数来降低网络中连接权重的 L 2 L_2 L2范数。加之前将范数乘以一个事先设定的系数。在正确训练网络时,调整这个系数是很重要的,因为一个很小的系数会导致过拟合,而一个很大的系数会导致欠拟合。 直觉上对所有曾进行同等对待是合理的,同时避免了手动调整每个系数所需的巨大计算成本。但这忽略了反向传播梯度和权重衰减之间的关系。
典型训练方法中,网络通过梯度和权重衰减两个方面进行更新,如图1所示。
![[Pasted image 20240517234356.png]]

图1:采用常数权重衰减系数的问题。反向传播梯度的尺度取决于上层权重的尺度,而权重衰减的尺度只取决于自身权重的尺度。因此,对于每一层,两者的比例是不同的,这导致了过拟合或欠拟合取决于层。

重点关注蓝色折线表示的第一个可训练层的更新,正如红色折线所示,由于反向传播,梯度的尺度取决于上层权重的尺度。相反,权重衰减的尺度仅取决于自身权重的尺度,如图中的蓝色折线所示。这两者之间的比例对于每一层来说都是不同的,这就导致了在某些层上的过拟合或者在另一些层上的欠拟合。因此,需要平衡梯度和权重衰减的尺度。

本文提出了逐层的权重衰减来有效地训练深度神经网络。该方法通过逐层设置不同的权重衰减系数的值,使得反向传播梯度的尺度和权重衰减的尺度在网络中的比例是恒定的。通过这种设置,可以对所有层进行适当的训练,而不必逐层调整系数。

2 Proposed Method

2.1 Overview

SGD梯度更新方法中,网络中的连接权重通过下式更新:
W l t + 1 = W l t − η ( ∂ E ∂ W l ∣ W l t + λ W l t ) (1) W_l^{t+1}=W_l^t-\eta(\frac{\partial E}{\partial W_l}|_{W_l^t}+\lambda W_l^t)\tag{1} Wlt+1=Wltη(WlEWlt+λWlt)(1)
其中 W l t W_l^t Wlt表示 t t t次更新后第 l l l层的连接权重, η \eta η是学习率, E E E是训练时用于最小化的目标函数, λ \lambda λ时权重衰减系数(正则化强度)。 W l t W_l^t Wlt用于第 l l l层的前向传播和反向传播,如图2所示。
![[Pasted image 20240518122313.png]]

图2:第 l l l层的前向传播和反向传播

Eq.1中的更新包含一个梯度项 ∂ E ∂ W l \frac{\partial E}{\partial W_l} WlE,一个正则化项 λ W l t \lambda W_l^t λWlt。梯度通过反向传播计算,其规模取决于 W k t ( k > l ) W_k^t(k>l) Wkt(k>l)的规模。相对地,权重衰减的规模只取决于 W l t W_l^t Wlt。因此,对于每一层,梯度的尺度和权重衰减的规模比例是不同的。如果对所有层都使用相同的 λ \lambda λ,对一些特定曾来说,衰减可能会过强或过弱,导致网络的过拟合或欠拟合。
为避免这个问题,利用逐层权重衰减,梯度的尺度和权重衰减的尺度之间的比值在整个网络中应当是恒定的:
W l t + 1 = W l t − η ( ∂ E ∂ W l ∣ W l t + λ l W l t ) (2) W_l^{t+1}=W_l^t-\eta(\frac{\partial E}{\partial W_l}|_{W_l^t}+\lambda_lW_l^t)\tag{2} Wlt+1=Wltη(WlEWlt+λlWlt)(2)
λ l = scale ( ∂ E ∂ W l ) scale ( W l ) λ (3) \lambda_l=\frac{\text{scale}(\frac{\partial E}{\partial W_l})}{\text{scale}(W_l)}\lambda\tag{3} λl=scale(Wl)scale(WlE)λ(3)
其中 λ l   ( l = 1 , ⋯   , L ) \lambda_l\ (l=1,\cdots,L) λl (l=1,,L)是逐层的权重衰减系数, scale ( ∗ ) \text{scale}(*) scale()代表计算向量或矩阵的规模的函数。除了逐层设置权重衰减以外,本文方法和现有方法的训练网络方法相同。

2.2 Data-Dependent Layer-Wise Weight Decay

训练过程中,每次更新里, λ l \lambda_l λl通过Eq.3计算。定义 scale ( W ) = ave ( ∣ W ∣ ) \text{scale}(W)=\text{ave}(|W|) scale(W)=ave(W),其中 ave ( ∗ ) \text{ave}(*) ave()计算 ∗ * 的平均值。系数过于可变会影响优化性能,因此为了缓解这个问题,将 λ l \lambda_l λl的上下界设置为
λ l = max ⁡ ( ρ m i n , min ⁡ ( ρ m a x , scale ( ∂ E ∂ W l ) scale ( W l ) ) ) λ (4) \lambda_l=\max(\rho_{min},\min(\rho_{max},\frac{\text{scale}(\frac{\partial E}{\partial W_l})}{\text{scale}(W_l)}))\lambda\tag{4} λl=max(ρmin,min(ρmax,scale(Wl)scale(WlE)))λ(4)
其中 ρ m a x λ \rho_{max}\lambda ρmaxλ ρ m i n λ \rho_{min}\lambda ρminλ λ l \lambda_l λl的上下界。实验中设置 ρ m a x = 1 , ρ m i n = 1 0 − 4 \rho_{max}=1, \rho_{min}=10^{-4} ρmax=1,ρmin=104,提升训练过程20%的计算开销。

2.3 Data-Independent Layer-Wise Weight Decay

初始化网络时, W W W通常设置为零平均值随机数,因此可以自然地定义 scale ( W ) = std ( W ) \text{scale}(W)=\text{std}(W) scale(W)=std(W),其中 std ( ∗ ) \text{std}(*) std()表示元素的标准差。将其带入Eq.3,可以得到:
λ l = std ( ∂ E ∂ W l ) std ( W l ) λ (5) \lambda_l=\frac{\text{std}(\frac{\partial E}{\partial W_l})}{\text{std}(W_l)}\lambda\tag{5} λl=std(Wl)std(WlE)λ(5)
为了计算Eq.5中的 λ l \lambda_l λl,需要估计原始网络中的 std ( ∂ E ∂ W l ) \text{std}(\frac{\partial E}{\partial W_l}) std(WlE) std ( W l ) \text{std}(W_l) std(Wl) std ( W l ) \text{std}(W_l) std(Wl)可在模型参数初始化时决定,容易获得。为了简化描述,将 ∂ E ∂ ∗ \frac{\partial E}{\partial *} E记作 Δ ∗ \Delta * Δ

如图2所示,令 x l x_l xl y l y_l yl表示第 l l l层的输入和输出,应有 x l + 1 = y l x_{l+1}=y_l xl+1=yl
前向传播、反向传播可以写作:
y l = W l x l (6) y_l=W_lx_l\tag{6} yl=Wlxl(6)
Δ x l = W l T Δ y l (7) \Delta x_l=W_l^T\Delta y_l\tag{7} Δxl=WlTΔyl(7)
Δ W l = x l T Δ y l (8) \Delta W_l=x_l^T\Delta y_l\tag{8} ΔWl=xlTΔyl(8)
根据反向传播可以得到:
var ( Δ W l ) = var ( x l T Δ y l ) = var ( x l ) var ( Δ y l ) (9) \text{var}(\Delta W_l)=\text{var}(x_l^T\Delta y_l)=\text{var}(x_l)\text{var}(\Delta y_l)\tag{9} var(ΔWl)=var(xlTΔyl)=var(xl)var(Δyl)(9)
其中 var ( ∗ ) \text{var}(*) var()是计算一个矩阵或向量的所有元素的方差的函数。这里假设 x l x_l xl Δ y l \Delta y_l Δyl是相互独立的,且均值为0。
最近的初始化方法通过网络将 var ( x l ) \text{var}(x_l) var(xl)变为一个常数,因此这里将 var ( x l ) \text{var}(x_l) var(xl)视作一个常数值。相反, var ( Δ y l ) \text{var}(\Delta y_l) var(Δyl)可以计算为
var ( Δ y l ) = var ( Δ x l + 1 ) = M l + 1 var ( W l + 1 ) var ( Δ y l + 1 ) = β l + 1 var ( Δ y l + 1 ) ,  where  β k = m k var ( W k ) \begin{align} \text{var}(\Delta y_l)=\text{var}(\Delta x_{l+1})&=M_{l+1}\text{var}(W_{l+1})\text{var}(\Delta y_{l+1}) \\ &=\beta_{l+1}\text{var}(\Delta y_{l+1}), \ \text{where}\ \beta_k=m_k\text{var}(W_k)\tag{10} \end{align} var(Δyl)=var(Δxl+1)=Ml+1var(Wl+1)var(Δyl+1)=βl+1var(Δyl+1), where βk=mkvar(Wk)(10)
其中 M k M_k Mk是第 k k k层的输入和所有输出的连接数, β k \beta_k βk表示连续连续两层的反向传播梯度的方差之间的比率。迭代地计算Eq.10,可以得到:
KaTeX parse error: Can't use function '$' in math mode at position 2: $̲\text{var}(\Del…
将Eq.11代入Eq.9, var ( Δ W l ) \text{var}(\Delta W_l) var(ΔWl)可以变为:
var ( Δ W l ) = var ( x l ) ⋅ γ l var ( Δ y L ) = C ⋅ γ l (13) \text{var}(\Delta W_l)=\text{var}(x_l)\cdot \gamma_l\text{var}(\Delta y_L)=C\cdot\gamma_l\tag{13} var(ΔWl)=var(xl)γlvar(ΔyL)=Cγl(13)
其中 C C C等价于 var ( x l ) var ( Δ y L ) \text{var}(x_l)\text{var}(\Delta y_L) var(xl)var(ΔyL),可以被视为一个常量,因为本文认为 var ( x l ) \text{var}(x_l) var(xl)是个常量。将Eq.13代入Eq.5,可以获得:
λ l = std ( Δ W l ) std ( W l ) λ = var ( Δ W l ) var ( W l ) λ = C ⋅ γ l var ( W l ) λ (14) \lambda_l=\frac{\text{std}(\Delta W_l)}{\text{std}(W_l)}\lambda=\sqrt{\frac{\text{var}(\Delta W_l)}{\text{var}(W_l)}}\lambda=\sqrt{\frac{C\cdot\gamma_l}{\text{var}(W_l)}}\lambda\tag{14} λl=std(Wl)std(ΔWl)λ=var(Wl)var(ΔWl) λ=var(Wl)Cγl λ(14)
由于上述方程含有两个常数值 C C C γ l \gamma_l γl,利用 λ L \lambda_L λL作为权重衰减的基系数对方程进行变形:
λ l = λ L ⋅ λ l λ L = λ L ⋅ C ⋅ γ l var ( W l ) λ C ⋅ γ L var ( W l ) λ = λ L var ( W L ) var ( W l ) γ l (15) \lambda_l=\lambda_L\cdot\frac{\lambda_l}{\lambda_L}=\lambda_L\cdot\frac{\sqrt{\frac{C\cdot\gamma_l}{\text{var}(W_l)}}\lambda}{\sqrt{\frac{C\cdot\gamma_L}{\text{var}(W_l)}}\lambda}=\lambda_L\sqrt{\frac{\text{var}(W_L)}{\text{var}(W_l)}\gamma_l}\tag{15} λl=λLλLλl=λLvar(Wl)CγL λvar(Wl)Cγl λ=λLvar(Wl)var(WL)γl (15)
使用Eq.15,便可以在不训练数据时为网络的每一层计算 λ l \lambda_l λl,因为我们认为 var ( x l ) \text{var}(x_l) var(xl)是,并通过估计 λ l \lambda_l λl λ L \lambda_L λL的比例来从Eq.14估计 λ l \lambda_l λl。网络的正则化强度可以通过设置 λ L \lambda_L λL来调节。

2.4 Effects of Drop-Out

本节展示drop-out并不会影响Eq.15的逐层权重衰减。由于显然drop-out显然不会影响逐层权重衰减,因此关注梯度的规模,即Eq.9中的 var ( x l ) \text{var}(x_l) var(xl) var ( Δ y l ) \text{var}(\Delta y_l) var(Δyl)。假设第 l l l层的隐藏层结点被drop-out的概率是 p p p var ( Δ y ) \text{var}(\Delta y) var(Δy)可以改写为:
var ( Δ y l ) = ( 1 − p ) M l + 1 var ( W l + 1 ) var ( Δ y l + 1 ∗ ) (16) \text{var}(\Delta y_l)=(1-p)M_{l+1}\text{var}(W_{l+1})\text{var}(\Delta y_{l+1}^*)\tag{16} var(Δyl)=(1p)Ml+1var(Wl+1)var(Δyl+1)(16)
其中, y l ∗ y_l^* yl表示带有drop-out的第 l l l层输出结果。由于被drop-out的神经元会被视为0,且保留的隐藏层神经元会被 × 1 / ( 1 − p ) \times 1/(1-p) ×1/(1p),因此可以将 var ( Δ y l + 1 ∗ ) \text{var}(\Delta y_{l+1}^*) var(Δyl+1)变形为:
var ( Δ y l + 1 ∗ ) = ave ( ( Δ y l + 1 ∗ ) 2 ) = ( 1 − p ) ⋅ ave ( ( 1 1 − p Δ y l + 1 ) 2 ) + p ⋅ ave ( 0 2 ) = 1 1 − p ( ( Δ y l + 1 ) 2 ) = 1 1 − p var ( Δ y l + 1 ) \begin{align} \text{var}(\Delta y_{l+1}^*)&=\text{ave}((\Delta y_{l+1}^*)^2)\\ &=(1-p)\cdot\text{ave}((\frac{1}{1-p}\Delta y_{l+1})^2)+p\cdot\text{ave}(0^2) \\ &=\frac{1}{1-p}((\Delta y_{l+1})^2)=\frac{1}{1-p}\text{var}(\Delta y_{l+1})\tag{17} \end{align} var(Δyl+1)=ave((Δyl+1)2)=(1p)ave((1p1Δyl+1)2)+pave(02)=1p1((Δyl+1)2)=1p1var(Δyl+1)(17)
将Eq.17代入Eq.16,可以得到和Eq.10相同的等式,意味着drop-out不会对 var ( Δ y l ) \text{var}(\Delta y_l) var(Δyl)产生影响。

2.5 Effects of Pooling Layer

在2.3节只考虑了卷积层和全连接层中带有可训练的权重,但是池化层在很多情况下也被使用。即使池化层不会对 var ( x l ) \text{var}(x_l) var(xl)产生很大的影响,但其不会对 var ( Δ y l ) \text{var}(\Delta y_l) var(Δyl)有影响。因此,Eq.10中的 β l \beta_l βl在池化层也要被定义。本节定义 β l \beta_l βl在最大池化层和平均池化层中的数值。令 p p p s s s分别为池化大小和步长。

2.5.1 Max-pooling

最大池化层中,将局部区域内的最大输入值进行前向传播,并且在反向传播中只有对应的神经元接收到 Δ x l \Delta x_l Δxl,局部区域内的其他单元的 Δ x l \Delta x_l Δxl设置为0。如果假设 Δ x l \Delta x_l Δxl的平均值是0,那么 var ( Δ x l ) \text{var}(\Delta x_l) var(Δxl)会被缩放至 1 / s 2 1/s^2 1/s2的规模。随着 p p p大于 s s s,接收 Δ x l \Delta x_l Δxl的神经元占的比例变小,但是本文忽略了这种影响,为简单期间,使用了上述定义。

2.5.2 Average-pooling

与最大池化不同,平均池化中所有的神经元都接收 Δ x l \Delta x_l Δxl。然而,在反向传播中, Δ x l \Delta x_l Δxl被缩放为 M l / N l M_l/N_l Ml/Nl,因为 x l x_l xl中每个神经元以 1 / N l 1/N_l 1/Nl的权重连接到 y l y_l yl中的 M l M_l Ml个神经元中。因此,平均池化层的 β l \beta_l βl应被设为 ( M l / N l ) 2 (M_l/N_l)^2 (Ml/Nl)2。例如,当 p = s p=s p=s时, N l = p 2 N_l=p^2 Nl=p2 M l = 1 M_l=1 Ml=1,因此 β l \beta_l βl设置为 1 / p 4 1/p^4 1/p4

2.6 Rescaling Invariance of Layer-Wise Weight Decay

从理论上验证本文的方法,将证明本文提出的逐层权重衰减对于网络的逐层重新重新标度(rescaling)是不变的。
网络的重新标度也被称为重参数化(reparameterization),是通过重新标度连接权重而不改变网络计算的函数的一种变换。
如果使用某种激活函数 f f f,如恒等函数或ReLU,满足对任意的正标量 α \alpha α,这种尺度变换都可以轻松得到。图3展示了分层重标度的一个例子,是最简单的重标度之一。
![[Pasted image 20240524155901.png]]

图3:网络的逐层重标度。

当我们将 W l − 1 W_{l-1} Wl1重标度为 α W l − 1 \alpha W_{l-1} αWl1,将 W l W_l Wl重标度为 1 α W l \frac{1}{\alpha}W_l α1Wl,那么 x l + 1 x_{l+1} xl+1的值就不会改变。缩放不影响网络的功能性,训练过程中也不应该影响网络的更新。如果重标度过程影响了更新,意味着网络如何更新权重依赖于每个权重的尺度,导致训练过程的不稳定性。本文将表明,如果使用常数权重衰减,正则化的强度将受到重标度的影响,而如果使用逐层权重衰减,正则化的强度时不变的。注意到本文关注的是梯度和权重衰减之间的平衡,这与现有工作只关注梯度的尺度不同。

假设网络如图3所示进行重标度。由于任何逐层重标度都可以用这种重标度的组合来表示,因此研究这种重标度足以在所提出的方法中显示重标度不变性。

x l ′ x_l' xl W l ′ W_l' Wl为第 l l l层重标度后的输入值和连接权重,由此得到
Δ W l − 1 ′ = x ′ l − 1 T Δ y l − 1 ′ = x l − 1 T ( 1 α Δ y l − 1 ) = 1 α Δ W l − 1 (18) \Delta W_{l-1}'={x'}_{l-1}^T\Delta y_{l-1}'=x_{l-1}^T(\frac{1}{\alpha}\Delta y_{l-1})=\frac{1}{\alpha}\Delta W_{l-1}\tag{18} ΔWl1=xl1TΔyl1=xl1T(α1Δyl1)=α1ΔWl1(18)
Δ W l ′ = x ′ l T Δ y l ′ = α x l T Δ y l = α Δ W l (19) \Delta W_l'={x'}_l^T\Delta y_l'=\alpha x_l^T\Delta y_l=\alpha\Delta W_l\tag{19} ΔWl=xlTΔyl=αxlTΔyl=αΔWl(19)
将上述两个等式代入Eq.1,在权重衰减不变的情况下得到重标网络的更新值:
Δ W l − 1 ′ + λ W l − 1 ′ = 1 α Δ W l − 1 + λ α W l − 1 (20) \Delta W_{l-1}'+\lambda W_{l-1}'=\frac{1}{\alpha}\Delta W_{l-1}+\lambda\alpha W_{l-1}\tag{20} ΔWl1+λWl1=α1ΔWl1+λαWl1(20)
Δ W l ′ + λ W l = α Δ W l + λ α W l (21) \Delta W_l'+\lambda W_l=\alpha\Delta W_l+\frac{\lambda}{\alpha}W_l\tag{21} ΔWl+λWl=αΔWl+αλWl(21)
基于此,可以得到在逐层权重衰减下重新缩放后网络的更新值:
Δ W l − 1 ′ + λ l − 1 ′ W l − 1 ′ = 1 α Δ W l − 1 + λ l − 1 α 2 α W l − 1 = 1 α ( W l − 1 + λ l − 1 W l − 1 ) ∝ W l − 1 + λ l − 1 W l − 1 \begin{align} \Delta W_{l-1}'+\lambda_{l-1}'W_{l-1}'&=\frac{1}{\alpha}\Delta W_{l-1}+\frac{\lambda_{l-1}}{\alpha^2}\alpha W_{l-1}\\ &=\frac{1}{\alpha}(W_{l-1}+\lambda_{l-1}W_{l-1})∝ W_{l-1}+\lambda_{l-1}W_{l-1}\tag{24} \end{align} ΔWl1+λl1Wl1=α1ΔWl1+α2λl1αWl1=α1(Wl1+λl1Wl1)Wl1+λl1Wl1(24)
Δ W l ′ + λ l ′ W l ′ = α Δ W l + α 2 λ l α W l = α ( Δ W l + λ l W l ) ∝ Δ W l + λ l W l \begin{align} \Delta W_l'+\lambda_l'W_l'&=\alpha\Delta W_l+\frac{\alpha^2\lambda_l}{\alpha}W_l \\ &=\alpha(\Delta W_l+\lambda_l W_l)∝\Delta W_l+\lambda_lW_l\tag{25} \end{align} ΔWl+λlWl=αΔWl+αα2λlWl=α(ΔWl+λlWl)ΔWl+λlWl(25)
这个等式表明权重衰减的强度不改变重标度。这种不变性源于对梯度尺度的充分考虑,而梯度尺度又受到上层权重尺度的影响。虽然更新的尺度需要通过自适应的学习率或其他一些复杂的优化来补偿,但结论是,逐层权重衰减不受网络尺度变化的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

完全匹配企业需求的替代FTP升级软件怎么找

企业在处理数据传输时,效率和安全性是关键。尽管传统的FTP曾被广泛采用,但因其传输慢、安全性不足和难以管理等问题,已不再满足现代企业的需求。许多企业正在寻找能够满足其需求的FTP替代方案,但市场上选择众多,找到合…

设计模式使用(成本扣除)

前言 名词解释 基础名词 订单金额:用户下单时支付的金额,这个最好理解 产品分成:也就是跟其他人合做以后我方能分到的金额,举个例子,比如用户订单金额是 100 块,我方的分成是 80%,那么也就是…

双向链表C++,C#,Java版,这些程序大多已经过测试,一直在用。

先C版吧&#xff0c;我最先用的是C#,后来是Java&#xff0c;后来改用C版的&#xff0c;因为现在一直在用C&#xff0c;单链 表一直没写上去&#xff0c;因为我很少用&#xff0c;用的是双链表。 执行代码例子1&#xff1a; int main() { _DList<_string> s…

小恐龙跳一跳源码

小恐龙跳一跳源码是前两年就火爆过一次的小游戏源码&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧这个源码分享出来了&#xff01;有喜欢的直接下载就行&#xff0c;可以本地单机直接点击index.html进行运行&#xff0c;又或者放在虚拟机或者服务器上与朋友进行…

基于RV1126的AI网络摄像机AHD、CVBS、HDMI接口的区别有哪些?支持8路AHD摄像头,支持AI实时分析

网络摄像机AHD、CVBS、HDMI接口的区别有哪些&#xff1f;应用场景有哪些&#xff1f; AHD、CVBS和HDMI是不同的视频传输接口&#xff0c;分别适用于不同的应用场景。下面是它们的主要应用场景&#xff1a; 1.AHD&#xff08;Analog High Definition&#xff09;&#xff1a;A…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…

【Linux】用户级缓冲区

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【linux】详解linux权限

目录 用户 文件属性 更改文件权限 更改文件拥有者 更改文件所属组 用户的权限 文件掩码 粘滞位 总结 基本指令可参考&#xff1a; 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 用户 超级用户&#xff08;root&#xff09;&#xff…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题&#xff0c;也就是说有若干个起点&#xff0c;那我们就可以暴力一点&#xff0c;直接把多源最短路径问题转化成若干个单源最短路径问题&#xff0c;然后将每次的步数比较一下&#xff0c;取到最短的就是最短路径的结果&#xff0c;这…

安卓部署ffmpeg全平台so并实现命令行调用

安卓 FFmpeg系列 第一章 Ubuntu生成ffmpeg安卓全平台so 第二章 Windows生成ffmpeg安卓全平台so 第三章 生成支持x264的ffmpeg安卓全平台so 第四章 部署ffmpeg安卓全平台so并使用&#xff08;本章&#xff09; 文章目录 安卓 FFmpeg系列前言一、添加so1、拷贝ffmpeg到项目2、bu…

华为CE6851-48S6Q-HI升级设备版本及补丁

文章目录 升级前准备工作笔记本和交换机设备配置互联地址启用FTP设备访问FTP设备升级系统版本及补丁 升级前准备工作 使用MobaXterm远程工具连接设备&#xff0c;并作为FTP服务器准备升级所需的版本文件及补丁文件 笔记本和交换机设备配置互联地址 在交换机接口配置IP&#…

文件传输服务应用1——java集成smb2/3实现文件共享方案详细教程和windows共享服务使用配置

在实际项目开发过程中&#xff0c;读取网络资源或者局域网内主机的文件是必要的操作和需求。而FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同…

3DMax

先转换为可编辑多边形 按“1”选择为点&#xff0c;点击目标焊接&#xff08;CtrlShiftw&#xff09;&#xff0c;然后点击一个顶点拉到另一个定点上&#xff1b; 选择一个面&#xff0c;点击塌陷&#xff08;CtrlAltC&#xff09;&#xff0c;四点合并为一个点&#xff1b; …

Ai指令-公众号内训课:学会ai指令+公众号的底层逻辑(7节课)

课程目录 第一课:详解公众号的流量机制.mp4 第二课:快速搞定公众号号设化装修.mp4 第三课:一期学员直呼牛X的课程&#xff0c;正确的爆文利用姿势.mp4 第五课:颗粒度级别拆解AI公众号爆文.mp4 第六课:AI提示词进阶技巧课。提示词自动化.mp4 第七课.实操演示提示词撰写工作…

element-ui输入框和多行文字输入框字体不一样解决

element-ui的type"textarea"的字体样式与其他样式不同 <el-input type"textarea"></el-input> <el-input ></el-input>设置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…

GPIO模拟spi时序点亮数码管

目录 spi.h spi.c main.c 实验效果 spi.h #ifndef __SPI_H__ #define __SPI_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"//spi初始化 void spi_init(); //spi写入数据 void spi_write(unsigned char data);#endif spi.c #include…

C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作

在C#编程中&#xff0c;对象之间的属性复制和操作是一个常见的需求。为此&#xff0c;.NET Framework提供了多种实用工具库&#xff0c;如AutoMapper、ValueInjecter和ExpressMapper。这些库通过简化代码&#xff0c;提高了开发效率。本文将介绍这些工具库&#xff0c;比较它们…

Html基础笔记

Html超文本标记语言 (HyperText Markup Language) 超文本 指的是网页中可以显示的内容(图片,超链接,视频,) 标记语言 标记–>标签(标注) 例如:买东西的时候—>商品具有标签,看到标签就知道商品的属性(价格,材质,型号等,) 标记语言就是提供了很多的标签,不同的标签…

Android 几个简单的自定义对话框介绍

Android 几个简单的自定义对话框介绍 文章目录 一、前言二、对话框相关内容1、效果2、对话框显示的调用代码&#xff08;1&#xff09;原生对话框代码&#xff1a;&#xff08;2&#xff09;自定义对话框代码&#xff1a; 3、对话框SweetAlertDialog 主要实现代码&#xff1a;4…

在DAYU200上实现OpenHarmony跳转拨号界面

一、简介 日常生活中&#xff0c;打电话是最常见的交流方式之一&#xff0c;那么如何在OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;中进行电话服务相关的开发呢&#xff1f;今天我们可以一起来了解一下如何通过电话服务系统支持的API实现拨打电话的功能…