生理信号处理以及机器学习与深度学习算法个人所学总结
主要总结关于生理信号处理基础与算法相关内容。作为自己学习的输出吧。
一、信号处理基础
1.1 傅里叶变换:频域分析
傅里叶变换,本质上是任何周期信号都可以分解为不同频率正弦波的叠加。时域:信号随时间变化的幅度,频域:信号包含哪些频率成分,各成分的强度
FT = Fourier Transform(傅里叶变换,连续)
DFT = Discrete Fourier Transform(离散傅里叶变换)
FFT = Fast Fourier Transform(快速傅里叶变换)
离散傅里叶变换(实际使用)
PPG信号频谱各部分的生理含义:0.1-0.5 Hz:呼吸频率区,呼吸引起的血容量变化,可用于提取呼吸率;0.5-4 Hz:心率基频区,心脏搏动的基本频率,主峰位置对应心率 ;4-15 Hz:心率谐波区,PPG波形的高频细节,包含重搏切迹等信息;>15 Hz:高频噪声、运动伪迹,通常需要滤除。
如何提高频率分辨率?
增加时间窗口长度,因为频率分辨率与观测时长相关,窗口越长,频率分辨率越高。
傅里叶变换将时域信号分解为不同频率的正弦波分量,让我们能够分析信号的频率组成。对于PPG信号,频谱的不同区域有不同的生理含义:0.1-0.5Hz反映呼吸调制,0.5-4Hz是心率基频所在区域,更高频率包含波形细节和噪声。通过分析频谱,我们可以进行心率估计、呼吸率提取,也能识别噪声类型来指导滤波器设计。
1.2 滤波器设计:低通、高通、带通、带阻
滤波的本质是:保留我们关心的频率成分,抑制不需要的频率成分。
如:ECG 中去除基线漂移和高频噪声;EEG 中去除工频干扰、肌电噪声;PPG 中去除运动伪影和高频毛刺
滤波器类型及其作用
低通滤波器(LPF):保留低频,去除高频,可以用来去除高频噪声、平滑信号。
高通滤波器(HPF):保留高频,去除低频,应用:去除基线漂移、直流分量;
带通滤波器(BPF):保留特定频带,应用:提取心率频段、呼吸频段 ;
带阻滤波器(BSF/Notch):去除特定频带,应用:去除工频干扰(50/60Hz),这里中国和欧洲的都是用50Hz。
IIR和FIR滤波器。
IIR滤波器(无限脉冲响应),优点是阶数低,计算效率高,适合实时处理,内存占用小,缺点是非线性相位,会造成波形失真,可能不稳定(需要检查极点),不能实现精确的线性相位。常用的巴特沃斯滤波器就是IIR。
FIR滤波器(有限脉冲响应),输出只和当前及有限个历史输入有关,可以实现精确的线性相位,稳定,缺点是需要更高阶数达到相同效果,计算量大,延迟较大,这里提一下IIR阶数2-8阶, FIR 几十到几百阶。
滤波器的参数介绍:1.截止频率(fc),根据信号有效频率范围确定;2.阶数(order) 3.相位延迟,滤波器对信号造成的时间延迟,非线性相位会导致波形失真,使用零相位滤波(filtfilt)或线性相位FIR都可以解决相位失真问题。
ECG滤波
带通:0.5–40 Hz 或 0.5–45 Hz。工频:50 Hz notch。去基线漂移:高通或平滑方法
基线漂移通常是低频变化,会影响 R 峰检测、波形幅值测量和特征提取,尤其会干扰 ST 段、T 波等分析。
应用场景的介绍:
1. 实时心率监测(嵌入式)选择低阶IIR Butterworth,因为计算量小,延迟可接受
2.HRV分析(离线)选择:零相位IIR或线性相位FIR 原因:需要精确的时间定位
3.ECG QRS检测 选择:带通滤波 5-15Hz 原因:突出QRS波群,抑制P波T波和噪声
4.去除工频干扰 选择:陷波滤波器 原因:窄带去除,不影响其他频率
5.去除运动伪迹 选择:自适应滤波器 原因:运动伪迹频率与心率重叠
滤波器设计需要考虑截止频率、阶数和相位特性。截止频率根据信号有效频率范围确定,比如PPG带通滤波器通常选0.5-15Hz。阶数影响过渡带陡峭程度,但高阶会增加计算量和相位延迟。对于需要精确时间定位的应用如HRV分析,可使用零相位滤波(filtfilt)或线性相位FIR滤波器。实时应用则选择低阶IIR滤波器,在延迟和性能间取得平衡。
1.3 窗函数
首先,为什么要加窗?FFT假设信号是周期性的,但实际截取的信号段首尾不连续,这种不连续相当于引入了高频成分,导致能量"泄漏"到其他频率,就产生了频谱泄漏(Spectral Leakage)。后果带来频谱峰值变宽、出现虚假的频率成分、降低频率分辨率、影响心率估计精度等问题。
接下来介绍两种窗函数:汉宁窗(Hanning)和汉明窗(Hamming)。
汉宁窗 (Hanning): 两端完全降到0 ,旁瓣衰减更快(-18 dB/octave),第一旁瓣较高(-31 dB) 适合需要快速旁瓣衰减的场景。
汉明窗 (Hamming): 两端不完全为0(约0.08),旁瓣衰减较慢(-6 dB/octave),第一旁瓣较低(-42 dB), 适合需要抑制近旁瓣的场景。
窗函数通过平滑信号两端来减轻频谱泄漏问题。汉宁窗两端完全降到零,旁瓣衰减快,是通用选择;汉明窗第一旁瓣更低,适合需要抑制近旁瓣的场景。在PPG心率估计中,通常使用汉宁窗,它在频率分辨率和泄漏抑制之间取得了较好的平衡。
1.4 时频分析:STFT、小波变换
首先指出,傅里叶变换的局限性在于只能给出整个时间段的频率信息, 无法反映频率随时间变化的情况,而生理信号常常是非平稳的。对于非平稳信号(如运动中的PPG)效果差,因为心率是随时间变化的。而时频分析,可以让我们同时获得时间和频率信息,能追踪频率随时间的变化,所以适合分析非平稳信号, 可以看到心率的动态变化。
短时傅里叶变换
需要对时频分辨率进行权衡,窗口越长 → 频率分辨率越高,时间分辨率越低;窗口越短 → 时间分辨率越高,频率分辨率越低。
海森堡不确定性原理: Δt × Δf ≥ 1/(4π)
小波变换
小波变换是一种适合非平稳信号的时频分析方法,即信号的频率成分会随时间变化的情况。具有多分辨率分析能力。
它在高频部分具有较高时间分辨率,在低频部分具有较高频率分辨率,因此特别适合分析生理信号中的瞬态特征和时变结构,例如 ECG 的 QRS 波、EEG 的异常放电、PPG 的局部波形变化。
小波变换分为:
- 连续小波变换(CWT):分析更细致,适合可视化,计算量大;
- 离散小波变换(DWT):更适合工程实现,常用于去噪、特征提取和压缩。
小波去噪原理
有效信号能量通常集中在少数大系数中,而噪声能量分散在大量小系数中,因此可通过以下步骤去噪:
- 小波分解
- 对高频细节系数进行阈值处理
- 重构信号
其优点是适合非平稳和瞬态信号,缺点是小波基和分解层数选择依赖经验,计算复杂度相对较高。
db4:不对称,抓突变强,适合 ECG QRS、EEG 尖峰 / 噪声,对QRS 陡沿、R 峰定位非常准,高频细节保留好,噪声分离干净
ECG 关键:QRS 波陡峭、P/T 波平缓、形态不能失真。
小波变换的核心思想
小波变换的核心是用一个可以平移和缩放的小波基函数去匹配原始信号:
- 高频部分:用较短时间窗分析,时间分辨率高,适合捕捉瞬态变化;
- 低频部分:用较长时间窗分析,频率分辨率高,适合描述缓慢变化趋势。
因此,小波变换具有多分辨率分析能力。
为什么小波变换适合生理信号
生理信号通常是非平稳的,很多关键信息只出现在某些局部时间段,例如:
- ECG 中的 QRS 波群是典型瞬态结构;
- EEG 中节律活动和异常放电会随时间变化;
- PPG 中脉搏波形局部形态变化明显;
- EMG 中肌肉激活具有突发性。
这类信号如果只做整体频域分析,容易丢失局部时变信息,而小波变换可以同时兼顾时间和频率信息。
小波变换的适用场景
1.信号包含瞬态特征。如 ECG 中的 QRS 波、EEG 中的尖波、EMG 中的突发肌电活动。
2. 信号非平稳。即频率成分随时间变化,不能只用全局频谱来描述。
3. 需要多分辨率分析。既要看整体低频趋势,也要看局部高频细节。
4. 需要去噪、特征提取或事件检测。小波在生理信号去噪、R 峰检测、睡眠特征提取等任务中都很常见。
小波变换的主要类型
1)连续小波变换(CWT)
连续小波变换通过连续改变小波的尺度和平移位置,对信号进行分析。
特点:分析更细致;时频表示更连续、更直观;适合可视化和理论分析;计算量较大
常见用途:时频图分析;异常模式观察;信号局部结构可视化
2)离散小波变换(DWT)
离散小波变换只在离散尺度和离散平移位置上进行分解,更适合实际工程实现。
特点:计算效率高;适合算法实现;常用于去噪、压缩、特征提取
常见用途:ECG 去噪;EEG 频带特征提取;PPG 波形分析;生理信号压缩与重构
小波分解的直观理解
DWT 常将信号逐层分解为:
- 近似系数(Approximation):表示低频、整体趋势
- 细节系数(Detail):表示高频、局部变化和突变信息
随着分解层数增加:
- 越高层的近似系数表示越粗略的低频信息
- 各层细节系数表示不同尺度下的局部细节
可以理解为把信号拆成:
- “大轮廓”
- “不同层次的纹理和细节”
小波去噪原理
1)小波去噪的基本思想
小波去噪的依据是有用信号的能量通常集中在少数较大的小波系数中,噪声能量通常分散在大量较小系数中。
因此,可以通过对小波系数进行阈值处理,去掉幅值较小的噪声系数,保留较大的有效信号系数,再进行重构,从而实现去噪。
2)小波去噪的一般流程
第一步:小波分解。将原始信号分解到多个尺度,得到近似系数和细节系数。
第二步:阈值处理
通常对高频细节系数进行阈值化处理,因为噪声往往主要分布在高频部分。
第三步:信号重构。利用处理后的系数进行逆小波变换,恢复出降噪后的信号。
3)为什么主要处理高频细节系数
因为在很多生理信号中:有效波形主体通常集中在中低频范围;高频部分更容易包含白噪声、毛刺、肌电干扰等。
当然,这不是绝对的。若目标信号本身含有重要高频特征,就需要谨慎处理,避免把有用信息也一起滤掉。
4)常见阈值方法
硬阈值
小于阈值的系数直接置零,大于阈值的保留不变。
特点:保留大系数完整,但可能导致重构信号不够平滑
软阈值
小于阈值的系数置零,大于阈值的系数向零方向收缩。
特点:重构更平滑,实际中使用较多
小波变换的优点
1. 具有时频局部化能力。既能看频率,也能看这些频率在什么时间出现。
2. 多分辨率分析。适合同时分析缓慢变化趋势和快速瞬态变化。
3. 适合非平稳信号。对生理信号这类时变信号尤其有效。
4. 适合瞬态特征检测。如 ECG 的 QRS、EEG 的尖峰、EMG 的突发放电。
5. 去噪效果好。尤其对非平稳噪声和局部突变信号更有优势。
小波变换的缺点
1. 小波基选择依赖经验。不同信号、不同任务适合的小波基可能不同,例如 Daubechies、Symlet、Coiflet 等。
2. 分解层数选择敏感。层数过少可能特征提取不充分,层数过多可能引入冗余或损失细节。
3. 计算复杂度相对较高,尤其是 CWT,计算量较大。
4. 可解释性和参数选择较复杂。相较于简单滤波,小波方法参数更多,需要更强经验。
小波变换与傅里叶变换的区别
傅里叶变换
适合平稳信号,只能得到全局频率成分,无法准确定位某个频率在什么时间出现
小波变换
适合非平稳信号,可同时获得时间和频率信息,更适合分析局部瞬态结构
傅里叶变换适合看“有哪些频率”,小波变换适合看“哪些频率在什么时候出现”。
小波变换在生理信号中的典型应用
1. ECG
-
QRS 检测
-
基线漂移与高频噪声去除
-
心律失常特征提取
2. EEG
-
节律分解
-
癫痫放电检测
-
睡眠分期特征提取
-
去伪迹分析
3. PPG
-
波形细节分析
-
去噪
-
心率与脉搏形态特征提取
4. EMG
-
肌电时频分析
-
肌肉激活事件检测
-
疲劳特征提取
实际应用推荐: 1.PPG静息心率:FFT 2.PPG运动心率:STFT 3. ECG QRS检测:小波变换(捕捉瞬态) 4. PPG去噪:小波阈值去噪 5.HRV频域分析:FFT或Welch方法
1.5 自适应滤波
自适应滤波主要是针对去除运动伪迹的,是一种比较复杂的滤波手段。
传统滤波器使用固定的滤波器系数 ,无法适应变化的噪声特性。运动伪迹频率与心率重叠,无法用频率区分, 需要 参考信号 来区分信号和噪声,而自适应滤波滤波器系数实时更新,能够跟踪噪声特性的变化,利用参考信号(如加速度)识别噪声,很适合去除运动伪迹。
讲一下自适应滤波的原理:干净信号 e(n) = d(n) - y(n) ,其中原始信号 d(n),噪声估计 y(n),噪声估计是自适应滤波器根据输入的加速度信号估计出的。根本在于加速度与运动伪迹相关,与心率信号无关,所以通过加速度估计运动伪迹,再从PPG中减去估计的伪迹。
自适应滤波:LMS(最小均方)算法,参数: filter_order: 滤波器阶数(抽头数) - mu: 步长因子,控制收敛速度和稳定性 mu太大 → 收敛快但可能不稳定 mu太小 → 稳定但收敛慢
改进的最小均方算法:归一化LMS滤波器 ,步长根据输入功率自适应调整,收敛速度更稳定,不受输入幅度影响
嵌入式实时处理可以用 LMS/NLMS(计算简单)
1.6 信号质量评估
信噪比估计:信号能量集中在心率频段(0.5-4Hz) -,噪声能量分布在高频段(15-45Hz)
SNR = 10 * log10(信号功率 / 噪声功率)
灌注指数 (Perfusion Index, PI)
PI = (AC分量 / DC分量) × 100%
反映脉搏信号强度,PI低说明信号弱,可能是佩戴不良 正常范围:0.5% - 5%
# DC分量:信号均值
dc = np.mean(ppg_signal)
# AC分量:信号的峰峰值
ac = np.max(ppg_signal) - np.min(ppg_signal)
# 灌注指数
pi = (ac / (dc + 1e-10)) * 100
return pi
这里只提到SNR和PI,因为实时监测,嵌入设备,用 SNR和PI 即可,计算简单,精度要求没那么高。
运动场景需要加速度辅助和模板匹配,需要运动伪迹检测。睡眠监测需要峰值规律和幅度一致性,需要长时间稳定性
这里再提一下运动和睡眠场景的几个指标,再一起总结。
模板匹配SQI 原理: 正常PPG的相邻心跳波形应该相似 ,计算各心跳与模板的相关系数,相关系数低说明波形不规则。
运动强度辅助 原理:静止时加速度≈重力加速度(1g) ,运动时加速度变化大 ,用加速度变化量评估运动强度
峰值规律性SQI 原理:正常心跳间隔应该相对规律 ,RR间期的变异系数不应过大 ,变异系数过大说明检测不稳定或有伪迹。
幅度一致性SQI 原理: 正常PPG的峰值幅度应该相对一致 ,幅度突变说明有运动伪迹或接触不良。
信号质量评估很重要的,我们可以从从三个维度设计SQI指标:
1. 时域指标:灌注指数反映信号强度,偏度和峰度反映波形形态是否正常;
2. 形态学指标:模板匹配评估相邻心跳的相似性,峰值规律性评估RR间期的稳定性;
3. 频域指标:SNR评估信噪比,频谱熵评估能量集中程度。
实际应用中,我们可以将多个指标加权融合得到综合SQI,并根据SQI选择不同的处理策略:高质量时使用精确算法,低质量时使用鲁棒算法或拒绝输出。如果有加速度数据,还要结合运动强度来调整置信度。
1.7 峰值检测算法
Pan-Tompkins(ECG)、PPG峰值检测
峰值检测是心率计算的基础。
心率计算流程: 原始信号 → 预处理 → 峰值检测 → RR间期计算 → 心率/HRV
由于噪声干扰包括运动伪迹、基线漂移,不同人、不同状态波形差异大 ,实时性要求低延迟 ,准确性要求(漏检和误检都会影响心率精度),峰值检测存在一定难度。
Pan-Tompkins算法(ECG QRS检测)
很经典。相关文献 Pan J, Tompkins WJ. A real-time QRS detection algorithm. IEEE Trans Biomed Eng. 1985;32(3):230-236.
Pan-Tompkins算法流程: 原始ECG → 带通滤波 → 微分 → 滑动窗口积分 → 自适应阈值 → QRS检测
带通滤波:5-15Hz 去噪声,保留QRS主要能量,去除P波T波和噪声;
微分:突出斜率变化;
平方:增强大幅度成分,抑制小幅度噪声,增强QRS;
滑动窗口积分:平滑能量包络;
自适应阈值:适应信号幅度变化,动态调整检测阈值,如果在一段时间内(如 200ms)没检测到峰值,模型会降低阈值重新扫描,防止漏检。
PPG峰值检测:与 ECG 不同,PPG 信号更容易受到体动噪声 (MA) 和 血管壁外周阻力 的干扰,波形相对“圆润”,斜率特征不如 ECG 明显。
常见PPG峰值检测方法有自适应阈值法,由于 PPG 的幅值会随呼吸、佩戴松紧发生缓慢漂移,必须使用动态窗口。计算信号的局部均值或包络。
1.8 数据预处理
1.8.1 EEG预处理
1)导入数据进行检查,进行数据完整性检查,包括采样率、导联信息、事件标记、坏道和长时间异常段。
2)重参考
EEG 与 ECG 不同,EEG 预处理中通常需要做重参考,因为脑电本质上是相对电位,不同参考方式会影响后续分析结果。常见双乳突参考、平均参考。
3)滤波
4)坏道检测与修复 直接舍弃该通道,并利用周围邻近电极的数据通过球面样条插值法重新计算该点位的信号。
5)伪迹去除
常见伪迹包括:眼电伪迹 EOG:眨眼、眼动;肌电伪迹 EMG:咬牙、面部肌肉活动;心电伪迹 ECG;运动伪迹;电极接触伪迹
常用方法:人工剔除异常段;ICA(分解出独立成分,识别眼电、肌电伪迹成分,去掉这些成分后重构 EEG)
6)分段(Epoching)
根据任务把连续脑电切成片段,例如:
- 事件相关电位 ERP:围绕刺激时刻切片
- 睡眠分期:按 30 秒一个 epoch
常见操作:设定时间窗,保留刺激前基线段,后续做基线校正
7)基线校正
尤其在 ERP 分析中很常见。
做法是用刺激前一段时间的平均值作为基线,对每个 epoch 做校正。可以去掉慢漂移影响,更突出事件诱发成分
8)标准化/归一化
常见方式:z-score;按通道归一化;按被试归一化
EEG 个体差异、通道差异大,不做归一化会影响模型泛化。
ICA
ICA,独立成分分析,是一种盲源分离方法。
它的核心假设是:观测到的多通道信号,是若干个源信号的线性混合;这些源信号彼此统计独立;源信号通常是非高斯的。
在 EEG 里可以理解。我们采到的每个导联信号,不只是脑电,还混有眼电、肌电、心电、运动伪迹等成分,ICA 的目标就是把这些“混在一起的成分”拆开。
流程:
1)先做基础预处理
2)准备多通道数据矩阵
3)中心化(每个通道减去均值,使数据零均值)和白化。通过 PCA 等方式把数据变换成各维度不相关且方差归一化,白化可以简化后续 ICA 求解,减少参数耦合,提高稳定性和效率。
4)运行 ICA 算法
常见 ICA 算法包括:FastICA(寻找一个投影方向,使投影后的信号非高斯性最大,因为独立源通常比混合信号更非高斯 )Infomax ICA
5)得到独立成分后,识别伪迹成分
ICA 分解完后,不是直接结束,关键是要判断哪些成分是伪迹。
判断通常结合以下信息:
时间波形
- 眼电成分常有大幅慢波,眨眼峰值
- 肌电成分常表现为高频杂乱活动
- 心电成分常呈周期性尖峰
空间拓扑图
即该成分在各电极上的投影分布:
- 眼电往往集中在额区,左右眼动可能呈左右不对称,眨眼通常前额强烈集中
- 肌电常分布在边缘区域,空间分布比较局部、尖锐、不像脑源那样平滑
- 心电空间分布可能较固定,常伴随明显周期性心跳节律
功率谱特征
- 眼电:低频成分强
- 肌电:高频成分强
- 工频噪声:50/60 Hz 明显峰值
与参考信号相关性
如果有 EOG、ECG 通道,可以看 ICA 成分与这些参考通道的相关性:与 EOG 高相关,可能是眼电,与 ECG 高相关,可能是心电伪迹
人工识别
自动识别伪迹成分:EEGLAB中的ICLabel,会给每个 IC 一个概率,然后按阈值自动删除。
6)去掉伪迹成分并重构信号
识别出伪迹成分后,把这些成分置零,再通过混合矩阵重构 EEG,
这里的 ScleanSclean 就是把伪迹成分去掉后的独立成分矩阵。
这一步不直接删原始通道,而是删掉伪迹源,再映射回通道空间。
ICA 和 PCA 的区别
PCA目标找最大方差方向,结果:主成分彼此正交,本质:降维、去相关,不一定能分离真实源
基于脑电的功率密度谱PSD结果,如何初步判定噪声的类型?
功率密度谱(PSD)将信号能量按频率分解,不同类型的噪声在PSD上呈现不同的特征模式,可据此进行初步判定:
噪声类型 PSD特征表现 判定依据
工频干扰 在50Hz出现尖锐窄带谱峰 谱峰明显高于两侧背景功率(通常>10dB)
肌电伪迹 高频段(>20-30Hz)功率显著抬升,呈宽带抬高 正常脑电高频功率应快速衰减,肌电使高频段变平坦
眼电伪迹 低频段(<4Hz)功率异常增大,前额通道(Fp1/Fp2)尤为突出 低频功率远高于正常脑电的1/f衰减趋势
基线漂移 极低频(<0.5Hz)功率极高,PSD最左端陡升 由电极接触不良、汗液、呼吸等引起
白噪声 PSD在全频段近似平坦(各频率功率相等) 在双对数坐标下呈水平线,斜率≈0
粉红噪声 PSD随频率增加单调下降,双对数坐标下近似直线 斜率约-1;正常脑电本身也呈1/f特性,需判断是否偏离正常范围
心电伪迹 在1-2Hz附近出现与心率相关的准周期性小谱峰 结合时域波形辅助确认
总体而言:1. 绘制线性频率轴PSD,检查是否有异常尖峰(工频)或频段异常(肌电/眼电) 2. 绘制双对数坐标PSD,拟合1/f斜率,判断整体频谱形态是否正常 3. 对比不同通道的PSD(如前额 vs 枕区),定位噪声的空间来源 4. 对比同一通道不同时段的PSD,判断噪声是持续性还是间歇性
1.8.2 ECG预处理
1)原始数据检查
检查内容:采样率,导联完整性,信号是否截断,是否有饱和、平线、断裂,导联脱落情况
2)重采样
如果不同设备采样率不同,通常要统一,比如:250 Hz、360 Hz、500 Hz
方便批量处理,便于模型输入统一,不同数据库对齐
3)去基线漂移
ECG 常见低频干扰来源:呼吸、体动、电极接触变化
常用方法:高通滤波(如 0.5 Hz);中值滤波;小波去基线
作用:提高 R 峰检测稳定性,防止 ST 段分析失真
4)去工频干扰
常做 50 Hz 或 60 Hz 陷波滤波。
5)去高频噪声 / 肌电噪声
ECG 还常有:肌电干扰,设备高频噪声,尖峰毛刺
常用:低通滤波;带通滤波(如 0.5–40 Hz)
6)R 峰检测
这是 ECG 分析中的关键步骤。
很多后续处理都围绕 R 峰展开。
作用:计算心率,计算 RR 间期,HRV 分析
常见方法:Pan-Tompkins;小波法;差分阈值法;深度学习检测法
7)心拍分割或节律分段
根据 R 峰位置进行:
- 单拍切分
- 固定长度窗口切分
- RR 序列生成
不同任务不同:
- 心拍分类:围绕 R 峰切单拍
- 心律失常检测:按较长片段切窗
- HRV:提 RR interval 序列
8)伪迹检测
9)归一化 / 标准化
ECG 不同个体、导联、设备幅值差异较大,通常需要:
- z-score
- min-max
- 按样本标准化
二、机器学习基础
2.1 监督学习
监督学习是有标签数据去学习。
(输入X, 输出Y) 对 ,学习映射关系:f(X) → Y ,实现在新数据上泛化
任务:分类(离散Y)、回归(连续Y)
分类任务损失函数: 二分类:最常用Binary Cross-Entropy(最常用) Hinge Loss(SVM) Focal Loss(类别不平衡时)
多分类:Categorical Cross-Entropy(互斥类别) Binary Cross-Entropy(多标签) Weighted Cross-Entropy(类别不平衡)
回归任务:MSE 均方误差,对异常值敏感,惩罚大误差
监督学习根据输出类型分为分类和回归。分类用于离散类别判断;回归用于心率、血氧、血压等连续值估计。选择时主要看输出是离散还是连续,但有时候边界模糊,比如心率区间判断可以用分类也可以回归后划分。损失函数方面,分类常用交叉熵,回归常用MSE,但要根据具体场景调整,比如有异常值时用MAE或Huber Loss。
2.2 模型评估:交叉验证、过拟合判断
数据集划分这里就跳过了。
K折交叉验证 (K-Fold CV): 数据集分成K份,轮流用1份做验证,K-1份做训练
最终性能 = K次验证结果的平均值 ± 标准差
K的选择:K=5 常用,计算量适中 K=10,更稳定的估计,计算量大
K=N (Leave-One-Out):小数据集,计算量最大
Leave-One-Subject-Out,每次留一个用户做测试,这样更接近实际部署场景
过拟合判断
训练过程中训练损失持续下降, 验证损失先降后升,过拟合开始,训练-验证损失差距越来越大
过拟合的原因: 模型太复杂(参数太多)数据太少,训练时间太长,特征中有噪声或无关信息 数据泄露(测试信息泄露到训练)
解决方法:早停 (Early Stopping):验证损失不再下降时停止
正则化:L1/L2正则化,Dropout
数据增强:增加训练数据多样性
简化模型:减少参数、层数
交叉验证
特征选择:去除无关特征
欠拟合判断,简单提一下,训练损失就很高,降不下去,训练和验证损失都高,模型太简单,学不到规律,解决方法就是增加模型复杂度,增加特征。
分类任务指标: 1. 准确率 (Accuracy) = 正确预测数 / 总数 问题:类别不平衡时会误导
2. 精确率 (Precision) = TP / (TP + FP) 含义:预测为正的样本中,真正为正的比例 关注:减少误报(假阳性)
3. 召回率 (Recall/Sensitivity) = TP / (TP + FN) 真正为正的样本中,被正确预测的比例 关注:减少漏检(假阴性)
4. F1 Score = 2 × (Precision × Recall) / (Precision + Recall) 含义:精确率和召回率的调和平均 适用:需要平衡精确率和召回率
5. AUC-ROC 含义:不同阈值下的综合性能 优点:不受阈值选择影响,适合比较模型
6. 特异性 (Specificity) = TN / (TN + FP)
2.3 特征工程
特征工程:特征提取、选择、归一化
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。
特征工程:将原始信号转换为模型可理解的数值;提取领域知识(如HRV特征);降低数据维度,减少计算量;提高模型性能和可解释性;减少过拟合风险
PSD
频谱通常是某次傅里叶变换后的幅值或能量分布,频率成分
功率谱密度,生理信号中更常用 Welch 方法,Welch 方法的思路是:把信号分成多个重叠小段,每段加窗,每段求功率谱,再平均(窗长,重叠率,FFT 点数,采样率,窗函数,FFT 点数直接等于窗长)
PSD,也就是功率谱密度,描述的是信号功率在不同频率上的分布。在生理信号分析中,PSD 常用于频域特征提取,因为很多有意义的生理信息体现在特定频段的能量变化上。例如 EEG 中的 δ、θ、α、β波段功率,HRV 分析中的 LF、HF 功率等。实际提特征时,通常先对信号做滤波和伪迹去除,再按时间窗分段,用 Welch 方法估计 PSD,然后提取频带功率、相对功率、主峰频率、均值频率、谱熵和频带功率比值等特征。PSD 特征的优点是可解释性强、稳定性较好,缺点是时间分辨率有限,对非平稳信号的局部变化不够敏感。
PPG/ECG特征提取
- 时域特征
统计特征:均值、标准差、方差;最大值、最小值、峰峰值;偏度、峰度;四分位数、四分 位距;过零率
HRV时域特征
SDNN-RR间期标准差
RMSSD:相邻RR间期差的均方根
pNN50:相邻RR差>50ms的比例
SDSD:相邻RR间期差的标准差
HR Mean/Std:心率均值和标准差
波形特征:峰值幅度、谷值幅度,上升时间、下降时间,波形面积,重搏切迹位置(PPG)
- 频域特征
功率谱特征: 总功率,主频频率和幅度,频带功率(VLF/LF/HF),频谱熵
HRV频域特征: VLF功率 (0.003-0.04 Hz), LF功率 (0.04-0.15 Hz):交感+副交感,HF功率 (0.15-0.4 Hz):副交感, LF/HF比值:自主神经平衡,归一化LF/HF
频谱形状:频谱质心 频谱带宽 频谱滚降点
- 非线性特征
熵特征: 样本熵 (SampEn) 近似熵 (ApEn) 模糊熵 (FuzzyEn) 排列熵 (PermEn)
Poincaré图特征: SD1:短期变异性 SD2:长期变异性 SD1/SD2比值
其他: DFA (去趋势波动分析) Lyapunov指数 相关维数
加速度特征(活动识别)
时域特征:各轴统计量:均值、标准差、最大、最小;合加速度:sqrt(x² + y² + z²);SMA:信号幅度面积;过零率;峰值计数;相关系数(轴间)
频域特征:主频及其幅度;频带能量分布;频谱熵;频谱质心
特定活动特征:步频(走路/跑步);周期性强度;姿态角度; 运动强度等级
2.3.1 特征选择方法
为什么要特征选择:减少过拟合,提高训练速度 , 提高模型可解释性,去除噪声特征, 满足嵌入式资源限制
方法 1.过滤法 (Filter):独立于模型,方差阈值:去除方差太小的特征;相关系数:去除与目标相关性低的特征
2.嵌入法 (Embedded):模型训练中自动选择。
L1正则化 (Lasso):稀疏化,自动置零,
树模型特征重要性:随机森林、GBDT
基于注意力的选择:深度学习 SE注意力和坐标注意力
2.3.2 特征归一化
为什么要归一化?不同特征量纲不同(心率60-200,HRV 0-0.1),梯度下降收敛更快 , 避免大数值特征主导模型,某些算法要求(如SVM、KNN)
常用方法: 1. Min-Max归一化(缩放到[0,1]) x' = (x - min) / (max - min) 适用:数据有明确边界,如图像像素 问题:对异常值敏感
2. Z-Score标准化(均值0,标准差1) x' = (x - mean) / std 适用:数据近似正态分布 优点:对异常值相对鲁棒
3. Robust标准化(基于中位数和IQR) x' = (x - median) / IQR 适用:数据有异常值 优点:对异常值最鲁棒
一般情况:Z-Score标准化。有异常值:Robust标准化; 神经网络:通常用Z-Score或Min-Max ;树模型:通常不需要归一化!
注意:用训练集的统计量,不能用测试集!保存归一化参数,部署时使用 ,训练和推理要用相同的归一化方式
总结:特征工程是机器学习的关键环节。对于PPG/ECG信号,通常提取三类特征:
时域特征包括统计量和HRV指标如SDNN、RMSSD;频域特征包括LF/HF功率及其比值;非线性特征如样本熵反映信号复杂度。
特征选择一般先用过滤法快速筛选,再用随机森林的特征重要性精选,嵌入式部署时要严格控制特征数量。
归一化方面,树模型不需要,但神经网络和SVM都需要。常用Z-Score标准化,有异常值时用Robust标准化。关键是要用训练集的统计量,保存参数供部署使用。
2.4 经典算法:随机森林、GBDT、SVM
深度学习时代为什么还要学经典算法?
由于机器学习经典算法在小数据集表现更好,可解释性强(医疗场景重要),计算资源需求低适合嵌入式部署, 训练速度快,不容易过拟合
适用场景:数据量 < 10000:优先考虑经典算法。需要可解释性:随机森林、决策树。嵌入式部署:轻量级模型。快速原型验证:先用经典算法建立baseline
随机森林 核心思想: 集成多棵决策树;每棵树用不同的数据子集(Bagging);每次分裂用不同的特征子集 ;最终投票(分类)或平均(回归)
集成学习(Ensemble Learning)是一种通过组合多个弱学习器(如决策树)来构建更强模型的机器学习方法,核心目标是提高预测精度、降低过拟合风险,并增强模型稳定性。
随机森林算法的优点:不容易过拟合,能处理高维数据, 能给出特征重要性,对异常值和噪声鲁棒,可并行训练,速度快,几乎不需要调参就能有不错效果
缺点:模型较大(多棵树) 预测速度比单棵树慢 对于非常高维稀疏数据效果一般 不擅长外推(超出训练数据范围)
关键参数:
n_estimators:树的数量,越多越稳定,但计算量增加 100-500,看验证集性能是否饱和;
max_depth:树的最大深度,控制复杂度 None(不限制)或10-30
min_samples_split:分裂所需最小样本数 2-10,越大越不容易过拟合
max_features:每次分裂考虑的特征数 'sqrt'(分类)或'auto'(回归)
class_weight:类别权重,处理不平衡
两个随机:1.样本随机(Bootstrap采样)有放回抽样,抽取相同数量的样本。每棵树看到的数据不同, 学到不同的模式 2. 特征随机 假设有10个特征,每次分裂时只随机选择√10 ≈ 3个特征来考虑,节点分裂时, 树1某节点:只能从[特征2, 特征5, 特征8]中选最优,这样可以使得每棵树的结构不同,增加多样性。
训练过程与预测过程:
1. Bootstrap采样,得到训练子集 2. 在子集上训练一棵决策树 - 每次分裂只考虑随机选择的特征子集 3. 树生长到最大深度(不剪枝)
分类任务:每棵树投票,少数服从多数;回归任务:每棵树预测值取平均
有效的解释?
方差-偏差分解: 单棵深树:低偏差(能拟合复杂模式),高方差(对数据敏感)
多棵树平均:方差降低,偏差基本不变
数学上: Var(平均) = Var(单棵) / n + 相关性带来的额外方差 随机性让树之间相关性降低 → 平均后方差更低
梯度提升决策树(GBDT)
核心思想: 串行训练多棵树(Boosting) 每棵树拟合前面树的残差, 梯度下降优化损失函数,最终加权求和
与随机森林的区别。
随机森林:并行,每棵树独立,投票/平均; GBDT:串行,每棵树纠正前面的错误,加权求和
Boosting的基本思想为串行集成,后面的模型专注于前面模型的错误
为什么叫"梯度"提升?
残差就是负梯度方向!所以"拟合残差" = "沿着负梯度方向更新"
优点: 通常比随机森林精度更高,灵活的损失函数,能处理各种类型的数据 特征重要性 缺点:容易过拟合(需要仔细调参) 训练速度慢(串行)对异常值敏感 参数较多
gbdt = GradientBoostingClassifier(
n_estimators=100, # 树的数量
learning_rate=0.1, # 学习率,越小需要越多树
max_depth=3, # 每棵树的最大深度,GBDT通常用浅树
min_samples_split=2, # 节点分裂最少样本数
subsample=0.8, # 每棵树使用的样本比例(类似随机森林)
max_features='sqrt' # 每次分裂考虑的特征数
)
调参需要注意:
1. learning_rate和n_estimators要配合 learning_rate小 → 需要更多树 → 更慢但通常更好
2. max_depth通常设小(3-8) GBDT用很多浅树,不是少量深树
3. subsample < 1.0 引入随机性,(80%的比例如何)减少过拟合(类似随机森林的Bootstrap)
LightGBM的改进(数据量大、特征多、追求速度)
1. Histogram-based算法 把连续特征离散化成直方图,大幅加速
2. Leaf-wise生长(vs Level-wise) 每次选择增益最大的叶子分裂,树更不平衡但更准
3. GOSS(梯度单边采样) 保留梯度大的样本,随机采样梯度小的样本
4. EFB(互斥特征捆绑) 把互斥的稀疏特征合并,减少特征数
XGBoost
XGBoost 本质上是 GBDT 的一个高性能实现。
1)普通 GBDT 通常主要用一阶梯度。XGBoost 同时利用一阶梯度和二阶梯度来近似损失函数,因此优化更精细。
2)XGBoost 相比传统 GBDT 更强调正则化,通过限制叶子数、叶子权重等方式抑制过拟合,因此泛化能力通常更好。
3)支持列采样和行采样
和随机森林有点类似,XGBoost 可以在建树时随机采样部分样本、部分特征。降低过拟合,提升训练效率
4)能自动处理缺失值,会自动学习缺失值应该往左子树还是右子树走。
5)工程实现更强。XGBoost 在工程层面做了大量优化,比如支持并行计算、缓存优化、稀疏数据支持。所以它在很多表格数据任务上表现很好。
XGBoost 的缺点
参数多,需要调参,训练可能不如 LightGBM 快
总结:随机森林和GBDT的区别
主要区别在集成方式: 随机森林是Bagging,多棵树并行训练,各自独立,最后投票。 通过样本随机和特征随机增加多样性,降低方差。 GBDT是Boosting,多棵树串行训练,每棵树学习前面树的残差。 通过逐步纠正错误,降低偏差。 随机森林用深树,GBDT用浅树。 随机森林训练快可并行,GBDT通常精度更高但需要调参。
GBDT用浅树是因为Boosting的思想是用很多弱学习器组合成强学习器。 每棵树只需要比随机猜测好一点点, 深树容易过拟合单轮的残差, 浅树泛化性更好,多棵树组合后效果更好。 通常max_depth设3-8就够了。
随机森林不容易过拟合的两个原因: 第一,Bootstrap采样让每棵树看到不同的数据, 单棵树的过拟合会被平均掉。 第二,特征随机让每棵树结构不同, 降低了树之间的相关性, 平均后方差更低。 所以即使每棵树都完全生长(不剪枝), 整体也不容易过拟合。
特征重要性衡量每个特征对预测的贡献。 随机森林/GBDT中常用的计算方式: 1. 基于不纯度减少(Gini Importance) 统计每个特征在所有树的所有分裂中带来的纯度增益总和 2. 基于排列重要性(Permutation Importance) 随机打乱某个特征的值,看预测性能下降多少 下降越多说明该特征越重要 特征重要性可以用于特征选择和模型解释。
三、深度学习基础(生理信号相关)
3.1 1D-CNN用于时序信号
1D-CNN:处理时序信号 (T × C) 卷积核只在时间维度滑动,提取时间局部特征(波形模式) 适合PPG、ECG、加速度等信号。
作用
1)提取时间局部特征
2)通道维度变换。卷积不仅在时间维上提取模式,还会把原始通道表示映射到新的特征空间:原始输入通道可能是传感器通道,输出通道变成“学到的特征通道”。
3)融合多通道信息。如果输入有多个通道,1D 卷积核通常会同时作用于所有输入通道,所以它还可以学习通道间的联合模式、不同通道之间的相关结构。
比如:
- 多导联 ECG 中不同导联共同决定异常类型
- 多轴加速度中 x,y,zx,y,z 联合决定动作
- 多通道生理信号融合时提取联合特征
所以 1D-CNN 不只是看“单个通道上的局部波形”,还会做跨通道融合。
1D-CNN处理生理信号的优势:
1)自动学习特征,无需手工设计
2)平移不变性:同一种波形出现在不同时间位置时,卷积核仍然可以识别出来。
3)参数共享:卷积核参数在整个时间维度共享,相比全连接层参数量更少,训练效率更高,也更不容易过拟合;
4)层级特征:浅层卷积,学习边缘、尖峰、局部波形细节。深层卷积,学习更复杂的形态模式、周期结构、组合特征。
5)比 RNN 更容易并行。RNN 需要按时间步递推,而 1D-CNN 可以对整段序列并行卷积,因此训练速度通常更快。
1D-CNN 的基本计算过程
输入序列经过卷积核滑动,在每个位置与局部窗口做加权求和,再通过激活函数得到输出。
输入 + 卷积核 → 在时间维上滑动匹配 → 输出特征图
卷积的作用本质上是:检测某种局部波形是否出现以及该波形在不同时间位置上的响应强度
1D-CNN 的关键参数
1)kernel_size:卷积核大小 ,卷积核大小决定一次观察多长时间范围内的信号。
小核(3-5):捕捉局部细节,如QRS波的尖峰 大核(15-50):捕捉长程模式,如心跳周期 建议:多尺度组合,或从小到大堆叠
2)stride:步长 步长决定卷积核每次滑动多少个时间点。
stride=1:输出长度≈输入长度 stride>1:下采样,减少计算量 建议:初始层stride=1,后面可增大
3)padding:填充 'same':输出长度=输入长度 'valid':不填充,输出变短 建议:通常用'same'保持长度
4)dilation:膨胀率 dilation=1:标准卷积 dilation>1:扩大感受野,不增加参数 应用:TCN中常用
5)filters/channels:输出通道数 决定学习多少种不同的特征
建议:逐层增加,如32→64→128
架构设计:
1)通道数递增 输入 → 32 → 64 → 128 → 256 原因:浅层特征简单,深层特征复杂
2)感受野要足够覆盖目标模式
1D-CNN 的核心不是单层卷积核大小,而是整体感受野是否足够覆盖感兴趣的信号结构。
若任务依赖单个 QRS,较小感受野可能就够,若任务依赖完整心拍周期或多个周期之间关系,就需要更大感受野。
扩大感受野的方法:增加卷积层数,使用更大的 kernel,使用 stride,使用 pooling,使用 dilation
3)卷积核大小可逐层递减,或采用多尺度设计
方案 A:大到小。前层用较大卷积核,先抓整体趋势,后层用小卷积核,细化局部结构
方案 B:小核堆叠 / 多尺度并行。多层小核叠加扩大感受野,或同时使用多种 kernel size 捕捉不同时间尺度特征。多尺度往往更实用,因为同一段信号中可能同时存在:局部尖峰、周期结构、缓慢趋势变化。
归一化与正则化
1)Batch Normalization(BN)
通常每个卷积层后面加 BN。加速训练,稳定梯度,减少内部协变量偏移,有一定正则化效果。
常见顺序通常为:
Conv → BN → ReLU
2)Dropout
Dropout 用于减少过拟合。卷积层后一般少量使用,常设为 0.1~0.2。全连接层前,可以用得更大一些,常设为 0.3 ~ 0.5。
卷积层本身已有一定参数共享和局部连接特性,不像全连接层那么容易过拟合。
池化策略
池化用于降低时间分辨率、压缩特征、扩大感受野。
1)Max Pooling
保留最显著的局部响应,强调“是否出现某种模式”。适合检测尖峰、局部强响应。
2)Average Pooling
更平滑,更强调整体趋势,适合更关注整体波形或平均强度的任务。
3)Adaptive Pooling
可将任意长度输入映射为固定长度输出,适合处理可变长度输入,不同长度记录输入同一网络时很有用。
全局池化与全连接层
1)全局池化(Global Pooling)
- Global Average Pooling
- Global Max Pooling
优点
- 参数少
- 不依赖固定输入长度
- 降低过拟合风险
- 更适合部署
2)全连接层(Fully Connected)
- 表达能力强
- 可做更复杂的特征组合
缺点:参数多,容易过拟合,通常要求固定输入长度
设计建议
对于很多生理信号任务,优先考虑:卷积特征 + 全局池化 + 分类层,而不是大规模全连接层。
激活函数
隐藏层常用 ReLU ;二分类输出常用 Sigmoid;多分类输出常用 Softmax(把多个输出变成概率分布)。
卷积神经网络的结构
CNN 的典型结构可以概括为:
1)输入层 输入原始数据,比如图像或 1D 时序信号。
2)卷积层 提取局部特征。通过卷积核滑动,检测局部模式。
3)激活函数 引入非线性,提高表达能力。
4)归一化层(常见 BatchNorm) 稳定训练,加快收敛。
5)池化层 下采样,压缩特征,减少计算量。
6)重复堆叠 多层卷积 + 激活 + 池化,不断提取更高层特征。
7)全局池化或全连接层 把高层特征汇总后映射到输出空间。
8)输出层 输出分类结果或回归值。
设计1D-CNN的两个可用方向
方向 1:通道数逐层递增。浅层特征简单,深层特征复杂,因此网络深处往往需要更多通道来表达更丰富的模式。
方向 2:感受野逐步扩大 / 多尺度建模
卷积核大小可以逐层变化,或通过多尺度卷积、堆叠小卷积、膨胀卷积等方式扩大感受野,从而同时捕捉:局部细节、完整波形形态、长时间范围模式
3.2 时序建模:RNN/LSTM/GRU
RNN系列模型适合处理时序数据,核心是通过隐藏状态传递历史信息。基本RNN有梯度消失问题,难以学习长程依赖。LSTM通过细胞状态和三个门(遗忘、输入、输出)解决了这个问题,细胞状态提供了梯度直接流动。GRU是LSTM的简化版,只有两个门,参数更少,训练更快,性能通常相当。
RNN / LSTM / GRU 的核心区别
1) 结构差异
RNN只有一个隐藏状态,没有门控机制,记忆能力弱
LSTM有隐藏状态 和细胞状态,三个门:遗忘门、输入门、输出门,长依赖能力强
GRU只有隐藏状态 ,两个门:更新门、重置门
RNN
RNN(Recurrent Neural Network,循环神经网络)是一类专门处理序列数据的神经网络。
核心思想:当前时刻的输出,不仅依赖当前输入,还依赖上一时刻的隐藏状态。也就是说,RNN 会把历史信息“传”到当前时刻。
训练用 BPTT(时间反向传播)时,梯度要从后面的时间步传到前面的时间步,中间会经过很多层梯度会连乘,容易梯度消失/爆炸;对长时依赖(如几十秒前事件对当前状态影响)学习能力弱。
如果把这个过程展开,梯度会变成多个矩阵连乘:
- 若这些矩阵的范数小于 1,梯度会越来越小,出现梯度消失
- 若大于 1,梯度会越来越大,出现梯度爆炸
如何避免 RNN 训练不稳定?
常用手段:梯度裁剪(clip)、合适初始化、LayerNorm/BatchNorm(按场景)、学习率 warmup、序列分段训练、输入标准化、合理 batch 长度。
LSTM
LSTM 为了解决 RNN 长依赖问题,引入了细胞状态和三个门控机制:
遗忘门 :决定保留多少历史记忆;输入门:决定写入多少当前输入;输出门 :决定输出多少当前记忆到隐藏状态。候选记忆:生成一个候选的新记忆内容。更新细胞状态:将旧记忆和新信息融合
细胞状态的更新方式相对为线性“传送通路”,因此梯度在时间上传播时,不容易快速衰减,不像普通 RNN 那样反复被非线性压缩。
LSTM 的“记忆”实现:靠细胞状态与门控机制。遗忘门控制保留旧记忆,输入门控制写入新记忆,输出门控制对外暴露的信息。细胞状态 的加法更新路径改善了梯度传播。
GRU(门控循环单元)
GRU 是 LSTM 的简化版本,把“细胞状态”和“隐藏状态”一定程度合并,门更少:
更新门 :保留多少旧信息;重置门 :控制在生成候选状态时,旧信息参与多少。
特点:比 LSTM 参数少、训练更快;在很多任务上效果与 LSTM 接近;数据量不大或实时要求高(如可穿戴设备)时常优先尝试 GRU。
3.3 注意力机制:Self-Attention、SE
注意力机制的本质:不是所有输入都同等重要, 学习"关注哪里" 动态加权,而非固定权重 提高模型的表达能力和可解释性
在工程中的应用:
时间注意力:关注重要的时间段(如QRS波);通道注意力:关注重要的特征通道 ;空间注意力:关注重要的传感器位置 ; 自注意力:建模序列内部的依赖关系
SE模块:通道注意力的经典方法
不同特征通道的重要性不同, 学习每个通道的权重,增强重要通道,抑制不重要通道。
结构:
结构: 输入特征 (B, C, L)
Squeeze: 全局平均池化 → (B, C, 1) 作用:获取每个通道的全局信息
Excitation: FC → ReLU → FC → Sigmoid → (B, C, 1) 作用:学习通道间的依赖关系
Scale: 输入 × 权重 → (B, C, L) 作用:重新校准通道
Self-Attention(自注意力)
Self-Attention的核心思想: 序列中的每个位置都可以关注其他所有位置,学习位置之间的依赖关系 ,不受距离限制(不同于RNN的顺序传递),Transformer的核心组件
计算过程: 1. 将输入映射为Q(Query)、K(Key)、V(Value) 2. 计算注意力分数:
3. Softmax归一化得到权重 4. 加权求和:output = weights × V
计算复杂度:O(T²×d) 长程依赖建模
3.4 训练技巧:学习率调度、正则化、数据增强
batch size 指一次参数更新所使用的样本数。
batch size 大
优点:梯度更稳定,并行计算效率高,训练更快
缺点:占用显存大,参数更新次数减少,大 batch 梯度太平滑,有时泛化不如小 batch,学习率没调好时容易训练效果差
batch size 小
占用显存小,参数更新更频繁,有一定随机性,可能更容易跳出局部最优,泛化能力有时更好
缺点:梯度噪声大,训练不稳定,收敛路径抖动更明显,训练速度可能慢
iteration 一次拿一个 batch 做一次更新,叫一次 iteration
epoch 整个训练集都过一遍,叫一个 epoch
batch size 每次 iteration 用多少样本
学习率的重要性
太大:震荡不收敛,甚至发散;太小:收敛慢,可能陷入局部最优;合适的策略:开始大(快速下降),后期小(精细调整)
学习率(learning rate)和 batch size 的关系,本质上是参数更新步长与梯度估计噪声之间的平衡。batch 越小,梯度噪声越大,更新更随机,通常需要更小学习率;batch 越大,梯度估计更稳定,通常可以用更大学习率来加快训练。大 batch 训练常配合 learning rate warmup。
常用调度策略:
1. Step Decay(阶梯衰减)
每隔N个epoch,学习率乘以gamma 适用:简单有效,baseline选择
2. Cosine Annealing(余弦退火)
学习率按余弦曲线从初始值降到最小值 优点:平滑下降,末期精细调整 适用:大多数场景的推荐选择
3. ReduceLROnPlateau(自适应衰减)
验证损失不再下降时,降低学习率 优点:自适应,不需要预设schedule 适用:不确定训练多少epoch时
4. Warmup + Decay(预热+衰减) 开始时学习率从小到大(预热),然后衰减 优点:稳定训练初期,避免大梯度 适用:Transformer、大batch训练
5. One Cycle(单周期) 学习率先升后降,一个完整周期 优点:可以用更大的最大学习率,训练更快 适用:快速训练
正则化的目的:防止过拟合,提高泛化能力
1. L1/L2正则化(权重衰减)
L2(Weight Decay):权重趋向于小值,最常用 L1:权重趋向于稀疏(部分为0)
PyTorch中:optimizer的weight_decay参数
optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-4)
2. Dropout 训练时随机丢弃神经元,测试时使用全部神经元(自动缩放)
常用值:0.1-0.5 位置:通常在全连接层前,卷积层后较少用 nn.Dropout(p=0.5)
3. Batch Normalization
跨样本,同一个batch内,按通道归一化。依赖大batch, 。加速训练,加快收敛;有轻微正则化效果;解决内部协变量偏移;缓解梯度消失。 位置:卷积/全连接后,激活函数前
注意:训练和推理模式不同(model.train()/eval())训练时用当前batch计算均值方差,测试时,用整个训练集全局的均值方差。
nn.BatchNorm1d(num_features)
4. Layer Normalization
对每个样本的特征归一化,跨特征 ;不依赖batch,不跨batch,适合小batch和RNN;Transformer中常用 nn.LayerNorm(normalized_shape)
5. Early Stopping
验证损失不再下降时停止训练, 最简单有效的正则化 ,需要保存最佳模型
6. Label Smoothing 软化标签:[0,1,0] → [0.05, 0.9, 0.05] 防止模型过于自信,分类任务常用
数据增强(生理信号专用)
生理信号数据增强的特殊性:不能破坏生理意义,要保持标签正确性, 增强方式要符合实际变异 常用增强方法:
1. 时间相关
(1) 随机裁剪:从长信号中随机截取
(2) 时间拉伸/压缩:模拟心率变化
(3) 时间平移:信号整体平移
随机翻转:时间轴翻转(谨慎使用)
2. 幅度相关
(1) 随机缩放:模拟信号强度变化
(2) 添加噪声:高斯噪声、基线漂移
(3) 随机DC偏移:模拟基线变化
幅度翻转:上下翻转(某些任务可用)
3. 频率相关
(1) 随机滤波:轻微改变频率成分
(2) 频带噪声:特定频段添加噪声
4. 高级方法
Mixup:两个样本线性混合;Cutout/Cutmix:随机遮挡部分信号 ;生成式增强:GAN生成新样本
添加高斯噪声模拟传感器噪声,随机缩放模拟信号强度变化,添加基线漂移模拟实际干扰。时间扭曲要谨慎使用,可能改变心率信息。
3.5 PyTorch使用:自定义Dataset、模型、训练循环
3.6 类别不平衡处理:过采样、欠采样、代价敏感
可穿戴设备中的类别不平衡:
典型场景: 心律失常检测:正常心跳99%,异常1% ; 跌倒检测:正常活动99.9%,跌倒0.1%; 睡眠呼吸暂停:正常呼吸95%,暂停5% ;房颤检测:正常90%,房颤10%
不平衡的危害: 模型偏向多数类 , 少数类召回率低 , 准确率虚高(全预测多数类也能90%+) ,实际应用中漏检严重
评估指标选择:不要只看Accuracy, 关注少数类的Recall,使用F1-score、AUC-ROC,查看混淆矩阵
过采样:增加少数类样本数量
1. 随机过采样 (Random Oversampling) 方法:随机复制少数类样本 优点:简单 缺点:容易过拟合(完全相同的样本)
2. SMOTE (Synthetic Minority Oversampling) 方法:在少数类样本之间插值生成新样本 优点:生成新样本,减少过拟合 缺点:可能生成不合理的样本
3. ADASYN (Adaptive Synthetic Sampling) 方法:在难分类的少数类样本附近生成更多样本 优点:关注边界样本 缺点:计算量大
4. 数据增强过采样 方法:对少数类应用更多数据增强 优点:生成多样化的真实样本 生理信号场景最佳选择
代价敏感:让模型更关注少数类
1. 类别权重 (Class Weights) 方法:损失函数中给少数类更高权重 公式:weight = n_samples / (n_classes * n_samples_per_class) 优点:简单有效,不改变数据
2. Focal Loss 方法:降低易分类样本的权重,关注难分类样本
公式:FL = -α(1-p)^γ * log(p) 优点:自动关注难样本 适用:极度不平衡场景
3. 采样权重 (Sample Weights) 方法:DataLoader中给不同样本不同采样概率 优点:灵活,可以结合其他因素
不平衡处理策略选择: 不平衡程度及推荐方法
轻度 (1:3~1:10) 类别权重 + 数据增强
中度 (1:10~1:100) Focal Loss + SMOTE + 数据增强
实践建议:
首先尝试类别权重,简单有效; 数据增强是最安全的过采样方式 ;SMOTE对表格数据效果好,时序数据谨慎使用; Focal Loss对极度不平衡有效 ;评估时必须看召回率和混淆矩阵 ;可以调整分类阈值来平衡精确率和召回率
混淆矩阵
TP:真实正类,被预测为正
FP:真实负类,被预测为正(误报)
FN:真实正类,被预测为负(漏检)
TN:真实负类,被预测为负
准确率:总体预测对了多少。类别严重不平衡时会“虚高”。
召回率:所有真实阳性里,你找回了多少。关注漏检(FN)成本高的场景(如疾病筛查)。
recall = TP/TP+FN
精确率:你报出来的“阳性”里,有多少是真的。关注误报(FP)成本高的场景(如误报警)。Precision=TP/TP+FP
四、工业化
4.1 轻量化网络:MobileNet、ShuffleNet思想
轻量化目标:减少参数量和计算量,保持精度(尽量少损失), 适合量化部署
1. 深度可分离卷积 (Depthwise Separable Convolution)
标准卷积:一步完成空间和通道的混合 参数量 = K × K × C_in × C_out
深度可分离卷积:分两步 Depthwise:每个通道单独卷积 (K × K × 1 × C_in)
Pointwise:1×1卷积混合通道 (1 × 1 × C_in × C_out)
参数量 = K × K × C_in + C_in × C_out 压缩比 ≈ 1/K² + 1/C_out ≈ 1/9(K=3时)
2. 通道混洗 (Channel Shuffle)
分组卷积减少计算量,但组间无信息交流 , 通道混洗让不同组的通道交换信息
3. 倒残差结构 (Inverted Residual) 先升维(1×1卷积)→ 深度卷积 → 再降维(1×1卷积) 在高维空间做深度卷积,提取更丰富特征
4.2 Transformer
Self-Attention
Transformer 整体结构由 Encoder(编码器) 和 Decoder(解码器) 组成:
-
Encoder:负责理解输入,提取特征。
-
Decoder:负责生成输出(如翻译、文本生成)。
RNN 的信息需要层层传递,路径长且易梯度衰减。Transformer 的自注意力让任意两位置可直接交互,路径长度近似为 1,更易学习长依赖。每个时间点都能直接看全局上下文。
Transformer 是一种基于注意力机制(Self-Attention)的序列建模网络。
和 RNN 按时间步递归不同,Transformer 可以并行处理整段序列,更容易捕获远距离依赖。
核心模块:Self-Attention
对输入序列 X 线性映射得到 Q,K,V(Query/Key/Value):
含义:
- QKT:衡量“当前位置”与“其他位置”的相关性;
- softmax:归一化成注意力权重;
- 乘 V:聚合全局信息。
Multi-Head Attention(多头注意力)
把特征分成多个子空间并行做注意力,再拼接。
好处是能学习不同关系:局部形态、周期结构、跨导联相关性(对 EEG/ECG 很有用)
Positional Encoding(位置编码)
因为 Transformer 本身不递归、无卷积,不自带顺序信息,所以要加位置编码(可学习或正余弦)。这一步对时序信号非常关键:告诉模型“第几个采样点/第几个时间窗”。
编码器结构(常用)
每层一般是:
- Multi-Head Self-Attention
- 前馈网络(FFN)并配合残差连接 + LayerNorm + Dropout。
在生理信号里,常见做法是:
前端 CNN 提局部波形特征;后端 Transformer 建模长程时序依赖(CNN-Transformer)。
Transformer 在生理信号中的优缺点
长依赖建模强(睡眠分期、长时 ECG/PPG 趋势);并行训练快;可解释性相对更好(可看注意力图,辅助分析关键时段)。
标准自注意力复杂度 O(n2)O(n2),长序列内存开销大;对数据量较敏感,小数据容易过拟合;
实时边缘部署成本可能高于 GRU/LSTM。
多头注意力的作用
多头注意力相当于从多个子空间同时学习不同类型的依赖关系,使模型能同时关注局部模式、长程依赖和不同频段特征,表达能力更强。
Transformer 的主要计算瓶颈是什么?
自注意力矩阵 QKT的大小是 n×n,时间和显存复杂度约为 O(n2)。序列越长,成本增长越快。
长序列生理信号如何优化 Transformer?
分窗/分块注意力、下采样、局部+全局混合注意力、线性注意力变体、先 CNN 压缩再 Transformer、只在关键窗口做全局注意力。
小样本场景下怎么让 Transformer 更稳?
数据增强(抖动、缩放、时移、频域扰动)、迁移学习/预训练、强正则(Dropout/Weight decay)、早停、减小模型规模、结合先验特征(时频特征)。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)