SNN学习(2):深入了解SNN及LIF神经元的原理和运行过程

目录

一、STDP机制

1、STDP 的基本原理

权重调整的“时间差依赖性”

2、STDP 的数学模型

二、SNN的应用场景

三、从人工神经网络ANN到脉冲神经网络SNN

1、脉冲

2、稀疏性(Sparsity)

3、事件驱动处理(静态抑制)

四、脉冲神经元

1、简单神经元模型

2、LIF神经元推导

3、其他神经元模型

(1)IF神经元

(2)基于电流的模型CuBa

(3)递归神经元

(4)深度学习启发的尖峰神经元


下面这篇有关脉冲神经网络介绍的比较详细清晰,如果入门可以了解一下。

脉冲神经网络入门指南(一)Introduction【文献精读】_了解脉冲神经网络的学习规则-CSDN博客

作者写了一个脉冲神经网络入门指南系列,参考的文献是:

Eshraghian, Jason K., et al. "Training spiking neural networks using lessons from deep learning." Proceedings of the IEEE (2023).

文章中的框架如下:

  • 在第2节中,解释使用脉冲的常见优势,并从基本原理推导出一个脉冲神经元模型。
  • 在第3节中,通过探索各种脉冲编码策略赋予这些脉冲意义,研究它们如何影响学习过程,并讨论如何使用目标和正则化函数来调整SNN的脉冲模式。
  • 在第4节中,将探讨使用基于梯度优化来训练SNNs的挑战,并推导出几种解决方案。这些解决方案包括在脉冲时间定义导数以及使用梯度的近似值。
  • 在这样做的过程中,将揭示反向传播算法脉冲时序依赖性可塑性(STDP)学习规则之间的细微联系,并在随后的部分中利用这一联系推导出朝着生物学上合理的学习机制迈进的在线反向传播变体(见图2)。

目标是将已经在广泛领域中证明其价值的人工神经网络(ANNs)与脉冲神经网络(SNNs)的潜在效率结合起来。这种结合有望在保留ANNs强大功能的同时,利用SNNs的高效能和低功耗特点,推动更加节能和高效的智能系统的开发

一、STDP机制

脉冲时序依赖性可塑性(Spike-Timing-Dependent Plasticity, STDP)是脉冲神经网络(Spiking Neural Networks, SNN)中的一种重要学习规则,模拟了生物神经网络中突触连接强度的动态调整机制。STDP 是一种基于脉冲时序的突触可塑性,它通过调整神经元间突触的权重,来使网络逐渐形成合适的连接,从而在学习和记忆中发挥作用。

整的规则非常简单,关键在于两个神经元发出脉冲的时间差——即突触前神经元发出脉冲的时间和突触后神经元发出脉冲的时间的差

1、STDP 的基本原理

在 STDP 中,突触权重的调整取决于前后神经元脉冲的时间差。具体来说,突触权重的变化通常遵循以下规律:

  1. 如果突触前神经元的脉冲(输入脉冲)在突触后神经元的脉冲(输出脉冲)之前到达,突触权重将 增加,称为 长时程增强(LTP)
  2. 如果突触前神经元的脉冲在突触后神经元的脉冲之后到达,突触权重将 减小,称为 长时程抑制(LTD)

简单理解就是:

  • 若突触前脉冲比突触后脉冲早:

    • 如果突触前神经元先发出脉冲,然后触发了突触后神经元的发火(即两者几乎同时发火),我们认为突触前神经元的信号对突触后神经元的发火有帮助。这时,STDP 会增加权重,让这一连接变得更强。
    • 这叫做长时程增强(LTP)
  • 若突触前脉冲比突触后脉冲晚:

    • 如果突触后神经元先发火,突触前神经元才发脉冲,这种连接被认为对突触后神经元的发火没有什么帮助,因此会减小权重,让这一连接变弱。
    • 这叫做长时程抑制(LTD)

