Lora模型训练的参数-学习笔记

任何一个lora都会有三重属性,易调用性、泛化性和还原性,任何一个lora只能完美满足其中的两项;

  • 易调用性:在已调用lora后,还需要多少提示词才能让该lora完全生效;
  • 泛化性:能不能还原lora训练素材中的局部特征,能不能和其他lora、模型、标签兼容生效;
  • 还原性:在lora完全生效之后生成图片和训练素材之间的相似度

但具体训练的目标和思路,之后再说,先记录一下对训练参数的认识。

虽然我认为训练参数,其实在lora训练中,并不是最重要的。

最重要的还是训练素材,优秀的、符合要求的训练素材,才是炼丹成功的前提和关键。

训练模型,也像是炒菜,训练素材是菜。

至于训练参数,在我看来,不过是炒菜时的佐料。

如果自己的训练素材是一坨屎,那么即使掌握了训练参数,也不过是在屎上雕花...

阿弥陀佛,有点儿粗俗了。

但不懂训练参数也很麻烦,毕竟就算你有一堆昂贵的食材,却在炒菜的时候下料过猛,那也会破坏食材的鲜美。

学习的过程,已经是吃的百家饭,完全记不得到底谁家饭更香....

模型保存精度

一个字节(Byte)=8位

一个float32的数值=32位(bit)=4个字节(Byte)=4B

那么一个1000x1000的矩阵=10^6个数值=4*10^6B ≈ 4*10^3KB≈4MB

如果是float16的数值,就表示一个数值只占2B,所以整体的参数占内存就少一半

详解FP16和BF16的区别

batchsize

epoch\iteration\batchsize之间的关系

一个epoch:表示所有样本都训练过1次

一个iteration:表示一次反向传播,逐层对参数进行迭代

一个batchsize:表示有多少个样本进行前向计算后,再进行的一次反向传播

深度学习中的batch理解:https://blog.csdn.net/Dontla/article/details/104373682

一般来说,假设样本总数是all

  • 如果batchsize=1,表示一个样本经过1次前向计算,就立刻开始1次反向传播,逐层迭代参数
  • 那么一个epoch就会有 all 次iteration
  • 如果batchsize=10,表示一个样本经过1次前向计算,直到10个样本都完成了10次前向计算后,把这10个样本各自更新的值相加后,再开始1次反向传播,逐层迭代参数
  • 如果batchsize=all,表示一个样本经过1次前向计算,直到所有样本都完成了所有的前向计算后,把所有样本各自更新的值相加后,再开始1次反向传播,逐层迭代参数

batchsize=1,所有样本(例如500个样本)就要经过500次的前向计算+500次的反向传播

batchsize=500,500个样本只要经过500次的前向计算+1次的反向传播

虽然看上去,batchsize越大,好像耗时更短。

但实际如果是从训练结果的收敛上看。batchsize=1反而要比batchsize=500的快,为什么呢?。

batchsize=1的训练过程

这里需要知道,batchsize=1时的计算过程

  • 1次反向传播是要经过逐层的迭代参数计算,所以1次反向传播速度,要比前向传播久
  • 但是,根据统计概率来说,1个样本的值,与另外样本的值变化差距会比较大,也就是说,如果batchsize=1,那么每次的反向传播,参数都会有比较大的改变,这会导致两个影响:
  • 影响1:收敛速度比较快,参数变化大,但经过所有样本的依次迭代,它最终有可能会收敛到某个范围(未必会收敛到极值)
  • 影响2:可能不会收敛,因为每个样本都对参数进行了更新,那么很难收敛到极值(可能会震荡在某个范围)
  • 解决它不能收敛到极值的方式:降低学习率

batchsize=all的训练过程

