DeepFM论文翻译

news2024/12/26 11:05:40

1.摘要

  为了最大化推荐系统的CTR,学习用户行为的复杂交叉特征很关键。 尽管有很大进步,现有的方法无论对低阶还是高阶的交叉特征,似乎还是有很强的bias, 或者需要专门的特征工程。 本文,我们证明了得出一个能强化高阶和低阶交叉特征的端到端模型是可能的。 本文提出的DeepFM模型,结合了推荐系统的FM和深度神经网络中的特征学习能力,相比于Google的Wide&Deep模型,DeepFM共享wide和deep部分的输入,而且只需要原始特征,不需要特征工程。实验部分展示了DeepFM的效果和性能。

2.引言

  在推荐系统中点击率(CTR)的预测至关重要,其任务是预估用户点击推荐物品的概率。在许多推荐系统中,目标是最大化点击次数,因此给用户返回的是通过预估CTR排序的物品;而在其他的推荐场景中(例如在线广告), 提高收入也很重要, 因此对候选集合的排序策略为: C T R ∗ b i d CTR*bid CTRbid ,其中 b i d bid bid 为物品被用户点击时系统获得的收益。无论哪种情形, 关键在于正确预估CTR。

  学习用户行为背后的隐含交叉特征很重要。 在主流的app市场上,我们发现,用户喜欢在用餐时间下载送餐app, 说明 2 2 2 阶交叉特征“app类别-时间戳” 可以作为CTR预估的重要特征。 另一个发现, 男青年喜欢射击游戏和RPG游戏,因此, 3 3 3 阶交叉特征“app类别-用户性别-用户年龄”也可以作为CTR预估的一个特征。 一般来说,用户行为背后的特征交叉可能很复杂, 低阶和高阶特征交互都应该发挥重要作用。 并且Google的Wide&Deep模型也说明, 低阶和高阶的交叉特征结合在一起,比单独使用低阶*或者高阶的交叉特征有额外的提升。

  关键挑战在于有效地对特征交叉进行建模。 专家可以设计一些简单易于理解的特征交叉。然而,大多数其他特征交互都隐藏在数据中,难以先验识别(例如,经典的关联规则“尿布和啤酒”是从数据中挖掘出来的,而不是由专家发现的),只能通过机器学习自动捕获 。在数据量大的情况下,即使对于简单且易于理解的特征交叉,专家也不能详尽列出所有。

  线性模型例如FTRL,虽然性能很好,但是无法学习这种交叉特征, 为了学习特征交叉通常的做法是 手动添加pair-wise的交叉特征。这种方法很难推广到对高阶特征交互或那些从未或很少出现在训练数据中的交互进行建模。 FM模型通过特征之间隐向量的内积进行特征交叉,虽然理论上 FM 可以对高阶特征交互进行建模,但实际上由于复杂度高,通常只考虑 2 2 2 阶特征交互。

  深度神经网络具有学习复杂特征交互的潜力。基于 CNN 的模型偏向于相邻特征之间的交互,而基于 RNN 的模型更适合具有顺序依赖的点击数据。 FNN模型在应用DNN之前,预训练了FM,因此最终的交叉特征受限于FM的能力。 PNN在embedding layer和全连接层之间加入了product layer。 Cheng等人(在Wide&Deep文章中)后来提到,PNN和FNN以及其他一些deep模型,几乎捕捉不到低阶交叉特征,但是这些特征对CTR预估很重要。因此,他们提出了Wide&Deep模型,其中wide部分还是依赖特征工程来学习低阶交叉特征。

  可以看出,现有模型偏向于低阶或高阶特征交互,或者依赖于特征工程。 本文提出了一种端到端的学习方法,可以学习所有阶的交叉特征,而且只需要原始特征。

  • DeepFM集成了 FM 和深度神经网络(DNN)的架构。 像FM一样学习低阶交叉特征,像DNN一

    样学习高阶交叉特征。但不同于Wide & Deep模型,可以端到端的学习,而且不需要特征工程。

  • DeepFM可以高效的训练,因为wide部分和deep部分共享了输入和embedding向量。

