【机器学习基础】初探机器学习

news2024/9/8 23:06:37

在这里插入图片描述

【作者主页】Francek Chen
【专栏介绍】⌈Python机器学习⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。

文章目录

    • 一、人工智能的“两只手和四条腿”
    • 二、机器学习是什么
    • 三、时代造就机器学习的盛行
    • 四、泛化能力:机器学习奏效的本质
    • 五、归纳偏置:机器学习模型的“天赋”
    • 六、机器学习的限制


  我们生活在一个人工智能的时代!生活中现在已随处可见人工智能技术的影子。在大学的食堂,学生把打好菜的托盘放到摄像头下面,机器就可以自动识别每个餐盘的形状来自动计算这顿饭的价格;而在校园的大部分电梯里,学生可以说例如“我要去3楼”,电梯则可以自动带学生去3楼,这在疫情期间更加方便卫生。或许对于“20后”的孩子们而言,智能就像能源一样从他们记事起就随处可见、随手可得,就像移动互联网之于“10后”一样。

一、人工智能的“两只手和四条腿”

  人工智能大概长什么样呢?做一个有画面感的描述,人工智能有“两只手和四条腿”。“两只手”代表的是人工智能可以做的两大类任务,即预测与决策。预测包括对给定输入目标的模式识别、标签分类和回归或者预测未来的数据,以及对数据做聚类或生成,例如语音识别与合成。而决策则需要机器产生相关的动作,下达到环境中并改变环境,例如下围棋和自动驾驶控制。“四条腿”则代表支撑人工智能的四大类科学技术,包括搜索、推理、学习和博弈。搜索是在给定的数学环境中以既定的算法去探索选择分支的好坏并最终做出决策的方法,可以使用在下围棋、路径规划等任务中。推理是基于给定的规则或知识,使用逻辑归纳的方式,得到进一步的规则或知识,进而完成给定问题的作答,例如数学定理的自动证明、知识问答等。学习,即机器学习(machine learning),则是机器通过经验数据,对任务目标做出优化的自动化过程,例如人脸识别、语音识别等。博弈则关注多个人工智能智能体之间的交互,例如桥牌对战、足球团队配合等。
  通过上面的简述,我们可以大概知道一个人工智能的全貌。过去十年间,人工智能的主要进展在机器学习技术方面,以至于甚至分不清人工智能和机器学习之间的关系。在这里,重点讨论人工智能中服务预测任务的机器学习技术。而支撑决策任务的机器学习技术被称为强化学习(reinforcement learning)。

二、机器学习是什么

  那就究竟什么是学习呢?诺贝尔经济学奖和图灵奖双料得主、卡耐基梅隆大学的赫尔伯特·西蒙教授是这样定义学习的:“学习是系统通过经验提升性能的过程”。可以看到,学习是一个过程,并且这里有三个关键词,即经验、性能、提升。首先,学习的目标是提升某个具体性能,例如我们学习开车时,希望能提升自己的车技,这个可以通过一些驾驶的测试来获得具体的指标分数。其次,学习是基于经验的,也就是我们经历过的事情,例如我们在驾驶过程中遇到的情况以及当时的具体动作和结果,这其实就是数据。因此,如果用比较计算机的语言来描述,学习就是系统基于数据来提升既定指标分数的过程。
  有了上述对于学习是怎样一个过程的理解,现在我们就比较好定义机器学习了。根据机器学习泰斗、卡耐基梅隆大学的汤姆·米歇尔教授的定义,机器学习是一门研究算法的学科,这些算法能够通过非显式编程(non-explicit programming)的形式在某个任务上,通过经验数据,来提升性能指标。一组学习任务可以由三元组在〈任务, 指标, 数据〉来明确定义。
  用较为数学的语言来描述机器学习,则可以使用一个优化问题来刻画。针对某一预测任务,其数据集为 D \mathcal{D} D,对于一个机器学习预测模型 f f f,预测任务的性能指标可以通过一个函数 T ( D , f ) T(\mathcal{D},f) T(D,f) 来表示,那么机器学习的过程则是在一个给定的模型空间 F \mathcal{F} F中,寻找可以最大化性能指标的预测模型 f ∗ f^* f