如果是batchsize=all时的计算过程,

  • 每次反向传播时,参数迭代的变化不会太大,即每次收敛速度相对更慢,需要更多轮的epoch迭代,才能达到与batchsize=minibatch时的相同精度:
  • 根据概率统计,每次迭代时,虽然是经过所有样本前向计算后才进行一次反向传播逐层迭代,但因为所有样本的均值差异并不大,这就导致了两次迭代的参数变量不会太大,相当于每次反向传播的迭代收敛比较慢,对于初始的随机参数来说,要收敛到极值就需要比较多次(多次epoch)的反向传播迭代,耗时更长。
  • 但也有个优点,就是可以收敛到极值,在训练集上几乎不会产生震荡,这会对训练数据产生过拟合,泛化能力低
  • 但是如果batchsize太大,一次将十万条数据扔进模型,很可能会造成内存溢出,而无法正常进行训练。

batchsize=minibatch的训练过程

batchsize=小批量minibach时的计算过程

  • 相对于batchsize=1,minibatch可以降低震荡效果,适当拟合
  • 相对于batchsize=all,minibatch可以适当提高收敛速度,避免过拟合,避免爆显存

在合理范围内,增大batch size的好处

1)内存利用率提高了,大矩阵乘法的并行化效率提高。
2)跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
3)在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
随着 Batch_Size 增大,处理相同数据量的速度越快。
随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。

盲目增大 Batch_Size 有何坏处

1Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
2)太大的batch size 容易陷入sharp minima,泛化性不好。
3Batch_Size 太大,收敛太慢,算法在 200 epoch 内不收敛。

如何平衡batchsize的大小?

batchsize太大或者太小都不好。所以 batch size 的值越大,梯度也就越稳定,而 batch size 越小,梯度具有越高的随机性,但如果 batch size 太大,对于内存的需求就更高,同时也不利于网络跳出局部极小点。所以,我们需要设置一个合适的batchsize值,在训练速度和内存容量之间寻找到最佳的平衡点。

batchsizeepoch的平衡

①一般在Batchsize增加的同时,我们需要对所有样本的训练次数(也就是后面要讲的epoch)增加(以增加训练次数达到更好的效果)这同样会导致耗时增加,因此需要寻找一个合适的batchsize值,在模型总体效率和内存容量之间做到最好的平衡。

②由于上述两种因素的矛盾,batchsize增大到某个时候,达到时间上的最优。由于最终收敛精度会陷入不同的局部极值,因此batchsize增大到某些时候,达到最终收敛精度上的最优。

batchsizelearning_rate的平衡

大的batch_size往往建议可以相应取大点learning_rate, 因为梯度震荡小,大learning_rate可以加速收敛过程,也可以防止陷入到局部最小值

而小batch_size用小learning_rate迭代,防止错过最优点,一直上下震荡没法收敛(这也是一个小trick

batchsizelearningrate这块,有专家说,没有超过几十倍的batchsize,不需要调学习率)

补充认识:学习率

图片简单(特征明显相近),把学习率低一些,因为开高了容易无法收敛,容易震荡。

图片复杂,把学习率开高一些,因为学习路程比较大,要加速(如果学习率很低,那就需要更多次的参数迭代,才能收敛到某个区域的精度)

问题5:文本编码器TE对学习率的敏感度,要远高于噪声预测器UNET

补充认识潜在扩散模型LDM

正如前文所述,扩散模型主要用来生成高质量的图像。稳定扩散模型(StableDiffusion)可以视为一种特殊的扩散模型,学术上叫做潜在扩散模型(Latent Diffusion model),相关概念来自于论文《 High-Resolution Image Synthesis with Latent Diffusion Models》。简单来说,原始的扩散模型通常会消耗更多的内存,因此创建了潜在扩散模型,可以在被称为潜在低维度特征空间进行扩散过程。更进一步,扩散模型是机器学习模型,它被训练来在带有高斯噪声的图像上逐步进行去噪,以获得高质量图像。而潜在扩散模型被训练成在低纬度的特征空间上进行同样的过程。

一般来说,潜在扩散模型LDM含有三个组件:

  • text encoder 文本编码器,这里主要指基于CLIP的文本编码器
  • autoencoder 自编码器,这里主要指Variational Auto Encoder,也被简称为VAE
  • Unet 扩散模型