3. 方法

  假设训练数据包含 n n n 个样本 ( χ , y ) (χ,y) (χ,y) ,其中 χ χ χ m m m 个特征的数据,通常包含用户和 i t e m item item p a i r pair pair y ∈ 0 , 1 y∈ {0, 1} y0,1 是对应的 label, χ χ χ 可以包含类别特征(例如:性别、地域)和连续特征(例如:年龄),类别特征用one-hot来表示, 连续特征用自身的值, 或者是离散化之后的one-hot编码。 这样,每个训练样本转化为 ( x , y ) (x, y) (x,y),其中 x = [ x f i e l d 1 , x f i e l d 2 , . . . , x f i e l d j , . . . , x f i e l d m ] x=[x_{field1},x_{field2},...,x_{fieldj},...,x_{fieldm}] x=[xfield1,xfield2,...,xfieldj,...,xfieldm] ,是一个 d d d 维向量,其中 x f i e l d j x_{fieldj} xfieldj 表示 χ χ χ 的第 j j j 个特征。通常, x x x 是高维并且极稀疏的。

任务:对于给定的上下文特征建模进行CTR预估。

3.1 DeepFM

  为了学习低阶和高阶特征交互,提出了DeepFM模型(基于神经网络的FM模型)

   DeepFM包含两个组件: FM组件和deep组件,他们共享相同的输入。

  对于特征 i i i w i w_i wi 是它的一阶权重, latent向量 V i V_i Vi 描述与其他特征的关系, V i V_i Vi 会喂给FM模型来作为二阶交叉特征, 同时喂给DNN 模型来为高阶交叉特征。所有的参数,包括 w i w_i wi V i V_i Vi 以及下文的网络参数 W ( l ) , b ( l ) W(l),b(l) W(l),b(l) 会在下面的预测模型中联合训练:
y ^ = s i g m o i d ( y F M + y D N N ) ( 1 ) \hat y = sigmoid(y_{FM} + y_{DNN}) \qquad (1) y^=sigmoid(yFM+yDNN)(1)
其中, y ^ ∈ ( 0 , 1 ) \hat y∈(0,1) y^(0,1) 是预测的CTR, y F M y_{FM} yFM 是FM组件的输出, y D N N y_{DNN} yDNN 是deep组件的输出。

3.1.1 FM组件

在这里插入图片描述

  FM组件其实就是Rendle提出的FM模型,在数据稀疏的情况下, FM模型能更有效的对二阶交叉特征进行学习 FM模型通过latent向量 V i V_i Vi V j V_j Vj 的inner product来描述 i i i j j j 的二阶交叉特征,这样的好处是,不需要特征 i i i j j j 同时出现在训练样本中。(注:类似协同过滤的思想)。 如图所示,FM组件的输出是Addition单元和若干个内积单元的和:

y F M = < w , x > + ∑ i = 1 d ∑ j = i + 1 d < V i , V j > x i ⋅ x j ( 2 ) y_{FM} = <w,x> + \sum_{i=1}^d\sum_{j=i+1}^d<V_i,V_j>x_i·x_j \qquad (2) yFM=<w,x>+i=1dj=i+1d<Vi,Vj>xixj(2)
其中, w ∈ R d , V i ∈ R k w∈R^d,V_i∈R^k wRd,ViRk k k k 已知,另外为了简洁,这里忽略了偏置项), ⟨ w , x ⟩ ⟨w,x⟩ w,x 就是一阶特征,内积就是二阶交叉特征。

3.1.2 Deep组件

在这里插入图片描述

  深层组件是一个前馈神经网络,用于学习高阶特征交互。如图所示,一条数据记录(一个向量)被输入到神经网络中。 不同于图像和语音数据,CTR预估的原始特征一般有极稀疏的、维度很高、类目特征和连续特征混在一起、可以分组等特点。因此,在接入DNN之前,要经过embedding层来转换成低维稠密的向量。

在这里插入图片描述

