Oja's Rule如何应用于偏置项?偏置更新规则及实现相关疑问
Oja规则偏置项处理方案
问题1:Oja规则的偏置项更新规则
原始Oja规则的推导默认输入数据已经做了零均值预处理,因此没有设计偏置项。如果需要加入偏置适配非零均值输入,常用两种更新方案:
- 虚拟输入扩展法:将偏置视作输入恒为1的虚拟维度对应的权重,直接套用Oja的权重更新逻辑,公式为:
Δb = η * y * (1 - b * y)
其中η为学习率,y为神经元输出,b为对应神经元的偏置。 - 输出均值对齐法:如果仅需要用偏置抵消输出的均值偏移,可使用更轻量的更新规则:
Δb = - η * y
该规则会动态调整偏置,让输出的长期均值趋近于0。
问题2:应用Oja规则前加偏置是否有问题
分两种场景判断:
- 若你使用Oja规则做严格的主成分分析(PCA):不建议提前加偏置,原始Oja规则的数学推导基于输入零均值、线性无偏投影的前提,加入偏置会导致提取的主成分出现偏移,无法得到标准PCA的结果。
- 若你仅使用Oja规则做通用Hebbian无监督特征学习,不需要严格对齐PCA结果:提前加偏置没有问题,反而可以适配未做零均值预处理的输入数据,提升模型特征提取的泛用性。
示例代码补全
你提供的PyTorch代码中,采用虚拟输入扩展法的偏置更新实现如下:
import torch input_size = 4 number_neurons = 8 learning_rate = 0.01 weights = torch.rand(input_size, number_neurons) biases = torch.rand(number_neurons) inputs = torch.rand(input_size) outputs = torch.matmul(inputs, weights) + biases weights_delta = outputs * (inputs - (weights * outputs).T).T # 偏置更新逻辑 biases_delta = learning_rate * outputs * (1 - biases * outputs) new_weights = weights + weights_delta * learning_rate new_biases = biases + biases_delta
内容的提问来源于stack exchange,提问作者user2299067
相关产品推荐
相关产品推荐

