机器学习之自监督学习(五)MAE翻译与总结(二)

news2024/11/16 20:24:05

参考:Self-Supervised Learning 超详细解读 (六):MAE:通向 CV 大模型 - 知乎 (zhihu.com)

仅供个人学习使用,侵权私信删。

自监督学习:MAE.. 1

1.1 self-supervised learning.. 1

1.2 Masked Autoencoders(MAE)方法概.... 2

1.3 MAE Encoder... 4

1.4 MAE Decoder... 4

1.5 自监督学习目标函数 Reconstruction Target(重建目标).... 4

1.6 具体实现方法.... 5

1.7 ImageNet 实验结果.... 5

1.8 masking ratio 对性能的影响.... 5

1.9 观察到的一些实验现象.... 6

1.10 训练策略.... 7

1.11 结果对比.... 8

1.12 Partial Fine-tuning.. 9

总结.... 9

自监督学习:MAE

Self-Supervised Learning,又称为自监督学习,我们知道一般机器学习分为有监督学习,无监督学习和强化学习。 Self-Supervised Learning 是无监督学习里面的一种,主要是希望能够学习到一种通用的特征表达用于下游任务 (Downstream Tasks) 其主要的方式就是通过自己监督自己。作为代表作的 kaiming MoCo 引发一波热议, Yann Lecun也在 AAAI 上讲 Self-Supervised Learning 是未来的大势所趋。所以在这个系列中,我会系统地解读 Self-Supervised Learning 的经典工作。

1.1 self-supervised learning

在预训练阶段使用无标签的数据解(unlabeled  data),因为有标签的数据集需要大量的人工去进行标注,需要非常高的人工成本,但是无标签的数据在网络上到处可见,通过爬取的方式也便于收集。在训练模型参数的时候,我们不追求把这个参数用带标签数据从初始化的一张白纸给一步训练到位,原因就是数据集太贵。于是 Self-Supervised Learning 就想先把参数从一张白纸训练到初步成型,再从初步成型训练到完全成型。注意这是2个阶段。

预训练模型的时候,就是模型参数从一张白纸到初步成型的这个过程,还是用无标签数据集。等我把模型参数训练个八九不离十,这时候再根据你下游任务 (Downstream Tasks) 的不同去用带标签的数据集把参数训练到完全成型,那这时用的数据集量就不用太多了,因为参数经过了第1阶段就已经训练得差不多了。

第一个阶段不涉及任何的下游任务,就是拿着一堆无标签的数据去训练我们的网络,没有设定特定的任务。第二个阶段涉及下游任务,就是拿着一堆带标签的数据去下游任务上做微调,

1.2 Masked Autoencoders(MAE)方法概

本文使用带掩码的自编码器进行自监督学习,另一个同种类型的自监督学习例子是BERT

对于BERT模型而言,一个sentence中间盖住一些tokens,让模型去预测,令得到的预测结果与真实的tokens之间的误差作为损失函数,它告诉了我们直接 reconstruct sentence(重建的句子) 也可以做到很 work

对于 MAE 模型而言,一个 image 中间盖住一些 patches,让模型去预测,令得到的预测结果与真实的 image patches 之间的误差作为损失。它告诉了我们直接 reconstruct image(重构的图片) 原图也可以做到很work

为什么 BERT (2018) 提出这么久以后,直到 BEIT (2021.6) MAE (2021.11) 之前,一直在 CV 领域都没有一个很类似的 CV-BERT 出现?

