【论文阅读总结】Batch Normalization总结

news2025/2/5 0:50:18

批量规范化:通过减少内部协变量转移加快深度网络训练

    • 1. 摘要
    • 2. 序言
      • 2.1 min-batches的优缺点
      • 2.2 批量归一化解决内部协变量转移的优点
    • 3.减少内部协变量转移实现思想
      • 3.1 白化的问题
      • 3.2 解决白化问题
    • 4.小批量统计进行标准化
      • 4.1.白化简化的两种方式
        • 4.1.1 对通道维度进行标准化
        • 4.1.2 对小批量数据集进行标准化
      • 4.2.批量归一化训练与步骤
      • 4.3.批量归一化卷积网络
        • 4.3.1 变换函数推理
      • 4.3.2 归一化遵循卷积性质实现
      • 4.3.3.使用更高的学习率
        • 4.3.3.1使用更高的学习率缺点
        • 4.3.3.2批处理规范化优点
    • 5.阅读总结
      • 5.1 模型实现步骤
      • 5.2 感悟

  • 论文链接
    https://arxiv.org/pdf/1502.03167.pdf

1. 摘要

  • 内部协变移位现象
    • 训练深度神经网络很复杂,训练中随着前一层参数变化,后一层输入分布就会变化。就要求是用较低学习速率着重仔细的设置参数初始化值,导致训练速度较慢,并且使训练具有饱和非线性的模型变得非常困难。
  • 通过规范输入层来解决问题的方法。【Batch Normalization】
    • 将批量数据集输入之前进行标准化,进行训练。
    • 将 Batch Normalization(标准化)作为模型体系结构的一部分,并为每个训练小批量执行标准化,从而发挥了其优势。
    • 允许使用更高的学习率(也不能太高),并且对初始化参数不那么着重仔细。
    • 充当正则化器,在某些情况下去除了dropout的必要性。
  • 应用于图像分类模型,Batch Normalization实现了相同的精度且训练次数减少了14倍,并以显著的优势击败了原始模型。
  • 使用批量归一化网络,ImageNet分类结果精度得到提升:达到4.9%的top-5验证错误(和4.8%的测试错误),超过了人类识别的准确度。

2. 序言

  • 深度学习极大地提高了视觉、言语和许多其他领域的艺术水平。
  • 随机梯度下降(SGD)证明是训练深度网络的一种有效方法。
    • SGD优化了网络参数,以使损失最小化
  • SGD变换方法(例如:momentum【动量随机梯度下降】和Adagrad【自适应随机梯度下降】)已被用于实现最先进的性能。
  • 由于网络容易陷入饱和模式,sigmoid激活函数会导致梯度消失问题,所以使用ReLu作为激活函数【一般情况下,都会使用ReLu激活函数,或者转变的ReLu激活函数,不会用sigmoid激活函数】
  • 解决消失梯度方法
    • 使用ReLU激活函数
    • 调整超参数初始化值【Batch Normalization】
    • 使用较小的学习率

2.1 min-batches的优缺点

  • 优点
    • 小批量训练的损失梯度是训练集上的梯度估计,其质量随着批量大小的增加而提高(批量大小的增加使梯度更接近真实的全局梯度)。
    • 由于现代计算平台的并行性,并行批量计算的效率比m次迭代计算要高得多。
  • 缺点
    • 超参数初始化值难设置
      • 由于每个输入层都受到所有先前层参数的影响,因此训练变得复杂,因此网络参数的微小变化会随着网络的深入而放大,即需要仔细调整模型超参数,特别是学习率,以及模型参数初始值。
    • 会发生内部协变量转移
      • 内部协变量转移:深度网络内部节点分布变化。
      • 训练过程中,以输入网络的每一个mini-batch进行训练(部分训练集),导致每个batch具有不同的分布,随着网络的加深,分布差异会越来越大,使模型训练收敛速度很慢,出现梯度消失的问题。
      • 输入层分布的变化带来了问题,因为输入层需要不断适应新分布。当学习系统的输入层分布发生变化时,据说会经历协变变化。这通常通过领域适应来处理。然而,协变移位的概念可以扩展到整个学习系统之外,应用到其部分,例如子网络或层。