上图显示了从输入层到嵌入层的子网络结构。需要注意的有两点:

  • 输入的特征数据有可能长度不一样,但是embedding之后的长度都是相同的( k k k
  • FM组件中的latent向量 V V V 在这里被用来计算embedding向量。
  • 在FNN模型中,向量 V V V 是要通过FM模型预学习出来的,但是DeepFM模型中,不需要预训练,是要把FM组件和deep组件来联合训练的。

将embedding层的输出记为:
a ( 0 ) = [ e 1 , e 2 , . . . , e m ] ( 3 ) a^{(0)} = [e_1,e_2, ...,e_m] \qquad (3) a(0)=[e1,e2,...,em](3)
其中, e i e_i ei 是第 i i i 个特征的embedding向量, m 是特征的个数。然后 a ( 0 ) a^{(0)} a(0) 喂给DNN,前向过程为:
a ( l + 1 ) = σ ( W l a l + b l ) ( 4 ) a^{(l+1)}=\sigma (W^{l}a^{l}+b^{l}) \qquad (4) a(l+1)=σ(Wlal+bl)(4)
其中, l l l 是DNN的深度, σ σ σ 是激活函数, a(l),W(l),b(l) 分别是第 l l l 层的输出、模型权重、偏置项。 之后,便生成了一个低维稠密的向量,最终喂给一个sigmoid函数来计算CTR预估值:
y D N N = W ∣ H ∣ + 1 ⋅ a ∣ H ∣ + b ∣ H ∣ + 1 y_{DNN}=W^{|H|+1}·a^{|H|}+b^{|H|+1} yDNN=WH+1aH+bH+1
其中 ∣ H ∣ |H| H 是隐藏层的个数。

值得注意的是,FM组件和deep组件共享特征embedding好处有两点:

1、它可以从原始特征中学到高阶、低阶的交叉特征。

2、不需要像wide&deep那样专门的特征工程。

3.2 与其他deep模型的关系

在这里插入图片描述

FNN: 如图5左所示, FNN需要预训练一个FM模型,有两个不足:1、embedding参数受FM影响严重。2、引入的预训练阶段,严重影响了效率。 另外,FNN只能学到高阶交叉特征,相反,DeepFM不仅不需要预训练,而且能同时学习高阶、低阶交叉特征。

PNN: 为了学习高阶交叉特征,PNN在embedding层和第一个隐藏层之间引入了product层,根据不同的product操作,又分为IPNN、OPNN和PNN*。IPNN基于inner product, OPNN基于outer product, PNN*基于两者。跟FNN一样,PNN也忽略了低阶交叉特征

  为了提高计算效率,作者提出了内积和外积的近似计算:1)通过消除一些神经元来近似计算内积;2)通过将 m m m k k k 维特征向量压缩为一个k维向量来近似计算外积。然而,我们发现外积不如内积可靠,因为外积的近似计算丢失了很多信息,导致结果不稳定。内积虽然更可靠,但仍然存在计算复杂度高的问题,因为乘积层的输出与第一个隐藏层是全连接。与 PNN 不同的是,DeepFM 中乘积层的输出只连接到最终输出层(一个神经元)。与 FNN 一样,所有 PNN 都忽略低阶特征交互。

Wide&Deep: Wide & Deep由 Google 提出,用于同时对低阶和高阶特征交互进行建模。wide部分需要人工特征工程。DeepFM只需要原始特征。 如果把wide部分的LR换成FM,就跟DeepFM非常像了,但是DeepFM的FM组件和deep组件是共享embedding特征的,这样就能更精准的对高阶和低阶交叉特征建模。

总结: 总而言之,DeepFM 与其他深度模型在四个方面的关系如表 所示。可以看出,DeepFM 是唯一不需要预训练和特征工程的模型,同时捕获了低阶和高阶特征交互。
在这里插入图片描述

4.实验

  在本节中,我们根据经验比较了我们提出的 DeepFM 和其他最先进的模型。 评估结果表明,我们提出的 DeepFM 比任何其他最先进的模型更有效,并且 DeepFM 的效率可与其他最佳模型相媲美。

4.1 实验设计

数据集

我们在以下两个数据集上评估 DeepFM 的有效性和效率。

