机器学习笔记之近似推断(一)从深度学习角度认识推断

news2024/10/1 19:28:02

机器学习笔记之近似推断——从深度学习角度认识推断

  • 引言
    • 推断——基本介绍
    • 精确推断难的原因
      • 虽然能够表示,但计算代价太大
      • 无法直接表示

引言

本节是一篇关于推断总结的博客,侧重点在于深度学习模型中的推断任务。

推断——基本介绍

推断( Inference \text{Inference} Inference)——我们并不陌生,在介绍的每一个概率模型,基本都涉及到推断问题。关于概率模型的三大核心问题分别是:表示( Representation \text{Representation} Representation),推断学习( Learning \text{Learning} Learning)。我们从深度模型,主要是深度生成模型所涉及的推断任务出发,对推断进行描述。

首先,是什么样的原因,导致了推断这个任务的发生?换句话说,推断的动机是什么。

  • 我们基于可观察的样本特征 X \mathcal X X,构建概率图模型。如果包含隐变量 Z \mathcal Z Z,而隐变量 Z \mathcal Z Z绝大多数情况下没有物理意义,它只是我们建模过程中人工设置出来的随机变量。

    Z \mathcal Z Z一上来就是未知的,但为了完善被构建的模型,我们有必要了解隐变量 Z \mathcal Z Z的特征信息。从哪里去了解/通过什么渠道去了解 Z \mathcal Z Z? 从 样本 X \mathcal X X

    当样本 X \mathcal X X进入到模型后, Z \mathcal Z Z会产生什么样的反映,而这个反映就是隐变量 Z \mathcal Z Z的特征信息,即 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)。而推断就是求解 Z \mathcal Z Z特征信息 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)的手段。因此:推断的第一个动机就是推断自身。我们需要通过样本 X \mathcal X X的渠道,将 Z \mathcal Z Z的特征信息描述出来

  • 关于推断的另一个动机来自于模型的学习任务。也就是说,在模型参数 θ \theta θ的学习过程中,可能存在 不可避免地使用推断

    一个经典例子就是受限玻尔兹曼机( Restricted Boltzmann Machine,RBM \text{Restricted Boltzmann Machine,RBM} Restricted Boltzmann Machine,RBM)。在受限玻尔兹曼机基于极大似然估计来求解对数似然梯度 ∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] \nabla_{\theta} \left[\log \mathcal P(v^{(i)};\theta)\right] θ[logP(v(i);θ)]的过程中,可将对数似然梯度描述为如下形式:

    • 需要注意的是,针对某个观测样本 v ( i ) v^{(i)} v(i),我们并没有将所有参数的对数似然梯度都求出来,仅求解的是 v ( i ) v^{(i)} v(i)中某一随机变量 v j ( i ) v_j^{(i)} vj(i)与对应模型中隐变量 h ( i ) h^{(i)} h(i)的某一随机变量 h k ( i ) h_k^{(i)} hk(i)之间的模型参数 W v j ( i ) ⇔ h k ( i ) \mathcal W_{v_j^{(i)} \Leftrightarrow h_k^{(i)}} Wvj(i)hk(i)的对数似然梯度。
    • 关于 h j ( i ) h_j^{(i)} hj(i)是一个服从‘伯努利分布’的随机变量,完整推导过程见上述链接。
      ∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] ⇒ ∂ ∂ W v j ( i ) ⇔ h k ( i ) [ log ⁡ P ( v ( i ) ; θ ) ] = P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) ⏟ 第一项 − ∑ v ( i ) P ( v ( i ) ) ⋅ P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) ⏟ 第二项 \begin{aligned} \nabla_{\theta} \left[\log \mathcal P(v^{(i)};\theta)\right] & \Rightarrow \frac{\partial}{\partial \mathcal W_{v_j^{(i)} \Leftrightarrow h_k^{(i)}}} \left[\log \mathcal P(v^{(i)};\theta)\right] \\ & = \underbrace{\mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)}}_{第一项} - \underbrace{\sum_{v^{(i)}} \mathcal P(v^{(i)}) \cdot \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)}}_{第二项} \end{aligned} θ[logP(v(i);θ)]Wvj(i)hk(i)[logP(v(i);θ)]=第一项 P(hk(i)=1v(i))vj(i)第二项 v(i)P(v(i))P(hk(i)=1v(i))vj(i)

    关于上述的对数似然梯度结果,第一项中的 P ( h k ( i ) = 1 ∣ v ( i ) ) \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) P(hk(i)=1v(i))就用到了后验概率的推断结果
    推导过程详见受限玻尔兹曼机——推断任务(后验概率),这里 n n n表示 v ( i ) v^{(i)} v(i)中随机变量结点的个数。
    P ( h k ( i ) = 1 ∣ v ( i ) ) = Sigmoid ( ∑ j = 1 n W h k ( i ) ⇔ v j ( i ) ⋅ v j ( i ) + c k ( i ) ) \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) = \text{Sigmoid}\left(\sum_{j=1}^n \mathcal W_{h_k^{(i)}\Leftrightarrow v_j^{(i)}} \cdot v_j^{(i)} + c_k^{(i)}\right) P(hk(i)=1v(i))=Sigmoid(j=1nWhk(i)vj(i)vj(i)+ck(i))
    这明显是一个精确推断( Precise Inference \text{Precise Inference} Precise Inference)。相反,同样使用推断的方式进行求解,使用对比散度这种近似推断的方式加快采样速度。
    由于这里重点描述的是‘推断’与‘学习任务’之间的关联关系,这里就不展开求解了.

    另一个经典例子就是 EM \text{EM} EM算法( Expectation Maximization,EM \text{Expectation Maximization,EM} Expectation Maximization,EM)。它的 E \text{E} E步可表示为如下形式:
    log ⁡ P ( X ; θ ) = ∫ Z Q ( Z ) ⋅ log ⁡ P ( X ∣ θ ) d Z = ∫ Z Q ( Z ) log ⁡ P ( X , Z ; θ ) Q ( Z ) d Z ⏟ ELBO + { − ∫ Z Q ( Z ) log ⁡ P ( Z ∣ X ) Q ( Z ) d Z } ⏟ KL Divergence \begin{aligned} \log \mathcal P(\mathcal X ; \theta) & = \int_{\mathcal Z} \mathcal Q(\mathcal Z) \cdot \log \mathcal P(\mathcal X \mid \theta) d\mathcal Z \\ & = \underbrace{\int_{\mathcal Z} \mathcal Q(\mathcal Z) \log \frac{\mathcal P(\mathcal X,\mathcal Z;\theta)}{\mathcal Q(\mathcal Z)}d\mathcal Z}_{\text{ELBO}} + \underbrace{\left\{- \int_{\mathcal Z} \mathcal Q(\mathcal Z) \log \frac{\mathcal P(\mathcal Z \mid \mathcal X)}{\mathcal Q(\mathcal Z)} d\mathcal Z\right\}}_{\text{KL Divergence}} \end{aligned} logP(X;θ)=ZQ(Z)logP(Xθ)dZ=ELBO ZQ(Z)logQ(Z)P(X,Z;θ)dZ+KL Divergence {ZQ(Z)logQ(Z)P(ZX)dZ}
    其中 X \mathcal X X是基于样本的随机变量集合; Q ( Z ) \mathcal Q(\mathcal Z) Q(Z)人为设定的、关于隐变量 Z \mathcal Z Z的分布;如果关于 Z \mathcal Z Z的后验分布 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)可求解,即 Q ( Z ) = P ( Z ∣ X ) \mathcal Q(\mathcal Z) = \mathcal P(\mathcal Z \mid \mathcal X) Q(Z)=P(ZX),那么此时 KL Divergence = 0 \text{KL Divergence} = 0 KL Divergence=0,自然可以使用参数迭代逼近 的方式对模型参数 θ \theta θ进行迭代求解:
    其中的 Q ( Z ) = P ( Z ∣ X ) \mathcal Q(\mathcal Z) = \mathcal P(\mathcal Z \mid \mathcal X) Q(Z)=P(ZX)明显是一种对 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)的精确推断。
    { log ⁡ P ( X ; θ ) = ELBO ( KL Divergence = 0 ) θ ( t + 1 ) = arg ⁡ max ⁡ θ [ ∫ Z P ( Z ∣ X , θ ( t ) ) log ⁡ P ( X , Z ; θ ) d Z ] \begin{cases} \log \mathcal P(\mathcal X;\theta) = \text{ELBO} \quad (\text{KL Divergence} = 0) \\ \theta^{(t+1)} = \mathop{\arg\max}\limits_{\theta} \left[\int_{\mathcal Z} \mathcal P(\mathcal Z \mid \mathcal X,\theta^{(t)}) \log \mathcal P(\mathcal X , \mathcal Z;\theta) d\mathcal Z\right] \end{cases} logP(X;θ)=ELBO(KL Divergence=0)θ(t+1)=θargmax[ZP(ZX,θ(t))logP(X,Z;θ)dZ]
    但实际情况下,关于隐变量 Z \mathcal Z Z的后验分布 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)可能无法精确求解,此时 Q ( Z ) \mathcal Q(\mathcal Z) Q(Z)的作用就是逼近当前迭代步骤中的 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX),使得当前迭代步骤的 ELBO \text{ELBO} ELBO达到最大;再将当前迭代步骤最优近似分布 Q ( Z ) \mathcal Q(\mathcal Z) Q(Z)带回 ELBO \text{ELBO} ELBO中,从而求出当前迭代步骤的最优参数。这就是广义 EM \text{EM} EM算法

    • 相对于EM算法过程,因 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)自身无法精确求解的问题,广义EM算法使得分布 Q ( Z ) ≈ P ( Z ∣ X ) \mathcal Q(\mathcal Z) \approx \mathcal P(\mathcal Z \mid \mathcal X) Q(Z)P(ZX)这明显是一种近似推断。
    • 下面描述给定 t t t时刻模型参数 θ ( t ) \theta^{(t)} θ(t)的条件下,求解 t + 1 t+1 t+1时刻 E \text{E} E步的近似分布 Q ^ ( t + 1 ) ( Z ) \hat {\mathcal Q}^{(t+1)}(\mathcal Z) Q^(t+1)(Z) t + 1 t+1 t+1时刻 M \text{M} M步最优参数 θ ( t + 1 ) \theta^{(t+1)} θ(t+1)的过程。
      { Q ^ ( t + 1 ) ( Z ) = arg ⁡ max ⁡ Q ( Z ) ∫ Z Q ( Z ) log ⁡ P ( X , Z ; θ ( t ) ) Q ( Z ) d Z ⏟ ELBO ⇔ arg ⁡ min ⁡ Q ( Z ) − ∫ Z Q ( Z ) log ⁡ P ( Z ∣ X ) Q ( Z ) d Z ⏟ KL Divergence θ ( t + 1 ) = arg ⁡ max ⁡ θ ∫ Z Q ^ ( t + 1 ) ( Z ) log ⁡ P ( X , Z ; θ ) Q ^ ( t + 1 ) ( Z ) d Z ⏟ ELBO \begin{cases} \hat {\mathcal Q}^{(t+1)}(\mathcal Z) = \mathop{\arg\max}\limits_{\mathcal Q(\mathcal Z)} \underbrace{\int_{\mathcal Z} \mathcal Q(\mathcal Z) \log \frac{\mathcal P(\mathcal X,\mathcal Z;\theta^{(t)})}{\mathcal Q(\mathcal Z)} d\mathcal Z}_{\text{ELBO}} \Leftrightarrow \mathop{\arg\min}\limits_{\mathcal Q(\mathcal Z)} \underbrace{- \int_{\mathcal Z} \mathcal Q(\mathcal Z) \log \frac{\mathcal P(\mathcal Z \mid \mathcal X)}{\mathcal Q(\mathcal Z)} d\mathcal Z}_{\text{KL Divergence}}\\ \theta^{(t+1)} = \mathop{\arg\max}\limits_{\theta} \underbrace{\int_{\mathcal Z} \hat {\mathcal Q}^{(t+1)}(\mathcal Z) \log \frac{\mathcal P(\mathcal X,\mathcal Z ;\theta)}{\hat {\mathcal Q}^{(t+1)}(\mathcal Z)}d\mathcal Z}_{\text{ELBO}} \end{cases} Q^(t+1)(Z)=Q(Z)argmaxELBO ZQ(Z)logQ(Z)P(X,Z;θ(t))dZQ(Z)argminKL Divergence ZQ(Z)logQ(Z)P(ZX)dZθ(t+1)=θargmaxELBO ZQ^(t+1)(Z)logQ^(t+1)(Z)P(X,Z;θ)dZ

    这两个模型参数学习的例子(一个是学习参数梯度,一个是迭代学习参数),它们都不可避免地对隐变量的后验分布进行推断。

精确推断难的原因

虽然能够表示,但计算代价太大

为什么要近似推断?最核心的原因是:精确推断非常困难。也就是说,精确推断的代价太大了

  • 依然以上述受限玻尔兹曼机对数似然梯度求解过程中的第二项为例:
    ∑ v ( i ) P ( v ( i ) ) ⋅ P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) \sum_{v^{(i)}} \mathcal P(v^{(i)}) \cdot \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)} v(i)P(v(i))P(hk(i)=1v(i))vj(i)
    其中, ∑ v ( i ) \sum_{v^{(i)}} v(i)表示样本数量的连加项,有 N N N项;如果观测变量 V \mathcal V V中包含 n n n个随机变量,即: v ( i ) = ( v 1 ( i ) , v 2 ( i ) , ⋯   , v n ( i ) ) n × 1 T v^{(i)} = (v_1^{(i)},v_2^{(i)},\cdots,v_n^{(i)})_{n \times 1}^T v(i)=(v1(i),v2(i),,vn(i))n×1T,并且各观测变量之间相互独立且均服从伯努利分布。那么 P ( v ( i ) ) \mathcal P(v^{(i)}) P(v(i))可表示为如下形式:
    P ( v ( i ) ) = ∏ m = 1 n P ( v m ( i ) ) \mathcal P(v^{(i)}) = \prod_{m=1}^n \mathcal P(v_m^{(i)}) P(v(i))=m=1nP(vm(i))
    仅仅 P ( v ( i ) ) \mathcal P(v^{(i)}) P(v(i))一项的复杂度就是 O ( 2 n ) \mathcal O(2^n) O(2n);暂时不考虑 P ( h k ( i ) = 1 ∣ v ( i ) ) \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) P(hk(i)=1v(i)) Sigmoid \text{Sigmoid} Sigmoid函数内线性计算的复杂度,上式中的复杂度 至少是 O ( N ⋅ 2 n ) \mathcal O(N\cdot 2^n) O(N2n)能算吗?能算,但样本足够多的情况下,代价可看作是无穷大
    这还仅仅是将随机变量设置成最简单的伯努利分布,如果复杂度出现‘指数级别’,就可看做是‘无法求解的’( Intractable \text{Intractable} Intractable).