突触权重的调整幅度通常是时间差的指数函数,时间差越小,突触权重的变化越显著。这一规律在一定程度上符合生物实验中的赫布学习规则,即“同步发火的神经元更倾向于加强彼此的连接”。

权重调整的“时间差依赖性”

  • 时间差越小:意味着两个脉冲之间的时间间隔越短,即两者越“同步”。在这种情况下,权重的变化会更大(无论是增加还是减少),因为短时间内的相互作用被认为对突触连接的塑性影响更大。
  • 时间差越大:突触前后的脉冲时间间隔越大时,权重变化的幅度会变小,调整力度逐渐减弱。因为时序关联性变弱,突触前脉冲对突触后发火的影响被认为较小。

2、STDP 的数学模型

在数学上,STDP 的权重更新可以表示为:

  • 若 Δt = tpost−tpre>0,则权重增加,Δw=A+exp⁡(−Δt/τ+)
  • 若 Δt = tpost−tpre<0,则权重减少,Δw=−A−exp⁡(Δt/τ−)

其中:

  • A+和 A−是学习率参数,控制权重增加和减少的幅度。
  • τ+和 τ−是时间常数,分别控制权重增强和抑制的时间尺度。

这种 基于时间的调节机制 使得神经网络能够根据输入脉冲的时序信息进行学习和适应,这与生物神经系统中的学习和记忆过程非常相似。

二、SNN的应用场景

SNNs 不使用浮点值,而是使用单比特二进制激活(脉冲),在时间上编码信息,而不是强度(intensity)。因此,SNNs 利用低精度参数和高时空稀疏性。

脉冲算法已被用于在医疗、机器人技术、混合现实等领域实现低功耗人工智能算法,还有许多其他领域也在使用。

脉冲神经网络(SNN)模型还用于 机器人技术 ,以使其更类似于人类,并降低操作成本。 无人机 也必须在低功耗环境下运行,以最大限度地利用轻量电池的价值,并从使用神经拟态处理器中受益。 音频信号 可以在神经形态硬件上以亚毫瓦(sub-mW)的功耗和低延迟进行处理,因为脉冲神经网络(SNNs)为时间信号处理提供了一种高效的计算机制。

三、从人工神经网络ANN到脉冲神经网络SNN

1、脉冲

  1. 脉冲(Spikes):生物神经元通过脉冲进行相互作用。

生物神经元之间的通信方式是通过电脉冲(spikes)进行相互作用,这些脉冲是幅度约为100毫伏的电脉冲。

在大多数情况下,神经元的动作电位的变化比膜电位的变化更为重要,因为动作电位的变化直接关联着神经元的激活状态和信息传递

图3:神经元通过脉冲进行通信

(a)神经元示意图;

(b)测量沿神经元轴突传播的动作电位。波动的亚阈(subthreshold)电压存在于细胞体(soma,体细胞)中,但在超过1毫米的距离后会严重衰减;

(c)神经元的脉冲用二进制表示;

(d)事件驱动处理。只有动态场景的部分被传递到输出(“1”),而静态区域被抑制(“0”)

(e)主动像素传感器和动态视觉传感器;

许多神经元的计算模型将脉冲的表示简化为一个离散的、单比特的、要么发生要么不发生的事件。

将高精度激活与高精度权重相乘需要将其转换为整数,将乘法分解为多个加法,这引入了进位(introduce)传播延迟。

另一方面,基于脉冲的方法 只需要将权重与脉冲(“1”)相乘 。这用一个简单的内存读取权重值来代替了繁琐的乘法过程。

虽然从上述可看,激活是被限制为单个比特,但是二值化神经网络和脉冲神经网络有很大不同,是因为脉冲的时序(timing)。时间不是二值化的量,可以使用已经在数字电路中实现的时钟信号来实现。

2、稀疏性(Sparsity)