Kaiming在这里给出了三个解释:

  1. CV NLP 主流架构不同:直到 ViT (2020.12) 出现之前,CV 的主流架构一直是以卷积网络为主,NLP 的主流架构一直是以 Transformer 为主。卷积核作用在一个个的 grid 上面,直观来讲没法产生像 Transformer 一样的 token 的概念,也就是说如果我们只使用卷积网络,那么 image token 概念的建立就不那么直观。所以,像 Transformer 那样在 token 的基础上进行自监督学习就不太适用,这是第一个难点。
  2. 语言和图片 (视频) 的信息密度不同:语言是人类造就的信号,它 highly semantic information-dense。而图片 (视频) 是自然产生的信号,它 heavy spatial redundancy。即挡住图片的一部分 patches,可以很容易地通过看它周围的 patches 而想象出它的样子来。所以,语言和图像,一个信息密度高,一个信息密度低,这是第二个难点。解决的办法是什么呢?作者提出了一个简单的策略:即挡住图片的 patches 的比例高一些。比如之前你挡住一张图片的 30% patches,能够轻松通过周围的 patches 预测出来;那现在如果挡住图片的 90% patches,还能够轻松通过周围的 patches 预测出来吗?
  3. AutoEncoder 里面的 Decoder 部分 (就是将映射得到的中间特征重建为 input 的模块) CV NLP 中充当的角色不同:在 CV 领域,Decoder 的作用是重建 image pixels,所以 Decoder 的输出语义级别很低。在 NLP 领域,Decoder 的作用是重建 sentence words ,所以 Decoder 的输出语义级别很丰富。

基于以上的解释:MAE 的方法很简单:Mask 掉输入图像的随机的 patches 并重建它们。它基于两个核心理念:研究人员开发了一个非对称编码器 - 解码器架构,其中一个编码器只对可见的 patch 子集进行操作 (即没有被 mask 掉的 token),另一个简单解码器可以从潜在表征和被 masked 掉的 token 重建原始图像。Decoder 的架构可以是十分轻量化的模型,且具体的架构对模型性能影响很大。研究人员进一步发现,Mask 掉大部分输入图像 (例如 75%) 会产生重要且有意义的自监督任务。结合这两种设计,我们就能高效地训练大型模型:提升训练速度至 3 倍或更多,并提高准确性。

MAE 方法严格来讲属于一种去噪自编码器 (Denoising Auto-Encoders (DAE)),去噪自动编码器是一类自动编码器,它破坏输入信号,并学会重构原始的、未被破坏的信号。MAE Encoder Decoder 结构不同,是非对称式的。Encoder 将输入编码为 latent representation(潜在表示),而 Decoder 将从 latent representation (潜在表示)重建原始信号。

/**-----------------------------------------------***---------------------------------------------------**/

对于去噪自编码器的详细解释:

去噪自动编码器(Denoising Autoencoder)是一种神经网络模型,旨在从包含噪声的输入数据中学习干净的、有用的特征表示。它是自动编码器(Autoencoder)的一种变体,具有以下工作原理:

1. 编码(Encoding):去噪自动编码器首先接收一个包含噪声的输入数据。这个输入数据可能受到不同类型的噪声、干扰或失真的影响,例如图像中的像素噪声、文本中的错字等。编码器部分负责将这个噪声输入数据转换为一种更紧凑的表示,即编码。编码的目标是捕获输入数据中的有用特征,并且抑制或去除噪声成分。编码器通常由神经网络层组成,其输出是编码后的特征。

2. 去噪(Denoising):这是去噪自动编码器的核心概念。在编码过程中,编码器会强制模型通过学习来去除输入数据中的噪声,使得编码的特征表示尽可能干净和有用。噪声可以是随机的或有针对性的,具体取决于应用场景。

3. 解码(Decoding):解码器部分接收编码后的特征表示,并将其还原为尽可能接近原始数据的形式。解码的目标是生成无噪声或去噪后的输出数据,使其与原始输入数据相似。解码器通常由神经网络层组成,其输出是解码后的数据。

4. 训练:训练去噪自动编码器的过程通常包括以下步骤:

   - 向输入数据中添加噪声:通过引入噪声,模拟现实世界中的数据干扰或噪声。

   - 使用编码器将噪声数据转换为编码。

   - 使用解码器将编码后的特征还原为尽可能接近原始数据的形式。

   - 比较解码后的数据与原始数据之间的差异,并使用损失函数来度量它们之间的误差。

   - 调整编码器和解码器的参数,以最小化损失函数。这样,模型将学会去噪输入数据,并提取有用的特征。

去噪自动编码器的应用包括降维、特征学习、图像去噪、异常检测等。通过去除噪声并学习有用的特征表示,这种模型有助于提高数据质量和支持各种数据分析和处理任务。