本文先从最基础的text encoder讲起,主要介绍其在扩散过程中的用途。

CLIP Text Encoder作用

补充认识CLIP

SD使用的是OpenAi的CLIP预训练模型,即别人训练好的拿来就用。CLIP的训练 用到了Text-Image配对的数据集,大概4亿张,主要是通过网络爬取图片以及相应的标签。

CLIP的作用,就是将文本转换为语言信息并使其与图像信息在UNet中采用Attention更好的偶合到一起,成为了文本和图像之间的连接通道。

(简单来说:CLIP是一个已经被训练好的模型,文本和图像已经训练出一一对应的关系)

补充认识SD中是如何应用CLIP

CLIP的网络结构由两部分组成:图像 Image Encoder + 文字 Text Encoder。

其中Text Encoder用来提取文本特征, Image Encoder用来提取图像特征。

Stable Diffusion中只用到了Text Encoder模块。

CLIP Text Encoder模型将输入的文本Prompt进行编码,转换成Text Embeddings(文本的语义信息),作为UNet网络的Context输入,并在UNet网络中的CrossAttention模块中,结合提取特征F对生成图像的内容进行一定程度的控制与引导;

(我们需要给出提示词Prompt, 然后利用CLIP模型将文本转换成嵌入表示Context,作为UNet的一个输入。

CLIP text Encoder 以文本作为输入,并在潜在特征空间中生成文本嵌入(text embeddings);我们也可以通过CLIP模型对图像进行特征编码一样。

补充认识UNET&&Text_encoder

UNet模型是一种用于图像分割的深度学习模型,它基于卷积神经网络(CNN)构建。UNet模型的特点是采用编码器-解码器结构,编码器用于提取图像特征,解码器则用于将特征图恢复到与原始图像相同的尺寸,从而进行像素级的分类。此外,UNet模型还引入了跳跃连接,将编码器的特征图与解码器的特征图进行拼接,以提高分割的精度

通常来说一个U-Net包含两个输入:

‒ Noisy latent/Noise : 该Noisy latent主要是由VAE编码器产生并在其基础上添加了噪声;

(或者如果我们想仅根据文本描述来创建随机的新图像,则可以采用纯噪声作为输入。)

‒ Text embeddings: 基于CLIP的将文本输入提示转化为文本语义嵌入(embedding)

https://zhuanlan.zhihu.com/p/521151393

所以大模型本身的CLIP已经能够对准备用来训练lora的素材:图片和提示词,大模型已经可以产生一个对应关系了。

但现在lora要自己再专门去做这个(图片和提示词)素材的一一对应训练,然后把自己训练出来的参数,更新到大模型里边。

lora训练的提示词参数(即上述的文本向量)和图片特征的参数(即上述的图片向量)是分别需要进行迭代训练的。

这里边的训练效果,我猜测:

  • (整体对应)把共性的图像特征,一一对应所有图片的相同触发词。
  • (局部对应)把相似的图像特征,再一一对应符合该特征图片提示词。

就好像中国人:符合全体中国人民。

但汉族:对应的是中国人中的汉族人民

于是在训练过程中,同时迭代提示词的参数向量,这个提示词的参数向量不仅仅是受到大模型的影响,同时会收到lora模型的影响。

那因为大模型本身就有标签(即提示词)跟图像的对应关系,比如1horse=一只马的图片。

但如果在lora训练中,加强了1horse和一只鹿图片的对应训练。

那么SD在用lora生成图片的时候,就需要考虑这个horse,到底是受大模型影响比较严重,还是受lora模型影响比较严重。【很想测试一下,训练一只鹿的图片,但标签都是马horse,试试指鹿为马】

那么就要考虑一个问题:怎样提高lora对提示词的敏感程度?

什么意思呢?

其实就是,这个提示词要怎么跟lora关系更大?

是不是让lora的提示词参数向量,训练的拟合程度更高一些??比如降低文本编码器的学习率,同时降低Unet编码器的学习率,提高batchsize,然后增多它们的迭代步数。

这样是不是就可以拟合程度更高?

哦?所以其实拟合程度高,是指的提示词受lora影响比较大,受模型影响比较小?

那至于上边的text_encoder_lr,和unet_lr,它们之间是没有关系的。

text_encode_lr其实是用来调节提示词的向量参数,unet_lr是用来图片特征向量的?我不太确定

这是一篇,我认为写的肥肠适合入门观看的理解入门,太棒了!!!:https://jishuzhan.net/article/1777179120795389953

  • Unet为什么要加噪再去噪,有什么意义?

加噪再去噪,本质上其实是用多重高斯分布去拟合真实的图像分布,然后用拟合好的多重高斯分布,去重新生成一张新的图片。

  • Unet去噪的过程,跟text encoder生成的文本向量有什么关系呢?

又是一篇惊喜好文!!!!讲解非常详细的Unethttps://zhuanlan.zhihu.com/p/696562930

Text embbeding在Unet的去噪的过程,参与进来了。

虽然不确定会怎么影响,但问题不大,至少知道是参与进来了。

问题6:优化器是干嘛用的 ?(不考虑,默认用)

  • 问题7:学习率调度器是干嘛用的?

其实就是学习率的改变函数,之前基础的学习率都是固定的。

但在训练过程中,我们一般更倾向于让学习率在训练初期能够比较大,加快前期的训练速度。然后在临近拟合或者是到训练后期能让学习率逐渐变小,避免训练结果出现震荡,难以拟合达到局部最优。

另外学习率的合理设置,比如余弦退火学习器啥的,可以避免训练陷入局部最优点。

所以提供了很多种学习率随训练过程产生变化的函数,就叫做学习率调度器。

问题8:什么是学习率周期。-不重要,不管他

NetworkRank(维度)和Alpha

问题9:NetworkRank(维度)和NetworkAlpha有什么用?

NetworkRank(维度):抽取出来训练的行列,直接影响lora模型的大小

如果设置为128,lora模型的大小约为144M(标准)

最小值如果是8,炼出来的lora模型只有不到10M

如果图片简单,那么rank太高,容易出现过拟合(AI会学习到很多无关紧要的细节和画风等等)

【跟B站花了钱的某个博主说的不一致】

其实NetworkRank越大,用于训练的画面信息、lora训练中会改变更多的大模型参数就会越多,所以lora影响力越大,大模型因为被lora改变了,所以大模型对生成的图片影响力更小,这就导致lora会更容易出现过拟合!

如果NetworkRank越小,用于训练的画面信息,更新大模型的参数就越小,那么大模型影响就更多一些,一定程度上可以避免lora过拟合。

不同的Lora类型,对rank是有限制的,洛哈哈Loha&locon可以简单了解一下

NetworkAlpha:调节Lora对原大模型影响作用的参数。

Alpha和Rank的比值等于使用Lora时的“减弱权重”程度

(什么是减弱权重程度)

因为Lora是整个神经网络训练过程中比较小的一部分,如果它变得太小,机器就学不到东西,看不到明显效果。

所以一开始就固定设置Lora训练的部分,权重值很大

Lora在学习过程中,权重是恒定速率减弱的,会让原本固定的Lora权重值渐渐变小。

那这个NetworkAlpha就是用来调节它在训练过程中的减弱率。——有待商榷

Rank表示Lora抽取出来学习的数据维度(参数)(在一定程度上与数据量的大小成正相关,表示数据量大小)

Rank越大,那lora权重就会更大。

(因为你学习的数据量大,那lora改变大模型的参数量就会比较大,导致lora更拟合。所以换个说法,就会让lora权重大)

Alpha越大,那Lora权重就会越小,因为Alpha是。

所以Alpha/Rank→意味着lora权重的改变程度。

类似于一种整体的学习率。

  • 那如果scaling = Alpha/Rank,scaling越大,表示权重变化程度比较大,这种情况下训练速度比较快,同时也比较容易出现震荡,难以收敛。
  • 这就需要将学习率learning_rate降低,才可以避免震荡,实现一个比较好的收敛效果。
  • 那如果scaling = Alpha/Rank,scaling越小,表示权重变化程度比较小,这种情况下训练速度比较慢,有可能难以实现拟合(欠拟合)。
  • 这就需要将学习率learning_rate提高,才可以加快学习速度,实现适当的拟合。【这也是为什么秋叶的炼丹炉在alpha旁给出的提醒:使用较小的alpha,需要提升学习率】

单张重复次数

单张重复次数,到底有什么用?

我可否认为是单张图片重复多次,相当于是一个文件夹里有10张这个图片。

【姑且这么认为吧】

一般来说,要求泛化能力强的文件夹,重复次数不宜过多。

但要求拟合能力强的文件夹,重复次数可以多一些。

关于学习速率的参数:

混合精度-fp16\fp32,浮点数

默认fp16,差别不大,但速度更快

缓存潜变量Cache Latents和缓存潜变量到磁盘

潜变量:潜变量就是被VAE转化为向量的数据

缓存潜变量

开启缓存潜变量,就会先一次性转换后缓存到显存里,

如果不开启,就会每训练一次,就转换一次(拖慢训练速度)

缓存潜变量到磁盘

开启缓存潜变量到磁盘,可以保存到本地,进行连续训练(它会在单次训练里稍微降速,因为需要读取本地磁盘)

开启xformers

交叉注意力cross attention:xformers,降低显存需求并显著提高速度

内存高效注意率:压缩显存使用,低配用户可以考虑降低爆显存风险(但效果比xformers差一些)

VRAM是什么?显存吗?

控制台参数认识:生成速度、训练速度

1.6 it/s,每秒可以跑多少步数,或多少迭代数iteration/second

34 s/it,每步或每次迭代需要多少秒。

BatchSize和Rank都会影响生成或训练速度。

avr_loss=0.134,平均损失函数数值

loss越低,AI拟合越高

训练过程loss应该是逐渐降低,但如果loss只在小数点3、4位进行小范围变动,大概率就是过拟合了

如果loss在训练过程中忽高忽低,就是欠拟合

【不同训练集的loss值标准不同,重点关注loss的变化过程】

但有时候Loss值丢失NaN,因为有些参数过于极端,导致爆显存

  • 比如text_encoder_lr,如果设置的太高,就会出现梯度爆炸的情况,Loss无法收敛越来越大

什么是正则化?

刚做完正则化训练的课,有个很惊奇的发现,之后有时间了,再抽空去梳理吧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全网超详细Redis主从部署(附出现bug原因)

主从部署 整体架构图 需要再建两个CentOs7,过程重复单机部署 http://t.csdnimg.cn/zkpBE http://t.csdnimg.cn/lUU5gLinux环境下配置redis 查看自己ip地址命令 ifconfig 192.168.187.137 进入redis所在目录 cd /opt/software/redis cd redis-stable 进入配置文件 vim redi…

git查看历史记录方法

0 Preface/Foreword 1 git reflog git reflog显示所有的操作,不仅仅是commit,也包括git pull,checout等动作。 1.1 查看本地和远程仓库的区别 远程仓库:中间的提交是直接在web端编辑 远程仓库:最新的提交是在本地编…

原码、补码、反码、移码是什么?

计算机很多术语翻译成中文之后,不知道是译者出于什么目的,往往将其翻译成一个很难懂的名词。 奇怪的数学定义 下面是关于原码的“吐槽”,可以当作扩展。你可以不看,直接去下一章,没有任何影响。 原码的吐槽放在前面是…

Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)

