自监督分类网络:创新的端到端学习方法

在这里插入图片描述

现代人工智能的快速发展中,分类任务的高效解决方案一直备受关注。今天,我们向大家介绍一种名为Self-Classifier的全新自监督端到端分类学习方法。由Elad Amrani、Leonid Karlinsky和Alex Bronstein团队开发,Self-Classifier通过优化同一样本的两个增强视图的同类预测,能够在单阶段的端到端过程中同时学习标签和表示。

为了避免出现所有标签都被错误地分配到同一类的退化解决方案,研究团队提出了一种在预测标签上具有均匀先验的交叉熵损失的数学变体。经过理论验证,该方法能够有效地排除退化解,确保最优解的合理性和多样性。

Self-Classifier的设计简单且具有高度的可扩展性。与其他流行的无监督分类和对比表示学习方法不同,Self-Classifier无需预训练、期望最大化、伪标签、外部聚类、第二网络、停止梯度操作或负样本对等复杂步骤。尽管其实现过程简洁明了,该方法在ImageNet的无监督分类中设立了新的标杆,并且在无监督表示学习中也取得了与当前最先进方法相当的成果。有关更多细节和代码实现,您可以访问此处。

github:https://github.com/elad-amrani/self-classifier
.

接下来,我们将深入探讨Self-Classifier的工作原理及其在实际应用中的优势。

论文标题:Self-Supervised Classification Network
论文地址:https://arxiv.org/pdf/2103.10994v3

自监督分类网络:创新的端到端学习方法

  • 引言
  • 自监督学习在图像分类中的发展和方法
  • 无监督图像聚类方法
  • 自监督分类计算过程
  • 结果分析
    • 无监督图像分类
    • 实施细节
    • 图像增强
    • 优化

引言

近年来,自监督视觉表示学习逐渐成为研究热点。其核心思想是定义并解决一个前置任务,使得模型在没有任何人工标注标签的情况下能够学习到有意义的语义表示。这些学到的表示随后可以在较小的数据集上进行微调,并应用于各种下游任务。当前最先进的自监督模型大多基于对比学习,这些模型通过最大化同一图像的两个不同增强视图之间的相似性,同时最小化不同图像之间的相似性来实现目标。然而,尽管这些模型整体性能优异,对于某些下游任务(如无监督分类),它们所定义的前置任务目标可能并不完全契合。例如,用于预训练的实例区分方法在当前最先进的无监督分类方法中,虽然减少了所有实例之间的相似性,但这可能与分类任务的目标相悖。

为了解决这一问题,本文提出了一种基于分类的前置任务,其目标直接与最终的分类任务对齐。在这种方法中,我们只需要知道类别的数量C,便可学习到一个无监督分类器(Self-Classifier),使得同一图像的两个不同增强视图被分类为相同的类。然而,这样的任务容易产生退化解决方案,即所有样本都被分配到同一个类。为避免这种情况,我们在标准交叉熵损失函数上引入了均匀先验,使数据的均分成为最优解决方案。事实上,我们证明了这种方法的最优解集合不包括退化的解。

我们的方法也可以看作是一种结合了对比学习的深度无监督聚类方法。与传统的深度聚类方法类似,我们同时学习神经网络的参数和聚类分配。最近的一些研究成功地将聚类与对比学习结合,但通常将聚类作为一个独立的步骤用于伪标签。相反,本文的方法在单阶段端到端的方式下,仅使用小批量随机梯度下降(SGD)同时学习表示和聚类标签。

本文的主要贡献包括:

  1. 提出了一种简单而有效的自监督单阶段端到端分类和表示学习方法。与之前的方法不同,我们的方法不需要任何形式的预训练、期望最大化算法、伪标签或外部聚类,不需要记忆库、第二网络、外部聚类、停止梯度操作或负样本对。
  2. 尽管方法简单,但在ImageNet的无监督分类中设立了新的标杆,达到了41.1%的top-1准确率,取得了与最先进的无监督表示学习相当的结果,并在转移到COCO检测/分割任务时,比其他自监督方法显著提高(约2%的平均精度)。
  3. 首次提供了自监督分类预测与一组不同类层次对齐的定量分析,并在这一新指标上比之前的最先进方法显著提高(最多3.4%的调整互信息)。

在这里插入图片描述

