深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM

news2024/12/24 2:38:01

在这里插入图片描述
【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

在这里插入图片描述
专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等

本专栏主要方便入门同学快速掌握相关知识。后续会持续把深度学习涉及知识原理分析给大家,让大家在项目实操的同时也能知识储备,知其然、知其所以然、知何由以知其所以然。

声明:部分项目为网络经典项目方便大家快速学习,后续会不断增添实战环节(比赛、论文、现实应用等)

专栏订阅:

  • 深度学习入门到进阶专栏
  • 深度学习应用项目实战篇

深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM

1.Learning to Learn

Learning to Learn by Gradient Descent by Gradient Descent
提出了一种全新的优化策略,
用 LSTM 替代传统优化方法学习一个针对特定任务的优化器。

在机器学习中,通常把优化目标 f ( θ ) f(\theta) f(θ) 表示成

θ ∗ = argmin ⁡ θ ∈ Θ f ( θ ) \theta^{*}=\operatorname{argmin}_{\theta \in \Theta} f(\theta) θ=argminθΘf(θ)

其中,参数 θ \theta θ 的优化方式为

θ t + 1 = θ t − α ∇ f ( θ t ) \theta_{t+1}=\theta_{t}-\alpha \nabla f\left(\theta_{t}\right) θt+1=θtαf(θt)

上式是一种针对特定问题类别的、人为设定的更新规则,
常见于深度学习中,主要解决高维、非凸优化问题。

根据 No Free Lunch Theorems for Optimization 理论,
[1] 提出了一种 基于学习的更新策略 代替 人为设定的更新策略
即,用一个可学习的梯度更新规则,替代人为设计的梯度更新规则。
其中,
optimizer 为 g g g ϕ \phi ϕ 参数化;
optimizee 为 f f f θ \theta θ 参数化。

此时, optimizee 的参数更新方式为

θ t + 1 = θ t + g t ( ∇ f ( θ t ) , ϕ ) \theta_{t+1}=\theta_{t}+g_{t}\left(\nabla f\left(\theta_{t}\right), \phi\right) θt+1=θt+gt(f(θt),ϕ)

optimizer g g g 的更新则由 f f f, ∇ f \nabla f f ϕ \phi ϕ 决定。

1.2 学习机制

图1是 Learning to Learn 中 optimizer 和 optimizee 的工作原理。

图1 Learning to Learn 中 optimizer 和 optimizee 工作原理。
optimizer 为 optimizee 提供更新策略,
optimizee 将损失信息反馈给 optimizer,协助 optimizer 更新。

给定目标函数 f f f 的分布,那么经过 T T T 次优化的 optimizer 的损失定义为整个优化过程损失的加权和:

L ( ϕ ) = E f [ ∑ t = 1 T ω t f ( θ t ) ] \mathcal{L}(\phi)=\mathbb{E}_{f}\left[\sum_{t=1}^{T} \omega_{t} f\left(\theta_{t}\right)\right] L(ϕ)=Ef[t=1Tωtf(θt)]

其中,

θ t + 1 = θ t + g t [ g t , h t + 1 ] = LSTM ⁡ ( ∇ t , h t , ϕ ) \begin{aligned} & \theta_{t+1}=\theta_{t}+g_{t} \\ & {\left[g_{t}, h_{t+1}\right]=\operatorname{LSTM}\left(\nabla_{t}, h_{t}, \phi\right)} \end{aligned} θt+1=θt+gt[gt,ht+1]=LSTM(t,ht,ϕ)

ω t ∈ R ≥ 0 \omega_{t} \in \mathbb{R}_{\geq 0} ωtR0 是各个优化时刻的任意权重,
∇ t = ∇ θ f ( θ t ) \nabla_{t}=\nabla_{\theta} f\left(\theta_{t}\right) t=θf(θt)

图2是 Learning to Learn 计算图。

图1 Learning to Learn 计算图。
梯度只沿实线传递,不沿虚线传递(因为 optimizee 的梯度不依赖于 optimizer 的参数,即
∂ ∇ t / ∂ ϕ = 0 \partial \nabla_{t} / \partial \phi = 0 t/ϕ=0 ),这样可以避免计算 f f f 的二阶导。