2.2 批量归一化解决内部协变量转移的优点

  • 通过批量归一化,每个输入层使用相同的的均值和方差,保持相同分布,减少内部协变移位,可以显著加快模型训练。
  • 减少梯度对参数或其初始值的依赖性,批量归一化对通过网络的梯度传播也有益。【批量归一化可以降低梯度消失问题,更好的反向传播】
  • 允许使用更高的学习率(也不能太高),并且对初始化参数不那么着重仔细,而不存在差异的风险。
  • 充当正则化器,在某些情况下去除了dropout的必要性。
  • 使用批量归一化可以防止网络陷入饱和模式,使得使用饱和非线性激活函数(例如:sigmoid激活函数)成为可能,但是大多数还是用ReLu激活函数。

3.减少内部协变量转移实现思想

  • 内部协变量转移定义:由于训练期间网络参数变化而导致的网络激活分布的变化。【前一输出层结果是后一输入层的参数】
  • whitened(白化,也叫标准化):对网络训练每个输入层使用具有零均值和单位方差(均值为0,方差为1)的相同分布,并且去相关性,网络训练收敛更快。这将消除内部协变移位的不良影响。

3.1 白化的问题

  • 标准化方法:在每个训练步骤或某个时间间隔内标准化,直接修改网络参数或根据网络激活值改变优化算法参数。如果同时修改网络参数与优化算法参数,则梯度下降需要根据归一化后的网络参数来更新参数(增加了归一化步骤,增加了计算量),这会降低梯度下降的效率。
    • 标准化公式
      x ^ = x − E [ x ] \begin{aligned} \hat{x}&=x-E[x] \end{aligned} x^=xE[x]
    • 例如:输入层u,输出层x
      • b为此次卷积导致分布变化的偏移量
        x = u + b \begin{aligned} x=u+b \end{aligned} x=u+b
      • 梯度下降过程中,就是对b的更新,参数优化就会对b产生依赖,而不是参数本身
        b = b + Δ b ∆ b ∝ − ∂ ℓ l o s s ∂ x ˉ \begin{aligned} b=b+\Delta{b}\\ ∆b\propto-\frac{∂ℓ_{loss}}{∂ \bar{x}} \end{aligned} b=b+Δbbxˉloss
      • 标准化后的x为
        x ^ = u + b + Δ b − E [ u + b + Δ b ] = u + b − E [ u + b ] \begin{aligned} \hat{x}&=u+b+\Delta{b}-E[u+b+\Delta{b}]\\ &= u+b-E[u+b] \end{aligned} x^=u+b+ΔbE[u+b+Δb]=u+bE[u+b]
    • 问题:对b的更新和随后的归一化变化不会导致分布变化,也不会导致增加损失。训练加深,b将无限增长,而损失保持不变。如果标准化不仅集中而且扩展了激活【自己理解的这句话:如果标准化后的参数值比较密集,而且导致激活函数激活造成梯度消失】,问题可能更糟。实验发现,在梯度下降步骤之外计算归一化参数时,模型会崩溃。

3.2 解决白化问题

  • 上述方法问题发生,在于梯度下降优化没有考虑到参数归一化后已经改变。

  • 解决问题:对于任何参数值,确保网络总是产生具有所需分布的激活。确保归一化会对模型参数Θ具有依赖性。(根据参数Θ求梯度,而不是根据参数偏移量的值b求梯度)

    • 例如:输入层x,视为向量,则 χ \chi χ是训练数据集上这些输入的集合。
      • 对x进行标准化
        x = N o r m ( x , χ ) \begin{aligned} x&=Norm(x,\chi) \end{aligned} x=Norm(x,χ)
      • 反向传播,计算雅可比矩阵
        ∂ N o r m ( x , χ ) ∂ x ∂ N o r m ( x , χ ) ∂ χ \begin{aligned} \frac{∂Norm(x,\chi)}{∂x}\\ \frac{∂Norm(x,\chi)}{∂\chi} \end{aligned} xNorm(x,χ)χNorm(x,χ)
    • 协方差矩阵公式
      C o v [ x ] = E x ∈ χ [ x x T ] − E [ x ] E [ x ] T \begin{aligned} Cov[x]=E_{x∈\chi}[xx^T]− E[x]E[x]^T \end{aligned} Cov[x]=Exχ[xxT]E[x]E[x]T
  • 白化层输入是昂贵的,因为它需要计算协方差矩阵及其平方根的倒数,以产生白化激活 C o v [ x ] − 1 2 ( x − E [ x ] ) Cov[x]^{−\frac{1}{2}}(x− E[x]) Cov[x]21xE[x]以及用于反向传播的这些变换的导数。这促使我们寻求一种替代方案.