Criteo Dataset 包含 4500 4500 4500 万用户的点击记录, 13 13 13 个连续特征, 26 26 26 个类目特征。将数据集分为两组: 90 % 90\% 90% 训练, 10 % 10\% 10%测试。

Company Dataset 从公司的game center收集了连续7天的用户点击数据做训练,之后一天的数据做测试。总共约有 10 10 10 亿条数据。其中包括app特征(ID、类目等)、用户特征(用户下载app等)、上下文特征(操作时间等)

Evaluation Metrics:

  • A U C 、 L o g l o s s AUC、Logloss AUCLogloss

Model Comparison

  • 总共对比了9个模型:LR、FM、FNN、PNN(三个变种)、Wide&Deep(两个变种)、DeepFM。

其中Wide&Deep的两个变种就是把wide部分的LR换成FM。这里我们分别叫做 LR & DNN 和 FM & DNN

Parameter Settings

在Criteo数据集上,我们参照了FNN和PNN的参数设置:

  • Dropout: 0.5 0.5 0.5
  • 网络结构: 400 − 400 − 400 400-400-400 400400400
  • 优化器: Adam
  • 激活函数: IPNN用tanh、其他模型用relu
  • 为了公平期间,DeepFM也用这些参数。LR和FM的优化器分别为FTRL和Adam。FM的latent维度为 10 10 10

4.2 性能对比

效率对比

公式如下
∣ t r a i n i n g   t i m e   o f   d e e p   C T R   m o d e l ∣ ∣ t r a i n i n g   t i m e   o f   L R ∣ \frac{|training\ time\ of\ deep\ CTR\ model|}{|training\ time\ of \ LR |} training time of LRtraining time of deep CTR model

包括CPU和GPU的评测:

在这里插入图片描述

  • FNN的pre-traing影响了效率。
  • 虽然IPNN和PNN*在GPU上的加速明显,但是低效的inner product操作还是影响效率
  • DeepFM在两组实验中,效率基本都是最优的。

效果对比

结果如下:
在这里插入图片描述

各个模型在两个数据集上的效果如表2所示:

  • 学习交叉特征对CTR有提升。通过LR(不考虑交叉特征)比其他模型差可以看出。作为最好的模型,DeepFm在AUC上比LR提升 0.82 % 0.82\% 0.82% 2.6 % 2.6\% 2.6%(Logloss提升 1.1 % 1.1\% 1.1% 4.0 % 4.0\% 4.0%)。

  • 高阶和低阶交叉特征结合学习,可以提升CTR。DeepFM模型优于只考虑低阶交叉特征的FM和只考虑高阶交叉特征的FNN、IPNN、OPNN、PNN*相比可以看出。DeepFM模型与次优模型相比,在 Company∗ 和 Criteo 数据集上的AUC提升 0.34 % 0.34\% 0.34% 0.41 % 0.41\% 0.41%(Logloss提升 0.34 % 0.34\% 0.34% 和 $0.76%4)

  • 通过共享embedding共同训练高阶、低阶交叉特征可以提升CTR。与两个Wide&Deep模型变种相比。AUC提升 0.48 % 0.48\% 0.48% 0.44 % 0.44\% 0.44%(Logloss提升 0.58 % 0.58\% 0.58% 和 $0.80%4)

  总体而言,我们提出的 DeepFM 模型在 Company∗ 数据集上的 AUC 和 Logloss 方面分别超过了 0.37 % 0.37\% 0.37% 0.42 % 0.42\% 0.42%。 事实上,线下 AUC 评估的微小改进很可能导致在线 CTR 的显着增加。正如 [Cheng et al., 2016] 中报道的,与 LR 相比,Wide & Deep 将 AUC 提高了 0.275 % 0.275\% 0.275%(离线),在线 CTR 提高了 3.9 % 3.9\% 3.9%。 Company∗ 的 App Store 的日营业额为数百万美元,因此即使点击率提升个百分点,每年也会带来数百万美元的额外收入。

4.3 超参数学习