导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 推荐视频: 黑马程序员全套Java教程_哔哩哔哩 尚硅谷Java入门视频教程_哔哩哔哩 推荐书籍&am…

基础动态规划题目基础动态规划题目

目录 题目1: P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles 代码示例: 题目2: Common Subsequence 代码示例 题目3 :最长上升子序列 最长不下降子序列 最长上升子序列oj答案 题目1: P1216 [USACO1.5]…

ASP.NET Core中创建中间件的几种方式

前言 今天我们一起来盘点一下在ASP.NET Core应用程序中添加和创建中间件常见的四种方式。 中间件介绍 ASP.NET Core中间件(Middleware)是用于处理HTTP请求和响应的组件,它们被安排在请求处理管道中,并按顺序执行。中间件的设计是为…

15- 微分方程

对三角函数不敏感

快捷:通过胶水语言实现工作中测试流程并行、加速

通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景(背景)问题抽象(挑战)如何做(行动)获得了什么(结果)后记相关资源 通过胶水语言实现工…

十大排序 之 快速排序

!!!排序仅针对于数组哦本次排序是按照升序来的哦代码后边有图解哦 介绍 快速排序英文名为Quick Sort 基本思路 快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素base,利用base将待排序的序列分…

【BUG】已解决:error: subprocess-exited-with-error