4.小批量统计进行标准化

  • 由于每一层输入的完全白化代价高昂,且并非处处可微(可导),因此我们进行了两个必要的简化。

4.1.白化简化的两种方式

4.1.1 对通道维度进行标准化

  • 我们将通过使每个标量特征的均值为零,方差为1,而不是联合白化层输入和输出中的特征(根据通道进行标准化,不根据所有通道进行标准化)。
    • 对于具有d维(d个通道)输入 x = ( x ( 1 ) … x ( d ) ) x=(x(1)…x(d)) x=x1xd))的层,我们将对每个通道进行标准化
      x ^ k = x k − E [ x k ] V a r [ x k ] \begin{aligned} \hat{x}^{k}=\frac{x^{k}-E[x^{k}]}{\sqrt{Var[x^{k}]}} \end{aligned} x^k=Var[xk] xkE[xk]

    • 其中在训练数据集上计算期望值和方差。即使特征不去相关,这种归一化也会加快收敛速度

    • 进行标准化后每个输入层的内容(输入的值)会发生改变。因此,我们为每个激活 x ( k ) x(k) xk引入一对参数 γ ( k ) γ(k) γ(k) β ( k ) β(k) β(k),它们缩放并移动归一化值(根据此操作,是数值更接近归一化之前的值),这些参数与原始模型参数一起学习,并恢复网络的表示能力。
      y k = γ ( k ) x ^ k + β ( k ) \begin{aligned} y^{k}=γ^{(k)}\hat{x}^{k}+β^{(k)} \end{aligned} yk=γ(k)x^k+β(k)

    • 通过设置 γ ( k ) γ^{(k)} γ(k) β ( k ) β^{(k)} β(k)参数函数,我们可以恢复原始激活
      γ ( k ) = V a r [ x k ] β ( k ) = E [ x k ] \begin{aligned} γ^{(k)}=\sqrt{Var[x^{k}]}\\ β^{(k)}=E[x^{k}] \end{aligned} γ(k)=Var[xk] β(k)=E[xk]

4.1.2 对小批量数据集进行标准化

  • 在批量归一化中,每个训练步骤都基于整个训练集,使用整个数据集来规范激活。然而,当使用随机优化时,这是不合适的。
  • 由于我们在随机梯度训练中使用了小批量,所以每个小批量产生了每个激活的均值和方差的估计。用于小批量归一化的统计数据可以完全参与梯度反向传播。
  • 注意,使用小批次是通过计算每维方差而不是联合协方差实现的;在联合情况下,需要正则化,因为小批量的大小可能小于被白化的激活次数,从而导致奇异协方差矩阵
  • 例如:
    • 一个大小为m的小批量 β \beta β。有m个激活值, β = { x 1 … m } \beta=\{x_{1…m}\} β={x1m}
    • 设归一化值为 x ^ 1 … m \hat{x}_{1…m} x^1m,其线性变换为 y 1 … m {y}_{1…m} y1m。称为批量归一化变换。
      B N γ , β : x 1 … m → y 1 … m \begin{aligned} BNγ,β:{x}_{1…m}→ {y}_{1…m} \end{aligned} BNγβx1my1m
    • 在算法中, ε \varepsilon ε是一个常数,添加到小批量方差中以获得数值稳定性(防止分母为0)
      在这里插入图片描述
  • 在公式 y = B N γ , β ( x ) y = BN_{γ,β}(x) y=BNγ,β(x)中,要学习参数γ和β。
    • 注意,BN变换并不独立处理每个训练样本中的激活。相反, B N γ , β ( x ) BN_{γ,β}(x) BNγ,β(x)取决于训练样本和小批量中的其他样本。
  • 被缩放和移动的值y传递到其他网络层。标准化激活 x ^ \hat{x} x^是转化至关重要的内在因素。
  • 只要每个小批次样本是从相同的分布中采样的,并且在忽略了 ε \varepsilon ε,任何 x ^ \hat{x} x^的值的分布都是期望值0和方差1。
  • 每个归一化激活 x ^ k \hat{x}^k x^k可以被视为由线性变换 y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) y^{(k)}=γ^{(k)}\hat{x}^{(k)}+β^{(k)} y(k)=γ(k)x^(k)+β(k)组成的子网络的输入,然后由原始网络进行其他处理。
  • 尽管这些归一化 x ^ k \hat{x}^k x^k的联合分布在训练过程中会发生变化,但我们预计归一化输入的引入会加速子网络训练,从而加速整个网络训练。
  • BN变换是将归一化激活引入网络的可微变换。这确保了在模型训练时,层可以继续学习表现出较少内部协变移位的输入分布,从而加速训练。此外,BN变换后保持着网络容量。
  • 在训练期间,需要通过变换反向传播损失的梯度,以及计算关于BN变换参数的梯度。我们需要使用链式法则
    在这里插入图片描述
  • 实际上,变换不是线性的,归一化的值也不能保证是高斯的或独立的,但我们仍然期望批量归一化能够帮助更好地进行梯度传播。批量归一化对梯度传播的精确影响仍是一个有待进一步研究的领域。

