批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

news2025/3/26 10:25:09

在这里插入图片描述

文章目录

  • 一、Batch normalization 理论与应用
    • 1. 理论解释
    • 2. 数值例子
  • 二、Layer normalization 理论与应用
    • 1. 理论解释
    • 2. 数值例子
  • 三、Layer Normalization 和 Batch Normalization 的区别
  • 四、《Transformers without Normalization》笔记

一、Batch normalization 理论与应用

1. 理论解释

Batch Normalization(批归一化)是一种用于深度学习的优化技术,由Sergey Ioffe和Christian Szegedy在2015年提出。它通过对每一层的输入进行归一化处理,加速训练并提升模型性能。

原理

  1. 归一化:
  • 对每个小批量数据(mini-batch)的每个特征维度进行归一化,使其均值为0,方差为1。
  • 公式为:
    x ^ i = x i − μ B σ B 2 + ϵ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i=σB2+ϵ xiμB
    其中, x i x_i xi是输入, μ B \mu_B μB是均值, σ B 2 \sigma_B^2 σB2是方差, ϵ \epsilon ϵ是防止除零的小常数。
  1. 缩放和平移:
  • 归一化后,通过可学习的参数 γ \gamma γ β \beta β进行缩放和平移,恢复数据的表达能力。
  • 公式为:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
    其中, y i y_i yi是输出, γ \gamma γ β \beta β是可学习参数。

作用

  1. 加速训练:
    • 归一化后的数据分布更稳定,减少了内部协变量偏移,允许使用更高的学习率,加快收敛。
  2. 防止梯度消失/爆炸:
    • 归一化使激活值保持在合理范围内,缓解了梯度消失或爆炸问题。
  3. 正则化效果:
    • 由于使用小批量数据的统计量,引入了噪声,起到轻微的正则化作用,减少过拟合。
  4. 减少对初始化的依赖:
    • 归一化使网络对参数初始化的敏感性降低,简化了调参过程。

实现

在训练时,计算每个小批量的均值和方差;在测试时,使用训练数据的移动平均均值和方差。
代码示例

import torch
import torch.nn as nn

# 定义一个带BatchNorm的层
batch_norm = nn.BatchNorm2d(num_features=64)

# 输入数据
input_data = torch.randn(32, 64, 128, 128)

# 前向传播
output = batch_norm(input_data)
总结
Batch Normalization通过对每层输入进行归一化,加速训练、防止梯度问题、提供正则化效果,并减少对初始化的依赖,是深度学习中的重要技术。

2. 数值例子

通过一个具体的数值例子来说明 Batch Normalization 的计算过程。

假设我们有一个 mini-batch,包含 3 个样本,每个样本有 2 个特征。数据如下:

X = [ 1 2 3 4 5 6 ] X = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \\ \end{bmatrix} X= 135246
其中:

  • 每一行是一个样本。
  • 每一列是一个特征(例如,特征 1 和特征 2)。

Batch Normalization 的计算步骤

  1. 计算每个特征的均值和方差

    Batch Normalization 是对每个特征分别进行归一化的。我们分别计算特征 1 和特征 2 的均值和方差。

  • 特征 1(第一列:1, 3, 5):
    • 均值: μ 1 = 1 + 3 + 5 3 = 3 \mu_1 = \frac{1 + 3 + 5}{3} = 3 μ1=31+3+5=3
    • 方差: σ 1 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(13)2+(33)2+(53)2=34+0+4=38
  • 特征 2(第二列:2, 4, 6):
    • 均值: μ 2 = 2 + 4 + 6 3 = 4 \mu_2 = \frac{2 + 4 + 6}{3} = 4 μ2=32+4+6=4
    • 方差: σ 2 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(24)2+(44)2+(64)2=34+0+4=38
  1. 归一化

使用均值和方差对每个特征进行归一化。归一化公式为:
x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001(一个很小的常数,防止除零)。

  • 特征 1 的归一化:
    x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 131.63321.225
    x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 331.63300
    x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 531.63321.225

  • 特征 2 的归一化:
    x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 241.63321.225
    x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 441.63300
    x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 641.63321.225

归一化后的数据为:

X ^ = [ − 1.225 − 1.225 0 0 1.225 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} X^= 1.22501.2251.22501.225

  1. 缩放和平移

Batch Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ β \beta β。假设 γ = [ 1 , 1 ] \gamma = [1, 1] γ=[1,1] β = [ 0 , 0 ] \beta = [0, 0] β=[0,0](初始值),则输出为:

y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γx^i+β

计算后结果与归一化结果相同:

Y = [ − 1.225 − 1.225 0 0 1.225 1.225 ] Y = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} Y= 1.22501.2251.22501.225