MAE ViT 的做法一致,将图像划分成规则的,不重叠的 patches。然后按照均匀分布不重复地选择一些 patches 并且 mask 掉剩余的 patches。作者采用的 mask ratio 足够高(75%),因此大大减小了 patches 的冗余信息,使得在这种情况下重建 images 不那么容易。所以模型可以学到信息。

/**-----------------------------------------------***---------------------------------------------------**/

1.3 MAE Encoder

MAE Encoder 采用 ViT 架构,但只会作用于 unmasked images。和 ViT 思路一样,MAE Encoder 会先通过 Linear Projection(线性投影) 编码图片,再加上位置编码,随后送入一堆连续的 Transformer Block 里面。但是编码器只对整个图片 patches 集合的一个小子集 (例如25%)进行操作,而删除 masked patches。这里和 BERT 做法不一样,BERT 使用对于 mask 掉的部分使用特殊字符(使用其他字符替代、MASK或者不改变),而 MAE 对于MASK patchs 不作为encoder的输入。

1.4 MAE Decoder

MAE Decoder 采用 Transformer 架构,输入整个图片 patches 集合,不光是 unmasked tokens (4中蓝色色块),还有被 mask 掉的部分 (4中灰色色块)。每个 mask tokens 都是一个共享的、学习的向量,它指示了这里有一个待预测的 tokens。作者还将位置嵌入添加到这个完整 image patch 集合中的所有 tokens 中,位置编码表示每个 patches 在图像中的位置的信息。

MAE Decoder 仅用于预训练期间执行图像重建任务。因为自监督学习的特点就是只用最后预训练好的 Encoder 完成分类任务。因此,可以灵活设计与编码器设计无关的解码器结构。作者用比编码器更窄更浅的很小的解码器做实验。 在这种非对称的设计下,tokens 就可以由轻量级解码器处理,这大大缩短了预训练的时间。

1.5 自监督学习目标函数 Reconstruction Target(重建目标)

Decoder 的最后一层是一个 Linear Projection (线性投影)层,其输出的 channel 数等于图像的像素 (pixel) 数。所以 Decoder 的输出会进一步 reshape 成图像的形状。损失函数就是 MSE Loss,即直接让 reconstructed image(重构的图像) input image(输入的图像) 的距离越接近越好。实际的损失函数的设计为reconstructed patchmask patchs之间求解MSE Loss

作者还尝试了另外一种损失函数,就是先计算出每个 patch 的像素值的 mean(均值) deviation(方差),并使用它们去归一化这个 patch 的每个像素值。最后再使用归一化的像素值进行 MSE Loss 计算。但是发现这样做的效果比直接 MSE Loss 好。

1.6 具体实现方法

MAE 的具体实现方法是:

  • 首先通过 Linear Projection (线性投影)和position embedding得到 image tokens
  • 随机 shuffle 这些 tokens,按照 masking ratio 扔掉最后的一部分。
  • unmasked patches 输出到 Encoder 中,得到这些 tokens 的表征。
  • Encoder 的输出,结合 masked tokens (经过position embedding的可学习的向量),执行 unshuffle操作恢复顺序,再一起输入到 Decoder 中。
  • shuffle unshuffle 操作的时间开销可忽略不计。

MAE中:在推理时 Encoder 的输入在 pretrain 的时候 mask 掉了部分,在进行微调时encoder的输入不需要再进行mask,序列长度发生变化,MAE是怎么处理这种长度变化的

由于MAE的编码器在pretrain fine-tuning输入的维度维度不同,我们在编码器之后采用线性投影层进行匹配。

1.7 ImageNet 实验结果

1个实验使用 ViT-Large (ViT-L/16) 作为 Encoder Backbone,作者首先对比了3个结果,如下图5所示:

76.5VIT论文的ViT-large使用ImageNet训练的结果。

82.5是通过在ViT-large的基础上添加合适的正则化实现的,作者认为要使用较大的 weight decay = 0.382.5的实验设置如下图6所示。

84.9 是作者自己实现的,ViT-Large 使用 MAE pretrain 之后,再在 ImageNet 上做完整 Fine-tuning 的结果,可以看到优于有监督的 82.5

1.8 masking ratio 对性能的影响