在生物神经元网络中,大多数神经元在大多数时间内处于非激活状态,即不发放电脉冲。这意味着在任何给定的时刻,网络中的大多数神经元都不会发放电脉冲,只有少数神经元会根据输入信号发放电脉冲

这种特性使得神经网络在处理信息时更加高效,因为网络中的连接和通信主要发生在活跃的神经元之间,从而减少了整体的计算和通信成本。

如果按照存储矩阵的简单数据结构,使用的存储空间随着要存储的条目数增加。如果使用存储稀疏矩阵的数据结构仅消耗非零元素的内存。

由于大多数条目为零,我们可以通过仅写出非零元素来节省时间,就像在游程(run-length)编码中一样(从零开始索引):

游程编码(Run-Length Encoding, RLE)是一种数据压缩技术,它通过将数据序列中的重复模式转换为更紧凑的表示形式来减少数据的存储需求。这种方法的核心思想是识别并利用数据中的重复性,用一个较短的编码来代替连续的重复数值序列。在神经网络中,游程编码特别适用于稀疏矩阵,即矩阵中大部分元素为零的情况。通过游程编码,我们可以用更少的存储空间来表示数据,因为只记录非零元素及其在矩阵中的位置,而不需要存储所有的零元素。这种方法在处理大规模稀疏数据时非常有效,因为它显著减少了数据的存储空间需求。

其他可应用在SNN的数据压缩技术:

  1. 时间编码(Time Encoding):时间编码技术通过记录神经元发放脉冲的时间戳来编码数据。这种方法可以捕获神经元活动的时序信息,对于处理时序敏感的任务非常有用。

3、事件驱动处理(静态抑制)

静态抑制(又称为事件驱动处理)Static Suppression (a.k.a., event-driven processing):是指系统对变化的响应比对静态输入更加敏感。感觉周边(periphery)特征涉及几种机制,这些机制促进神经元对动态、变化的刺激同时抑制其对静态、不变的信息的反应。在视网膜神经节和初级视觉层中,神经元的时空感受对空间对比区域(边缘)的兴奋反应,而不是对空间不变区域的反应。早期听觉处理中的类似机制包括频谱时间感受(spectro-temporal receptive fields),这些感受导致神经元对声音中变化的频率产生更有利的反应,而不是对静态频率的反应。

简单来说:静态抑制(Static Suppression)是一种感觉系统,它对变化的响应比对静态输入更加敏感。

神经元对持续刺激的反应随时间减弱。在较短的时间尺度(毫秒级),神经元对快速变化的刺激有强烈的反应,但随着刺激的持续,神经元的反应会逐渐减弱,这被称为适应或感知适应。这种适应性在较长的时间尺度(秒级)上观察到,神经元对持续的固定刺激的反应减弱。

动态视觉传感器(Dynamic Vision Sensor, DVS)或称为硅视网膜,是一种特殊类型的摄像头,它能够检测亮度的变化。如果亮度发生变化,DVS会报告亮度变化,否则,如果亮度没有变化,DVS保持静默,不发送信号。这种传感器能够捕捉快速变化的亮度,适用于需要快速响应的应用场景。在图3(d-e)中,DVS的行为被描述为在没有亮度变化时保持静默,这与神经元对持续刺激的适应性相对应,即神经元对持续的固定刺激反应减弱的特性相似。

这也意味着每个像素独立于所有其他像素激活,而不是等待全局快门产生静止帧。与传统的CMOS图像传感器相比,活跃像素的减少导致了巨大的能源节约。这种低功率和异步像素的混合使得摄像头具有快速的时钟速度,使得商用的DVS摄像头拥有微秒级的时间分辨率,而无需费力。传统基于帧的摄像头和基于事件的摄像头之间的区别如图4所示。

上方是基于帧的摄像头,下方是基于事件的摄像头/硅视网膜。

  • 前者以固定帧率记录场景作为图像序列。它独立于场景中的活动运行,可能会因为全局快门而导致运动模糊。
  • 硅视网膜的输出直接受到场景中视觉活动的驱动,因为每个像素对照明变化作出反应。

