迭代次数对自组织映射(SOM)收敛性的影响及rlen参数疑问
关于kohonen库SOM中rlen参数与收敛点的逻辑解释
核心原因:学习率与邻域半径的衰减绑定rlen比例,而非绝对迭代次数
kohonen包的SOM实现中,学习率和邻域半径的衰减过程是基于总迭代次数(rlen)的比例来推进的,而不是固定的绝对迭代次数,这直接导致了你观察到的收敛点随rlen成比例变化的现象:
默认衰减机制:默认情况下,学习率从
0.05线性衰减到0.01,邻域半径从网格的最大拓扑距离(比如2x2网格的直径是√2)线性衰减到1。这个衰减的进度完全由当前迭代次数占rlen的比例决定,而非绝对次数。- 当rlen=300时,迭代到200次(占总次数的2/3),学习率已经接近
0.01,邻域半径也缩小到接近1,此时网络的权重调整幅度变得极小,平均距离自然趋于平稳。 - 当rlen=1000时,同样的衰减进度要到600次(2/3比例)才能达到相同的学习率和邻域半径状态,所以收敛点也随之延后。
- 当rlen=300时,迭代到200次(占总次数的2/3),学习率已经接近
设计逻辑的合理性:这种比例式衰减是为了保证无论总迭代次数多少,SOM都能完成“粗拓扑调整-精细权重优化”的完整训练流程:
- 前期(前1/3左右的rlen):高学习率+大邻域,快速让神经元映射到数据的大致拓扑结构。
- 中后期(后2/3左右的rlen):低学习率+小邻域,精细调整神经元位置,避免过拟合或拓扑扭曲。
如果固定衰减的绝对次数,当rlen远大于该次数时,后续迭代基本无调整,浪费计算;当rlen小于该次数时,训练还没完成精细调整就停止,模型效果会受影响。
如何固定收敛的绝对迭代次数
如果你希望收敛点固定在某个绝对迭代次数(比如200次),可以手动自定义学习率和邻域半径的衰减向量,脱离rlen的比例绑定:
# 先计算网格的最大邻域半径(以5x5六边形网格为例) max_radius <- somgrid(5,5,"hexagonal")$max.dist # 自定义学习率:前200次从0.05降到0.01,之后保持0.01 alpha_vec <- c(seq(0.05, 0.01, length.out = 200), rep(0.01, 800)) # 自定义邻域半径:前200次从最大半径降到1,之后保持1 radius_vec <- c(seq(max_radius, 1, length.out = 200), rep(1, 800)) # 训练SOM时传入自定义参数 som_model <- som(wines, grid = somgrid(5,5,"hexagonal"), rlen = 1000, alpha = alpha_vec, radius = radius_vec)
这样不管rlen设为300还是1000,网络都会在200次迭代后进入精细调整阶段,平均距离也会在200次左右趋于平稳。
内容的提问来源于stack exchange,提问作者Riley381
相关产品推荐
相关产品推荐