上图为自分类器架构:同一图像的两个增强视图由主干网(例如CNN)和分类器(例如投影MLP+线性分类头)。交叉熵
最小化两个视图中的一个以促进同类预测,

自监督学习在图像分类中的发展和方法

自监督学习方法通过定义和解决前置任务来学习紧凑的语义数据表示。在这些任务中,自然存在的监督信号被用于训练。近年来,计算机视觉领域提出了许多前置任务,包括颜色化、拼图、图像修补、上下文预测、旋转预测和对比学习等。这些前置任务为自监督学习提供了丰富的研究方向,使得无监督的数据表示学习得到了广泛的发展和应用。

对比学习表现出极大的潜力,已成为自监督学习的标准方法。早期的两项对比学习研究是Exemplar CNN和非参数实例区分(NPID)。Exemplar CNN通过卷积神经网络分类器学习区分实例,每个类代表一个实例及其增强视图。尽管这种方法简单有效,但它不能扩展到任意大的无标签数据量,因为它需要一个与数据集大小相同的分类层(softmax)。NPID通过用噪声对比估计(NCE)来近似完整的softmax分布,并利用内存库存储每个实例的最新表示,避免在每个学习过程的时间步计算整个数据集的表示,从而解决了这个问题。这种近似方法是有效的,因为与Exemplar CNN不同,它允许在大量无标签数据上进行训练。然而,NPID提出的内存库引入了一个新问题——存储在内存库中的表示缺乏一致性,即内存库中不同样本的表示是在多个不同时间步计算的。尽管如此,Exemplar CNN和NPID激发了一系列关于对比学习的研究。

最近的一项研究SwAV与本研究最为相似。SwAV利用了对比方法,而无需计算成对比较。更具体地说,它在对数据进行聚类的同时,强制不同增强视图(或“视角”)的聚类分配保持一致,而不是直接比较特征。为避免所有样本收敛到单个聚类的简单解决方案,SwAV在使用反向传播进行表示学习和使用Sinkhorn-Knopp算法进行单独的聚类步骤之间交替进行。与SwAV不同,本研究提出了一种在单阶段端到端的方式中同时学习表示和聚类分配的模型。这种方法不仅简化了训练过程,还提高了分类和表示学习的效率。

无监督图像聚类方法

尽管多年来提出了许多深度聚类方法,但只有两种方法(SCAN和 SeLa)证明了在像ImageNet这样的大规模数据集上的可扩展性。这些方法在解决无监督图像分类任务方面取得了显著进展,但依然面临一些挑战。例如,传统的基于聚类的方法往往依赖于外部算法(如k-means)或者需要多个阶段的迭代,从而可能受限于局部最优解或者计算复杂度的增加。此外,这些方法通常需要手动调整超参数或者需要依赖额外的数据结构,如内存库或者聚类数目的先验知识。

近年来的研究趋势表明,单阶段端到端的深度聚类方法正在成为一个新的方向。这些方法旨在通过简化流程和减少人为干预来提高算法的鲁棒性和可扩展性。例如,本文提出的方法借鉴了对比学习和聚类的结合思想,通过在学习过程中引入均匀标签先验,有效地避免了退化的解决方案,并在ImageNet数据集上取得了显著的无监督分类性能提升。

总体而言,深度无监督聚类在自监督学习的框架下,不仅促进了图像特征表示的学习,还为大规模无标签数据的有效利用提供了新的可能性。然而,如何在保持算法简洁性的同时,进一步提升其性能和泛化能力,仍然是当前研究的关键挑战之一。未来的工作将集中于优化算法的效率,探索更具鲁棒性的损失函数设计,以及推动这些方法在更广泛的视觉任务和数据集上的应用。

自监督分类计算过程

在自监督学习中,通过定义一种预文本任务来学习图像数据的语义表示,而无需人工标注的标签。本文提出了一种名为 Self-Classifier 的方法,旨在通过学习同一图像样本的不同增强视图之间的相似性,来实现图像分类任务。让我们一起来看看这个方法是如何实现的。

目标

我们的目标是学习一个分类器 y = f ( x i ) ∈ [ C ] y=f(x_i) \in [C] y=f(xi)[C],其中
C C C是类别数,使得同一样本的不同增强视图被分类为相似的类别,同时避免退化的解决方案。