上述的例子可以根据受限玻尔兹曼机自身关于随机变量的约束能够将复杂的概率分布进行分解,只是分解出的结果计算量太大

无法直接表示

然而存在一些模型,模型内部随机变量关联关系复杂的同时,还十分没有章法。最终导致联合概率分布连分解都做不到

由于受限玻尔兹曼机的条件约束,使得隐变量、观测变量内部均条件独立。但并不是说受限玻尔兹曼机比玻尔兹曼机性能更强大( powerful \text{powerful} powerful),而是玻尔兹曼机仅是理论上的产物,太过于理想化。在真实环境中没有实际作用;

相反受限玻尔兹曼机通过增加约束,使得隐变量的后验分布 P ( Z ∣ X ) \mathcal P(\mathcal Z \mid \mathcal X) P(ZX)能够准确表示出来。相当于 放弃了模型复杂度,而去追求计算上的可行性
与之相似的还有‘隐马尔可夫模型’中的齐次马尔可夫假设与观测独立性假设,它们都是放弃复杂度、追求计算可行性的典型示例。

可以看出,无向图模型无法直接表示后验概率的主要原因在于随机变量结点之间关联关系过于复杂,从而无法实现条件独立性;而有向图模型无法直接表示后验概率的主要原因在于随机变量之间的结构关系,从而无法实现条件独立性

