机器学习算法入门:基础概念详解

代码写到发光
2025-12-16 09:49
阅读 330

大家好,我是小李,百度搜索算法组的一名普通搬砖工程师。入组快两年了,日常就是和 Query、Doc、CTR、排序模型打交道。写代码的时候习惯戴着耳机听 Lo-fi 或者周杰伦老歌——毕竟要是不戴耳机,隔壁工位的产品经理又该来问“这个需求很简单吧?明天上线行不行?”了。

上周五晚上,我一边调试一个线上召回模型的性能问题(是的,又是周五晚上),一边刷朋友圈,看到好几个前同事在晒 offer,突然意识到:又到了金三银四求职季。翻了翻自己的 GitHub 和简历,发现除了业务代码,好像没留下太多能拿得出手的“技术资产”。于是痛定思痛,决定写点东西,既帮帮刚入门的小伙伴,也逼自己系统梳理下基础知识。

今天这篇就聊聊 机器学习算法入门。别被标题吓到,我不是要讲什么高深理论,而是想用我在百度做搜索时踩过的坑、调过的参、熬过的夜,带你理解那些面试官张口就问、工作中天天见但可能你还没完全搞明白的基础概念。


被“逼”学 ML 的契机

其实我本科不是 CS 出身,研究生才转的计算机。入职百度第一天,leader 丢给我一个任务:“把这段 LR 模型代码跑通,然后加个特征试试效果。”
我当时连 LR 是 Logistic Regression 还是 Linear Regression 都分不清(后来才知道在 CTR 预估里通常指前者)。更惨的是,跑完 AUC 只有 0.51——跟抛硬币差不多。

那会儿真的想砸电脑。但没办法,deadline 在那摆着,双11大促的流量高峰眼看就要来了。硬着头皮啃论文、看内部 wiki、请教隔壁工位的“模型之神”老王(他 debug 速度比我打字还快),终于搞明白了几个最核心的概念。

现在回头看,入门 ML 最关键的不是数学推导(当然重要,但别一上来就被吓退),而是 理解每个组件在真实业务中扮演什么角色


监督学习 vs 无监督学习:不只是课本上的区别

在搜索场景里,我们绝大多数模型都是 监督学习(Supervised Learning)。比如用户搜“iPhone 15”,点了一个链接,没点另一个——这就是 label(正样本/负样本)。我们的目标就是让模型学会预测“用户会不会点这个结果”。

无监督学习(Unsupervised Learning),比如聚类、降维,在我们组主要用于前期数据分析或特征工程。举个栗子:去年我们想对 query 做意图聚类,但没标注数据,就用 BERT embedding + K-Means 把相似 query 聚在一起,再人工抽样看效果。虽然最后没直接上线,但帮产品理清了用户搜索意图的分布。

💡 开发心得:别迷信“无监督=高级”。在工业界,有 label 的数据才是王道。老板只关心 CTR 提升了没,不关心你用了多 fancy 的算法。


特征工程:80% 的功夫在这

很多人以为 ML 就是调模型,其实在搜索/推荐这种成熟业务里,特征工程才是提效的大头。我们组有个不成文的共识:模型半年不动,特征每周迭代。

比如一个经典的 user-item 交叉特征:

# 伪代码示意
user_click_history = get_user_clicks(user_id)
item_category = get_item_category(doc_id)
cross_feature = hash(user_click_history[-3:]) + "_" + item_category

这种特征看起来土,但在 CTR 预估上往往比 fancy 的图神经网络还稳。为啥?因为 它直接编码了“用户最近点了啥,现在看的是不是同类内容”这个强信号

不过特征也不是越多越好。有一次我一股脑加了 200 个新特征,结果训练时间翻倍,AUC 反而掉了 0.005。测试同学还发来灵魂拷问:“你这模型是变聪明了还是变笨了?”

后来学会了用 特征重要性分析(比如 XGBoost 的 feature_importance)筛掉噪声特征。再后来,我们上了在线特征筛选 pipeline,自动淘汰贡献低的特征——运维大哥终于不用半夜被 OOM 报警叫醒了。