如果 γ = [ 2 , 2 ] \gamma = [2, 2] γ=[2,2] β = [ 1 , 1 ] \beta = [1, 1] β=[1,1],则输出为:

Y = [ − 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 − 1.45 1 1 3.45 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & -1.225 \times 2 + 1 \\ 0 \times 2 + 1 & 0 \times 2 + 1 \\ 1.225 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & -1.45 \\ 1 & 1 \\ 3.45 & 3.45 \\ \end{bmatrix} Y= 1.225×2+10×2+11.225×2+11.225×2+10×2+11.225×2+1 = 1.4513.451.4513.45

小结

  1. 归一化:将数据调整为均值为 0,方差为 1。
  2. 缩放和平移:通过 γ \gamma γ β \beta β 恢复数据的表达能力。
  3. 最终输出:归一化后的数据经过缩放和平移,得到最终的输出。
    通过这个数值例子,可以清楚地看到 Batch Normalization 的计算过程及其作用。

二、Layer normalization 理论与应用

1. 理论解释

Layer Normalization(层归一化)是另一种归一化技术,由 Jimmy Lei Ba 等人在 2016 年提出。它与 Batch Normalization(批归一化)的目标类似,都是为了加速训练并提高模型性能,但它们的归一化方式和应用场景有所不同。

Layer Normalization 的原理

Layer Normalization 是对单个样本的所有特征进行归一化,而不是像 Batch Normalization 那样对整个 mini-batch 的每个特征进行归一化。具体步骤如下:

  1. 计算均值和方差:
  • 对于每个样本,计算其所有特征的均值和方差。
  • 假设输入为 ( x = [ x 1 , x 2 , … , x d ] (x = [x_1, x_2, \dots, x_d] (x=[x1,x2,,xd] d d d是特征维度),则:
    μ = 1 d ∑ i = 1 d x i \mu = \frac{1}{d} \sum_{i=1}^d x_i μ=d1i=1dxi
    σ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \sigma^2 = \frac{1}{d} \sum_{i=1}^d (x_i - \mu)^2 σ2=d1i=1d(xiμ)2
  1. 归一化:
  • 使用均值和方差对每个特征进行归一化:
    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
    其中, ϵ \epsilon ϵ 是一个很小的常数,用于防止除零。
  1. 缩放和平移:
  • 引入可学习的参数 γ \gamma γ β \beta β,对归一化后的数据进行缩放和平移:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β

Layer Normalization 的特点

  1. 对单个样本操作:
    • Layer Normalization 是对每个样本的所有特征进行归一化,而不是对整个 mini-batch 的每个特征进行归一化。
  2. 适用于变长数据:
    • 由于不依赖于 mini-batch 的大小,Layer Normalization 更适合处理变长数据(如 NLP 中的序列数据)。
  3. 对 mini-batch 大小不敏感:
    • Layer Normalization 的性能不受 mini-batch 大小的影响,即使 batch size 为 1 也能正常工作。

2. 数值例子

通过一个包含多个样本的例子来详细说明 Layer Normalization 的计算过程。

假设我们有一个 mini-batch,包含 2 个样本,每个样本有 3 个特征。数据如下:

X = [ 2 4 6 1 3 5 ] X = \begin{bmatrix} 2 & 4 & 6 \\ 1 & 3 & 5 \\ \end{bmatrix} X=[214365]

其中:

  • 每一行是一个样本。
  • 每一列是一个特征(例如,特征 1、特征 2 和特征 3)。

Layer Normalization 的计算步骤

Layer Normalization 是对每个样本的所有特征进行归一化。因此,我们需要分别对每个样本计算均值和方差,然后进行归一化。

  1. 对第一个样本[2, 4, 6]的计算

    • 计算均值和方差:

      • 均值:
        μ 1 = 2 + 4 + 6 3 = 4 \mu_1 = \frac{2 + 4 + 6}{3} = 4 μ1=32+4+6=4
      • 方差:
        σ 1 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(24)2+(44)2+(64)2=34+0+4=38
    • 归一化:
      使用公式:
      x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
      假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001

    • 特征 1:

    x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 241.63321.225

    • 特征 2:
      x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 441.63300
    • 特征 3:
      x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 641.63321.225

    归一化后的第一个样本:
    x ^ 1 = [ − 1.225 , 0 , 1.225 ] \hat{x}_1 = [-1.225, 0, 1.225] x^1=[1.225,0,1.225]

  2. 对第二个样本[1, 3, 5]的计算

    • 计算均值和方差:

      • 均值:
        μ 2 = 1 + 3 + 5 3 = 3 \mu_2 = \frac{1 + 3 + 5}{3} = 3 μ2=31+3+5=3
      • 方差:
        σ 2 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(13)2+(33)2+(53)2=34+0+4=38
    • 归一化:

    使用公式:

    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ

    • 特征 1:
      x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 131.63321.225

    • 特征 2:
      x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 331.63300

    • 特征 3:
      x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 531.63321.225

      归一化后的第二个样本:
      x ^ 2 = [ − 1.225 , 0 , 1.225 ] \hat{x}_2 = [-1.225, 0, 1.225] x^2=[1.225,0,1.225]

  3. 归一化后的结果

    将所有样本的归一化结果组合起来:
    X ^ = [ − 1.225 0 1.225 − 1.225 0 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} X^=[1.2251.225001.2251.225]

  4. 缩放和平移
    Layer Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ β \beta β。假设 γ = [ 1 , 1 , 1 ] \gamma = [1, 1, 1] γ=[1,1,1] β = [ 0 , 0 , 0 ] \beta = [0, 0, 0] β=[0,0,0](初始值),则输出为:

    y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γx^i+β

    计算结果与归一化结果相同:

    Y = [ − 1.225 0 1.225 − 1.225 0 1.225 ] Y = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} Y=[1.2251.225001.2251.225]

    如果 γ = [ 2 , 2 , 2 ] \gamma = [2, 2, 2] γ=[2,2,2] β = [ 1 , 1 , 1 ] \beta = [1, 1, 1] β=[1,1,1],则输出为:

    Y = [ − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 1 3.45 − 1.45 1 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & 1 & 3.45 \\ -1.45 & 1 & 3.45 \\ \end{bmatrix} Y=[1.225×2+11.225×2+10×2+10×2+11.225×2+11.225×2+1]=[1.451.45113.453.45]


小结

  1. Layer Normalization 是对每个样本的所有特征进行归一化。
  2. 计算步骤包括:
    • 计算每个样本的均值和方差。
    • 归一化。
    • 缩放和平移。
  3. 与 Batch Normalization 不同,Layer Normalization 不依赖于 mini-batch,适合处理变长数据(如 NLP 中的序列数据)。

通过这个包含多个样本的例子,可以清楚地看到 Layer Normalization 的计算过程及其作用。

三、Layer Normalization 和 Batch Normalization 的区别

在这里插入图片描述
代码示例

以下是 PyTorch 中 Layer Normalization 的实现示例:

import torch
import torch.nn as nn

# 定义一个 LayerNorm 层
layer_norm = nn.LayerNorm(normalized_shape=64)  # normalized_shape 是特征维度

# 输入数据 (batch_size, sequence_length, feature_dim)
input_data = torch.randn(32, 10, 64)  # 假设 batch_size=32, sequence_length=10, feature_dim=64

# 前向传播
output = layer_norm(input_data)

总结

  1. Layer Normalization 是对单个样本的所有特征进行归一化,适用于变长数据(如 NLP 中的序列数据)。
  2. Batch Normalization 是对 mini-batch 中每个特征进行归一化,适合固定长度的数据(如图像)。
  3. 两者的主要区别在于归一化的维度和对 mini-batch 的依赖程度。选择哪种归一化方法取决于具体任务和数据特性。

四、《Transformers without Normalization》笔记

paper:https://arxiv.org/pdf/2503.10622

文章的核心思想是tanh代替了归一化层,这是因为作者做实验发现LN的输入输出曲线,很像tanh函数的“S”型曲线:
在这里插入图片描述
tanh(x) 函数可视化:
在这里插入图片描述

∼ O n e   p e r s o n   g o   f a s t e r ,   a   g r o u p   o f   p e o p l e   c a n   g o   f u r t h e r ∼ \sim_{One\ person\ go\ faster,\ a\ group\ of\ people\ can\ go\ further}\sim One person go faster, a group of people can go further

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

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

相关文章

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…

c++进阶--哈希表的实现

大家好,今天我们来学习ubordered_set和unordered_map的底层哈希表。 目录 哈希表实现 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因⼦ 1.4 将关键字转为整数 1.5 哈希函数 下面我们介绍几种哈希函数:1.5.1 除法散列法/除留余数法 1.…

颠覆传统:SaaS 品牌如何通过 SEO 策略引爆市场!

SaaS 商业模式提供了令人难以置信的可扩展性和盈利能力——但前提是与正确的营销增长策略相结合。 SaaS 品牌知道,托管基于云的应用程序的成本会随着用户量的增加而降低,因此必须专注于订阅者的快速增长,以保持竞争力并降低成本。 许多 CMO…

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪,和常见的“小巧玲珑”的行车记录仪不同,一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…

数据库中不存在该字段

mybatisplus 定义的类中某些字段是数据库里面没有的,我们可用tablefield(existfalse)来注解,演示如下:

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中,文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式,还是硬盘中混乱的音频、视频、文档等资源,都急需一种高效的整理方法。文件分类助手应运而生,它是一款文件管理工具,能够快速、智…

关于瑞芯微开发工具(RKDevTool)刷机下载Boot失败原因的研究

昨天发了文章《网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试》,其中有关于刷机各种问题的一些解决方法。 网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试-CSDN博客文章浏览阅…

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程)

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程) 一、获取网页数据请求流程 二、目标网址、cookie生成(逐步分析) 1、目标网址:aHR0cHM6Ly9zdWdoLnN6dS5lZHUuY24vSHRtbC9OZXdzL0NvbHVtbnMvNy9JbmRleC5odG1s 2、快速定位入口方法 1、通过脚本监听、hook_cookie等操作可…

Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)