f ∗ = arg ⁡ max ⁡ f ∈ F T ( D , f ) = M L ( D ) f^* =\arg\max_{f\in \mathcal{F}} T(\mathcal{D}, f)= \mathrm{ML}(\mathcal{D}) f=argfFmaxT(D,f)=ML(D) 这里的 M L ( D ) \mathrm{ML}(\mathcal{D}) ML(D)则表示机器学习可以被看成是一个输入数据集、输出解决任务算法的算法。

  这里说的非显式编程是什么特性呢?一般人工智能技术的实现,都是需要人首先充分了解任务和解决方法,并根据具体的解决思路,编写程序来完成该任务。例如地图的导航任务,系统需要首先将城市的路网建模成一个图结构,然后针对具体起点到终点的任务,寻找最短路径,例如使用 A* 搜索算法。因此,显式编程需要开发者首先自己可以完成该智能任务,才能通过实现对应的逻辑来使机器完成它,相当于要事先知道了 f ∗ f^* f,然后直接实现它。这其实大大抬高了人工智能技术的门槛,它需要有人能解决任务并通过代码来实现解决方法。而有的智能任务是很难通过这样的方式来解决的,例如人脸识别、语音识别这样的感知模式识别任务,其实我们自己也不清楚是如何来精准识别平时碰到的每个人的脸的,也就更加无法编写程序来直接实现这个逻辑;亦或是例如深海无人艇航行、无人机飞行等人类自己无法完成的任务,自然也无法通过直接编程来实现。
  具体地,在上述优化范式中,我们在一个模型空间 F \mathcal{F} F中寻找最优模型 f ∗ f^* f的过程,可以是一个持续迭代的形式,即
f 0 → f 1 → f 2 → ⋯ → f ∗ f_0 \rightarrow f_1 \rightarrow f_2 \rightarrow \cdots \rightarrow f^* f0f1f2f 而这个寻找最优模型 f ∗ f^* f的过程,就是机器学习。机器学习的算法可以对应从 f i f_i fi迭代到 f i + 1 f_{i+1} fi+1的程序。

  华盛顿大学的佩德罗·多明戈斯(Pedro Domingos)教授将机器学习比喻成“终极算法”,因为有了机器学习技术,只需要拥有任务的数据,就可以得到解决任务的算法。这样,程序员就可以“往后站一步”,从直接编写各类任务具体的算法代码,转为编写机器学习算法代码,然后在不同任务中,基于任务自身的数据,学习出一个解决该任务的算法(即机器学习模型)出来,如图1所示。

在这里插入图片描述

图1 传统的显式编程与机器学习的非显式编程