初始的交叉熵损失(Naive Cross-Entropy Loss)

最初的想法是通过最小化交叉熵损失来实现这一目标:

ℓ ~ ( x 1 , x 2 ) = − ∑ y ∈ [ C ] p ( y ∣ x 2 ) log ⁡ p ( y ∣ x 1 ) (1) \tilde{\ell}(x_1, x_2) = -\sum_{y \in [C]} p(y|x_2) \log p(y|x_1) \tag{1} ~(x1,x2)=y[C]p(yx2)logp(yx1)(1)

在这里, p ( y ∣ x ) p(y∣x) p(yx) 是由我们的模型(包括骨干网络和分类器)为所有类别(列)和批量样本(行)生成的 logits 矩阵的行 softmax,使用温度参数 τ r o w τ_{row} τrow。然而,简单地尝试最小化这种损失(式(1))往往会导致网络预测为常数类别 y y y,而不考虑输入 x x x

引入贝叶斯和总概率法则(Bayes and Total Probability Law)

为了解决上述问题,我们引入了贝叶斯和总概率法则:

p ( y ∣ x 2 ) = p ( y ) p ( x 2 ∣ y ) p ( x 2 ) = p ( y ) p ( x 2 ∣ y ) ∑ y ~ ∈ [ C ] p ( x 2 ∣ y ~ ) p ( y ~ ) (2) p(y|x_2) = \frac{p(y)p(x_2|y)}{p(x_2)} = \frac{p(y)p(x_2|y)}{\sum_{\tilde{y} \in [C]} p(x_2|\tilde{y}) p(\tilde{y})} \tag{2} p(yx2)=p(x2)p(y)p(x2y)=y~[C]p(x2y~)p(y~)p(y)p(x2y)(2)

p ( y ∣ x 1 ) = p ( y ) p ( y ∣ x 1 ) p ( y ) = p ( y ) p ( y ∣ x 1 ) ∑ x ~ 1 ∈ B 1 p ( y ∣ x ~ 1 ) p ( x ~ 1 ) (3) p(y|x_1) = \frac{p(y)p(y|x_1)}{p(y)} = \frac{p(y)p(y|x_1)}{\sum_{\tilde{x}_1 \in B_1} p(y|\tilde{x}_1) p(\tilde{x}_1)} \tag{3} p(yx1)=p(y)p(y)p(yx1)=x~1B1p(yx~1)p(x~1)p(y)p(yx1)(3)

这里, p ( x ∣ y ) p(x∣y) p(xy)是我们的 logits 矩阵的列 softmax,使用温度参数 τ c o l τ_{col} τcol。假设 p ( x 1 ) p(x_1) p(x1) 是均匀分布(在训练样本等概率的合理假设下),并且我们希望所有类别都被使用,因此对 p ( y ) p(y) p(y)假设一个直观的均匀先验。

提出的损失函数(Proposed Loss Function)

基于上述假设,我们提出了下面的损失函数:

ℓ ( x 1 , x 2 ) = − ∑ y ∈ [ C ] p ( x 2 ∣ y ) ∑ y ~ p ( x 2 ∣ y ~ ) log ⁡ ( N C p ( y ∣ x 1 ) ∑ x ~ 1 p ( y ∣ x ~ 1 ) ) (4) \ell(x_1, x_2) = -\sum_{y \in [C]} \frac{p(x_2|y)}{\sum_{\tilde{y}} p(x_2|\tilde{y})} \log \left( \frac{N}{C} \frac{p(y|x_1)}{\sum_{\tilde{x}_1} p(y|\tilde{x}_1)} \right) \tag{4} (x1,x2)=y[C]y~p(x2y~)p(x2y)log(CNx~1p(yx~1)p(yx1))(4)

这个损失函数的设计目的是使得两个不同视角的样本在类别预测上尽可能一致,从而促使模型学习到有意义的表示。

对称损失函数(Symmetric Loss Function)

为了进一步提升训练的效果,我们使用对称损失函数:

L = 1 2 ( ℓ ( x 1 , x 2 ) + ℓ ( x 2 , x 1 ) ) (5) \mathcal{L} = \frac{1}{2} \left( \ell(x_1, x_2) + \ell(x_2, x_1) \right) \tag{5} L=21((x1,x2)+(x2,x1))(5)

