关于“调包”,职业调包侠在此!

0.个人思考

1)跟那些大佬们相比,我是彩笔,所记录是自己的感悟。也许多年后看,极其幼稚,又或许大佬们觉得弱智,但是不影响我持续做笔记和学习记录。

2)个人认为,做算法策略的同学,大致可以看做两类:
一类是“卖铲子”的,也就是“造轮子”的,比如Xgboost、tf、keras、pytorch、FM、pca等各种优质工具;
一类是“用铲子的”,也就是“调包侠”,比如用各种轮子做“搜广推”的;
到目前为止,我不认为谁比谁高贵,分工不同罢了。

3)有一些“用铲子”的,被人说“调包侠”,不开心了,也开始把精力分散去“抄轮子”,无效的“改轮子”,做一些重复性、和实际目的不一致的工作,就好像明明有“sort”函数可以直接用了,得自己手写个“快排”表明自己的尊贵…我觉得是心态不好的表现。

4)既然社会分工是提高生产效率的,那么“调包侠”就应该好好理解手头的“铲子”和场景,去让他作用在实际的业务场景,发光发热,这名字有那么难听?

5)我斗胆猜测一下,这些经典的“铲子”可以直接或者略加改动就能适用80%以上的场景,否则这个“铲子”有问题,或者,用的人有问题。不然,那些做这些的“大佬”是“傻蛋”?

6)当然,多研究“铲子”的构造,改进适配以更好的应用,那是进阶需要的。

1.“铲子”的经验、学习记录,不定期update

0.)先贴个百科式的汇总

https://www.jiqizhixin.com/sota
主流分支的概念

1)关于numpy、breeze等科学计算包

能矢量计算的,就不要写for循环、map函数。
例子1:向量点乘,自己写for循环后者map,和调用dot函数的时间差异,数量级的
例子2:batch化预测,相比for循环样本预测

2)关于xgboost树模型、深度学习的场景选择

最直观的,变量数目(embedding也是很香的)
其他的,做特征工程的复杂度等等
在这里插入图片描述

3)分类、回归、序列建模

分类和回归,大致的感觉如下,
在这里插入图片描述
而对于序列建模,当这些样本的 y y y 在时间上有相关性时,就变成了 时间序列问题,如果我们依然用非时间序列的方法来处理,就割裂了 y y y的时间相关性,
在这里插入图片描述

4)损失函数选择

在这里插入图片描述
关于离群点的影响,对于mse的改进使用,看这个https://zhuanlan.zhihu.com/p/38529433;

5)FM模型(理论学习阶段)

FM模型,Factorization Machines,LR后面加了个特征的二次项(或者更高阶),将二次项的参数矩阵(对称) n ∗ n n*n nn转化为 n ∗ k n*k nk与转置的乘积,参数由 n ∗ n n*n nn个转化为 k ∗ n k*n kn( k < < n k<<n k<<n k k k是各特征的embedding维度);预测、训练复杂度 k ∗ n k*n kn这个级别,细节理解https://zhuanlan.zhihu.com/p/58160982,学习中看到讲的很好的一个博文。

  • 协同过滤的矩阵分解是FM的特例,FM还可以加入其它content特征,更加的统一
  • 实现了user、item、content在目标 y y y这个目标(比如点击概率)下的统一embedding,同质,可内积
  • 内积越大的组合,对目标 y y y,贡献越大??所以可以通过内积,来做召回、排序?
6)稠密向量的topK(理论学习阶段)

Embedding向量 m m m维,在 n n n个里面找topN相似,遍历的化复杂度为 m ∗ n m*n mn

annoy算法

  • 总的来说,把 n n n变成 l o g 2 n log_2n log2n
  • a.思路上,先把样本聚2类,计算分割平面,然后子类再聚2类新一级分割平面,循环下去,形成了树结构。
  • b.找topN的时候,先和根节点分割平面比较,找到相近的分支,然后依次类推,找到相似样本,复杂度是 m ∗ l o g 2 n m*log_2n mlog2n
  • c.既然是聚类这种思想,那么初始点影响大,那么可以重复上述,生成多棵树,取综合的结果。

faiss处理大量数据思想

  • 总的来说,同时优化 m m m n n n
  • PQ法编码向量,向量间距离计算变为查表操作,优化了m。向量维度 m m m拆开为 l l l段,每个子维度聚类 k k k簇,所有样本都可由对应聚类中心向量代替,那么计算量第一部分为,搜索query转化为聚类中心向量表达, l l l个子向量分别计算归属簇(这部分还涉及到空间换时间,比如欧式距离下 ( x 1 − x 2 ) 2 = x 1 2 + x 2 2 − 2 ∗ x 1 ∗ x 2 (x_1-x_2)^2 = x_1^2+x_2^2-2*x_1*x_2 (x1x2)2=x12+x222x1x2,如果 x 1 x_1 x1对应的是query原始向量,x_2对应的是簇中心向量, x 2 2 x_2^2 x22可以存表查询),关键是第二部分计算量,当搜索query被 l l l个簇中心表达后,与所有的样本(也被簇中心表达)的距离计算相似度,这个距离的计算无论query怎么变化,也是不同簇中心距离的组合,查表就好这里可以基本理解为在计算query与 n n n个样本的距离,是一个查表工作,这个表大小为 l ∗ k ∗ ( k − 1 ) / 2 l*k*(k-1)/2 lk(k1)/2,查询次数 n n n
  • IVF找k近邻思想,优化了 n n n,数据进行聚类(这个聚类的时候,距离计算可以用PQ这种查表方式),去query最近的1类或者几类寻找topN, n n n缩小到 n 1 n_1 n1;在 n 1 n_1 n1范围内,搜索计算距离的时候采用上述的PQ法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值