三、时代造就机器学习的盛行

  那么机器学习技术为什么现在如此盛行呢?主要原因之一来自于时代造就!2006年,美国亚马逊公司推出云计算服务,云计算技术开始普及,不少公司开始将大量业务数据存储到云平台。2011年,大数据概念开始深入人心,大量的公司基于云计算平台积累下来的大数据开始挖掘价值,而基于大数据的机器学习技术则开始越来越被重点关注。2012年,深度学习率先在计算机视觉领域取得大的突破,随后2013年的自然语言处理、语音识别和深度强化学习等人工智能分支和应用场景开始大爆发。我们可以看到,在云计算和大数据的基础下,机器学习作为一种在数据和算力给足的情况下可以变得更强大的人工智能技术,获得了充分成长的条件。而到了2020年代的今天,我们已经看到机器学习技术开始从数据量最多的互联网场景在大量外溢到传统工业、农业场景,例如工厂的能效优化和排产规划,农田收成预测与种植规划等,各个行业在经历一个数字化转型和智能化升级的阶段。我们有理由相信,未来10年,机器学习技术会持续渗透到各行各业,在各类预测和决策任务场景中服务人类。

  按照任务来分类,机器学习可以分为有监督学习、无监督学习和强化学习三大类。

  • 监督学习(supervised learning):训练集 D \mathcal{D} D中的每一个数据实例 ( x , y ) (\boldsymbol{x},y) (x,y) 由特征和标签组成。模型的任务是根据数据的特征来预测其标签。模型的性能指标可以由一个损失函数 L ( y , f ( x ) ) L(y, f(\boldsymbol{x})) L(y,f(x)) 来定义。该损失函数衡量具体的数据实例 ( x , y ) (\boldsymbol{x},y) (x,y) 上的预测偏差,性能指标可以定义为损失函数的负数。由此,有监督学习的一般形式可以写为 f ∗ = arg ⁡ min ⁡ f 1 ∣ D ∣ ∑ ( x , y ) ∈ D L ( y , f ( x ) ) f^*=\arg\min_f \frac{1}{|\mathcal{D}|}\sum_{(\boldsymbol{x},y)\in \mathcal{D}} L(y,f(\boldsymbol{x})) f=argfminD1(x,y)DL(y,f(x))

  • 无监督学习(unsupervised learning):无监督学习的任务目标多种多样,但大多需要我们学习数据的分布 p ( x ) p(x) p(x)。与有监督学习不同,无监督学习任务中的数据没有标签的概念,或者说,所有数据维度都是同等重要的,也即是训练集 D \mathcal{D} D的每一个数据实例仅由数据特征 x \boldsymbol{x} x来表示。这时我们往往使用概率分布模型 p ( x ) p(\boldsymbol{x}) p(x)来建模数据的分布。在数据实例满足独立同分布的普遍假设下,整个数据集的对数似然(log-likelihood)则作为无监督学习需要最大化的目标,即 p ∗ = arg ⁡ max ⁡ p 1 ∣ D ∣ ∑ x ∈ D log ⁡ p ( x ) p^*=\arg\max_p \frac{1}{|\mathcal{D}|}\sum_{\boldsymbol{x}\in \mathcal{D}} \log p(\boldsymbol{x}) p=argpmaxD1xDlogp(x)

  对比有监督学习和无监督学习,有监督学习的只关心基于数据特征对标签的预测是否精准,而并不关心数据特征之间的相关性等模式。例如人脸识别就是一个典型的有监督学习任务,模型只关心输入人脸图像后是否能准备预测对应的身份,而不关注输入图像本身是否是包含一个人脸。而无监督学习则关注数据的分布与其中包含的模式,如关注人脸图像的概率分布,并可以判断一张给定的图像是否包含一个人脸,甚至可以生成一张新的人脸图像。

  • 强化学习(reinforcement learning):与有监督学习和无监督学习关于人工智能中的预测问题不同,强化学习关注人工智能中的决策问题。强化学习是寻找更好的决策策略的过程,而优化的目标则是策略决策带来的累积回报的期望。由于强化学习的数学建模方式与有监督学习和无监督学习有较大差距,因此这里不具体给出数学公式。

  按照建模方式来分类,机器学习模型可以分为参数化模型和非参数化模型两大类。

  • 参数化模型(parametric model):在一套具体的模型族(model family)内,每一个具体的模型都可以用一个具体的参数向量来唯一确定,因此确定了参数向量也就确定了模型。例如,在上述有监督学习中,可以将参数向量 θ \boldsymbol{\theta} θ预测模型的下标,即 f θ f_{\boldsymbol{\theta}} fθ,来表示参数化模型。因此,参数化模型的监督学习也可以写成是寻找最优参数 θ ∗ \boldsymbol{\theta}^* θ的过程,即 θ ∗ = arg ⁡ min ⁡ θ 1 ∣ D ∣ ∑ ( x , y ) ∈ D L ( y , f θ ( x ) ) \boldsymbol{\theta}^*=\arg\min_{\boldsymbol{\theta}} \frac{1}{|\mathcal{D}|}\sum_{(\boldsymbol{x},y)\in \mathcal{D}} L(y,f_{\boldsymbol{\theta}}(\boldsymbol{x})) θ=argθminD1(x,y)DL(y,fθ(x)) 参数化模型的一大性质是,模型的参数量不随着训练数据量而改变。因此,在计算过程中,模型占用计算机的资源(如内存或者显存)是固定的。
    线性回归、逻辑回归、双线性模型、神经网络模型都是典型的参数化模型。求解上述最优参数可以借助损失函数针对模型参数的梯度来完成,方法具有普适性,因此参数化模型整体上比非参数化模型更加普遍,有很多机器学习代码库的支持,包括深度学习框架PyTorch、TensorFlow等。

  • 非参数化模型(nonparametric model):与参数化模型相反,非参数化模型并非由一个具体的参数向量来确定,其训练的算法也不是更新模型的参数,而是由具体的计算规则直接在模型空间中寻找模型实例。由于模型和参数并非一一对应,因此数据量的不同(或者数据的不同)会导致模型中具体使用到的参数量也不同。对于有的非参数化模型,例如KNN、高斯过程,其参数量和训练数据量成正比,即每个数据实例就是一个参数。KNN、树模型、支持向量机都是极其重要的机器学习模型,并且在实践中具有不可替代的功能。可以理解为,参数化模型将从数据中学到的知识注入到参数中,而非参数化模型则保留数据本身作为知识。