[1] 中 optimizer 选用了 LSTM 。
从 LSTM 优化器的设计来看,
几乎没有加入任何先验的人为经验。
优化器本身的参数 ϕ \phi ϕ 即 LSTM 的参数,
这个优化器的参数代表了更新策略。

1.2 Coordinatewise LSTM optimizer

LSTM 需要优化的参数相对较多。
因此,[1] 设计了一个优化器 m m m,它可以对目标函数的每个参数分量进行操作。
具体而言,每次只对 optimizee 的一个参数分量 θ i \theta_{i} θi 进行优化,
这样只需要维持一个很小的 optimizer 就可以完成工作。

对于每个参数分量 θ i \theta_{i} θi
optimizer 的参数 ϕ \phi ϕ 共享,隐层状态 h i h_{i} hi 不共享。
由于每个维度上的 optimizer 输入的 h i h_{i} hi ∇ f ( θ i ) \nabla f\left(\theta_{i}\right) f(θi) 是不同的,
所以即使它们的 ϕ \phi ϕ 相同,它们的输出也不一样。

这样设计的 LSTM 变相实现了优化与维度无关,
这与 RMSprop 和 ADAM 的优化方式类似(为每个维度的参数施行同样的梯度更新规则)。

图3是 LSTM 优化器的一步更新过程。

图3 LSTM 优化器的一步更新过程。所有 LSTM 的 ϕ \phi ϕ 共享, h i h_{i} hi 不共享。

1.3 预处理和后处理

由于 optimizer 的输入是梯度,梯度的幅值变化相对较大,
而神经网络一般只对小范围的输入输出鲁棒,因此在实践中需要对 LSTM 的输入输出进行处理。
[1] 采用如下的方式:

∇ k → { ( log ⁡ ( ∣ ∇ ∣ ) p , sgn ⁡ ( ∇ ) )  if  ∣ ∇ ∣ ≥ e − p ( − 1 , e p ∇ )  otherwise  \nabla^{k} \rightarrow \begin{cases}\left(\frac{\log (|\nabla|)}{p}, \operatorname{sgn}(\nabla)\right) & \text { if }|\nabla| \geq e^{-p} \\ \left(-1, e^{p} \nabla\right) & \text { otherwise }\end{cases} k{(plog(∣∇∣),sgn())(1,ep) if ∣∇∣ep otherwise 

其中, p > 0 p>0 p>0 为任意一个参数([1] 取 p = 10 p=10 p=10),用来裁剪梯度。
如果第一个参数的取值大于 − 1 -1 1
那么它就代表梯度的 log ⁡ \log log ,第二个参数则是它的符号。
如果第一个参数的取值等于 − 1 -1 1
那么它将作为一个标记指引神经网络寻找第二个参数,此时第二个参数就是对梯度的缩放。

  • 参考文献

[1] Learning to Learn by Gradient Descent by Gradient Descent

2. Meta-Learner LSTM

元学习在处理 few-shot 问题时的学习机制如下:

  • 基学习器在元学习器的引导下处理特定任务,发现任务特性;

  • 元学习器总结所有任务共性。

基于小样本的梯度下降存在以下问题:

  • 小样本意味着梯度下降的次数有限,在非凸的情况下,得到的模型必然性能很差;

  • 对于每个单独的数据集,神经网络每次都是随机初始化,若干次迭代后也很难收敛到最佳性能。

因此,元学习可以为基于小样本的梯度下降提供一种提高模型泛化性能的策略。
Meta-Learner LSTM 使用单元状态表示 Learner 参数的更新。
训练 Meta-Learner 既能发现一个良好的 Learner 初始化参数,
又能将 Learner 的参数更新到一个给定的小训练集,以完成一些新任务。

2.1 Meta-Learner LSTM

2.1.1 梯度下降更新规则和 LSTM 单元状态更新规则的等价性

一般的梯度下降更新规则

θ t = θ t − 1 − α t ∇ θ t − 1 L t \theta_{t}=\theta_{t-1}-\alpha_{t} \nabla_{\theta_{t-1}} L_{t} θt=θt1αtθt1Lt

其中, θ t \theta_{t} θt 是第 t t t 次迭代更新时的参数值, α t \alpha_{t} αt 是第 t t t 次迭代更新时的学习率, ∇ θ t − 1 L t \nabla_{\theta_{t-1}} L_{t} θt1Lt 是损失函数在 θ t − 1 \theta_{t-1} θt1 处的梯度值。

LSTM 单元状态更新规则

c t = f t ⋅ c t − 1 + i t ⋅ c ~ t c_{t}=f_{t} \cdot c_{t-1}+i_{t} \cdot \tilde{c}_{t} ct=ftct1+itc~t

其中, c t c_{t} ct t t t 时刻的细胞状态, f t ∈ [ 0 , 1 ] f_{t}\in[0,1] ft[0,1] 是遗忘门, i t ∈ [ 0 , 1 ] i_{t}\in[0, 1] it[0,1] 是输入门。

f t = 1 ,   c t − 1 = θ t − 1 ,   i t = α t ,   c ~ t = − ∇ θ t − 1 L t f_{t}=1,\ c_{t-1}=\theta_{t-1},\ i_{t}=\alpha_{t},\ \tilde{c}_{t}=-\nabla_{\theta_{t-1}} L_{t} ft=1, ct1=θt1, it=αt, c~t=θt1Lt 时, E q .   ( 1 ) = E q .   ( 2 ) \mathrm{Eq.\ (1)=Eq.\ (2)} Eq. (1)=Eq. (2)

经过这样的替换,利用 LSTM 的状态更新替换学习器参数 θ \theta θ

2.1.2 Meta-Learner LSTM 设计思路

Meta-Learner 的目标是学习 LSTM 的更新规则,并将其应用于更新 Learner 的参数上。

(1) 输入门

i t = σ ( W I ⋅ [ ∇ θ t − 1 L t , L t , θ t − 1 , i t − 1 ] + b I ) \begin{align} i_{t}=\sigma\left({W}_{I} \cdot\left[\nabla_{\theta_{t-1}} L_{t}, L_{t}, {\theta}_{t-1}, i_{t-1}\right]+{b}_{I}\right) \end{align} it=σ(WI[θt1Lt,Lt,θt1,it1]+bI)

其中, W W W 是权重矩阵; b b b 是偏差向量; σ \sigma σ 是 Sigmoid 函数;
∇ θ t − 1 L t \nabla_{\theta_{t-1}} L_{t} θt1Lt L t L_{t} Lt 由 Learner 输入 Meta-Learner。

对于输入门参数 i t i_t it ,它的作用相当于学习率 α \alpha α
在此学习率是一个关于 ∇ θ t − 1 L t \nabla_{\theta_{t-1}} L_{t} θt1Lt L t L_{t} Lt θ t − 1 {\theta}_{t-1} θt1 i t − 1 i_{t-1} it1 的函数。

(2) 遗忘门

f t = σ ( W F ⋅ [ ∇ θ t − 1 L t , L t , θ t − 1 , f t − 1 ] + b F ) \begin{align} f_{t}=\sigma\left(W_{F} \cdot\left[\nabla_{\theta_{t-1}} L_{t}, L_{t}, \theta_{t-1}, f_{t-1}\right]+b_{F}\right) \end{align} ft=σ(WF[θt1Lt,Lt,θt1,ft1]+bF)

对于遗忘门参数 f t f_t ft ,它代表着 θ t − 1 \theta_{t-1} θt1 所占的权重,这里将其固定为 1 ,但 1 不一定是它的最优值。

(3) 将学习单元初始状态 c 0 c_0 c0 视为 Meta-Learner 的一个参数,
正对应于 learner 的参数初始值。
这样当来一个新任务时, Meta-Learner 能给出一个较好的初始化值,从而进行快速学习。

(4) 参数共享

为了避免 Meta-Learner 发生参数爆炸,在 Learner 梯度的每一个 coordinate 上进行参数共享。
每一个 coordinate 都有自己的单元状态,但是所有 coordinate 在 LSTM 上的参数都是一样的。
每一个 coordinate 就相当于 Learner 中的每一层,
即对于相同一层的参数 θ i \theta_i θi
它们的更新规则是一样的,即 W I W_I WI b I b_I bI W I W_I WI b I b_I bI 是相同的。

2.2 Meta-Learner LSTM 单元状态更新过程

将 LSTM 单元状态更新过程作为随机梯度下降法的近似,实现 Meta-Learner 对 Leraner 参数更新的指导。

(1) 候选单元状态: c ~ t = − ∇ θ t − 1 L t \tilde{c}_{t}=-\nabla_{\theta_{t-1}} L_{t} c~t=θt1Lt,是 Meta-Learner 从 Leraner 得到的损失函数梯度值,直接输入 Meta-Learner ,作为 t t t 时刻的候选单元状态。

(2) 上一时刻的单元状态: c t − 1 = θ t − 1 c_{t-1}=\theta_{t-1} ct1=θt1,是 Learner 用第 t − 1 t-1 t1 个批次训练数据更新后的参数。每个批次的数据训练完后,Leraner 将损失函数值和损失函数梯度值输入 Meta-Learner,Meta-Learner 更新一次参数,将更新后的参数回馈给 Leraner,Leraner 继续处理下一个批次的训练数据。

(3) 更新的单元状态: c t = θ t c_{t}=\theta_{t} ct=θt,是 Learner 用第 t t t 个批次训练数据更新后的参数。

(4) 输出门:不考虑。

(5) 初始单元状态: c 0 = θ c_{0}=\theta c0=θ,是 Learner 最早的参数初始值。LSTM 模型需要找到最好的初始细胞状态,使得每轮更新后的参数初始值更好地反映任务的共性,在 Learner 上只需要少量更新,就可以达到不错的精度。

2.3 Meta-Learner LSTM 算法流程

Meta-Learner LSTM 前向传递计算如图1所示,其中,
基学习器 M \mathrm{M} M,包含可训练参数 θ \theta θ;元学习器 R R R,包含可训练参数 Θ \Theta Θ

图1 Meta-Learner LSTM 前向传递计算图。 Learner 计算损失函数值和损失函数梯度值, Meta-Learner 使用 Learner 提供的信息,更新 Learner 中的参数和自身参数。 在任务中,每个批次的训练数据处理完成后,Meta-Learner 为 Learner 更新一次参数, 任务中所有批次的训练数据处理完成后,Meta-Learner 进行一次更新。

Meta-Learner LSTM 算法流程

  1. Θ 0 \Theta_{0} Θ0 ← \leftarrow random initialization

  2. for d = 1 , . . . , n d=1,...,n d=1,...,n do:

    1. D t r a i n D_{\mathrm{train}} Dtrain, D t e s t D_{\mathrm{test}} Dtest ← \leftarrow random dataset from D m e t a − t r a i n {D}_{\mathrm{meta-train}} Dmetatrain

    2. intialize learner parameters: θ 0 ← c 0 \theta_{0} \leftarrow c_{0} θ0c0

    3. for t = 1 , . . . , T t=1,...,T t=1,...,T do:

      1. X t \mathbf{X}_{t} Xt, Y t \mathbf{Y}_{t} Yt ← \leftarrow random batch from D t r a i n D_{\mathrm{train}} Dtrain
      2. get loss of learner on train batch: L t ← L ( M ( X t ; θ t − 1 ) , Y t ) \mathcal{L}_{t} \leftarrow \mathcal{L}\left(M\left(\mathbf{X}_{t} ; \theta_{t-1}\right), \mathbf{Y}_{t}\right) LtL(M(Xt;θt1),Yt)
      3. get output of meta-learner using Eq. (2): c t ← R ( ( ∇ θ t − 1 L t , L t ) ; Θ d − 1 ) c_{t} \leftarrow R\left(\left(\nabla_{\theta_{t-1}} \mathcal{L}_{t}, \mathcal{L}_{t}\right) ; \Theta_{d-1}\right) ctR((θt1Lt,Lt);Θd1)
      4. update learner parameters: θ t ← c t \theta_{t} \leftarrow c_{t} θtct
    4. end for

    5. X , Y ← D t e s t \mathbf{X}, \mathbf{Y} \leftarrow D_{\mathrm{test}} X,YDtest

    6. get loss of learner on test batch: L t e s t ← L ( M ( X ; θ T ) , Y ) {L}_\mathrm{test} \leftarrow {L}\left(M\left(\mathbf{X} ; \theta_{T}\right), \mathbf{Y}\right) LtestL(M(X;θT),Y)

    7. update Θ d \Theta_{d} Θd using ∇ Θ d − 1 L t e s t \nabla_{\Theta_{d-1}} {L}_{\mathrm{test}} Θd1Ltest

  3. end for

  • 对于第 d d d 个任务,在训练集中随机抽取 T T T 个批次的数据,记为 ( X 1 , Y 1 ) , ⋯   , ( X T , Y T ) \left(\boldsymbol{X}_{1}, \boldsymbol{Y}_{1}\right), \cdots, \left(\boldsymbol{X}_{T}, \boldsymbol{Y}_{T}\right) (X1,Y1),,(XT,YT)

  • 对于第 t t t 个批次的数据 ( X t , Y t ) \left(\boldsymbol{X}_{t}, \boldsymbol{Y}_{t}\right) (Xt,Yt),计算 learner 的损失函数值 L t = L [ M ( X t ; θ t − 1 ) , Y t ] L_{t}=L\left[M\left(X_{t}; \theta_{t-1}\right), Y_{t}\right] Lt=L[M(Xt;θt1),Yt] 和损失函数梯度值 ∇ θ t − 1 L t \nabla_{\theta_{t-1}} L_{t} θt1Lt,将损失函数和损失函数梯度输入 meta-learner ,更新细胞状态: c t = R [ ( ∇ θ t − 1 L t , L t ) ; Θ d − 1 ] {c}_{t}=\boldsymbol{R}\left[\left(\nabla_{\theta_{t-1}} L_{t}, L_{t}\right); \Theta_{d-1}\right] ct=R[(θt1Lt,Lt);Θd1],更新的参数值等于更新的细胞状态 θ t = c t \theta_{t}=c_{t} θt=ct

  • 处理完第 d d d 个任务中所有 T T T 个批次的训练数据后,使用第 d d d 个任务的验证集 ( X , Y ) (X, Y) (X,Y), 计算验证集上的损失函数值 L t e s t = L [ M ( X ; θ T ) , Y ] L_{\mathrm{test}}=L\left[M\left(X; \theta_{T}\right), Y\right] Ltest=L[M(X;θT),Y] 和损失函数梯度值 ∇ θ d − 1 L t e s t \nabla_{\theta_{d-1}} L_{\mathrm{test}} θd1Ltest ,更新 meta-learner 参数 Θ d \boldsymbol{\Theta}_{d} Θd

2.4 Meta-Learner LSTM 模型结构

Meta-Learner LSTM 是一个两层的 LSTM 网络,第一层是正常的 LSTM 模型,第二层是近似随机梯度的 LSTM 模型。
所有的损失函数值和损失函数梯度值经过预处理,输入第一层 LSTM 中,
计算学习率和遗忘门等参数,损失函数梯度值还要输入第二层 LSTM 中用于参数更新。

2.5 Meta-Learner LSTM 和 MAML 的区别

  • 在 MAML 中,元学习器给基学习器提供参数初始值,基学习器给元学习器提供损失函数值;
    在 Meta-Learner LSTM 中,元学习器给基学习器提供更新的参数,基学习器给元学习器提供每个批次数据上的损失函数值和损失函数梯度值。

  • 在 MAML 中,基学习器的参数更新在基学习器中进行,元学习器的参数更新在元学习器中进行;
    在 Meta-Learner LSTM 中,基学习器和元学习器的参数更新都在元学习器中进行。

  • 在 MAML 中,元学习器使用 SGD 更新参数初始值,使得损失函数中存在高阶导数;
    在 Meta-Learner LSTM 中,元学习器给基学习器提供修改的 LSTM 更新参数,元学习器自身的参数并不是基学习器中的参数初始值,元学习器自身的参数使用 SGD 进行更新,并不会出现损失函数高阶导数的计算。

  • 在 MAML 中,元学习器和基学习器只在每个任务训练完成后才进行信息交流;
    在 Meta-Learner LSTM 中,元学习器和基学习器在每个任务的每个批次训练数据完成后就进行信息交流。

  • MAML 适用于任意模型结构;
    Meta-Learner LSTM 中的元学习器只能是 LSTM 结构,基学习器可以适用于任意模型结构。

2.6 Meta-Learner LSTM 分类结果

表1 Meta-Learner LSTM 在 miniImageNet 上的分类结果。
Method5-way 1-shot5-way 5-shot
Baseline-finetune28.86 ± \pm ± 0.54 % \% %49.79 ± \pm ± 0.79 % \% %
Baseline-nearest-neighbor41.08 ± \pm ± 0.70 % \% %51.04 ± \pm ± 0.65 % \% %
Matching Network43.40 ± \pm ± 0.78 % \% %51.09 ± \pm ± 0.71 % \% %
Matching Network FCE43.56 ± \pm ± 0.84 % \% %55.31 ± \pm ± 0.73 % \% %
Meta-Learner LSTM43.44 ± \pm ± 0.77 % \% %60.60 ± \pm ± 0.71 % \% %
  • 参考文献

[1] Optimization as a Model for Few-Shot Learning

[2] 长短时记忆网络 LSTM

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

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

相关文章

[C语言实现]数据结构堆之《害怕二叉树所以天赋全点到堆上了》

🥰作者: FlashRider 🌏专栏: 数据结构 🍖知识概要:详解堆的概念、小根堆与大根堆的区别、以及代码实现。 目录 什么是堆? 如何实现堆? 代码实现堆(小根堆) 定义堆以及堆的初始化和销毁。 堆的插入 堆…

LeetCode·每日一题·1177. 构建回文串检测·前缀和

作者:小迅 链接:https://leetcode.cn/problems/can-make-palindrome-from-substring/solutions/2309940/qian-zhui-he-zhu-shi-chao-ji-xiang-xi-by-n3ps/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获…

最新水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用

随着计算机的广泛应用和各类模型软件的发展,将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。本次培训将聚焦于综合利用GIS及CAD等工具高效地进行大规模城市排水系统水力模型的建立,利用SWMM实现排水系统水力模拟。讲解…

【RH850/U2A】:GreenHills编译配置

GreenHills编译配置 GreenHills语法.gpj文件.opt文件示例GreenHills编译器在编译我们的文件时涉及它需要哪些文件及相关配置呢?带着疑问我们开始来梳理。 我们还是以具体示例来展开(硬件平台:RH850 U2A8) GreenHills语法 一般我们是需要查看它的帮助文档的,文档在哪里呢?…

CSP第二轮/NOIP 比赛注意事项

一、在哪里写代码 主办方会提前在桌面已在 E 盘根目录下建立以考生准考证编号命名的文件夹,考生应检查该文件夹名称是否正确(包括编号及大小写字母),如有错误须立即上报监考人员,由监考人员进行更改。确认无误后,考生须为每道试题再单独建立一个子文件夹,子文件夹名与对应…

某互联网银行绿色金融背后的“安全秘诀”

​随着银保监会出台《银行业保险业绿色金融指引》、人民银行牵头制定《G20转型金融框架》的发布,金融行业正在持续加大对绿色金融支持力度。某互联网银行为了响应号召,采用数字化无纸化办公,线上零接触服务减少大量碳排放,成为国内…

oracle rac架构解读

一、oracle 数据库架构 单节点数据库,如果实例宕机了,如果一个业务链接在实例上面,那么这个业务就中断了。这个时候系统就不具有可用性了,那么这个时候单节点的可用性是很差的。 对于RAC来说,和单实例一样,…

新榜 | 小红书美妆用户趋势洞察报告

目前,小红书上聚集了大量年轻、高知的女性美妆用户,她们倾向于在小红书平台分享美妆护肤产品和使用经验,用户间的互动、分享氛围浓厚;而这些评论互动也传递了用户的真实诉求,理解用户的关注点对于企业和品牌来说将具有…

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架,它提供了一套用于构建用户界面的工具和库。在Vue中,我们可以使用多种方式来导入数据,包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…

如何提高职场沟通能力

如何提高职场沟通能力 在现代职场中,良好的沟通能力不仅有助于我们更好地完成工作任务,还能提高团队协作效率,降低矛盾和误解。本文将为你提供一些建议和技巧,帮助你提高职场沟通能力。 1. 倾听 倾听是沟通中最重要的技能之一…

社招准备和面试题

这次就整理下这次社招都做了哪些准备以及自己面试过的题目。 首先就是专业知识的准备,看了很多常用的机器学习算法,并对其算法做了推导。看了深度学习推荐系统这本书里面的模型,对自己简历中涉及到的模型重点掌握,比如DIN、DIEN、…

创客匠人6月功能更新:服务商管理、直播、学员版APP全新上线

创客匠人6月功能更新,包括服务商管理、直播、学员版APP、圈子、商城、店铺等众多产品升级,我们一起来看看吧。 正式升级时间:6月20日 一、服务商管理 1.服务商模块排版优化:支持查看整个团队的用户信息和业绩明细。 2.支持记…

嵌套滚动实践:onInterceptTouchEvent与NestedScrolling【实用为准】

嵌套滚动:内外两层均可滚动,比如上半部分是一个有限的列表,下半部分是WebView,在内层上半部分展示到底的时候,外部父布局整体滚动内部View,将底部WevView拉起来,滚动到顶部之后再将滚动交给内部…

SQL Server 无备份情况下误操作数据恢复(3)

原文链接:https://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的时候没有加where,然后就喊爹喊娘了。人非圣贤孰能无过,做错可以理解…

Verilog 高级知识点---状态机

目录 状态机 1、Mealy 状态机 2、Moore 状态机 3、三段式状态机 状态机 Verilog 是硬件描述语言,硬件电路是并行执行的,当需要按照流程或者步骤来完成某个功能时,代码中通常会使用很多个 if 嵌套语句来实现,这样就增加了代码…

2DUI跟踪3D模型,更精准的嵌套与跟踪

实现的效果: 1、2DUI跟踪模型指定位置,跟随模型移动 2、2DUI时刻面向摄像机 首先准备一个模型。如下图: 在此模型层级下新建Canvas(画布) 改显示模式为世界空间 在canvas下创建Image(图像) 放…

包看包会Stable Diffusion原理,新手也能看明白

知道看文章的人怎么看,听我讲的人经常反应的就是听不明白。于是我又在网上找了一下,发现这篇文章讲的很好,算得上是深入浅出,可惜是英文的,就把它翻译了一下: https://stable-diffusion-art.com/how-stabl…

一次过!快速申领软件著作权

文章目录 一次过!快速申领软件著作权1 软件著作权的定义2 申请流程2.1 准备申请材料2.2 登录软著局申请系统并进行填写2.3 审核2.4 补正和修改申请材料2.5 接受核准并领证 3 申请材料4 注意事项5 总结 一次过!快速申领软件著作权 申领软件著作权是保护软…

【Nexus】Nexus创建Maven私服

目录 一、前言二、创建Blob Stores1、在创建Repository之前,设定一个文件存储目录Blob,方便后序管理2、选择创建的Blob类型为File,根据需要选择是否超出约束时进行报警,以及约束类型和约束限制3、成功创建好的页面 三、创建Reposi…

如何快速翻译ppt文档?分享几个实用的文档翻译方法

想必你也曾有过这样的困扰:在工作或学习中,需要阅读外语PPT的内容,但是却遇到了语言障碍,无法流利地理解其中的意思。这时,我们就需要翻译ppt的软件来帮助我们解决问题。那么,翻译ppt的软件哪个好呢&#x…