这个损失函数考虑了两个视角之间的对称性,确保了模型在处理不同视角时具有一致的表现。

综上所述,虽然 Self-Classifier 方法非常简单(只需几行类似于 PyTorch 的伪代码),但它在自监督分类任务中取得了新的技术突破,推动了这一领域的进展

算法步骤

步骤描述伪代码
输入参数 N N N: 批次中的样本数 C C C: 类别数
t r t_r tr, t c t_c tc: 行/列softmax温度 a u g ( ) aug() aug(): 随机数据增强 s o f t m a x X ( ) softmaxX() softmaxX(): 在维度 X X X上的 s o f t m a x softmax softmax, n o r m X ( ) normX() normX(): 维度 X X X上的 L 1 L1 L1标准化
遍历数据加载器for x in loader:
前向传播s1, s2 = model(aug(x)), model(aug(x))
计算对数概率log_y_x1 = log(N / C * norm0(softmax1(s1 / t_r)))
log_y_x2 = log(N / C * norm0(softmax1(s2 / t_r)))
计算logits的softmaxy_x1 = norm1(softmax0(s1 / t_c))
y_x2 = norm1(softmax0(s2 / t_c))
计算各自的损失l1 = -sum(y_x2 * log_y_x1) / N
l2 = -sum(y_x1 * log_y_x2) / N
计算对称损失L = (l1 + l2) / 2
反向传播L.backward()
优化器更新optimizer.step()

示例的PyTorch代码

以下是将伪代码转换为类似PyTorch风格的实现:

import torch
import torch.nn.functional as F# 定义参数
N = 32  # 批次大小
C = 10  # 类别数
t_r = 0.1  # 行softmax温度
t_c = 0.1  # 列softmax温度# 模型定义(请根据实际情况定义自己的模型)
class YourModel(torch.nn.Module):def __init__(self):super(YourModel, self).__init__()# 在这里定义你的模型架构self.fc = torch.nn.Linear(input_size, output_size)def forward(self, x):# 示例前向传播x = self.fc(x)return xmodel = YourModel()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 数据加载器设置(请根据实际情况设置自己的数据加载器)
data_loader = torch.utils.data.DataLoader(dataset, batch_size=N, shuffle=True)# 训练循环
for batch_idx, (x, _) in enumerate(data_loader):# 数据增强x_aug1 = aug(x)x_aug2 = aug(x)# 前向传播s1 = model(x_aug1)s2 = model(x_aug2)# 计算log概率log_y_x1 = torch.log(N / C * F.normalize(F.softmax(s1 / t_r, dim=-1), p=1, dim=-1))log_y_x2 = torch.log(N / C * F.normalize(F.softmax(s2 / t_r, dim=-1), p=1, dim=-1))# 计算logits的softmaxy_x1 = F.normalize(F.softmax(s1 / t_c, dim=-1), p=1, dim=-1)y_x2 = F.normalize(F.softmax(s2 / t_c, dim=-1), p=1, dim=-1)# 计算各自的损失l1 = -torch.sum(y_x2 * log_y_x1) / Nl2 = -torch.sum(y_x1 * log_y_x2) / N# 计算对称损失L = (l1 + l2) / 2# 反向传播optimizer.zero_grad()L.backward()optimizer.step()

结果分析

无监督图像分类

文章作者使用大规模ImageNet数据集评估了这些的方法,用于无监督图像分类(见表1至表3)。报告了标准的聚类评估指标:标准化互信息(NMI)、调整后的标准化互信息(AMI)、调整兰德指数(ARI)和聚类准确度(ACC)。

文章的方法在所有四个指标(NMI、AMI、ARI和ACC)上都达到了新的最先进性能,即使训练的epoch数量明显较少(见表1)。文章作者将这些的方法与最新的大规模深度聚类方法进行了比较,这些方法都在ImageNet上进行了显式评估。此外,还将这些的方法与最新的自监督表示学习方法(使用ImageNet预训练模型)进行了比较,这些模型经过拟合k均值分类器对训练集上的学习表示进行了推断。所有方法的推断都是在验证集上进行的(在训练期间未曾见过)。

当前最先进的方法SCAN是一个多阶段算法,包括:
1)预训练(800个epoch);
2)离线k最近邻挖掘;
3)聚类(100个epoch);
4)自标记和微调(25个epoch)。