已解决:error: subprocess-exited-with-error 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主…

Ubuntu上安装配置samba服务

Ubuntu上安装配置samba服务 在Ubuntu中安装配置samba共享服务,可以让你在网络上共享文件和打印机。以下是一个相对详细的步骤指南,介绍如何在Ubuntu上安装和配置Samba。 1. 安装Samba 首先,需要安装Samba软件包。打开终端并运行以下命令&a…

Python基础语法篇(上)

Python基础语法(上) 一、基知二、基本数据类型(一)标准数据类型(二)数据类型转换 三、字符串基本操作(一)字符串的索引和切片(二)字符串的拼接 三、运算符四、…

新一代大语言模型 GPT-5 对工作与生活的影响及应对策略

文章目录 📒一、引言 📒二、GPT-5 的发展背景 🚀(一)GPT-4 的表现与特点 🚀(二)GPT-5 的预期进步 📒三、GPT-5 对工作的影响 🚀(一&#xf…

STM32使用Wifi连接阿里云

目录 1 实现功能 2 器件 3 AT指令 4 阿里云配置 4.1 打开阿里云 4.2 创建产品 4.3 添加设备 5 STM32配置 5.1 基础参数 5.2 功能定义 6 STM32代码 本文主要是记述一下,如何使用阿里云物联网平台,创建一个简单的远程控制小灯示例。 完整工程&a…

元宇宙深入解析

元宇宙(Metaverse)是一个新兴的概念,它激发了技术专家、艺术家和商业领袖的无限想象。它代表着数字互动的新前沿,提供了一个平行的数字宇宙,用户可以在其中实时互动,超越物理世界的限制。 元宇宙是什么&am…

【java】力扣 合法分割的最小下标

文章目录 题目链接题目描述思路代码 题目链接 2780.合法分割的最小下标 题目描述 思路 这道题是摩尔算法的一种扩展 我们先可以找到候选人出来,然后去计算他在左右两边元素出现的次数,只有当他左边时,左边出现的次数2 >左边的长度&…

【C++】拷贝构造函数及析构函数

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

百分点科技签约潍坊市数据产业发展战略合作

近日,潍坊市数据产业发展战略合作签约仪式举行,潍坊市人民政府副市长张震生,潍坊市财政局党组书记、局长王金祥,潍坊市大数据局党组书记陈强出席大会并致辞。百分点科技受邀进行战略合作签约,共同见证潍坊市数据要素市…

力扣—长度最小的子数组

文章目录 题目解析解题思路代码实现 题目解析 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回…

捷配笔记-HDI板与普通PCB板的区别

HDI是什么? HDI(High Density Interconnect) 全称高密度互连板,是一种线分布密度高的高密度电路板,在现代电子设备中扮演着至关重要的角色。 它具有轻薄、线路密度高、有利于先进构装技术的使用、电气特性与信号更佳、改善射频干扰/电磁波干扰/静电释放…