四、泛化能力:机器学习奏效的本质

  那么为什么机器学习模型通过在有限的数据上训练后,就可以在其他没见过的数据上做出一定精度的预测呢?在机器学习里,泛化能力(generalization ability)被用来描述一个智能模型在没见过的数据上的预测性能。一般使用泛化误差来量化一个模型的泛化能力,具体定义为模型在给定数据分布下的损失函数值的期望: R ( f ) = ∫ ( x , y ) p ( x , y ) L ( y , f ( x ) ) d ( x , y ) R(f)=\int_{(\boldsymbol{x},y)}p(\boldsymbol{x},y)L(y,f(\boldsymbol{x})) \text{d}(\boldsymbol{x},y) R(f)=(x,y)p(x,y)L(y,f(x))d(x,y)

  机器学习的底层是数理统计,其基本原理是,相似的数据拥有相似的标签。机器学习模型对于新数据的标签预测的“底气”在于见过类似的数据,这样的泛化能力可以被称为统计泛化。定性来讲,如果预测任务越简单,训练数据量越大,那么学到的机器学习模型的泛化能力就越强。另一方面,选择的机器学习模型的复杂性和其泛化能力并没有直接的对应关系。具体来说,模型空间越复杂,其建模能力越强,但也越需要足够的训练数据来支撑,否则模型可能由于“过拟合”数据而导致其泛化能力低下。

五、归纳偏置:机器学习模型的“天赋”

  在给定的任务和训练数据集下,不同的机器学习模型训练出来的性能总是不同的,或者反过来说,让不同的机器学习模型的给定任务下达到相同的泛化能力,需要的训练数据量往往也是不同的。这背后的原因是,不同的机器学习模型对特定数据模式的归纳偏置(inductive bias)不同。所谓归纳偏置,就是指模型对问题的先验假设,比如假设空间上相邻的样本有相似的特征。归纳偏置可以让模型在缺乏对样本的知识时也能给出预测,对某类数据的归纳偏置更强的模型能够更快地学到其中的模式。例如神经网络模型对同分布域的感知数据的归纳偏置就很强,处理图像和语音的模式识别任务效果非常好;而树模型对混合离散连续的结构化数据的归纳偏置很强,对于银行表单数据和医疗风险的预测效果很好。可以说,归纳偏置就是机器学习模型的天赋。图2展示了线性分类模型和圆形分类模型的分类决策边界。可以看出当数据分布在直线两侧时,线性分类模型可以很轻松地将两类数据分开,而当数据呈里外两类分布时,圆形分类模型则能更容易地将两类数据分开,这体现出两个模型归纳偏置的不同。

bias

图2 不同模型有不同的天然决策边界

  因此,对于不同的任务、不同的数据,选择怎样的模型是机器学习算法工程师需要重点考虑的。在企业里,一个好的机器学习算法工程师能根据自己的经验,为公司不同的业务选择适合的模型,这样能提升模型预测的精度,提升业务效率,或者减少模型选型的更迭次数,节约开发成本。