我们研究了不同深度模型的不同超参数对 Company* 数据集的影响。 顺序是:

  1. 激活函数;
  2. dropout比例;
  3. 每层的神经元数量;
  4. 隐藏层数;
  5. 网络形状。

激活函数

在这里插入图片描述

  PNN论文里提出,relu和tanh比sigmoid函数更适合Deep模型。图7是relu和tanh的效果对比。除了IPNN,relu比tanh的效果更好。可能的原因是relu引入了稀疏性。

dropout
在这里插入图片描述
  Dropout指的是神经元在网络中保留的概率,是一种正则化的技巧。保证了网络的性能和准确性。我们尝试了把Dropout设为: 1.0 、 0.9 、 0.8 、 0.7 、 0.6 、 0.5 1.0、0.9、0.8、0.7、0.6、0.5 1.00.90.80.70.60.5。如图8所示,通过设置合适的Dropout,每个模型都能达到它的最优效果。实验结果表明,通过添加适当的随机性,可以增强模型的鲁棒性。

每层神经元个数

在这里插入图片描述

  当其他因素保持不变时,增加每层神经元的数量会引入复杂性。从图 9 可以看出,增加神经元的数量并不总能带来好处。 例如,当每层神经元数量从 400 400 400 增加到 800 800 800 时,DeepFM 性能稳定; 更糟糕的是,当我们将神经元的数量从 400 400 400 个增加到 800 800 800 个时,OPNN 的表现更差。这是因为过于复杂的模型很容易过拟合。 在我们的数据集中,每层 200 200 200 400 400 400 个神经元是一个不错的选择。

隐藏层数

在这里插入图片描述

  如图 10 所示,增加隐藏层的数量在开始时会提高模型的性能,但是,如果隐藏层的数量不断增加,它们的性能会下降。 这种现象也是因为过拟合。

网络结构

  我们测试了4种不同形状的网络结构: 定长、递增、递减、菱形结构。在改变网络形状的时候,我们保持隐藏层数和神经元个数不变。例如,设隐藏层数为 3 3 3、神经元总数为 600 600 600。那么, 4 4 4 种网络结构分别为: 定长( 200 − 200 − 200 200-200-200 200200200)、递增( 100 − 200 − 300 100-200-300 100200300)、递减( 300 − 200 − 100 300-200-100 300200100)、菱形( 150 − 300 − 150 150-300-150 150300150)。从图11看出,定长的形状效果明显优于其他形状,这个结论跟之前 Larochelle09年的论文里的结论是一致的。
在这里插入图片描述

5.相关工作

  在本文中,提出了一种新的深度神经网络用于 CTR 预测。 最相关的领域是推荐系统中的 CTR 预测和深度学习。 在本节中,我们将讨论这两个领域的相关工作。

  CTR 预测在推荐系统中起着重要作用 。除了广义线性模型和 FM,还提出了一些其他模型用于 CTR 预测,例如基于树的模型、基于张量的模型、支持向量机 和贝叶斯模型。深度学习在推荐系统方面的工作,在第 1 节和第 2.2 节中,已经提到了几种用于 CTR 预测的深度学习模型,因此我们在此不再讨论。在 CTR 预测之外的推荐任务中提出了几种深度学习模型(例如,[Covington et al., 2016; Salakhutdinov et al., 2007; van den Oord et al., 2013; Wu et al.,2016; Zheng et al. ., 2016; Wu et al., 2017; Zheng et al., 2017])。[Salakhutdinov 等人,2007 年; Sedhain 等人,2015 年;Wang 等人,2015 年] 提出通过深度学习改进协同过滤。[Wang and Wang, 2014;van den Oord et al., 2013] 的作者通过深度学习提取内容特征以提高音乐推荐的性能。[Chen et al., 2016] 设计了一个深度学习网络来考虑图像特征和显示广告的基本特征。[Covington et al., 2016] 开发了一个用于 YouTube 视频推荐的两阶段深度学习框架。

