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

本文探讨了算法策略中“造轮子”与“调包侠”的角色,强调两者并无高低之分,而是分工不同。作者分享了如何有效利用科学计算包如numpy,选择合适的模型如Xgboost和深度学习,并讨论了分类、回归、序列建模、损失函数选择以及FM模型和稠密向量的topK计算方法。文章提倡理解并优化现有工具,以提高业务场景中的应用效率。
部署运行你感兴趣的模型镜像

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)分类、回归、序列建模

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

4)损失函数选择

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

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

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

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

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

annoy算法

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

faiss处理大量数据思想

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

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值