四、脉冲神经元

人工神经网络(ANN)和脉冲神经网络(SNN)可以模拟相同类型的网络拓扑结构,但 SNN用脉冲神经元模型代替了人工神经元模型。

1、简单神经元模型

图5:泄漏积分-触发(Leaky Integrate-and-Fire,LIF)神经元模型。(a)一个绝缘的双层脂质膜将细胞内和细胞外介质分开。带门控的离子通道允许Na+等载流子通过膜扩散。(b)电容性膜和电阻性离子通道形成一个RC电路。当膜电位超过阈值θ θθ时,会产生一个脉冲。(c)由I i n 产生的输入脉冲通过树突传递到神经元体。足够的兴奋会在输出处引发脉冲发射。(d)模拟描绘了膜电位U(t)达到阈值,任意设定为θ=0.5V,产生输出脉冲。

就像人工神经元模型一样,脉冲神经元也是通过输入的加权和来运行。与将结果通过sigmoid或ReLU非线性传递不同,加权和对神经元的 膜电位U ( t ) 有贡献。如果神经元受到加权和的足够兴奋,并且膜电位达到阈值θ,那么神经元将向其后续连接发出脉冲。但大多数神经元的输入是 非常短暂 的电活动脉冲。所有输入脉冲同时到达神经元体的可能性非常小(图5c)。这表明存在一种时间动力学(temporal dynamics),可以随时间“维持”膜电位。

2、LIF神经元推导

脉冲神经网络入门指南(五):LIF 神经元的数学推导与模拟【原理与可视化】_lif神经元电路-CSDN博客

搭配着下图看,LIF神经元的推理过程。

其中模拟LIF神经元行为部分,实现一个LIF神经元的完整行为模拟,并通过图像展示其脉冲发射情况。神经元微分求解过程可以跟着推导,写的确实不错。

最后在“8.模拟LIF神经元行为”部分,代码可能存在以下问题。

(1)运行时,代码片段中需要引入np包,否则会报错:

Traceback (most recent call last):
  File "LIF.py", line 2, in <module>
    timesteps = np.linspace(0, 100, 1000)  # Time in ms
NameError: name 'np' is not defined

在文件头部加入:

import numpy as np
import matplotlib.pyplot as plt

(2)因为是在服务器上运行的,会提示没有可视化界面,错误代码行定位:

plt.show()

错误提示:

python3 LIF.py 
Unable to init server: Could not connect: Connection refused
Unable to init server: Could not connect: Connection refused

(LIF.py:1819509): Gdk-CRITICAL **: 11:11:23.021: gdk_cursor_new_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

此时表示将图片保存在同目录中。

完整的程序代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg') 

# Parameters for LIF neuron
timesteps = np.linspace(0, 100, 1000)  # Time in ms
tau_m = 20.0  # Membrane time constant in ms
V_th = 1.0  # Threshold voltage
V_reset = 0.0  # Reset voltage after spike
R_m = 1.0  # Membrane resistance
I_input = np.zeros_like(timesteps)
I_input[200:800] = 1.2  # A step current input applied between 200ms and 800ms

# Initialize membrane potential and spikes
V_mem = np.zeros_like(timesteps)
spikes = np.zeros_like(timesteps)

# Simulate membrane potential for LIF neuron
for t in range(1, len(timesteps)):
    dV = (-V_mem[t-1] + R_m * I_input[t]) / tau_m
    V_mem[t] = V_mem[t-1] + dV
    
    # Check for spike and reset membrane potential
    if V_mem[t] >= V_th:
        V_mem[t] = V_reset  # Reset potential
        spikes[t] = 1  # Spike occurs

# Plot the results
plt.figure(figsize=(10, 8))