六、机器学习的限制

  至少在目前阶段,机器学习并不是万能的,它在以下几个方面存在限制:

  • 数据限制:在某些场景,即使使用了所有的数据,也可能不足以训练出一个令人满意的预测模型。在算力允许的情况下,人们倾向于设计越来越复杂的模型,例如千亿参数级别的线性模型或者深度神经网络模型,但与之匹配的训练数据量却比较难以跟上。以互联网企业用户行为预测任务为例,为了训练复杂度更高的模型,需要匹配更多的训练数据,因而不得不用比较早期的数据来支撑,但用户在互联网平台的行为模式有一定时效性,所以使用较为过时的数据可能并不能帮助模型进一步提升预测精度。

  • 泛化能力限制:机器学习的统计泛化能力并非使它无所不能。人工智能场景中有不少任务是缺乏数据或是要求举一反三的,这需要逻辑推理技术的组合泛化能力。因此,我们认为,在通往强人工智能(或称为通用人工智能)的道路上,机器学习是重要但并非唯一需要的技术。现在也有一些新兴的国际研讨会或者学术会议聚焦研究机器学习和符号逻辑的融合方法,旨在让机器同时拥有统计泛化和组合泛化能力,以解决更加复杂的智能任务。

  • 使用形态限制:就像上文描述的公式 f ∗ = M L ( D ) f^*=\mathrm{ML}(\mathcal{D}) f=ML(D) 所表达的,目前机器学习主要使用的形态是一个针对特定任务,输入数据集,输出训练好的模型的工具。这距离通用人工智能(或者强人工智能)还有较远的距离。未来的机器学习在具备了更好的性能条件下,可以在不断收集的数据上做持续学习,能自动判别和选择新的需要学习的任务,能从过去多种任务的学习过程中总结更高效的学习方法,在新任务中做到小样本学习,融入人类的知识库并做到“举一反三”的组合泛化。

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

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

相关文章

vue项目引入live2d保姆级教程--web端、多种方法

一、自建live2d运行 1、选择SDK——live2d Cubism SDK (1)链接:Live2D Cubism SDK | Live2D Cubism 打开网站,它长这样: (2)选择web ,到下个页面 (3)下…

Power Tower

Problem - D - Codeforces 牛客和codeforce都有 递归处理l,r,终点是lr && mod1 用扩展欧拉定理 // Problem: D. Power Tower // Contest: Codeforces - Codeforces Round 454 (Div. 1, based on Technocup 2018 Elimination Round 4) // URL: https://c…

Linux基础操作指令

Linux的操作特点:纯命令行(虽然也有图形化界面,但主要是工程师使用,意义不大) windows的操作特点:图形化界面(也有纯命令行的形式,但其更贴近大众,命令行学习成本高&…

用Python打造精彩动画与视频1.2 安装Python和基本配置

1.2 安装Python和基本配置 在本章节中,我们将介绍如何在不同操作系统上安装Python,并进行基本配置,以便你能够顺利开始使用Python进行编程和多媒体创作。 1.2.1 Python的安装 Python有多个版本,目前主要使用Python 3版本。以下…

贪心加暴力枚举

数据范围只有 1 0 5 10^5 105所以我们可以直接暴力枚举,然后我们知道假操作一定是在最开始进行,至于加多少次我们可以直接枚举 class Solution { public:int minOperations(int k) {// 只可能先加后叠加if (k 1) return 0;int ans 0x7ffffff;int now…

Windows FreeCAD 导入ODA File Converter 插件

0. 背景 需要打开.dwg 格式的文件,AutoCAD 又要收费,所以使用法国的 FreeCAD, 安装完成打开.dwg 格式的文件时,出现问题如图所示: 1.下载插件 插件 ODA File Converter 网址 windows 插件在最下面: 2…

Android 性能优化(二):LeakCanary【用于分析代码是否存在内存泄漏】程序无响应

目录 1)内存相关的五种常见问题 2)内存溢出和内存泄漏 3)LeakCanary是什么? 4)LeakCanary如何使用,如何分析? 5)LeakCanary监测的内容 提问:程序有时候很卡,经常会出现…

再论pg归档日志的设置

用过ORACLE的朋友,第一次设置 PG的归档参数,如下: 。。。 wal_level replica archive_mode on archive_command test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f 。。。 对于归档,还要用…

ConvGRU原理与开源代码