相关参考:
(系列二十五)近似推断1-介绍

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

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

相关文章

互联网医院建设|互联网医院远程问诊系统的功能有哪些?

互联网医院远程问诊系统已经得到了很好的应用,也解决了很多患者不方便复诊的问题,而且互联网医院功能也是根据不同的客户端有这不同的区分的,接下来带大家了解一下。 患者app端功能 预约挂号:支持门诊普通号预约、专家号定时抢约&…

Oracle SQL 性能分析原理与实战演练

作者 | JiekeXu来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle SQL 性能分析原理与实战演练,欢…

题解 # 二维矩阵最大矩形问题#

题目&#xff1a; 小明有一张N*M的方格纸&#xff0c;且部分小方格中涂了颜色&#xff0c;部分小方格还是空白。 给出N (2<Ns30)和M(2sMs30)的值&#xff0c;及每个小方格的状态(&#xff08;被涂了颜色小方格用数字1表示&#xff0c;空白小方格用数字0表示)&#xff1b; 请…

java泛型学习篇(一)

java泛型学习篇(一) 1 学习泛型前的传统思路 1.1 遍历集合中元素的方法 1.1.1 思路 ①用foreach进行遍历 ②把每个Object对象强转成所需类型 ③打印其值1.1.2 示例代码 import java.util.ArrayList; public class Generic01 {public static void main(String[] args) {lon…

机器学习:基于主成分分析(PCA)对数据降维

机器学习&#xff1a;基于主成分分析&#xff08;PCA&#xff09;对数据降维 作者&#xff1a;AOAIYI 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;AOAIYI首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可…

JavaWeb--HTTP

HTTP1 简介2 请求数据格式2.1 格式介绍3 响应数据格式3.1 格式介绍3.2 响应状态码3.2.1状态码大类3.2.2常见的响应状态码3.3 自定义服务器目标&#xff1a; 理解HTTP协议和HTTP请求与响应数据的格式 1 简介 HTTP概念 HyperText Transfer Protocol&#xff0c;超文本传输协议&a…

造成android UI卡顿的原因及解决方法

Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms&#xff0c;是因为 Android 设定的刷新率是 60FPS(Frame Per Second)&#xff0c;也就是每秒 60 帧的刷新率&#xff0c;约合 16ms 刷新一次。如果UI线程的执行时间超过16ms&#xff0c;则会产生丢帧…

JavaSE08-运算符

文章目录一、算术运算符1.字符参与运算2.字符串参与 运算二、赋值运算符三、自增自减运算符四、比较运算符五、逻辑运算符六、三元运算符算术运算符、赋值运算符、自增自减运算符、比较运算符、逻辑运算符、三元运算符一、算术运算符 1.字符参与运算 char类型参与算术运算&…

Jmeter使用教程

目录一&#xff0c;简介二&#xff0c;Jmeter安装1&#xff0c;下载2&#xff0c;安装三&#xff0c;创建测试1&#xff0c;创建线程组2&#xff0c;创建HTTP请求默认值3&#xff0c;创建HTTP请求4&#xff0c;添加HTTP请求头5&#xff0c;添加断言6&#xff0c;添加查看结果树…

BoostSearcher搜索引擎项目

BoostSearcher搜索引擎项目 1.BoostSearcher这个项目是什么&#xff1f; 答&#xff1a;一个为Boost文档建立索引的站内搜索引擎&#xff0c;简单的说就是一个类似于csdn站内文档搜索框。 项目展示&#xff1a; gitee:https://gitee.com/zxlfx/boost-search-engine-project …

二叉树——堆

一&#xff0c;树的概念及结构 1.树 4.结点的度&#xff1a;一个节点含有子树的个数称为该结点的度&#xff1b;如&#xff1a;A 的度为6. 5.叶节点或终端节点&#xff1a;度为0的节点称为叶节点&#xff1b;如&#xff1a;B 6.非终端结点或分支节点&#xff1a;度部位0的结…

【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

基于博客系统的测试用例

登陆界面博客预览页博客详情页博客编辑页

每日一题——L1-085 试试手气(15)

L1-085 试试手气 我们知道一个骰子有 6 个面&#xff0c;分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态&#xff0c;即它们朝上一面的点数&#xff0c;让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙&#xff0c;每次摇出的结果都满足以下两个条件&#xff1a;…

【Java8】

1、接口中默认方法修饰为普通方法 在jdk8之前&#xff0c;interface之中可以定义变量和方法&#xff0c;变量必须是public、static、final的&#xff0c;方法必须是public、abstract的&#xff0c;由于这些修饰符都是默认的。 接口定义方法: public抽象方法需要子类实现 接口定…

TCP报文详解

目录 &#x1f407;今日良言:但尽全力,且让心安 &#x1f43c;一、TCP协议特点 &#x1f433;二、TCP协议段格式 &#x1f42f;三、TCP的10个核心机制 &#x1f41d;四、三次握手和四次挥手 &#x1f407;今日良言:但尽全力,且让心安 &#x1f43c;一、TCP协议特点 TCP :Tr…

OAuth 2.0 认证和攻击面

0x00 前提 最近在测试公司的 oauth 认证方面的问题&#xff0c;要再去熟悉一下这块&#xff0c;所以把这块写一下。 0x01 OAuth2.0 概念 OAuth是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;目前是最常见最通用的一个授权协议。 什么地方…

uni-app:获取当前经纬度解决方案+如何布置全局组件

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一.布置全局组件 在我们开发的过程中&#xff0c;会碰到一个现象&#xff0c;就是在页面里面引入组件&#xff0c;总算要写import&#xff0c;components才能引用&#xff0c;这里给大家分享我们的一个…

JavaWeb--Tomcat

Tomcat1 简介1.1 什么是Web服务器2 基本使用2.1 下载2.2 安装2.3 卸载2.4 启动2.5 关闭2.6 配置2.7 部署3 Maven创建Web项目3.1 Web项目结构3.2 创建Maven Web项目4 IDEA使用Tomcat4.1 集成本地Tomcat4.2 Tomcat Maven插件目标&#xff1a; 掌握Tomcat的使用掌握在IDEA中使用To…