# Plot membrane potential
plt.subplot(3, 1, 1)
plt.plot(timesteps, V_mem, label="Membrane potential $V(t)$")
plt.axhline(y=V_th, color='red', linestyle='--', label="$V_{th}$ (Threshold)")
plt.title("Membrane Potential of a Leaky Integrate-and-Fire Neuron")
plt.ylabel("Membrane potential (V)")
plt.legend()
plt.grid(True)

# Plot spikes
plt.subplot(3, 1, 2)
plt.plot(timesteps, spikes, label="Spikes", color='purple')
plt.title("Spike Train")
plt.ylabel("Spike")
plt.grid(True)

# Plot input current
plt.subplot(3, 1, 3)
plt.plot(timesteps, I_input, color='orange', label="Input current")
plt.title("Input Current to the Neuron")
plt.ylabel("Input current (I)")
plt.xlabel("Time (ms)")
plt.legend()
plt.grid(True)

plt.tight_layout()
plt.savefig("LIF_neuron_simulation.png") 

运行效果图:

三个图片共同展示了LIF神经元的典型脉冲发射过程。

最上图是膜电位变化:在施加输入电流时,神经元膜电位逐渐积累。当膜电位达到设定的阈值(图中的红色虚线)时,神经元发射一个脉冲,随后膜电位立即重置为 0。在重置后,神经元再次开始积累膜电位,直到下一次发射脉冲。

中图是脉冲序列:每当膜电位超过阈值时,图中会显示一个脉冲。可以看到,在输入电流持续时间内,脉冲发射保持稳定。

最下图是输入电流:模拟过程中,输入电流在200ms到800ms之间保持恒定。这一段恒定的输入驱动了神经元膜电位的变化,使其不断发射脉冲。

3、其他神经元模型

(1)IF神经元

是在LIF的基础上,去掉了泄露机制,即下图中的β=1。

(2)基于电流的模型CuBa

LIF神经元忽略了生物神经元中突触后电流的缓慢变化。这种变化会影响膜电位的时间动态特性,使其不会像LIF神经元那样立即跃迁,而是经历一个缓慢的上升过程。

为了弥补这一不足,CuBa模型通过将突触后电流的动态特性纳入考虑,改进了传统LIF神经元的行为,使其对输入信号有更平滑的响应。

模型的核心特点

  1. 二阶低通滤波器行为

    • 如果LIF神经元是一阶低通滤波器,CuBa神经元通过增加一个额外的动力学过程,成为二阶低通滤波器。
    • 输入尖峰信号的影响被“平滑”两次:一次是突触电流的动态过程,另一次是膜电位的变化。
  2. 有限的上升时间

    • CuBa神经元的膜电位不会对传入的尖峰信号立即作出跳跃响应,而是经过一个有限的时间上升到峰值。
    • 这一特性更接近生物神经元的实际行为。
  3. 突触后电流的时间常数

    • 突触电流的动态变化被建模为一个指数衰减过程,其时间常数决定了输入信号的平滑程度。
    • 通过调节时间常数,可以模拟不同类型突触的传导特性。

(3)递归神经元

神经元的输出尖峰被路由回输入,如图6(a)所示,明确标记为递归。而不是替代模型,递归是一种可以应用于任何神经元的拓扑结构,可以以不同方式实现:一对一递归,每个神经元将其尖峰路由到自身,或者全对全递归,其中一层的输出尖峰被加权并求和(例如,通过密集或卷积层)加权,然后反馈到全层[81]。

(4)深度学习启发的尖峰神经元

深度学习启发的尖峰神经元(Spiking Neurons Inspired by Deep Learning)是近年来尖峰神经网络(SNNs)研究的一个重要方向。这类神经元模型不仅基于神经科学的生物特性,还从深度学习中的机制和架构中汲取灵感,用以克服传统尖峰神经网络在时间动态建模和长期依赖性方面的限制。通过整合深度学习中的递归、记忆单元和注意力机制,这些模型显著增强了尖峰神经网络的表达能力和实际应用场景。

