faiss hnsw 算法源码详解 - train

hnswlib 代码分析 hnswlib 源码分析 

train过程说明

    1. 主要是生成hnsw模型
    2. Hnsw中,storage中存储的原始的中心点向量
    3. 生成hnsw
      1. 为每层分配空间
      2. 每层的中心点在当前层及下面的每一层都有中心点,例如第n层在n、n-1、…1层都有临近点,第3层只在3、2、1层有临近点。
      3. 同一个临近点在各层的数据是连续存储在一起的。
      4. 新加入的数据在下面的各层查找对应的临近点的候选集,选出最后的临近点,然后建立link
      5. 调整其他临近点的link,因为临近是相互的

76 void HNSW::set_default_probas(int M, float levelMult)
 77 {
 78   int nn = 0;
 79   cum_nneighbor_per_level.push_back (0);
 80   for (int level = 0; ;level++) {
 81     float proba = exp(-level / levelMult) * (1 - exp(-1 / levelMult)); ///点落在每一层的概率,层越高概率越低,第0层概率为0.5
 82     if (proba < 1e-9) break;
 83     assign_probas.push_back(proba); ///向量落入每一层的概率
 84     nn += level == 0 ? M * 2 : M;
 85     cum_nneighbor_per_level.push_back (nn); ///

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值