6.结论

  在本文中,我们提出了 DeepFM,一种基于神经网络的FM模型进行 CTR 预测,以克服最先进模型的缺点并实现更好的性能。 DeepFM 联合训练一个Deep组件和一个 FM 组件。它从以下优点中获得了性能改进:

  1. 不需要任何预训练;
  2. 它同时学习高阶和低阶特征交互;
  3. 它引入了特征嵌入的共享策略,以避免特征工程。我们对两个真实的数据集(Criteo 数据集和商业 App Store 数据集)进行了广泛的实验,以比较 DeepFM 和最先进模型的有效性和效率。我们的实验结果表明:1)DeepFM 在两个数据集上的 AUC 和 Logloss 均优于最先进的模型;2)DeepFM 的效率可与最先进的最有效的深度模型相媲美。

  未来的研究有两个有趣的方向。一是探索一些策略(例如引入池化层)来加强学习最有用的高阶特征交互的能力。另一种是在 GPU 集群上针对大规模问题训练 DeepFM。

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

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

相关文章

前端实现自动化测试

什么是前端测试 我们经常说的单元测试其实只是前端测试的一种。前端测试分为单元测试&#xff0c;UI 测试&#xff0c;集成测试和端到端测试。 ● 单元测试&#xff1a;是指对软件中的最小可测试单元进行检查和验证&#xff0c;通常指的是独立测试单个函数。 ● UI 测试&#…

2023美赛Y题二手帆船价格--成品论文、思路、数据、代码

2023美赛Y题二手帆船价格 第一时间在CSDN分享 最新进度在文章最下方卡片&#xff0c;加入获取一手资源&#xff1a;2023美赛Y题二手帆船价格–成品论文、思路、数据、代码 可以提供关于帆船特性的信息: BoatTrader (https://www.boattrader.com/):一个网站&#xff0c;允许您根…

WindowsGUI自动化测试项目实战+辛酸过程+经验分享

WindowsGUI自动化测试项目实战辛酸过程经验分享一、前言⚜ 起因⚜ 项目要求⚜ 预研过程⚜⚜ 框架选型⚜⚜ 关于UIaotumation框架⚜ 预研成果二、项目介绍&#x1f493; 测试对象&#x1f493; 技术栈&#x1f493; 项目框架说明三、项目展示&#x1f923; 界面实现效果&#x1…

【深度学习】windows10环境配置详细教程

【深度学习】windows10环境配置详细教程 文章目录【深度学习】windows10环境配置详细教程Anaconda31.安装Anaconda32.卸载Anaconda33.修改Anaconda3安装虚拟环境的默认位置安装cuda/cudnn1.安装合适的CUDA2.安装对应的CUDNN3.卸载CUDA/CUDNNconda虚拟环境独立安装cuda/cudnn1.搭…

随想录Day55--动态规划: 392.判断子序列 , 115.不同的子序列

392.判断子序列 思路 &#xff08;这道题也可以用双指针的思路来实现&#xff0c;时间复杂度也是O(n)&#xff09; 动态规划五部曲分析如下&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和…

基线配置管理在网络中的重要性

在网络环境中&#xff0c;配置通常被认为具有不可估量的价值&#xff0c;因为设备配置的微小变化可以在几分钟内成就或破坏整个网络基础设施。 这些配置分为两部分&#xff1a;启动配置和运行配置。在网络设备中&#xff0c;默认情况下&#xff0c;第一个配置版本被视为运行和…

el-input-number的精度问题

前言 el-input-number 饿了么的数字输入框组件&#xff0c;在项目中听常用的。而这个组件比较常用的属性就是精度设置&#xff0c;给组件添加属性precision 。 其实吧&#xff0c;之前一直没怎么研究&#xff0c;保留几位小数就直接填几就好了&#xff0c;比如保留两位小数&am…

4.mysql内置函数

目录 日期函数 字符串函数 数学函数 其它函数 日期函数 获得当前年月日:

<点云>Bin-picking数据集

题目&#xff1a;工业料仓拣选的大规模6D物体姿态估计数据集 Abstract 介绍了一种新的公共数据集&#xff0c;用于6D对象姿态估计和用于工业bin-picking的实例分割。数据集包括合成场景和真实场景。对于这两者&#xff0c;提供了包括6D姿势 (位置和方向) 的点云、深度图像和注…