相比之下,Self-Classifier是一个单阶段、易于实现的模型(参见算法1),只使用小批量SGD进行训练。仅仅在200个epoch后,Self-Classifier就超过了经过925个epoch训练的SCAN。

SCAN提供了有趣的定性分析,分析了其无监督类别预测与默认的(WordNet)ImageNet语义层次结构的某个级别的对齐情况。相比之下,提出了更多样化的定量指标,以评估自监督分类方法在默认的ImageNet层次结构不同级别上的性能,以及在经过精心策划的ImageNet子人口(BREEDS)的多个层次上的性能。

实施细节

在所有实验中,使用了ResNet-50作为骨干网络,并采用了通常用于所有比较的自监督学习工作的初始化方法。投影头部分采用了一个包含两层(大小分别为4096和128)的MLP,具有BN、泄漏ReLU激活函数,并在最后一层后进行了ℓ2归一化。在投影头部分的MLP之上,有4个分类头,分别面向1K、2K、4K和8K个类别。每个分类头都是一个简单的线性层,没有额外的偏置项。行softmax温度 τ r o w τ_{row} τrow设定为0.1,列softmax温度 τ c o l τ_{col} τcol设定为0.05。

图像增强

文章作者遵循了BYOL的数据增强方法,包括颜色抖动、高斯模糊和日晒化,以及多裁剪(两个全局224×224视图和六个局部96×96视图)和最近邻增强(最近邻增强的队列设置为256K)。

优化

无监督预训练/分类:文章作者的大多数训练超参数直接来的SwAV。使用了LARS优化器,学习率为4.8,权重衰减为 1 0 − 6 10^-6 106。学习率在前10个epoch内线性增加(从0.3开始),然后使用余弦调度器在接下来的790个epoch内线性减少,最终值为0.0048(共800个epoch)。使用了分布在64个NVIDIA V100 GPU上的批量大小为4096。

线性评估:类似于,使用了LARS优化器,学习率为0.8,没有使用权重衰减。学习率使用余弦调度器在100个epoch内线性减少,使用了分布在16个NVIDIA V100 GPU上的批量大小为4096。还尝试了中使用SGD优化器,批量大小为256,结果相似。

表1:ImageNet无监督图像分类结果(NMI、AMI、ARI和ACC)

在这里插入图片描述

表2:ImageNet-superclasses无监督图像分类准确率
在这里插入图片描述

表3:ImageNet-subsets(BREEDS)无监督图像分类结果
在这里插入图片描述

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

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

相关文章

express+vue在线im实现【二】

expressvue在线im实现【一】 在线体验 本期完成了: 1、心跳检测 2、支持发送表情与图片【这个目前还需要优化下,当图片上传后会被默认选中,需要点击一下旁边,使之失去选中效果,才能正常,留待下期优化吧】…

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群 第一步 安装 Docker, Windows 上可以使用 Docker Desktop 下载地址:https://www.docker.com/products/docker-desktop/ 安装过程自行谷歌 安装好的标志:打开终端 运行docker p…

windows11子系统Ubuntu 22.04.4子安装图形化界面

1、windows11家庭版本设置 打开虚拟机安装许可 2、Microsoft Store下载安装ubuntu 我使用的是22.04.4 LTS版本 3、 打开ubuntu 命令窗口 1、打开win11的命令行,在下拉三角下标,打开,可以看到有Ubuntu 的选项,点击即可进入linux命…

鸿蒙应用开发