如下图3所示代表了 masking ratio 对结果的影响。最优的 masking ratio 竟然出乎意料地高,且当 masking ratio=75% 时,linear probing fine-tuning 的性能依旧很高。 这种行为与 BERT 相反,BERT 的典型mask ratio 只有15%。从这个结果可以得出结论:MAE 自监督训练好的模型可以推断出缺失的补丁。作者假设这种类似推理的行为,与学习有用的表征有关。

3还显示了linear probing fine-tuning 的结果随着的不同的变化趋势。对于 fine-tuning,结果是40-80% masking ratio 都能表现良好。

7。训练时间表。较长的训练计划会带来显著的改善。这里的每一点都是一个完整的训练时间表。模型是ViT-L,默认设置见表1

1.9 观察到的一些实验现象

如下图4所示,作者做了一些不同实验设置下的对比实验。

1。在ImageNet-1K上用ViT-L/16进行的MAE消融实验。我们报告了微调(ft)和线性探测(lin)精度(%)。如果未指定,默认为:解码器深度为8,宽度为512,重建目标为非标准化像素,数据增强为随机调整大小的裁剪,掩蔽率为75%,预训练长度为800个时期。默认设置以灰色标记。

8 (a):足够深的 Decoder 对于 linear probing 很重要。原因:pixel reconstruction task recognition task 本质不同,AutoEncoder 的末尾几层对于重建 pixel 更重要。而且有趣的是,只有1 Block Decoder fine-tuning 之后就能达到84.8% accuracy。默认配置是8层。

8 (b):更窄的 Decoder 也能够在 fine-tuning 时获得较好的性能。默认配置是 Embedding dimension=512

计算量只有 ViT-L 9%

8 (c):研究有没有必要在输入 Encoder 的时候一并输入 masked patches。结果发现,如果也一起给 Encoder 输入了 mask tokens,效果其实是变差的:Linear Probing 性能降低了14%。作者认为,这可能是因为:在这种情况下,在预训练和部署之间存在差距。即:编码器在预训练的输入中有很大一部分是 mask tokens,这在未损坏的图像中是不存在的。这个 gap 可能会降低部署的准确性。

而且,通过跳过编码器中的 mask token,大大减少了训练计算量 (3.3) 此外,GPU memory 大大减少,这可以使训练更大的模型或加快 large-batch training。时间和 GPU memory 效率使我们更适合训练大型模型。

8 (d):不同损失函数的影响。除了 MSE Loss 以外,作者还尝试了另外一种损失函数,就是先计算出每个 patch 的像素值的 mean deviation,并使用它们去归一化这个 patch 的每个像素值。最后再使用归一化的像素值进行 MSE Loss 计算。但是发现这样做的效果比直接 MSE Loss 好。

8 (e):不同数据增强策略的影响。MAE 只使用 cropping-only 就比较好,而进一步添加 color jittering 会影响性能。 即使没有使用数据增强 (only center-crop, no flipping) MAE 模型仍然能够表现得体。作者也给出了原因,即:在 MAE 中,数据增强的角色其实是由 random masking 来扮演的。每个 iteration mask 都不同,所以就相当于是产生了新的训练样本。

8 (f),图f:不同 mask 采样策略的影响。block-wise masking mask 50%时的效果还行,但是当 mask ratio 达到75%时性能就大幅下降了。grid-wise sampling 使得任务变得更简单,但相应的,图像重建质量也下降了。 简单的随机抽样最适合 MAE 模型。

6。掩模采样策略决定了借口任务的难度,影响重建质量和表征(表1f)。这里,每个输出都来自用指定的掩蔽策略训练的MAE。左图:随机抽样(我们的默认)。中间:移除大的随机块的分块采样[2]。右图:每四个补丁中保留一个的网格采样。图像来自验证集。

1.10 训练策略

下图10展示了不同 training epochs 的影响。在 training epochs=1600 MAE 还没有达到饱和。

1.11 结果对比

如下图11所示为不同自监督方法性能对比,对于 ViT-B 模型,所有的方法性能相似,但是对于更大的 ViT-L 模型,性能差距就拉开了,证明了 MAE 对于大模型的泛化性能。