【华为机试真题详解JAVA实现】—从单向链表中删除指定值的节点

目录 一、题目描述 二、解题代码 一、题目描述 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 链表的值不能重复。 构造过程,例如输入一行数据为: 6 2 1 2 3 2 5 1 4 5 7 2 2 则第一个参数6表示输入总共6个节点,…

C++基础语法(内存管理)

我们在学习C语言的时候&#xff0c;可以在栈区中使用内存空间&#xff0c;但栈区的空间毕竟很有限而且随着栈的销毁&#xff0c;该栈里的数据都会被销毁掉。因此我们学习了堆&#xff0c;堆的空间比栈要大很多很多&#xff0c;并且堆区空间的数据&#xff0c;只要我们不主动释放…

STM32 学习笔记_2 下载,GPIO 介绍

下载 Keil 编译例程 编译两个按钮&#xff0c;一个向下是部分编译&#xff0c;两个向下箭头是全部编译。对于未编译文件两个按钮等效。 点击编译后&#xff0c;linking 是链接&#xff0c;结果里面的几个数据的意义代表大小&#xff1a; 数据类型占用Flash or SRAM说明Code…

测试:腾讯云3年轻量2核4G5M服务器CPU内存带宽流量系统盘性能

2核4G云服务器可以选择腾讯云轻量应用服务器&#xff0c;自带5M公网带宽&#xff0c;5M带宽下载速度峰值可达640KB/秒&#xff0c;系统盘为60GB SSD盘&#xff0c;每月500GB流量包&#xff0c;折合每天16GB流量&#xff0c;2核4G5M轻量服务器一年168、198元15个月、三年628元&a…

从存算分离说起:金融行业数据库分布式改造之路

从上世纪90年代正式起步至今&#xff0c;中国数据库发展已走过近30年岁月。以2000年前后为拐点&#xff0c;以MySQL为首的开源数据库&#xff0c;在互联网厂商的推动下&#xff0c;逐步进入生产业务&#xff1b;而为了使单实例能力平庸的MySQL能够满足高性能要求&#xff0c;互…

Vulnhub:Digitalworld.local (JOY)靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.130 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 使用enum4linux枚举目标smb服务&#xff0c;发现两个系统用户 enum4linux -a 192.168.111.130 ftp可以匿名登陆&#xff…

基于CH32F203利用TIM1 同时输出4通道固定PWM占空比波形

基于CH32F203利用TIM1 同时输出4通道固定PWM占空比波形&#x1f4cc;相关篇《关于CH32F203程序下载方式说明》&#x1f4cd;有关CH32F203资料手册以及SDK资料&#xff1a;https://www.wch.cn/products/CH32F103.html&#x1f334;《树莓派RP2040 100M 24通道逻辑分析仪开源项目…

相关系数python实现

皮尔逊相关系数的python实现一、相关系数公式二、python实现法1&#xff1a;直接按公式算法2&#xff1a;调用numpy中的corrcoef方法法3&#xff1a;调用scipy.stats中的pearsonr方法法4&#xff1a;调用pandas.Dataframe中的corr方法一、相关系数公式 R的值在-1和1之间&#…

AJAX | 拦截器、文件上传和下载

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; AJAX Ajax即Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;&#xff1b;Ajax技术网页应用能够快速地将增量更新呈现在用户界面上&…

Docker 镜像原理

Linux文件系统由bootfs和rootfs两部分组成&#xff1a;- bootfs&#xff1a;包含bootloader&#xff08;引导加载程序&#xff09;和 kernel&#xff08;内核&#xff09;- rootfs&#xff1a; root文件系统&#xff0c;包含的就是典型 Linux 系统中的/dev&#xff0c;/proc&am…

Verilog | 二进制与格雷码

一、格雷码简介 格雷码是一个叫弗兰克格雷的人在 1953 年发明的&#xff0c;最初用于通信。格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时&#xff0c;只有一个数据位发生跳变&#xff0c;由于这种特点&#xff0c;就可以避免二进…