学习视频: 00.课程介绍_哔哩哔哩_bilibili 官网:开发者文档中心 | 华为开发者联盟 (huawei.com) 开发工具 :DevEcoStudio , 类似Jetbrains 全家桶 ArkTS开发语言 :(基于TS,集成了前端语言&#xf…

MySQL日志(二):MySQL抖动

一条SQL语句, 正常执行的时候特别快, 但是有时也不知道怎么回事, 它就会变得特别慢, 并且这样的场景很难复现, 它不只随机, 而且持续时间还很短。 看上去, 这就像是数据库“抖”了一下。 今天&…

c++编程(18)——deque的模拟实现(2)容器篇

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 deque的数据结构deque的构造默认构造填充构造 deque的其他操作deque的插入、删除push_back和push_frontpop_back和pop_frontclear、erase和insert操作 传送门 在上一篇中,我们已经实现了deque最核…

数据仓库和数据库有什么区别?

一、什么是数据仓库二、什么是数据库三、数据仓库和数据库有什么区别 一、什么是数据仓库 数据仓库(Data Warehouse)是一种专门用于存储和管理大量结构化数据的信息系统。它通过整合来自不同来源的数据,为企业提供统一、一致的数据视图&…

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素,类似slot占位符。 简而言之:就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

论文阅读:RAM++ | Open-Set Image Tagging with Multi-Grained Text Supervision

发表时间:2023年11月16 论文地址:https://arxiv.org/pdf/2310.15200 项目地址:https://github.com/xinyu1205/recognize-anything Recognize Anything Plus Model(RAM),这是一种有效利用多粒度文本监督的开…

博通加速向Nvidia发起进攻 为何连iPhone 15都不能用“苹果智能”?

博通加速向Nvidia发起进攻 博通强调的一项优势是其 XPU 的能效。其功耗不到 600 瓦,是业内功耗最低的 AI 加速器之一。 Nvidia 的许多竞争对手都想抢占其市场主导地位。其中一个不断出现的名字是 Broadcom。仔细观察就会知道原因。其 XPU 功耗不到 600 瓦&#xff…

GPT-4并非世界模型,LeCun双手赞同!ACL力证LLM无法模拟真实世界

一直以来,支持LLM的观点之一是模型可以集成海量事实知识,作为通往「世界模拟器」的基础。虽然也有不少反对意见,但缺乏实证依据。那么,LLM能否作为世界模拟器? 最近,亚利桑那大学、微软、霍普金斯大学等机构…

飞腾银河麒麟V10安装Todesk

下载安装包 下载地址 https://www.todesk.com/linux.html 安装 yum makecache yum install libappindicator-gtk3-devel.aarch64 rpm -ivh 下载的安装包文件后台启动 service todeskd start修改配置 编辑 /opt/todesk/config/config.ini 移除自动更新临时密码 passupda…

英伟达发布Nemotron-4 340B通用模型:专为生成合成数据设计的突破性AI

引言 2023年6月14日,英伟达发布了Nemotron-4 340B通用模型,专为生成训练大语言模型的合成数据而设计。这一模型可能彻底改变训练大模型时合成数据的生成方式,标志着AI行业的一个重要里程碑。本文将详细介绍Nemotron-4 340B的各个方面&#x…

Vue43-单文件组件

一、脚手架的作用 单文件组件:xxx.vue,浏览器不能直接运行!!! 脚手架去调用webpack等第三方工具。 二、vue文件的命名规则 建议用下面的两种方式。(首字母大写!!!&#x…

CDN简介

CDN 的基本概念 CDN(Content Delivery Network),即内容分发网络。 CDN是一种分布式网络架构:它由分布在不同地理位置的服务器组成网络,这些服务器协同工作以提供内容服务。 内容分发的核心目标 确保用户能够快速、可…

Matlab自学笔记三十一:结构数组的创建、索引和预分配内存

1.概念 结构(structure array)是一种具有容器特性的数据类型,它使用称为字段的数据容器对相关数据进行分组,每个字段可以包含任何类型或大小的数据,所有元素都具有相同数量的字段和相同的字段名称。(与元胞…

Java锁之舞:性能分析与优化之路

目录 一、同步锁性能分析 (一)性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 (二)案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …

机器学习面试-常见题目

文章目录 一、框架问题1. 监督学习和无监督学习有什么不同?2. 什么是深度学习,它与机器学习算法之间有什么联系?3. 如何评估机器学习模型的有效性?4. 如何确保模型没有过拟合?5. 什么是核技巧,有什么用处&a…

4_机械臂坐标系简介

一、坐标系的标准命名 为了规范起见,有必要给机器人和工作空间专门命名和确定专门的“标准”坐标系。 图3-27为一种典型的工况,机器人抓持某种工具,并把工具末端移动到操作者指定的位置。图3-27所示的5个坐标系就是需要命名的坐标系。这五个坐…

7z及7zip-cpp最高压缩比的免费开源压缩软件

7z介绍 7z是一种主流高效的压缩格式,它拥有极高的压缩比。在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式。该格式最初由7-Zip实现并采用,但这种档案格式是公有的,并且7-Zip软件本身亦在GNU宽通用公共许可证…