3。与ImageNet1K上以前的结果进行比较。预训练数据是ImageNet-1K训练集(除了BEiT中的标记器是在250M DALLE数据上预训练的[50])。所有自监督方法都通过端到端微调进行评估。ViT模型有B/16L/16H/14[16]。每列的最佳值用下划线标出。所有结果都在224大小的图像上,除了ViT-H448上有一个额外的结果。这里,我们的MAE重建归一化像素,并对1600个时期进行预训练。

使用 ViT-H 结构的 Encoder,经过 448 fine-tuning 之后可以得到 87.8% Accuracy,而整个过程只使用了 ImageNet 数据集。

BEiT 相比,MAE 更快,训练方式更简单,MAE 重建 pixel,而 BEiT 重建 tokens。图11中的模型是为了更高的精度预先训练的 1600 epochs 的模型。即便如此,如果他们在同样的硬件环境下训练,我们总的训练前时间比其他任何方法都短。例如,对于 ViT-LMAE 的训练时间是1600 epochs31小时。moco v3的训练时间是300 epochs36小时,使用相同的128 TPU-v3 核心。

1.12 Partial Fine-tuning

最后,作者提出了一种 Partial Fine-tuning 的新套路,它不同于之前人们常用的 Linear Probing (只训练最后一层线性分类器的参数 Fine-tuning (训练所有层的参数)

Partial Fine-tuning 是指 只训练最后模型的若干层的参数。如下图12所示,值得注意的是,Fine-tuning 1 Transformer Block 可以把 Accuracy 73.0%提升至81.0%。此外,如果我们只Fine-tuning 1 Transformer Block MLP block,我们可以得到79.1% ,比 Linear Proing 要好得多。

9ViT-L w.r.t。的部分微调结果表1中默认设置下微调的Transformer块数。调优0块是线性探测;24是完全微调。我们的MAE表示不太线性可分,但如果调整一个或多个块,始终优于MoCo v3

总结

MAE pre-training 只需 ImageNet-1k 就能达到 87.8% Top-1 准确度,超过了所有在 ImageNet-21k pre-training ViT 变体模型。而从方法上看,MAE 选择直接重建原图的元素,而且证明了其可行性,改变了人们的认知,又几乎可以覆盖 CV 里所有的识别类任务,看起来像是开启了一个新的方向。直接重建原图的元素是非常重要的,因为通过这个形式,作者就用最最直观的方式完成了 MIM 任务,使得 MIM的潜力逐步被证实。从 MLM MIM 的过渡已被证明,由此观之比肩 GPT3 CV 预训练大模型已不远矣。

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

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

相关文章

【C】内存函数

目录 1. memcpy 使用和模拟实现 2. memmove 使⽤和模拟实现 3. memset 函数的使用 4. memcmp 函数的使用 1. memcpy 使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到d…

某图app sig、client_session

文章目录 声明目标加密参数定位代码实现声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 目标 这次看一下某图秀秀app 搜索接口: 抓一下包 url参数提取 url = "https://api.x…

springboot项目同时启动web服务和grpc服务

springboot项目同时启动web服务和grpc服务 一. 创建项目二. 引入依赖三. 测试3.1 http服务3.2 grpc服务 四. 整体代码结构 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一. 创建…

推荐几个比较给力的网站,看看有没有你喜欢的

1、电子书大全 Loading...免翻墙 消除背景 在线抠图软件_图片去除背景 | remove.bg – remove.bg 临时邮箱 http://linshiyouxiang.net/ 在线短信验证码接收码平台 https://www.yinsiduanxin.com/ 图片放大无损失 waifu2x小翻墙 AI 人工智能图片放大 Bigjpg - AI Su…

【Spring源码】Spring Event事件

目录 1、前言 2、什么是Spring Event? 3、基本使用 3.1、定义事件 3.2、发布事件 3.3、监听事件 3.3.1、继承ApplicationListener 3.3.2、使用EventListener注解 4、Spring Event是同步还是异步? 4.1、源码实现 4.2、如何实现异步 4.2.1、使用…

什么是 Jest ? Vue2 如何使用 Jest 进行单元测试?Vue2 使用 Jest 开发单元测试实例

什么是Jest? Jest 是一个流行的 JavaScript 测试框架,由 Facebook 开发并维护,专注于简单性和速度。它通常用于编写 JavaScript 和 TypeScript 应用程序的单元测试、集成测试和端到端测试。 特点: 简单易用: Jest 提供简洁的 API 和易于理解的语法,使得编写测试用例变得…

【Android Gradle】之Gradle入门及 wrapper 生成(一)

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

大中小协作 共筑科学梦——华中科技大学附属花城中学举办首届科技节

为普及科学知识,张扬科学精神,创设浓郁的科学氛围,11月24日,华中科技大学附属花城中学举办了以“走近科学,触碰未来”为主题的首届科技节暨科创文化展示周活动。学生们在学习中感受科技的魅力,在“玩”中感…

Vue新手必学:Vue的使用和Vue脚手架详解

文章目录 引言第一部分:Vue的基本使用1.1 安装Vue1.2 创建Vue项目1.3 编写第一个Vue组件1.4 在主页面中使用组件1.5 运行Vue项目 第二部分:Vue脚手架的使用2.1 Vue脚手架是什么2.2 创建Vue项目2.3 项目结构2.4 运行项目2.5 插件和配置 第三部分&#xff…

2023年汉字小达人市级比赛在线模拟题的使用顺序、建议和常见问题

今天是2023年11月25日,星期六,上午举办了2023年第八届上海小学生古诗文大会的复选活动(复赛),结束了复选活动,很多学霸孩子们马上就开始投入到第十届汉字小达人的市级活动(市级比赛)…

使用 PyODPS 采集神策事件数据

文章目录 一、前言二、数据采集、处理和入库2.1 获取神策 token2.2 请求神策数据2.3 数据处理-面向数组2.4 测试阿里云 DataFrame 入库2.5 调度设计与配置2.6 项目代码整合 三、小结四、花絮-避坑指南第一坑:阿里云仅深圳节点支持神策数据第二坑:神策 To…

小米AI布局的三大亮点:财报数据、高层视野、未来想象

小米作为一家以互联网为核心的智能终端和生态链公司,一直在不断探索人工智能(AI)的应用和创新。在最近公布的2023年第三季度财报中,小米透露了一些关于AI业务的重要信息,展现了其在AI领域的核心业务和竞争优势&#xf…

github上不去

想要网上找代码发现github上不去了 发现之前的fastgit也用不了了 搜了很多地方终于找到了 记录保存一下 fastgithub最新下载 选择第二个下载解压就行 使用成功!

Cisco Packet Tracer配置命令——路由器篇

路由基础 路由器用于互联两个或多个网络,具有两项功能:为要转发的数据包选择最佳路径以及将数据包交换到正确的端口,概括为路由选择和分组转发。 路由选择 路由选择就是路由器根据目的IP地址的网络地址部分,通过路由选择算法确…

在Spring Boot中使用@Async实现一个异步调用

在使用异步注解之前,我们需要先了解,什么是异步调用? 异步调用对应的事同步调用,同步调用是值程序按照我们定义的顺序依次执行,每一行程序都必须等待上一行的程序执行完成之后才执行,而异步是指在顺序执行…

c语言:模拟实现各种字符串函数

strlen函数: 功能:获取到\0之前的的字符个数。 代码模拟实现函数: //strlen //这里用了递归法, //如abc,1bc,然后11c,接着111,最后读取到\0,1110,得到结果3…

[数据结构]-红黑树

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、红黑树的…

Oracle的安装及使用流程

Oracle的安装及使用流程 1.Win10安装Oracle10g 1.1 安装与测试 安装版本: OracleXEUniv10.2.1015.exe 步骤参考:oracleXe下载与安装 安装完成后测试是否正常 # 输入命令连接oracle conn sys as sysdba; # 无密码,直接按回车 # 测试连接的s…

kafka 集群 KRaft 模式搭建

Apache Kafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序 Kafka 官网:https://kafka.apache.org/ Kafka 在2.8版本之后,移除了对Zookeeper的依赖,将依赖于ZooKeeper的控制器…

MySQL 库操作 | 表操作

文章目录 一.MySQL库的操作1.创建数据库2.字符集和校验规则3.操纵数据库 二.MySQL表的操作1.创建表2.操作表3.删除表 一.MySQL库的操作 1.创建数据库 创建数据库 创建数据库的SQL如下: CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSETcharset_name…