① 深度学习启发的尖峰神经元的意义

  • 传统SNN的局限性

    • 尖峰神经元传统上受生物神经科学启发,主要关注短期记忆(short-term memory)和生物可解释性。
    • 但在处理长期依赖性(long-term dependency)数据时,传统尖峰模型的表现有限。
  • 深度学习的启发

    • 深度学习中发展出的LSTM(长短期记忆网络)、GRU(门控循环单元)、变换器(Transformer)等架构已经证明了其在捕捉长期依赖关系方面的强大能力。
    • 将这些架构的关键思想整合到尖峰神经网络中,可以显著增强SNN在时间序列、自然语言处理和其他复杂任务中的性能。

后面还有编码方式和反向传播方式训练SNN还没看完,等明天看完再更新。

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

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

相关文章

运动汇 专业的比赛管理平台数据获取

在获取到运动汇的网站链接后&#xff0c;界面如图所示: 右键检查&#xff0c;我们会发现没有任何数据&#xff0c;只有当我们点开这些"第一单元"、"第二单元"等&#xff0c;数据才会加载出来&#xff1b; 由于我们只需要分析这一个网页并获取其中的数据&a…

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56 1. STM32F407 BootLoader 中的 Flash 擦除功能详解 在嵌入式系统中&#xff0c;BootLoader 的设计是非常关键的部分&#xff0c;它负责引导主程序的启动、升级以及安全管理。而在 STM32F407 等 MCU 上实现 BootLoader&…

rust高级特征

文章目录 不安全的rust解引用裸指针裸指针与引用和智能指针的区别裸指针使用解引用运算符 *&#xff0c;这需要一个 unsafe 块调用不安全函数或方法在不安全的代码之上构建一个安全的抽象层 使用 extern 函数调用外部代码rust调用C语言函数rust接口被C语言程序调用 访问或修改可…

45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

数据结构 ——— 层序遍历链式二叉树

目录 链式二叉树示意图​编辑 何为层序遍历 手搓一个链式二叉树 实现层序遍历链式二叉树 链式二叉树示意图 何为层序遍历 和前中后序遍历不同&#xff0c;前中后序遍历链式二叉树需要利用递归才能遍历 而层序遍历是非递归的形式&#xff0c;如上图&#xff1a;层序遍历的…

Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】

兼容性注意&#xff1a; Vite 需要 Node.js 版本 18 或 20。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目&#xf…

Linux(CentOS 7) yum一键安装mysql8

1、通过yum安装 &#xff08;1&#xff09;下载mysql 在Linux找个地方输入以下命令 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm &#xff08;2&#xff09;安装mysql yum 仓库配置文件 [rootVM-8-15-centos ~]# sudo rpm -Uvh mysql80-c…

第5章-总体设计 5.2 需求转化为规格

5.2 需求转化为规格 1.框式产品&#xff08;1&#xff09;业务规格&#xff0c;这需要满足客户期望、有市场竞争力、颗粒度最合理。&#xff08;2&#xff09;整框规格&#xff0c;包括电源、功耗、散热、可靠性的规格&#xff0c;要保证整款满足环境应用要求。&#xff08;3&a…

Android setTheme设置透明主题无效

【问题现象】 1、首先&#xff0c;你在AndroidManifest.xml中声明一个activity&#xff0c;不给application或者activity设置android:theme, 例如这样&#xff1a; <applicationandroid:allowBackup"true"android:icon"mipmap/ic_launcher"android:lab…

软考教材重点内容 信息安全工程师 第 3 章 密码学基本理论

&#xff08;本章相对老版本极大的简化&#xff0c;所有与算法相关的计算全部删除&#xff0c;因此考试需要了解各个常 用算法的基本参数以及考试中可能存在的古典密码算法的计算&#xff0c;典型的例子是 2021 和 2022 年分别考了 DES 算法中的 S 盒计算&#xff0c;RSA 中的已…