模型选择:没有银弹,只有 trade-off

新人常问:“我该用 LR、XGBoost 还是 DNN?”

我的答案是:看场景、看数据量、看延迟要求

在百度搜索,首屏结果要求响应时间 < 50ms。所以粗排阶段我们还在用 LR + FFM,因为快、可解释、易 debug。精排才上 DNN(比如 DIN、BST),毕竟这时候候选集已经缩小到几百条,可以花更多计算资源。

下面是我整理的一个简单对比表(基于我们实际项目经验):

模型 训练速度 推理延迟 可解释性 适合阶段
Logistic Regression 极快 极低 粗排、冷启动
XGBoost 中等 中排、特征验证
DNN (MLP) 精排
Transformer 很慢 极低 实验性场景

📌 求职 tip:面试时如果被问“为什么选这个模型”,千万别只说“AUC 更高”。要结合 业务约束(延迟、资源、可维护性)来回答,这才是工程师思维。


调参不是玄学,但需要耐心

说到调参,我必须吐槽一下:网上教程总说“用贝叶斯优化自动调参”,但在我们这儿,90% 的情况还是 手动网格搜索 + 经验规则

比如 XGBoost,我有个私藏 checklist:

  • max_depth 别超过 8(否则容易过拟合)
  • learning_rate 从 0.1 开始试,效果不好再降到 0.05
  • subsamplecolsample_bytree 控在 0.6~0.8 之间防过拟合
  • 如果线上效果波动大,先 check 下训练/验证集的时间划分是否 leakage

有一次我调 DNN,loss 死活不降。查了半天,发现是 embedding 维度设太高了,导致 sparse feature 的梯度几乎为零。改完之后,AUC 一夜回到解放前……啊不是,是回到了 0.72。


效果评估:别只看 AUC!

很多新人(包括曾经的我)以为 AUC 高就万事大吉。结果上线后 PM 一脸懵:“CTR 没涨,DAU 还跌了?”

后来才知道,离线指标和线上指标可能天差地别。原因包括:

  • 数据分布偏移(训练用上周数据,线上是实时 query)
  • position bias(用户天然更可能点第一个结果)
  • 多目标冲突(比如点击率高了,但停留时长下降)

所以我们现在评估模型会看一套 组合指标

  • 主指标:AUC、LogLoss(离线)
  • 辅助指标:NDCG@10、MRR(衡量排序质量)
  • 线上 AB Test:CTR、人均搜索次数、跳出率

💡 技术分享:建议新人在本地复现时,至少模拟两个评估维度。比如用公开数据集(如 Criteo)时,除了 AUC,也看看 calibration curve(预测概率是否靠谱)。


给求职者的真心话

如果你正在准备算法岗面试,我的建议是:

  1. 基础概念必须扎实:别只会背公式,要能说清楚“为什么用交叉熵而不是 MSE 做分类 loss”。
  2. 动手跑通一个完整 pipeline:从数据预处理 → 特征工程 → 模型训练 → 评估。Kaggle 入门赛就行。
  3. 了解工业界和学术界的 gap:线上系统要考虑 latency、容灾、特征一致性,这些课本不教但面试必问。

我自己跳槽前,就花了两周时间用 MovieLens 数据集复现了一个简易推荐系统,并记录了所有踩坑过程。面试时聊这个项目,比背八股文管用多了。


写在最后

写这篇文章的时候,窗外北京又开始沙尘暴了。耳机里放着《晴天》,代码终于跑通了——新模型在线上 AB Test 中 CTR +1.2%,虽然不多,但够我下周跟 PM 吹一波了。

机器学习入门确实不容易,但也没那么神秘。它不像魔法,更像一门手艺:需要理论指导,更需要大量实践、试错、复盘。

如果你也在加班调模型,不妨停下来喝口水,想想:我到底在解决什么问题?用户真的需要这个功能吗?

毕竟,技术最终是为人服务的。哪怕是在百度,我们写的每一行代码,背后都是千万用户的搜索期待。

共勉。

—— 小李,一个还在努力不被模型虐哭的搜索算法工程师

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