1 主要目的 在Excel中,经常会遇到需要制作多级联动下拉菜单的情况,要求单元格内填写的内容只能从指定的多个选项中进行选择,并且需要设置多级目录,其中下级目录的选项内容要根据上级目录的填写内容确定,如下图所示&am…

excalidraw画图工具——背景画布有无格子设置

服啦找了大半天,愣是没找到 toggle grid : 切换格子… Excalidraw的背景格子 只要右键,将这个勾取消就好了?

计算机组成原理———I\O系统精讲<1>

本篇文章主要介绍输入输出系统的发展概况 一.输入输出系统的发展概况 1.早期阶段 该阶段的特点是I/O设备与主存交换信息都必须通过CPU 当时的I/O设备有如下几个特点: (1)每个I\O设备都必须配有一套独立的逻辑电路与CPU相连,用来…

ENSP学习day9

ACL访问控制列表实验 ACL(Access Control List,访问控制列表)是一种用于控制用户或系统对资源(如文件、文件夹、网络等)访问权限的机制。通过ACL,系统管理员可以定义哪些用户或系统可以访问特定资源&#x…

【C++动态规划 数学】1039. 多边形三角剖分的最低得分|2130

本文涉及知识点 C动态规划 数学 LeetCode1039. 多边形三角剖分的最低得分 你有一个凸的 n 边形,其每个顶点都有一个整数值。给定一个整数数组 values ,其中 values[i] 是第 i 个顶点的值(即 顺时针顺序 )。 假设将多边形 剖分 …