Jmeter基础篇(24)Jmeter目录下有哪些文件夹是可以删除,且不影响使用的呢?

一、前言 Jmeter使我们日常做性能测试最常用的工具之一啦&#xff01;但是我们在和其他同学协同工作的时候&#xff0c;偶尔也会遇到一些问题&#xff0c;例如我想要给别人发送一个Jmeter工具包&#xff0c;但这个文件包往往会很大&#xff0c;比较浪费流量和空间&#xff0c;…

【电子元器件】磁珠常识与选型

1. 什么是磁珠 磁珠是一种电感型EMI静噪滤波器&#xff0c;实物和电感很像&#xff0c;现在用的最多的是铁氧体磁珠。 片状铁氧体磁珠 磁珠的单位是欧姆&#xff0c;根据型号的不同&#xff0c;可以抑制几MHz&#xff5e;几GHz的噪声&#xff0c;经常被用在信号线和电源线上…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中&#xff0c;当你的查询包含多个LEFT JOIN和WHERE条件时&#xff0c;合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议&#xff1a; 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询&#xff0c;了解查询的执行计划&#xff0c;识别出连…

【全面系统性介绍】虚拟机VM中CentOS 7 安装和网络配置指南

一、CentOS 7下载源 华为源&#xff1a;https://mirrors.huaweicloud.com/centos/7/isos/x86_64/ 阿里云源&#xff1a;centos-vault-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 百度网盘源&#xff1a;https://pan.baidu.com/s/1MjFPWS2P2pIRMLA2ioDlVg?pwdfudi &…

Linux下MySQL的简单使用

Linux下MySQL的简单使用 导语MySQL安装与配置MySQL安装密码设置 MySQL管理命令myisamchkmysql其他 常见操作 C语言访问MYSQL连接例程错误处理使用SQL 总结参考文献 导语 这一章是MySQL的使用&#xff0c;一些常用的MySQL语句属于本科阶段内容&#xff0c;然后是C语言和MySQl之…

动态规划-背包问题——1049.最后一块石头的重量II

1.题目解析 题目来源 1049.最后一块石头的重量II——力扣 测试用例 2.算法原理 首先需要将该问题转化为0-1背包问题后再做分析 1.状态表示 根据数学中的知识我们知道将一个数字分为两个子数后求这两个子数的最小差值&#xff0c;那么就要求这两个子数尽可能接近于原数字的一…

MarkDown语法入门【保姆级教程】

MarkDown语法介绍 Markdown是一种轻量级标记语言 关于MarkDown语法的定义&#xff0c;官方已经有概述了&#xff1a; Markdown是一种轻量级标记语言&#xff0c;排版语法简洁&#xff0c;让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档&#xff0c;可…

5G与4G互通的桥梁:N26接口

5G的商用部署进程将是一个基于4G系统进行的长期的替换、升级、迭代的过程&#xff0c;4G系统是在过渡到5G全覆盖过程中&#xff0c;作为保障用户业务连续性体验这一目的的最好补充。 因此4G/5G融合组网&#xff0c;以及互操作技术将是各大运营商在网络演进中需要重点考虑的问题…

Transformer中的算子:其中Q,K,V就是算子

目录 Transformer中的算子 其中Q,K,V就是算子 一、数学中的算子 二、计算机科学中的算子 三、深度学习中的算子 四、称呼的由来 Transformer中的算子 其中Q,K,V就是算子 “算子”这一称呼源于其在数学、计算机科学以及深度学习等多个领域中的广泛应用和特定功能。以下是…

【UGUI】Unity 游戏开发:背包系统初始化道具教程

在游戏开发中&#xff0c;背包系统是一个非常常见的功能模块。它允许玩家收集、管理和使用各种道具。今天&#xff0c;我们将通过一个简单的示例来学习如何在 Unity 中初始化一个背包系统。我们将使用 Unity 2021.3.7 版本&#xff0c;并结合 C# 脚本来实现这一功能。 1. 场景…