ConvGRU 1. 算法简介与应用场景2. 算法原理2.1 GRU基础2.2 ConvGRU原理2.2.1 ConvGRU的结构2.2.2 卷积操作的优点 2.3 GRU与ConvGRU的对比分析2.4 ConvGRU的应用 3. PyTorch代码 仅需要网络源码的可以直接跳到末尾即可 需要ConvLSTM的可以参考我的另外一篇博客:小白…

Halcon Blob分析

斑点分析的思路:在图像中,相关对象的像素可以通过其灰度值来识别。例如下图的组织颗粒。这些颗粒是凉的,而液体是暗的,通过选择明亮像素(阈值),可以很容易地检测到颗粒。在需要应用中,这种简单的暗像素和亮…

成像光学:LCD的工作原理与结构图解

一、主流显示面板技术:LCD,OLED,MicroLED 二、主流显示屏的发展趋势 三、LCD堆叠结构(以比较流行的TFT-LCD为例) 沿光路方向介绍:背光,下偏光片(polarizer),…

python实现图像分割算法2

python实现随机步行算法 随机步行算法数学模型Python 实现详细解释优缺点应用领域随机步行算法是一种常用于图像分割和图像分析的算法。它通过模拟随机游走来确定图像中每个像素的标签或类别。随机步行算法特别适合用于解决有种子标记的图像分割问题,其中用户提供一些初始标记…

【Python】基础语法(上)

本篇文章讲解以下知识: (1)初始编码 (2)输出 (3)初识数据类型 一:初识编码 在计算机中所有的数据本质上都是以0和1的组合来存储。 比如:在一个文件中有以下内容&am…

力扣SQL50 上级经理已离职的公司员工 一题双解

Problem: 1978. 上级经理已离职的公司员工 Code -- 方法 1 -- select e1.employee_id -- from employees e1 -- left join employees e2 -- on e1.manager_id e2.employee_id -- where e1.salary < 30000 -- and e1.manager_id is not null -- and e2.employee_id is…

SpringBoot 整合 Redis 实现验证码登录功能

一、整合Redis 在pom.xml中添加Redis相关依赖&#xff1b; <!--Spring Data Redis依赖配置--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>…

103.qt qml-最全Table新增下拉复制功能

在上篇文章102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程_qt 表格控件 拖动列-CSDN博客 我们实现了大部分功能,所以本章实现下拉复制功能。 demo截图如下所示: 支持跨界复制,如果下拉的位置大于Table则会动画向下移动,具体可以参考视频链接…

颠覆未来计算!CRAM技术摒弃冯·诺依曼模型,20年研究终迎突破

未来科技&#xff1a;AI计算需求激增&#xff0c;数据中心耗电量堪比派对狂饮&#xff01;明尼苏达大学研究团队或携革命性设备&#xff0c;以惊人能效解决AI能耗难题&#xff01; 研究人员设计了一种新型的"计算随机存取存储器"&#xff08;CRAM&#xff09;原型芯…

查看路由表 netstat -r

“Kernel IP routing table” 是Linux系统中用于展示和配置IP路由的表。它告诉操作系统如何将数据包从一个网络接口发送到另一个网络或主机。下面是对您给出的路由表条目的解释&#xff1a; Destination&#xff1a;目的地地址&#xff0c;可以是具体的IP地址&#xff0c;也可…

Codeforces 962 div3 A-F

A 题目分析 签到 C代码 #include<iostream> using namespace std; int main(){int t;cin>>t;while(t--){int n;cin>>n;cout<<n/4n%4/2<<endl;} } B 题目分析 将n*n的方格分成若干个k*k的方格&#xff0c;每个k*k的方格中所有的数都相同 遍历…

小主机SSD固态硬盘选购攻略,希捷酷鱼 530 SSD固态硬盘表现优秀【附系统无损迁移教程】

小主机SSD固态硬盘选购攻略&#xff0c;希捷酷鱼 530 SSD固态硬盘表现优秀【附系统无损迁移教程】 哈喽小伙伴们好&#xff0c;我是Stark-C~ 这几年随着以零刻为首的小主机市场的兴起&#xff0c;小主机相关的配置周边需求也是越来越大&#xff0c;就比如说SSD固态硬盘就是其…