查看全课大纲(第 12 / 82 节)
- 1.函数与数据泛化
- 2.向量:从几何直觉到高维空间
- 3.矩阵与张量
- 4.特征值与特征向量:矩阵变换的不动方向
- 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
- 6.概率与统计:机器学习的数学基础
- 7.独立性与随机变量:贝叶斯公式与二项分布
- 8.期望、方差与协方差:随机变量的数字画像
- 9.联合概率:当一条轴不够用的时候
- 10.概率分布(一):从伯努利到伽马函数
- 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
- 12.机器学习的模型:找输入与输出的关系
- 13.机器学习的应用
- 14.过拟合
- 15.机器学习的分类
- 16.有监督学习:从房价预测说起
- 17.损失函数
- 18.梯度下降(上):更新规则与学习速率
- 19.梯度下降(2)
- 20.牛顿方法
- 21.KNN简介
- 22.距离测算
- 23.朴素贝叶斯
- 24.朴素贝叶斯的实际应用
- 25.信息熵:决策树构建的度量基础
- 26.信息增益与决策树的构建
- 27.ID3算法
- 28.决策树节点的划分
- 29.CART树
- 30.Bagging
- 31.Boosting:自适应提升算法
- 32.Gradient Boosting
- 33.线性模型:回归与分类的同一副骨架
- 34.最小二乘:把最优参数直接解出来
- 35.最小二乘法的几何与概率视角
- 36.极大似然:给最小二乘一个概率出身
- 37.逻辑回归(1):把线性模型接到分类上
- 38.逻辑回归(2):损失函数与多分类
- 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
- 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
- 41.优化方法(1):坐标下降与前向选择
- 42.优化方法(2):前向策略与最小角回归
- 43.拉格朗日乘子法(1):从无约束到等式约束
- 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
- 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
- 46.最大间隔:把分类问题变成优化问题
- 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
- 48.支持向量:边界上的少数派
- 49.SVM 计算过程:一笔到底算完,再走进核方法
- 50.贝叶斯公式:概率即信念
- 51.隐含变量和概率模型:给看不见的原因建模
- 52.EM 算法:期望与最大化的迭代
- 53.琴生不等式:EM 的数学钥匙
- 54.三个硬币问题:EM 的复盘与衔接
- 55.高斯混合模型:用隐变量解释双峰数据
- 56.隐马尔可夫模型
- 57.隐马尔可夫模型(2):前向算法与动态混合模型
- 58.隐马尔可夫模型在 NLP 中的运用
- 59.EM 算法:把「为什么收敛」推到底
- 60.HMM 在 NLP 中的运用:从分词到机器翻译
- 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
- 62.高维下的高斯模型
- 63.主题模型:从词袋到隐含主题
- 64.Dirichlet 分布(1)
- 65.Dirichlet 分布(2)
- 66.统计学习内容回顾
- 67.K-means 算法
- 68.PCA 降维
- 69.SVD 降维
- 70.从聚类到流形
- 71.局部线性嵌入
- 72.随机邻域嵌入:SNE 与 t-SNE
- 73.无参模型:让数据自己说话
- 74.高斯过程:函数空间里的正态分布
- 75.高斯过程(2):噪声、正则化与核的线性组合
- 76.神经网络简介:从感知器到自编码器
- 77.反向传播:把误差一层层传回去
- 78.卷积神经网络(CNN):让特征自己学出来
- 79.循环神经网络(RNN):给网络装上记忆
- 80.深度学习回顾:静态一类,动态一类
- 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
- 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传
机器学习的模型:找输入与输出的关系
约 15 分钟
小象实战讲义 · 机器学习算法精讲
概率篇收官时说过:从这里开始,真正走进机器学习。第一站,讲师先把名字摆正——这门学问更该叫 Model Learning;再借统计学家 George Box 的名言立起模型的哲学——所有模型都是错的,但有些是有用的;然后,用一个”函数反转”的小把戏,把机器学习问题从数学课里请出来:给定数据,找出输入与输出之间的关系。本节几乎没有公式,但立下的框架会贯穿全课。
💡 核心导读
- 正名:机器学习学的是数学模型而非钢铁机器——行业里都叫”算法工程师”,做的就是 algorithm、就是 model learning。
- 模型哲学:“All models are wrong, but some are useful”——模型没有对错,只有好坏;一切模型都是真实世界的近似。
- 问题的反转:高中是”已知 去套用”;机器学习是”只给 (x, y) 数据对,反求 “——而且真实数据带噪声,往往没有任何函数能全部命中。
- 维度升级:输入从标量到向量(找平面)、再到 20×20×3=1200 维的图像向量(映射到 0/1 做分类);输出可以是离散类别,也可以是连续数值。
- capacity 与工具箱:直线拟合不了曲折数据就换更复杂的模型——多项式、正弦指数对数组合、神经网络、概率模型、决策树,都是”找关系”的家伙。
名字与哲学:Model Learning,所有模型皆错
开讲前,讲师先亮出一个个人观点:这门课叫 Machine Learning,其实”我个人感觉更应该叫 Model Learning”。为什么?Machine 这个词总让人联想到机器人、机械、钢铁构成的实体;但看看行业里大家在做什么——我们的头衔是算法工程师,做的是 algorithm,学的是一个 mathematical model。名字虽然将错就错叫惯了,本质却是:学模型,不学机器。
那”模型”到底是什么地位?统计学家 George Box 有句名言:
All models are wrong, but some are useful. (所有模型都是错的,但有些是有用的。)
讲师展开说:模型本身没有对错,只有好坏。用数学去解释一件事,只能说解释得够不够详尽、够不够完整、够不够好,很难说”我这个模型是错的”。Box 也幽默了一把:既然模型没有真正的对错,那不妨干脆认为所有模型都是错的——只不过有些模型有用,能帮我们解决问题。因为世界上没有任何一个模型能完美解释世界。
例子就在天上:月球绕地球一圈约 30.5 天、一个月 30 天左右;地球绕太阳一圈约 365 天。无论公式写得多详尽,都没法精确刻画每一次轨道运动——所以任何数学解释都只是真实世界的近似,较真起来都是”错”的。可是”月亮绕地球基本 30 天、地球绕太阳基本 365 天”这两个模型基本正确、非常有用:足够人类调整作息、安排耕种和农时、繁衍生息——“那就足够了”。
问题的反转:从套用函数到寻找关系
先回顾高中就学过的函数:自变量 通过规则 映射到 。比如 : 时 (,很正确); 时等于 5; 时等于 21。给定输入,查函数拿输出——这是套用。
现在把问题反转。假设别人递给你一张表格:只有 的配对——(1, 3)、(2, 5)、……、(10, 21)。“我想知道这个关系是怎么做出来的、是什么样的关系”——此时问题已经变了:不再是套用函数,而是从数据中找出这个关系。找出这个 model,“就是我们 machine learning 很重要的一部分”。
真实世界还嫌这太简单。“The world is complicated”——数据经常带噪声:给定 1 得到的是 3.2,给定 2 得到 4.9,给定 10 得到 20.9。把这些点画在图上,它们大致排成一条线的样子,却总有几个点差那么一点:
def f(x):
return 2 * x + 1
observed = [(1, 3.2), (2, 4.9), (10, 20.9)] # 世界给出的带噪声数据
print("x : 净值 f(x) : 观测值 : 误差")
for x, y in observed:
clean = f(x)
print(f"{x:2d} : {clean:7d} : {y:5.1f} : {y - clean:+.1f}")
slope_first = (4.9 - 3.2) / (2 - 1)
slope_second = (20.9 - 4.9) / (10 - 2)
print(f"前两点斜率 = {slope_first:.1f},后两点斜率 = {slope_second:.1f}:三点不在同一条直线上")x : 净值 f(x) : 观测值 : 误差
1 : 3 : 3.2 : +0.2
2 : 5 : 4.9 : -0.1
10 : 21 : 20.9 : -0.1
前两点斜率 = 1.7,后两点斜率 = 2.0:三点不在同一条直线上误差 +0.2、−0.1、−0.1——也许没有任何一条直线(或任何函数)能同时穿过所有点,因为中间总有一些误差。“这就是一个真实世界的情况”:给定了这些数据,想找最近似的那条线——这也是机器学习的问题。(“最近似”三个字怎么定义、怎么找?第 4 章会给出正式答案:损失函数与梯度下降。)
维度升级:从直线到平面,再到 1200 维图像
用上一章的线性代数视角看:刚才输入是标量、输出也是标量。往下走一步,输入换成向量 ,函数的形式就升级成 ,比如 。讲师照样给了一组带噪声的数据:(1, 1) 对应 4.1,(1, 2) 对应 6.9,(4, 3) 对应 15.8——
def g(x1, x2):
return 2 * x1 + 3 * x2 - 1
observed_3d = [((1, 1), 4.1), ((1, 2), 6.9), ((4, 3), 15.8)]
print("输入(x1,x2) : 平面值 g : 观测值 : 相对平面")
for (x1, x2), y in observed_3d:
clean = g(x1, x2)
side = "上方" if y > clean else "下方"
print(f" ({x1}, {x2}) : {clean:6.1f} : {y:6.1f} : {side} {y - clean:+.1f}")输入(x1,x2) : 平面值 g : 观测值 : 相对平面
(1, 1) : 4.0 : 4.1 : 上方 +0.1
(1, 2) : 7.0 : 6.9 : 下方 -0.1
(4, 3) : 16.0 : 15.8 : 下方 -0.2现在是三维的情况:输入是平面上的点,输出把每个点顶到三维空间里——有的点落在平面的上方,有的落在下方,还有的误差更大、离平面更远。和找”最近似的直线”完全同理:找到一个面,使这些点离它最近——学的仍是输入与输出之间的关系。
再往下走一步,把输入换成图像。一张 20×20 的图片有 个像素点;彩色图像每个像素有 RGB 三个值,再乘 3——1200 维向量。一张小狗的图片,就这样变成 1200 维空间里的一个点。而我们要学的函数是:把这个 1200 维向量映射到 0 或 1 上——0 代表 dog(小狗),1 代表 cat(猫)。这就是大家已经听过的模式识别、图像分类问题。当然输出未必总是离散的类别:也可能映射到连续值——相当于在高维空间里拟合一条特别复杂的线。
直线不够用:capacity 与两条新路
换不同模型时有一条规律:模型的 complexity(复杂度、capacity)越大,能力越强。对大致排成一条线的数据, 这种直线就够;可一旦数据带拐弯、有曲折,“你会发现我找不到任何一条线”能描述它。这时就需要更复杂的函数:
- 多项式:;
- 基函数组合:——每个系数都是可学的参数,把以前学过的函数拼装成特别曲折的新函数。
用以前学过的复杂函数,可以构造出足够”能拐弯”的新函数去解释这些点——这就是更复杂的 capacity。但还有一个现实问题:我们会的函数终究有限。讲师指出两条逼近任意复杂关系的路:
- 神经网络:以后会学到,它能拟合特别复杂的非线性函数,把已知数据点贴得更近;
- 概率:拿小狗小猫分类来说,直接找”x 映射到 0/1”的函数并不好找;但可以求条件概率——给定 时它等于 0 的概率多大、等于 1 的概率多大,两相比较:0 的概率大就判 0,反之判 1。分类问题特别容易走这条概率通道——概率也是一种数学函数,尤其条件概率,可以构造非常复杂的数学函数。
那么模型能力是不是越大越好?先埋个引子:本章后面有一整节专门讨论”过拟合”——模型太强也会出事。
输入输出的全谱系与模型工具箱
把镜头拉远,机器学习问题的输入输出有完整的谱系:
- 输入:可以是标量、向量、矩阵,甚至更高维的矩阵和向量;
- 输出:可能是离散值(0、1、2、3——分类),也可能是连续值(1.3、4.4、5.7、8——回归);
- 向量到向量:当然也有——输入一段英文、输出一段汉语(两种语言都用向量表示);输入一张彩色图像、把颜色全部去掉变成黑白图像——这类映射输入输出大小一样;
- 矩阵到矩阵:给定一个矩阵、输出一个矩阵,同样是找关系的任务。
无论形式怎么变,机器学习做的事情始终是那一句:找输入和输出之间的复杂函数关系,用它拟合给定的数据。而能出场的模型是一个工具箱:概率模型(probabilistic)、神经网络(neural network)、决策树(decision tree,dt),以及其他任何复杂的数学模型——都是想做”找到关系”这件事的家伙。机器学习到底想做什么,本节已经给出了全景。
📝 动手练一练
- 概念辨析:George Box 说”All models are wrong, but some are useful”。请结合一个生活中的例子(别用课上的月球绕地球),谈谈你的理解:为什么模型是”错”的?又如何判断它是否”有用”?
👉 点击查看参考答案
例如,用”平均气温”描述一座城市的气候。它是”错”的:完全忽略了每日温差、极端天气、湿度、风速等细节,无法精确反映任何一天的真实体感。但它又是”有用”的:高度概括了地区的冷热全貌,足以指导准备衣物、安排种植季节、比较不同城市的宜居度。判断”有用”的标准只有一条:能否以可接受的简洁度,服务好我们特定的决策目的——这与讲师说的”足够调整作息、安排农时,那就足够了”是同一个意思。
- 动手算一算:一张 32×32 的彩色图片,按本节”像素 × RGB”的算法展平后是多少维的向量?若模型对某张图学出条件概率 P(0|x)=0.62、P(1|x)=0.38(0=狗、1=猫),按讲师的概率判别法该输出哪一类?什么样的概率会让判断翻转?
👉 点击查看参考答案
维度: 维——和课上 20×20×3=1200 同一个算法,图像一大,维度立刻爆炸(这正是”高维”的直观来源)。
判别:0.62 > 0.38,判 0(狗)。只要 P(1|x) 大过 P(0|x)(越过 0.5 这条中线),判断就翻转为猫。这正是讲师说的:直接找”x → 0/1”的函数不好找,但比较两个条件概率再下判,等价且可行——概率本身也是一种函数。
本章小结
机器学习更本质的名字是 Model Learning——学的不是机器,是数学模型。模型没有对错、只有好坏:一切模型都是真实世界的近似,“All models are wrong, but some are useful”,月亮绕地球”基本 30 天”这样的近似模型已足够有用。机器学习的问题从”套用已知函数”反转而来:给定 (x, y) 数据对,反求映射关系;真实数据带噪声,找的常常是”最近似”的线或面。输入从标量升到向量(找平面)、再升到 1200 维图像向量(分类到 0/1),输出可离散可连续,向量还能映到向量(翻译、图像去色)。直线不够就上 capacity 更大的模型:多项式、基函数组合、神经网络,或者走概率那条路——条件概率也是函数。工具箱里 probabilistic、neural network、decision tree 各就各位。至于”最近似”的严格定义与系统求法——第 4 章正式开工。
📋 行动清单
- 用”输入-输出-找关系”的框架,把一个你熟悉的预测问题(比如根据历史销量预测未来销量)改写成机器学习问题:输入是什么维度的?输出是离散还是连续?
- 给朋友讲”为什么这门课更该叫 Model Learning”:机器 ≠ 机器人,算法工程师做的是数学模型
- 亲手验证 3.1 的两组噪声数据:三个二维点为何没有共线(斜率 1.7 ≠ 2.0)、三个三维点相对平面 各在哪一侧
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第3章课件:机器学习的哲学