5.go切片和map

切片的概念 数组和切片相比较切片的长度是不固定的,可以追加元素,在追加时可能会使切片的容量增大,所以可以将切片理解成 "动态数组",但是,它不是数组,而是构建在数组基础上的更高级的数据结构。…

【Linux网络-多路转接select】

代码:https://gitee.com/nanyi-c/linux/tree/master/day50 一、I/O多路转接之select 1.初始select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的程序会停在select这里等待,直到被…

cmd命令查看电脑的CPU、内存、存储量

目录 获取计算机硬件的相关信息的命令分别的功能结果展示结果说明获取计算机硬件的相关信息的命令 wmic cpu get name wmic memorychip get capacity wmic diskdrive get model,size,mediaType分别的功能 获取计算机中央处理器(CPU)的名称 获取计算机内存(RAM)芯片的容量…

LVS的 NAT 模式实现 3 台RS的轮询访问

使用LVS的 NAT 模式实现 3 台RS的轮询访问 1.配置 RS(NAT模式)2. 配置 LVS 主机(仅主机、NAT模式)2.1 配置仅主机网卡(192.168.66.150/24 VIP )2.2 配置 NAT 网卡(192.168.88.6/24 DIP&#xff…

phpcms版AI自动发文插件,自动创作,自动配图,自动发布,支持多种大模型

phpcms版本的AI自动发文插件1.0.0版,支持自动写文章,自动配图,自动发布。目前支持DeepSeek,豆包,通义千问,文心一言,讯飞星火,KIMI,腾讯混元登大模型AI。同时有自定义字段…

C语言判断闰年相关问题

一、简单闰年问题引入 写一个判断年份是否为闰年的程序? 运行结果: 二、闰年问题进阶 使用switch语句根据用户输入的年份和月份,判断该月份有多少天? 第一种写法(判断年份写在switch的case的里面): 运行结果: 第二种解法(先判断闰年): 运行结果: 三、补充 switch中的ca…

数模转换电路(D/A转换器)

将数字信号转换成模拟信号称为数/模转换, 简称D/A(Digital to Analog)转换,实现 D/A 转换的器件称为D/A转换器,简称 DAC(Digital-Analog Converter)。 将模拟信号转换成数字信号称为模/数转换, 简称A/D&a…