自然梯度下降算法实现与性能分析工具
项目介绍
本项目是一个基于 MATLAB 开发的数学优化与机器学习实验平台,专注于研究和对比自然梯度下降(Natural Gradient Descent, NGD)与标准梯度下降(Standard Gradient Descent, SGD)在逻辑回归任务中的表现。不同于在欧几里得空间进行简单更新的传统方法,本项目实现的自然梯度算法考虑了参数空间的黎曼几何特性,通过费舍尔信息矩阵(Fisher Information Matrix, FIM)对梯度进行校正,使得参数更新在概率分布空间中保持恒定的速度,从而有效应对复杂似然函数曲面带来的收敛困难问题。
功能特性
- 合成数据生成与环境建模:系统能够自动生成具有特定统计特性的二分类训练数据集,通过构造非线性可分性较弱的分布来模拟病态曲面环境,用于测试算法的鲁棒性。
- 带动量的标准梯度下降 (SGD):实现了集成 L2 正则化与动量机制的标准梯度更新算法,作为性能基准参考。
- Fisher 信息矩阵驱动的自然梯度 (NGD):核心实现了 FIM 的动态构造与逆矩阵计算,通过计算预测概率的方差分布来捕捉参数空间的曲率信息。
- 数值稳定性保障:在处理 FIM 求逆问题时,引入了阻尼项(Damping)处理,并采用线性方程组求解策略而非直接求逆,确保了高维或奇异情况下的数值稳定。
- 多维度收敛分析可视化:内置了四类统计图表,包括损失函数下降曲线、参数演化 3D 轨迹、FIM 特征值热力图以及最终分类决策边界。
- 矩阵特征值演化跟踪:实时记录并分析优化过程中 FIM 特征值的变化,展示算法如何自适应地调整步长与方向。
使用方法
- 环境配置:准备好安装有统计与机器学习工具箱的 MATLAB 运行环境。
- 参数设置:在程序初始化部分,可根据需求修改样本量(N)、学习率(lr)、动量因子(momentum)及正则化系数(lambda)。
- 执行分析:运行主函数,程序将自动执行从数据生成、SGD 优化、NGD 优化到结果绘图的全过程。
- 结果查看:程序执行完毕后将弹出参数演变与对照分析的可视化窗口,并在控制台输出两种算法的最终损失值、收敛坐标以及 FIM 最终条件数。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:通用办公级 CPU 即可,由于涉及矩阵运算,建议内存不低于 8GB。
实现逻辑与算法细节分析
1. 数据构造与预处理
程序随机生成两簇服从正态分布的样本点,人为设定其均值偏移以控制分类难度。在特征工程阶段,程序自动为原始数据添加全 1 列作为偏置项(Bias),将逻辑回归参数模型统一为权重向量与扩展特征向量的内积形式。
2. 目标函数与损失计算
系统采用负对数似然(Negative Log-Likelihood, NLL)作为损失函数,并叠加 L2 惩罚项辅助泛化。在计算过程中,为防止对数运算出现数值溢出,对概率值进行了截断处理(通过添加 1e-10 偏移量)。
3. Fisher 信息矩阵的构造
在 NGD 迭代中,FIM 的计算是核心步骤。程序利用逻辑回归的概率输出
p,构造对角矩阵
diag(p*(1-p)),再与输入矩阵
X 进行乘积运算。这种实现方式严格遵循了伯努利分布下参数空间度量张量的严格定义,即似然函数对数梯度的二阶矩。
4. 自然梯度更新策略
自然梯度的计算公式为
g_nat = FIM grad。程序在这里使用了 MATLAB 的反斜杠运算符(mldivide),通过 LU 分解或扫去法求解线性方程组,相比直接
inv(FIM) * grad 具有更高的计算效率和精度。同时,通过在 FIM 对角线上增加微小的阻尼因子,解决了矩阵可能存在的病态问题。
5. 动量机制的集成
为了对比的公平性,两种算法均采用了相同的动量更新逻辑。通过维护一个速度向量,将当前步的梯度更新方向与历史更新量进行加权融合,增强了算法越过局部极值点和在平坦区域加速推进的能力。
6. 关键辅助函数
程序内部封装了 Sigmoid 逻辑回归激活函数,用于将线性组合映射至 (0, 1) 区间的概率值,确保了梯度推导的一致性。
7. 可视化评估维度
- 收敛曲线:横轴为迭代次数,纵轴为损失值,直观展示 NGD 在前期快速下降的特性。
- 参数路径:在三维空间(w1, w2, Loss)中绘制权重的演变路径,揭示 NGD 路径相对于 SGD 更加平滑且指向性更强的特点。
- 热力图分析:通过展示 FIM 特征值随迭代步数的变化,反映模型不确定性的演变。
- 决策边界:在原始特征空间绘制分类线,验证最终参数的分类效果。