4.2.批量归一化训练与步骤

在这里插入图片描述

4.3.批量归一化卷积网络

4.3.1 变换函数推理

  • BN添加在卷积之后非线性之前
  • 批处理归一化可以应用于网络中的任何一组激活。
  • 由仿射变换和元素非线性组成的变换函数:
    • W和b是模型的学习参数,g(x)是非线性激活函数,如sigmoid或ReLU
      z = g ( W u + b ) \begin{aligned} z=g(W u + b) \end{aligned} z=g(Wu+b)
  • 可以将输入层u归一化,但由于u可能是另一个非线性的输出,其分布的形状在训练过程中可能会改变,可能不会消除协变量移位【不合适】。
  • 通过归一化 x = W u + b x = W u + b x=Wu+b,可能具有对称的非稀疏分布(根偏向于高斯分布);将其归一化很可能产生具有稳定分布的激活。
  • 归一化 x = W u + b x = W u + b x=Wu+b,偏差b可以被忽略,因为它的影响将被随后的平均减法抵消。因此变换函数代替为
    • BN变换独立于 x = W u x = W u x=Wu的每个维度,每个维度有单独学习参数γ(k),β(k)。
      z = g ( W u ) \begin{aligned} z=g(W u) \end{aligned} z=g(Wu

4.3.2 归一化遵循卷积性质实现

  • 希望归一化遵循卷积性质——这样同一特征映射的不同元素,在不同位置,以相同的方式归一化。
  • 实现方法:我们将所有位置的所有激活共同标准化。
    • β \beta β是一个小批量元素和空间位置的特征图中所有值的集合,大小为m小批量数据集和 p ∗ q p *q pq大小的特征图,使用大小为 m ′ m^{'} m的有效小批量。
      m ′ = ∣ β ∣ = m ∗ p ∗ q \begin{aligned} m^{'}=|\beta|=m*p*q \end{aligned} m=β=mpq
    • 每个特征图学习一对参数γ(k)和β(k),而不是每个激活。以便在推理过程中BN变换对给定特征映射中的每个激活应用相同的线性变换。

4.3.3.使用更高的学习率

4.3.3.1使用更高的学习率缺点

  • 传统深度网络使用更高的学习率缺点
    • 可能会导致梯度爆炸或消失。
    • 陷入糟糕的局部极小值。

4.3.3.2批处理规范化优点

  • 通过批处理规范化解决更高的学习率带来的问题:通过将整个网络的激活归一化。
  • 它可以防止参数的微小变化放大为梯度中激活的较大和次优变化。
  • 它可以防止训练陷入非线性的饱和状态
  • 参数更新速度快。
    • 通常,较大的学习率可能会增加层参数的尺度(值大小),然后在反向传播过程中放大梯度,导致模型爆炸。然而,使用批处理归一化,通过层的反向传播不受其参数规模的影响。这个尺度不影响雅可比矩阵,也不影响梯度传播。此外,较大的权重导致较小的梯度,批量归一化将稳定参数的增长。
  • 保留了反向传播过程中的梯度大小。
    • 批处理归一化可能会导致层雅可比矩阵具有接近1的奇异值,这对训练是有益的,这保留了反向传播过程中的梯度大小。
  • 批处理归一化规范了模型【Dropout可以被删除或降低强度】
    • 当使用批处理归一化进行训练时,一个训练样本与小批中的其他样本一起被看到,并且训练网络不再为给定的训练样本产生确定性值。在实验中,我们发现这种效应有利于网络的泛化。虽然Dropout通常用于减少过拟合,但在批处理标准化网络中,我们发现它可以被删除或降低强度。
  • 可以使网络训练速度更快,准确率更高。
  • 使分布更加稳定,减少了内部协变量的移位。

5.阅读总结

5.1 模型实现步骤

  • 深度学习模型网络较深,容易导致梯度消失问题,引入批量训练
  • 批量训练,导致每个批次的数据分布不同,引入白化(数据标准化)
  • 使用白化,使参数服从高斯分布,增加标准化,计算量高昂,引入通道标准化
  • 由于使用批量训练,使用全局标准化期望与方差不合实际,引入小批量期望与方差标准化
  • 由于标准化导致数据变化,该变了原始模型参数表达含义,引入 B N γ , β BN_{γ,β} BNγ,β转换,使模型恢复原始表达含义
  • 最终得到Batch Normalization

5.2 感悟

  • 不喜欢读论文,翻译不准确,理解不了专业术语,这个论文视频讲解没有找的详细的,只能自己看
  • 找了好几个视频结合论文看,一篇论文读了好像有5天(原先以为一天应该就读完了,发现有些读不懂,费脑子,但是第二天再读,发现又读懂了。。。),脑子清醒的时候效率比较高
  • 写总结的时候也很乱,因为作者是根据思路一步一步实现的,就自己向前看了一下论文步骤,总结了模型实现步骤,发现,11页论文也没有多少东西。。。
  • 第一次总结的文章,还有很多不太理解的,有时间再读,再修改。。。

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

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

相关文章

mybatis实现分页查询(两种方式:1pageHelper插件 2手写)

方法1:整合pageHelper分页插件 优点:快捷,只需要你有一个查询全部数据的方法即可 缺点:对于初学者来说,不了解内部的原理 前提:需要先实现一个最简单的 查询全部数据的方法,不会的可以先去搭建一…

C++零基础项目:俄罗斯方块!详细思路+源码分享

游戏介绍 这是使用 C 和 EasyX 写的一个俄罗斯方块小游戏,里面用到的 C 特性并不多。 游戏主要分成了两个类来实现:Game 和 Block 类,分别用来实现游戏逻辑和单独的俄罗斯方块,里面顶多就用到了静态成员函数和变量的特性&#x…

nexus上传自定义starter

nexus上传自定义starter1、starter上传简介2、上传方法2.1、setting.xml文件2.2、项目中的pom文件3、具体部署1、starter上传简介 在我们自定义了springboot的starter后,starter一般有是一个父子级maven工程,如下图所示,对于 autoconfigure 来…

H5 导航栏示例

本文是通过:hover更新元素样式&#xff0c;通过递归树形菜单渲染到页面。 效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"&…

基于ssm框架的汽车故障维修管理系统源码+开题报告+论文+远程安装部署+视频讲解

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 基于ssm框架的汽车故障维修管理系统源码开题报告论文远程安装部署视频讲解 演示视频 视频去哪了呢&#xff1f;_哔哩哔哩_bilibili 系统介绍 项目介绍…

dependencies与dependencyManagement的区别

最近再看项目的时候&#xff0c;无意间注意到项目中的pom文件既有dependencyManagement&#xff0c;也有dependencies&#xff0c;有点疑惑为什么要同时有这两个标签&#xff0c;可能之前没太注意过吧。 dependencies与dependencyManagement的区别&#xff1a; a…

js基础面试题

js基础 h5新特性 1. 新增选择器&#xff1a;querySelector、querySelectorAll 2. 拖拽功能&#xff1a;drag和drop 3. 媒体播放&#xff1a;video和audio 4. 本地存储&#xff1a;localStorage和sessionStorage 5. 语义化标签&#xff1a;article、footer、header、nav、sect…

D. Maximum Sum of Products(二维数组记录改变区间)

Problem - 1519D - Codeforces 给你两个长度为n的整数数组a和b。 你最多可以扭转数组a的一个子数组&#xff08;连续子段&#xff09;。 你的任务是反转这样一个子数组&#xff0c;使其总和∑i1nai⋅bi达到最大。 输入 第一行包含一个整数n&#xff08;1≤n≤5000&#xff0…

第三十四章 linux-模块的加载过程四

第三十四章 linux-模块的加载过程四 文章目录第三十四章 linux-模块的加载过程四调用模块的初始化函数释放INT section所占用的空间呼叫模块通知链模块的卸载find_module检查依赖关系free_modulesys_init_module第二部分由load_module返回的do_init_module实现 static noinlin…

LCHub:到2023年,全球低代码市场预计达到269亿美元

12月13日,Gartner发布全球低代码市场规模报告。数据显示,到2023年,全球低代码市场规模预计达到269亿美元,同比增长19.6%。 业务技术专家认为,到2026年,超级自动化和业务可组合性将成为加速低代码技术应用的关键驱动力。 Gartner还发布了一项调查数据,到2023年全球超级自…

计算机毕设Python+Vue学习类视频网站(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C++ STL 之堆栈(后进先出) stack 详解

文章目录Part.I AttentionPart.II FuncitonPart.III CodePart.I Attention stack<T>容器适配器的数据是以 LIFO (Last in First Out, 后进先出) 的方式组织的&#xff0c;可以将它想象成放在餐桌上的一摞盘子。必须要包含头文件#include <stack> Part.II Funcito…

2023年天津农学院专升本专业课考试具体安排及准考证打印时间

天津农学院2023年高职升本科专业课考试相关事宜的通知 一、考试时间及考试地点 1.考试时间&#xff1a;2022年12月31日9:00-11:00 2.考试地点&#xff1a;天津农学院东、西校区&#xff0c;每位考生具体的考试地点、考场号等信息以准考证上标注的为准。 天津农学院东校…

人工智能时代,你应该花4个月时间去学习编程,并找到一份好工作

把现在作为你冒险的开始&#xff0c;你会学到一种由高需求的技能&#xff0c;你会有一段新的经历&#xff0c;你会得到新的机会。试一试吧。 编者按&#xff1a;新的一年&#xff0c;很多人都会想要有一个新的开始。在Andrei Neagoie看来&#xff0c;人们应该选择一个非常有前…

maven—分模块开发与设计

项目与模块下载 任务&#xff1a; 将springmvc_ssm这个ssm整合后的项目拆分成四个模块&#xff0c;如下图&#xff1a; ssm_pojo拆分 新建模块 从原始项目中拷贝实体类&#xff08;User&#xff09;到该模块 ssm_dao拆分 新建模块 从原始项目中拷贝相关内容到该模块 数据…

DEJA_VU3D - Cesium功能集 之 089-台风范围几何绘制

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(尽可能把代码简洁一些)。博文内容…

学习IB带给了我什么?

在某些层面&#xff0c;IB课程类似于大家更加熟知的AP课程——它是一种让高中学生学习高级、严格课程的体系。然而&#xff0c;有两个主要区别。首先&#xff0c;IB项目在美国高中或者美国大学申请中的受欢迎程度远远低于AP课程&#xff08;个人感觉是这样子滴哈&#xff09;&a…

【复习笔记】嵌入式系统及其原理复习重点

嵌入式系统及其原理复习重点笔记 计算机的发展 第一代——电子管计算机&#xff08;1946—1954年&#xff09; 内 存 延迟线或磁芯外 存 纸带、卡片或磁带工作速度 几千&#xff5e;一万次&#xff0f;秒软 件 机器语言或汇编语言应 用 科学计算代表机型 ENIAC特 点 体积庞大…

【vue】简易封装echarts

将echarts封装成组件&#xff0c;达到只要调用方法&#xff0c;传入数据和相应的参数就能生成图表的效果&#xff0c;避免在项目中编写大量重复和累赘的echarts的配置代码&#xff0c;实现的思路如下&#xff1a; 接口返回的一般是json数据&#xff0c;所以首先要将json数据进…

【LVGL学习笔记】(四)PlatformIO + LVGL8.3配置

LVGL全程LittleVGL&#xff0c;是一个轻量化的&#xff0c;开源的&#xff0c;用于嵌入式GUI设计的图形库。并且配合LVGL模拟器&#xff0c;可以在电脑对界面进行编辑显示&#xff0c;测试通过后再移植进嵌入式设备中&#xff0c;实现高效的项目开发。 LVGL中文教程手册&#…