@ha7ch/stanford-pro 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,143 @@
1
+ # 深度学习与自然语言处理(NLP with Deep Learning) · 第 3 课:实操——亲手算一次 king − man + woman ≈ queen
2
+
3
+ > source: [CS224N 官方主页与课程大纲](https://web.stanford.edu/class/cs224n/)(Schedule 里 Word Vectors 是紧跟 History of NLP 之后的正式课时)|[CS224N 2024 官方讲课录像播放列表](https://www.youtube.com/playlist?list=PLoROMvodv4rOaMFbaqxPDoLWjDaRAdP9D) | 类型:实验课(原创实操) | 前置:cs224n/02-from-rnn-to-transformer
4
+ > 教法遵循 references/pedagogy.md(写成代码样式):像课本一样把概念讲透、给足,不盘问、不当门槛。
5
+
6
+ ## 一句话本质(开场钩子)
7
+ 词向量不是把词换成一串数字这么简单——它是把"意思"这种模糊的东西,压缩进一个几何空间,让"king 和 man 差多少、往哪个方向差"这件事,变成一道能用减法、加法、夹角算出来的题。
8
+
9
+ ## 为什么要在乎(钩子展开)
10
+ 你大概率见过这张经典图:king 减去 man,加上 woman,算出来的点离 queen 最近。第一次看到这个例子的人,反应几乎都一样——"这也太邪门了,模型怎么知道 king 和 queen 之间差的正好是'性别'这个东西?"
11
+
12
+ 答案其实一点都不神秘,但也绝对不是巧合。它揭示了深度学习处理语言的一个根本思路转变:过去处理词,靠的是词典、规则、人工标注的语义关系表;而 embedding 这套思路,是让模型在海量文本里,单纯靠"猜邻居词"这件事,自己把语义关系"挤"进了一个向量空间的几何结构里——没人告诉它"性别"是一个维度,这个方向是自己长出来的。这是整个现代 NLP、乃至后面 Transformer、大语言模型的地基假设:意思可以被表示成空间里的一个点,而点和点之间的关系可以用几何运算来处理。这节课不讲大道理,直接带你手算一次,让这句话从"听起来对"变成"我亲眼看着它对"。
13
+
14
+ ## 核心概念(逐个讲透,内容给足)
15
+
16
+ ### 1. 词向量到底是什么、为什么"离得近"能代表"意思像"
17
+
18
+ **是什么**:一个词向量(word embedding)就是给词表里每个词分配一串固定长度的数字(比如 50 个、100 个、300 个维度),这串数字就是这个词在某个高维空间里的坐标。词本身不再是一个孤立的符号,而是空间里的一个点。
19
+
20
+ **为什么重要**:如果词只是符号(比如 one-hot 编码——每个词一个全 0 只有一位是 1 的超长向量),那"king"和"queen"之间没有任何数学上的联系,模型没法从"king"这个词学到的东西,迁移一丁点到"queen"上。但只要词变成了空间里的点,"两个词像不像"就变成了"两个点离得近不近"这样一个可以计算的几何问题。这一步转变,是深度学习能处理语言的前提——没有这一步,后面的神经网络无从下手。
21
+
22
+ **怎么算**:判断两个向量"离得近不近",最常用的不是普通的直线距离(欧式距离),而是**余弦相似度**——只看两个向量夹角的方向是否一致,不管它们各自有多长:
23
+
24
+ $$\cos(a, b) = \dfrac{a \cdot b}{\|a\|\,\|b\|}$$
25
+
26
+ 值越接近 1,说明方向越一致(语义越像);接近 0 说明基本无关;接近 -1 说明方向相反。
27
+
28
+ **例子**:直觉上"dog"和"puppy"应该比"dog"和"queen"更像,等下动手部分我们会亲手算出这两个数字,验证这个直觉。
29
+
30
+ ### 2. 语义关系不是一个点,而是一段"位移"——这就是类比运算的原理
31
+
32
+ **是什么**:这是整节课最关键的洞察。king 和 queen 之间的关系("性别对调,其它不变"),和 man 到 woman 之间的关系,如果模型学得足够好,会对应**大致相同的位移方向**——也就是说 `queen - king ≈ woman - man`。把这个等式移项,就得到了那句经典的话:`king - man + woman ≈ queen`。
33
+
34
+ **为什么重要**:这意味着"关系"本身也能被向量表示、被搬运、被验证。同一种关系(性别翻转、单复数、首都-国家……)会在空间里对应差不多同一个方向,这不是因为有人把这个方向硬编码进去,而是词向量的训练目标本身(用一个词去预测它周围会出现哪些词)逼出来的副产品——出现在相似上下文里的词,会被越推越近;共享同一种"语义变换"的词对,位移方向会越来越一致。
35
+
36
+ **怎么用**:拿到三个词的向量,做一次加减法,得到一个新的点,再在整个词表里找离这个新点**余弦最近**的词——这才是真正的"类比"操作,不是去查表找"精确等于"哪个词,而是"这个点周围站着谁"。
37
+
38
+ **例子**:见下面动手部分,我们会把这个式子从"听起来对"变成亲手跑出来的数字。
39
+
40
+ ### 3. 动手实操:从零搭一个十词迷你语义空间(不需要装任何库,纯 Python 就能跑)
41
+
42
+ 这是我们自己设计的一个玩具练习,跟 CS224N 真实的作业题无关——目的是让你在最短时间内、用最少的代码,亲手摸到"距离几何"这四个字到底在算什么。
43
+
44
+ **Step 1|手工给 10 个词分配 4 维坐标。**
45
+ 我们自己定义 4 个语义轴的含义:`[royalty(平民-1~皇室1), gender(女-1~男1), species(动物-1~人类1), age(幼年-1~成年1)]`。注意:这 4 个轴的意思是**我们自己规定的**,真实模型训练出来的向量里可不会有这么整齐的"人类可读"维度——这点后面会专门讲。
46
+
47
+ ```python
48
+ words = {
49
+ "king": [ 1, 1, 1, 1],
50
+ "queen": [ 1, -1, 1, 1],
51
+ "prince": [ 1, 1, 1, -1],
52
+ "princess": [ 1, -1, 1, -1],
53
+ "man": [-1, 1, 1, 1],
54
+ "woman": [-1, -1, 1, 1],
55
+ "boy": [-1, 1, 1, -1],
56
+ "girl": [-1, -1, 1, -1],
57
+ "dog": [-1, 1, -1, 1],
58
+ "puppy": [-1, 1, -1, -1],
59
+ "cat": [-1, -1, -1, 1],
60
+ "kitten": [-1, -1, -1, -1],
61
+ }
62
+ ```
63
+
64
+ **Step 2|手写点积、模长、余弦相似度——不引入 numpy,纯 Python 三个函数就够。**
65
+
66
+ ```python
67
+ def dot(a, b):
68
+ return sum(x * y for x, y in zip(a, b))
69
+
70
+ def norm(a):
71
+ return dot(a, a) ** 0.5
72
+
73
+ def cosine(a, b):
74
+ return dot(a, b) / (norm(a) * norm(b))
75
+ ```
76
+
77
+ 为什么这样写:点积衡量"两个向量在同一方向上重叠了多少",除以两个向量各自的模长,就是把"长度"这个跟语义无关的因素去掉,只留下"方向像不像"。
78
+
79
+ **Step 3|热身:验证"直觉上近的词"算出来是不是真的近。**
80
+
81
+ ```python
82
+ print(cosine(words["dog"], words["puppy"])) # 同物种,只差 age 一个轴
83
+ print(cosine(words["dog"], words["queen"])) # 物种、皇室、性别全不搭
84
+ ```
85
+
86
+ 你应该观察到:`dog` 和 `puppy` 的余弦值明显更高,`dog` 和 `queen` 的余弦值很低甚至是负数。这一步是在确认你的相似度函数没写错、也确认"离得近的数字"确实对应"直觉上像的词"——先建立信任,再去做更有意思的运算。
87
+
88
+ **Step 4|正式做那个经典运算:king − man + woman。**
89
+
90
+ ```python
91
+ def vec_add(a, b):
92
+ return [x + y for x, y in zip(a, b)]
93
+
94
+ def vec_sub(a, b):
95
+ return [x - y for x, y in zip(a, b)]
96
+
97
+ target = vec_add(vec_sub(words["king"], words["man"]), words["woman"])
98
+ print(target)
99
+ ```
100
+
101
+ 做完这步,你会得到一个新的坐标点`target`——它不是词表里任何一个词本来的向量,是我们凭空算出来的一个新位置。
102
+
103
+ **Step 5|在整张词表里,找离 target 余弦最近的词(把 king/man/woman 这三个输入词本身排除掉,不然它们会自己抢答案)。**
104
+
105
+ ```python
106
+ candidates = {w: v for w, v in words.items() if w not in ("king", "man", "woman")}
107
+ ranked = sorted(candidates.items(), key=lambda kv: cosine(target, kv[1]), reverse=True)
108
+ for w, v in ranked:
109
+ print(w, round(cosine(target, v), 3))
110
+ ```
111
+
112
+ 你应该观察到:排在第一位的是 `queen`,余弦相似度是满分 1.0;第二名会是 `princess`(同样是"皇室 + 女性",只是年龄轴不同)。这正是这节课要你亲眼确认的事——**这套算术不是在"精确匹配"哪个词,而是在做一次最近邻搜索**,`queen` 只是恰好落在离 target 最近的位置,不是被"算等号"出来的。
113
+
114
+ **Step 6(选做,检验泛化性)|换一组词对,验证同一个"性别翻转"方向在别的语义类别里是否也一致。**
115
+ 试试 `puppy - dog + cat`,你应该会算出一个精确落在 `kitten` 上的点——这说明我们手工设计的"性别/年龄"这两个轴,在人类和动物这两类词之间是**同一套位移逻辑**,这正是"关系=位移"这句话字面意思的体现。
116
+
117
+ ### 4. 延伸一步:如果这些维度不是我们编的,而是模型自己"学"出来的呢
118
+
119
+ 上面这套练习里,每个词的坐标是我们手工填的——这是为了让你先看清"距离几何"这套运算方式,而不用一上来就啃训练算法。但真实的词向量(比如 word2vec、GloVe,以及后面课程会讲的 Transformer 里的 embedding 层)没有人告诉模型"第几维是皇室、第几维是性别",这些方向是模型在几亿甚至几百亿词的语料上,单纯靠"预测一个词周围会出现哪些词"这个任务,自己在训练过程里把语义关系"挤"进空间几何结构里的——king 和 queen 因为经常出现在相似的上下文里(宫廷、王位、加冕……)会被越推越近,而"king 到 queen"和"man 到 woman"这种性别翻转,因为在语料里反复以类似的方式出现,最终对应了大致相同的位移方向。如果你想亲眼看看这个现象在真实语料训练出来的向量上是不是依然成立,可以后续装一个 `gensim` 库,加载一份预训练好的 GloVe 向量,跑同样的 `most_similar(positive=["king","woman"], negative=["man"])` 逻辑——这是留给你的一个可选延伸方向,不是这节课的必做部分。
120
+
121
+ ## 带学生读 source
122
+ 这节课的手算练习是原创的,但"Word Vectors"本身在 CS224N 官方教学大纲里是一节正式课时,紧跟在"History of NLP"之后——建议你去 [CS224N 官方主页](https://web.stanford.edu/class/cs224n/) 的 Schedule 里确认一下它在整个课程地图里的位置,再去 [CS224N 2024 讲课录像播放列表](https://www.youtube.com/playlist?list=PLoROMvodv4rOaMFbaqxPDoLWjDaRAdP9D) 里找到对应那一讲,看看真实训练 word2vec/GloVe 这类向量时用的目标函数和算法细节——我们这节课只带你摸到了"算出来之后长什么样",训练过程本身是下一层的内容,值得专门花时间啃一遍。
123
+
124
+ ## 金句
125
+ 本课暂无可靠可引用的原话金句——不编造。
126
+
127
+ ## 讲完这节,你应该能答上(可选巩固 · 别逐题盘问、别当门槛)
128
+ 1. **Q:为什么 "king − man + woman" 这种向量算术,能大致找到 "queen"?**
129
+ - 好答案信号:能说出训练目标(预测周围词)让语义相近的词彼此靠近,而"同一种关系"(比如性别翻转)在不同词对之间往往对应大致一致的位移方向,所以从 king 出发,沿着"从 man 到 woman"这段位移走一步,大概率会落在语义相关的区域附近——不是精确等式,是最近邻。
130
+ 2. **Q:为什么判断两个词向量"像不像",常用余弦相似度而不是直接算两点之间的直线距离?**
131
+ - 好答案信号:能说出余弦相似度只看方向、不看长度,能排除"某些词向量整体偏长/偏短"这类跟语义无关的尺度差异干扰,更纯粹地反映"方向上"的语义接近程度。
132
+ 3. **Q:我们手搭的十词迷你空间,和真实 word2vec/GloVe 训练出来的向量,本质区别在哪?**
133
+ - 好答案信号:能说出手搭的空间是我们自己提前设计好每个维度的含义、手动填数字;真实模型是从海量语料的共现统计里,用无监督的方式自己"学"出这些方向,没有人预先规定第几维代表什么——这正是 representation learning 的核心思想。
134
+
135
+ ## 常见误解(听到就纠正)
136
+ ❌ "king − man + woman 算出来,正好精确等于 queen 这个词的向量" → 不对,绝大多数情况下算出来的新坐标不会跟 queen 的向量完全重合(我们的玩具例子因为是手工设计的整数坐标才出现了精确命中,这是特例不是常态)。真实操作永远是"在整个词表里找离这个新坐标余弦最近的词",queen 只是恰好离得最近,是一次最近邻搜索的结果,不是解方程算出来的精确解。
137
+
138
+ ❌ "embedding 的每一个维度,都对应一个人能看懂的语义标签,比如第 5 维就是'皇室程度'" → 我们这节课的玩具例子确实是这么设计的,但那是为了教学方便。真实模型训练出来的向量,每个维度单独看往往毫无意义,语义是**分布式地**编码在很多维度的组合里的,没有哪个维度能被单独贴上一个人类词汇的标签——这也是"distributed representation"这个说法的由来。
139
+
140
+ ❌ "这种类比效果这么惊艳,说明模型已经'理解'了语义关系" → 更准确的说法是,模型捕捉到的是语料里的统计规律,而不是概念层面的理解。这类广为流传的类比例子往往是精心挑选出来效果好的成功案例,真实测试会发现大量类比会失败、甚至复现出语料里带有的社会偏见(比如某些职业词和性别词之间会出现不该有的强关联)。这提醒我们:词向量反映的是"语料里词怎么共同出现",不是"世界真实是怎样的"。
141
+
142
+ ## 收尾 & 排下一课
143
+ 这节课你亲手跑通了一次"词 → 向量 → 距离 → 类比"的完整链路,把"king-man+woman≈queen"从一句流传很广的段子,变成了自己算出来、能解释每一步为什么这么算的结果。记一下进度:这节是动手课,重点不在记住某个公式,而在于你现在应该能对着任意一组词向量,说清楚"离得近"和"关系一致"分别在算什么。按 CS224N 官方大纲的顺序,Word Vectors 之后紧跟的正式课时是 Backpropagation and Neural Network Basics(神经网络与反向传播基础)——默认下一课会往那个方向走,讲清楚这些向量本身是怎么被"训练"出来的。如果你在这节课里对"为什么用余弦相似度、向量代数的直觉"还不太稳,也可以先岔出去补一节线性代数直觉再回来,完全不影响进度。
@@ -0,0 +1,84 @@
1
+ # 深度学习与自然语言处理(NLP with Deep Learning) · 第 4 课:从 CS224N 到 ChatGPT——这门课怎么长成了今天的世界
2
+
3
+ > source: [CS224N 官网 schedule 页面](https://web.stanford.edu/class/cs224n/) | [CS224N 2024 官方 YouTube 讲课全集](https://www.youtube.com/playlist?list=PLoROMvodv4rOaMFbaqxPDoLWjDaRAdP9D) | 类型:延伸阅读 | 前置:`cs224n/03-lab-embedding-geometry`
4
+ > 教法遵循 `references/pedagogy.md`:像课本一样把概念讲透、给足,不盘问、不当门槛。
5
+
6
+ ## 一句话本质(开场钩子)
7
+ **CS224N 的课程表不是在讲"过去"的 NLP 历史,它本身就是 ChatGPT 的技术说明书**——从 word vectors 到 Transformer,再到 pretraining、post-training、agent,每一步都对应你今天打开 ChatGPT 或 Claude 时,背后真实在发生的事情。
8
+
9
+ ## 为什么要在乎(钩子展开)
10
+ 上一课你亲手玩过 embedding 空间的几何——king − man + woman ≈ queen。你当时可能会想:这只是个好玩的数学玩具吗?答案是不会:那个向量空间,正是今天所有大语言模型内部处理语言的方式的原始版本。
11
+
12
+ CS224N(斯坦福现由 Diyi Yang 与 Yejin Choi 主讲)这门课的完整 topic 列表长这样:History of NLP → Word Vectors → Backpropagation → Language Models and RNNs → Transformers → Pretraining(规模/系统/数据)→ Post-training(RLHF/SFT/DPO)→ Efficient Adaptation(Prompting + PEFT)→ Agents, Tool Use, and RAG → Benchmarking → Reasoning → Tokenization and Multilinguality → Interpretability → Social Impacts → Multimodality。把这份清单从头念到尾,你会发现它几乎就是按"ChatGPT 是怎么一步步被造出来的"这条时间线在排课。这节课就带你把这条线连起来:一所大学的研究生课,怎么就变成了今天几亿人每天在用的产品的说明书。
13
+
14
+ ## 核心概念(逐个讲透,内容给足)
15
+
16
+ ### 1. 词向量到 Embedding:所有现代语言模型的地基
17
+ **是什么**:word2vec、GloVe 这类"词向量"方法,把每个词表示成一个几十到几百维的稠密向量,向量之间的几何关系(距离、方向)编码了词与词之间的语义关系。
18
+
19
+ **为什么重要**:这是一次范式转变——在此之前,NLP 处理"词"靠的是符号(比如 one-hot 编码,词与词之间没有任何数值关系);有了词向量之后,语言第一次能被神经网络当作**连续数值**来处理、求导、优化。没有这一步,后面所有基于梯度下降训练的深度学习模型都无从谈起。
20
+
21
+ **怎么用/落到哪**:今天每一个 LLM(GPT、Claude、Llama……)的第一层,仍然是一张 embedding 查找表——只是维度从 word2vec 的三百维涨到了几千维,而且不再是"一个词一个固定向量",而是经过 Transformer 的自注意力之后,同一个词在不同句子里会被赋予不同的向量(术语叫 contextual embedding)。静态词向量是起点,动态上下文向量是今天的现实。
22
+
23
+ **例子**:上一课你算过 king − man + woman ≈ queen,这正是 GPT 系列模型内部每个 token 被扔进高维空间之后,同类概念仍然会"聚在一起"的最原始形态——只是现在这个空间维度更高、还会随上下文实时变形,不再是查表就能一劳永逸拿到的静态坐标。
24
+
25
+ ### 2. Transformer:把"顺序处理"换成"注意力"
26
+ **是什么**:2017 年提出的架构,核心机制是 self-attention——处理序列里的每个 token 时,模型直接"看"整个序列里的所有其它 token,用注意力权重决定该重点参考谁,而不是像 RNN 那样必须按顺序一步步往后传信息。
27
+
28
+ **为什么重要**:RNN/LSTM 有两个硬伤——句子一长,早期信息就在层层传递里被稀释掉(长距离依赖问题);而且它必须一步步算,没法并行,训练慢。Transformer 用"并行的注意力计算"同时解决了这两个问题:不仅长距离依赖不再衰减,还让 GPU/TPU 可以大批量并行训练。**没有 Transformer 的并行性,今天几千亿参数的模型根本训不出来**——这不是锦上添花的改进,是能不能把模型规模推上去的硬件前提。
29
+
30
+ **怎么用/落到哪**:今天几乎所有主流 LLM 的骨架都是 Transformer 的 decoder-only 变体。CS224N 把 Transformer 直接排在 Language Models and RNNs 之后,就是特意让学生亲眼看到"RNN 为什么被淘汰、Transformer 怎么补上这个洞"。
31
+
32
+ **例子**:读一句"The animal didn't cross the street because it was too tired",模型要判断"it"指的是 animal 还是 street。self-attention 能让"it"这个 token 直接对"animal"打出高权重,无论它们之间隔了多少个词——这是靠顺序一步步传递信息的 RNN 很难稳定做到的。
33
+
34
+ ### 3. Pretraining:规模怎么变成了智能
35
+ **是什么**:在做任何具体任务(对话、问答、翻译)之前,先用互联网规模的海量文本,让模型反复做一件极简单的事——预测下一个 token 是什么。这个阶段不需要人工标注,数据是自监督生成的,规模可以无限堆。
36
+
37
+ **为什么重要**:这是"规模怎么变成智能"的核心机制。业内观察到的 scaling laws 发现:只要按比例同时增加参数量、数据量、训练算力,模型的 loss 会持续、平滑地下降,同时在某些能力上会出现"涌现"(emergent abilities)——比如原本不会的简单推理、few-shot 模仿,规模过了某个门槛之后突然就会了。GPT-3、GPT-4 这些"底座模型"(base model)的绝大部分能力,几乎都是靠这一步硬堆参数和数据堆出来的,不是靠某个精巧的算法 trick。
38
+
39
+ **怎么用/落到哪**:这一步训出来的模型叫 base model 或 pretrained model——它非常擅长"续写",但还不懂"对话"这回事。如果你直接问一个纯 pretrained 的模型一个问题,它大概率不会乖乖回答你,而是把你的问题当成一段网络文本的开头,继续生成更多看起来相似的文字(比如把问题当论坛帖子标题,续写出更多同类问题,而不是答案)。
40
+
41
+ **例子**:GPT-3 刚发布时基本就是这样一个纯 pretrained 模型,用户得靠很讲究的 prompt 技巧(所谓 prompt engineering)哄着它才能套出像回答的东西。而 ChatGPT 能直接跟你自然对话,靠的不是这一步,而是下一步。
42
+
43
+ ### 4. Post-training(SFT + RLHF + DPO):GPT 怎么变成了 ChatGPT
44
+ **是什么**:post-training 通常按顺序做两三件事:
45
+ - **SFT(Supervised Fine-Tuning,监督微调)**:找人写一批"问题 → 理想回答"的示范对话数据,让模型在这批数据上继续训练,教会它"该用对话的样子回应",而不是自由续写。
46
+ - **RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)**:让模型对同一个问题生成多个候选回答,人类标注员对这些回答排序打分,用这些偏好数据训练一个"奖励模型"(reward model),再用强化学习(经典做法是 PPO)让模型学着生成奖励模型打分更高的回答。
47
+ - **DPO(Direct Preference Optimization,直接偏好优化)**:是 RLHF 的一个更轻量的替代方案——跳过"单独训练奖励模型 + 跑强化学习"这两个复杂又不稳定的环节,直接用人类偏好数据对模型做一次优化,效果接近但工程复杂度低很多,是近两年不少团队转向的做法。
48
+
49
+ **为什么重要**:这才是"ChatGPT"这个名字里"Chat"两个字真正的技术出处。同一个底座模型,做完 post-training 前后判若两个产品——你今天感受到的"有礼貌""会拒绝有害请求""回答格式工整""语气像个助手而不是续写机器",几乎全部来自这一步,而不是 pretraining。
50
+
51
+ **怎么用/落到哪**:可以粗略这样分工——pretraining 决定模型"懂多少、会不会推理",post-training 决定模型"愿不愿意好好跟你说话、说得对不对你的胃口"。理解了这一点,你就理解了为什么同一批公司会同时投入巨大成本在两件事上:堆更大的 pretraining、以及打磨更精细的对齐数据。
52
+
53
+ **例子**:同一个底座 GPT 模型,不做 post-training 时你问它"帮我写封辞职信",它可能续写出一堆无关的论坛讨论;做完 SFT + RLHF 之后,同样的问题会直接给你一封结构完整的辞职信——这就是 post-training 这一步实打实改变的东西。
54
+
55
+ ### 5. Agents, Tool Use, RAG:今天的 AI 世界从这里长出来
56
+ **是什么**:让模型不再只是"吐文字",而是能调用外部工具(搜索、代码执行、API)、检索外部知识库(Retrieval-Augmented Generation,检索增强生成)、甚至自己规划分解多步任务(agent)。
57
+
58
+ **为什么重要**:pretraining 给了模型知识和语言能力,post-training 给了它对话的礼仪,但这两者都有硬伤——模型的知识永远停在训练数据的截止日期,而且它自己没法真的帮你点一下鼠标、发一封邮件、跑一段代码。Agent / 工具调用 / RAG 这一层,是把一个"聊天很厉害的大脑"接上"手脚和实时信息",这正是这两年从 ChatGPT 插件、到检索增强问答、到各种 AI agent 产品爆发的技术根子。
59
+
60
+ **怎么用/落到哪**:你现在正在用的这套课程本身,背后跑的就是一个活生生的 agent——它会主动调用工具去查资料、跑代码、核实事实,而不是纯靠 pretraining 阶段记住的知识硬答。CS224N 把 Agents, Tool Use, and RAG 正式列进了当前版本的课程表,说明斯坦福自己也认定"agent 能力"已经是这门课绕不开的一块,而不是可有可无的选修彩蛋。
61
+
62
+ **例子**:你问一个只做过 pretraining + post-training、没有工具能力的模型"今天几号",它只能凭训练数据里的印象瞎猜;一个接了工具的 agent 会直接调用系统查真实日期再回答你——这就是 agent 范式和纯聊天模型最直观的区别。
63
+
64
+ ## 带学生读 source
65
+ 去 [CS224N 官网](https://web.stanford.edu/class/cs224n/) 把 schedule 页面完整扫一遍——19 讲的顺序几乎就是按"ChatGPT 是怎么被一步步造出来的"这条时间线在排:从 word vectors 一路排到 pretraining、post-training、agents。如果想看真人讲课,官方在 [YouTube 放了完整讲课视频](https://www.youtube.com/playlist?list=PLoROMvodv4rOaMFbaqxPDoLWjDaRAdP9D),建议直接挑 pretraining 和 post-training 那两讲对着看——是这门课离"解释 ChatGPT 到底怎么来的"最近的两节。
66
+
67
+ ## 金句(引用时标出处)
68
+ 本课暂无可靠可引用的原话金句——不编造。
69
+
70
+ ## 讲完这节,你应该能答上(可选巩固 · 别逐题盘问、别当门槛)
71
+ 1. **Q:pretraining 和 post-training 分别决定了模型的哪部分能力?**
72
+ - 好答案信号:能说清 pretraining 决定"懂多少、语言和知识能力从哪来",post-training(SFT/RLHF/DPO)决定"愿不愿意好好对话、对齐得像不像一个助手",两者不是一回事。
73
+ 2. **Q:为什么 Transformer 能训出比 RNN 大得多的模型?**
74
+ - 好答案信号:能提到 self-attention 让序列处理可以并行、不再必须按顺序一步步算,这是能把参数量和数据量堆上去的硬件前提。
75
+ 3. **Q:RLHF 和 DPO 是什么关系?**
76
+ - 好答案信号:知道两者目标一致(用人类偏好数据对齐模型),但 RLHF 要先训奖励模型再跑强化学习(PPO),DPO 是跳过这两步、直接用偏好数据优化的更轻量方案。
77
+
78
+ ## 常见误解(听到就纠正)
79
+ - ❌"ChatGPT 是一个凭空冒出来的全新黑科技,跟大学课程没关系" → 其实 ChatGPT 背后每一个技术组件——word vectors、Transformer、pretraining、RLHF——都是 NLP 研究和课程里早就在系统教授的内容。ChatGPT 是把这些组件工程化、规模化、产品化之后的集成产物,不是无中生有的发明。
80
+ - ❌"RLHF 就是 ChatGPT 的全部秘密" → RLHF 只是 post-training 阶段的一环,真正的能力大头来自 pretraining 阶段吃下的海量数据和参数规模。post-training(SFT/RLHF/DPO)做的是"对齐"——调整模型的输出风格、安全边界、有用程度,而不是从零教会模型语言能力或知识。
81
+ - ❌"Transformer 是 CS224N 这门课发明的" → Transformer 架构来自 2017 年的独立研究成果,CS224N 是紧跟着把它系统化教给学生的课堂之一,"教什么"和"发明什么"是两回事——但这门课确实是全球最早、最系统把这整条技术线讲透的课堂之一。
82
+
83
+ ## 收尾 & 排下一课
84
+ 这节课把 CS224N 的课程表和 ChatGPT 的技术谱系对齐了一遍:词向量打地基、Transformer 换引擎、pretraining 堆规模、post-training 做对齐、agent 接手脚——这五步连起来,就是"这门课教的东西怎么变成了今天的世界"的完整答案。如果这节你听得意犹未尽,下一课默认可以往 post-training 细节(SFT/RLHF/DPO 三者的取舍)或 Agents/RAG 实操方向深挖;如果你更想先巩固基础,可以回头把 03 课的 embedding 几何练习再多玩几组向量,把地基踩实再往上走。
@@ -0,0 +1,87 @@
1
+ # 机器学习(Machine Learning) · 第 1 课:监督学习是什么——从"拟合一条线"到机器学习的本质
2
+
3
+ > source: [CS229 官方课程主页](https://cs229.stanford.edu/) | [CS229 教学大纲与课程安排(syllabus)](https://cs229.stanford.edu/syllabus-new.html) | [Stanford Engineering Everywhere:Andrew Ng 主讲的公开版 CS229](https://see.stanford.edu/Course/CS229) | 类型:讲授(概念) | 前置:无
4
+ > 教法遵循 `references/pedagogy.md`:像课本一样把概念讲透、给足,不盘问、不当门槛。
5
+
6
+ ## 一句话本质(开场钩子)
7
+ 机器学习说到底就是让计算机自己从数据里"画出一条线"——监督学习就是你先喂给它一堆"问题 + 正确答案"的例子,让它自己把这条线(或更高维的东西)画准,画到能对没见过的新问题也给出靠谱答案为止。
8
+
9
+ ## 为什么要在乎(钩子展开)
10
+ 你大概率听过"机器学习""AI 模型"这些词被用得很玄——好像里面藏着什么不可理解的黑箱智能。但机器学习最早、最基础的那个问题,其实朴素到你在中学就见过影子:给你一堆点,画一条尽量贴近这些点的直线。CS229 这门课的大纲把"Supervised learning setup, linear regression"排在整门课最前面的位置——不是因为线性回归多有用(现实问题很少真的是直线关系),而是因为把"怎么从数据里自动画出一条最优的线"这个流程搞透了,你就拿到了理解后面所有更复杂模型(逻辑回归、神经网络、大语言模型……)的钥匙。这节课不讲代码、不讲调参技巧,就讲清楚这一件事:机器"学习"到底是在学什么、怎么学、学的标准是什么。
11
+
12
+ ## 核心概念(逐个讲透,内容给足)
13
+
14
+ ### 1. 监督学习的问题设定:从"数据"到"预测"
15
+ **是什么**:监督学习就是给算法一堆"已经知道正确答案"的例子(训练集),每条例子是一个输入 x 和对应的正确输出 y,算法的任务是从这些例子里总结出一条规律(术语叫"假设函数" h),使得面对没见过的新输入,也能给出靠谱的预测 y。
16
+
17
+ **为什么重要**:这是区分监督学习和其它机器学习范式的核心分界线。监督学习需要"标签"(label)——每条训练数据都自带正确答案;这跟无监督学习(数据没有标签,模型自己找结构,比如做人群聚类)和强化学习(没有标准答案,只有延迟的"奖励"信号)完全不同。CS229 的教学大纲把 "Introduction and basic concepts of machine learning" 和 "Supervised learning setup, linear regression" 放在最前面讲,不是巧合——几乎后面所有更复杂的方法(逻辑回归、SVM、神经网络……)都是在这同一个问题设定下,换了不同的"假设函数"和"衡量好坏的办法"而已。搞懂这个设定,后面的课都是在同一个骨架上加肉。
18
+
19
+ **怎么用/落到哪**:现实中只要问题能写成"给定 x,预测 y",并且你手上有一批"x 和对应正确 y"的历史数据,就是监督学习能派上用场的场景——房价预测、邮件是不是垃圾邮件、明天股价涨跌、图片里是不是猫,都是这个模子。y 是连续数值(比如价格)时叫"回归"问题,y 是有限几个类别(比如"是/否")时叫"分类"问题——这节课先讲回归这条线,分类留到下一课的逻辑回归。
20
+
21
+ **例子**:假设你手上有过去 100 套北京二手房的成交记录,每条记录写着"面积 x 平米,成交价 y 万元"。这就是一份标准的监督学习训练集——你想要的模型,是喂给它一个新房子的面积,能吐出一个靠谱的价格估计。
22
+
23
+ ### 2. 假设函数与线性回归:先从一条直线开始
24
+ **是什么**:线性回归假设 x 和 y 之间的关系可以用一条直线(更高维时是一个平面或超平面)来近似描述——"面积每多一平米,价格大概多涨一个固定数"。这条线由两个参数决定:截距(起始基础价)和斜率(每单位 x 带来的 y 变化量),机器学习要做的,就是从数据里"学出"这两个数字。
25
+
26
+ **为什么重要**:线性回归是整个机器学习里最简单、最基础的模型,但地位一点都不低——它是后面几乎所有模型的第一块积木。逻辑回归是在线性回归外面套一层函数,把输出压到 0-1 之间;神经网络的每一层,本质上也是一堆线性组合叠在一起,再套一个非线性函数。CS229 把线性回归放在第一课,不是因为它现实中够用(真实问题往往不是简单的直线关系),而是因为搞懂"线性回归怎么被训练出来"这一整套流程(设定问题、定义好坏、找最优),之后遇到任何更复杂的模型,都是同一套流程换了零件。
27
+
28
+ **怎么用/落到哪**:只要你怀疑 x 和 y 之间大致是"越多越……、按比例变化"的关系,线性回归就是第一个该试的模型——它计算快、可解释性强(你能直接说出"每平米大概多贵多少钱"),也常被用作检验更复杂模型是否真的有必要的基准线(baseline)。
29
+
30
+ **例子**:回到北京二手房的例子,如果学出来的直线是"价格 = 200 + 8 × 面积"(单位万元,随手编的数),那这条线在说:不管面积多少,基础价 200 万打底,之后每多 1 平米多加 8 万。给一个新房子 90 平米,模型直接算出 200 + 8×90 = 920 万的预测价。
31
+
32
+ ### 3. 代价函数:怎么量化"这条线画得好不好"
33
+ **是什么**:光有一条线还不够——你需要一把尺子,衡量"这条线预测得准不准"。这把尺子在机器学习里叫代价函数(cost function,也叫损失函数 loss function)。线性回归最常见的做法很直白:对训练集里每一条数据,算一下模型预测值和真实值差了多少,把这个差值平方(防止正负抵消,也让偏差大的错误被放大惩罚),再把所有数据的这个平方差取平均——平均误差越小,说明这条线拟合得越好。
34
+
35
+ **为什么重要**:代价函数把"这个模型好不好"这个模糊的问题,变成了一个具体的数字。机器学习的训练过程,本质上就是"不断调整参数,让这个数字变得尽可能小"的过程。没有代价函数,你没法比较两条直线哪条更好,也没法让计算机自动去找最优参数——因为计算机需要一个明确、可计算的目标去优化,不能靠"感觉哪条线看起来更顺眼"。
36
+
37
+ **怎么用/落到哪**:不同类型的问题会用不同的代价函数(分类问题常用交叉熵而不是平方差),但"用一个数字衡量预测和真实的差距,然后想办法让这个数字变小"这个思路,贯穿几乎所有监督学习模型,是理解后面任何"训练"过程的钥匙。
38
+
39
+ **例子**:还是北京二手房——如果你的直线预测某套 90 平米的房子该卖 920 万,但它实际成交价是 950 万,这一条数据的误差就是 30 万,平方之后是 900。代价函数就是把 100 套房子这样的误差平方都算一遍,取一个平均数,这个平均数就是这条线当前的"总分"(越低越好)。
40
+
41
+ ### 4. 梯度下降:机器怎么自己把这条线画准
42
+ **是什么**:现在问题变成了——代价函数是关于两个参数(截距、斜率)的一个函数,你想找到让这个函数最小的那组参数值。梯度下降(gradient descent)是解决这个问题最常用的办法:从一组随便猜的参数开始,每一步都沿着让代价函数下降最快的方向,小步挪动参数的数值,重复很多次,直到代价函数几乎不再下降为止。
43
+
44
+ **为什么重要**:这是"机器学习"里"学习"两个字真正发生的地方。之前的假设函数、代价函数都只是把问题"摆出来",梯度下降才是那个真正自动找答案的算法——它不需要人手动去试每一种参数组合(现实中参数一多,穷举根本算不完),而是像蒙着眼睛下山:你摸不清全局地图,但能感觉到脚下哪个方向是往下走的,一步一步挪,最终能走到(至少是)一个山谷底部。
45
+
46
+ **怎么用/落到哪**:梯度下降不是线性回归专属的,而是几乎整个现代机器学习(包括训练神经网络、大语言模型)背后共用的优化算法——区别只在于代价函数长什么样、参数有多少个。理解了线性回归里两个参数的梯度下降,就理解了千亿参数的大模型训练在数学骨架上是同一件事,只是规模大了几个数量级。
47
+
48
+ 一个简单的伪代码能把这个过程钉住:
49
+ ```
50
+ 重复直到收敛:
51
+ 对每个参数 θ:
52
+ θ = θ - 学习率 × (代价函数关于 θ 的变化方向)
53
+ ```
54
+ 这里"学习率"控制每一步挪多大——步子太大容易在最优点附近来回震荡甚至发散,步子太小则要挪很久很久才能到。
55
+
56
+ **例子**:一开始你瞎猜"价格 = 0 + 0 × 面积"(完全没道理的起点),算出来代价函数很大。梯度下降会告诉你:把截距稍微调大一点、斜率也调大一点,代价函数会变小——于是你挪一步,再算一次方向,再挪。重复几十上百次之后,参数会稳定收敛到接近"200 + 8×面积"这样靠谱的直线附近。
57
+
58
+ ### 5. 监督学习的边界:这节课埋下的下一步
59
+ **是什么**:监督学习自己内部还分两大类——预测连续数值(回归,这节课讲的线性回归)和预测有限类别(分类,比如判断一封邮件是不是垃圾邮件、一张照片里是不是猫)。而监督学习本身,只是机器学习三大范式之一——旁边还站着无监督学习(数据没有标签,模型自己找规律,比如给用户做人群聚类)和强化学习(没有标准答案,只有"做对了给奖励、做错了给惩罚"的延迟反馈,常用在游戏、机器人控制、对话模型的对齐训练里)。
60
+
61
+ **为什么重要**:分清这三者的边界,能让你面对一个新问题时第一步就问对问题——"我手上有没有标注好答案的数据?"如果有,监督学习是默认起点;如果没有标签但想找结构,是无监督学习的地盘;如果问题是"一连串决策,事后才知道好不好",才轮到强化学习登场。CS229 后续的课程大纲清楚地按这三条线展开:先是监督学习的一整套方法(线性回归、逻辑回归、SVM、神经网络……),再是无监督学习(K-means、EM、PCA……),最后是强化学习(MDP、Q-learning……)——这节课站在最开头,是理解整门课地图的第一块拼图。
62
+
63
+ **怎么用/落到哪**:下节课要讲的逻辑回归,其实还是监督学习——只是把"预测连续数值"换成了"预测类别",用的还是这节课的整套骨架(假设函数、代价函数、梯度下降),只是三个零件都换了个版本。提前知道这一点,下节课你会发现自己不是在学全新的东西,而是在同一个框架里换零件。
64
+
65
+ **例子**:同样是"根据房屋数据做预测",预测"这套房子卖多少钱"是监督学习里的回归问题(这节课);预测"这套房子 30 天内能不能卖出去(能/不能)"是监督学习里的分类问题(下节课的方向);而如果没人告诉你任何房子的价格或是否卖出,只给你一堆房子的特征数据,让模型自己把相似的房子分成几类,那就是无监督学习的地盘了。
66
+
67
+ ## 带学生读 source
68
+ 这节课覆盖的正是 CS229 教学大纲里最前面的两块——"Introduction and basic concepts of machine learning"和"Supervised learning setup, linear regression",完整的 20 讲清单可以去 [CS229 syllabus 页面](https://cs229.stanford.edu/syllabus-new.html)扫一遍。想看真人怎么在黑板上一步步推出线性回归和梯度下降,去 [Stanford Engineering Everywhere 上的 CS229 公开版页面](https://see.stanford.edu/Course/CS229)——这是 Andrew Ng 主讲的原始公开版本,20 讲全部可免费下载,第 1-2 讲对应的正是这节课讲的内容。
69
+
70
+ ## 金句(引用时标出处)
71
+ 本课暂无可靠可引用的原话金句——不编造。
72
+
73
+ ## 讲完这节,你应该能答上(可选巩固 · 别逐题盘问、别当门槛)
74
+ 1. **Q:监督学习和无监督学习最本质的区别是什么?**
75
+ - 好答案信号:能说清"训练数据是否带标签(正确答案)"是分界线——监督学习靠 label 学出输入到输出的映射关系,无监督学习没有 label,靠数据本身的结构自己找规律。
76
+ 2. **Q:代价函数和梯度下降分别在训练过程里扮演什么角色?**
77
+ - 好答案信号:代价函数是"用来衡量当前参数好不好的一把尺子",梯度下降是"根据这把尺子的读数,一步步调整参数让读数变小的算法"——一个定义目标,一个负责找到达成目标的路径,两者缺一不可。
78
+ 3. **Q:为什么说线性回归"看起来简单",但理解它的价值不小?**
79
+ - 好答案信号:能说出后面几乎所有监督学习模型(逻辑回归、神经网络等)都是在同一套"假设函数 + 代价函数 + 梯度下降"骨架上换零件,搞懂线性回归这套流程,就是搞懂了整个监督学习训练范式的地基。
80
+
81
+ ## 常见误解(听到就纠正)
82
+ - ❌"机器学习是黑箱魔法,内部逻辑没法解释" → 至少在线性回归这个最基础的模型上,整个过程完全透明:假设函数是一条你能写出方程的直线,代价函数是你能手算的平均误差,梯度下降是一步步沿着确定方向挪动参数——三步都能摊开来看、手算验证,不存在任何"黑箱"。复杂模型的不可解释性,是规模和非线性堆叠出来的,不是这套流程本身就神秘。
83
+ - ❌"监督学习的'监督'是说要有人在旁边一直教、随时纠正模型" → "监督"指的是训练数据本身自带正确答案(label),这些答案往往是提前收集好、一次性喂给模型的;训练过程本身是算法自动跑梯度下降,不需要人在训练进行时时刻介入盯着。
84
+ - ❌"梯度下降就是把所有可能的参数组合都试一遍,挑出最好的那个" → 现实中参数动辄成百上千甚至上亿,穷举组合在计算上完全不可能;梯度下降的关键恰恰是不用穷举——它每一步只看当前位置往哪个方向挪能让代价函数下降最快,然后只走那一步,是"有方向的下山",不是暴力搜索。
85
+
86
+ ## 收尾 & 排下一课
87
+ 这节课把机器学习最基础的骨架立起来了:监督学习的问题设定、线性回归当第一个模型、代价函数当尺子、梯度下降当找答案的算法——这四块拼在一起,就是 CS229 后面十几讲反复复用的同一套流程。默认下一课会往逻辑回归方向走(CS229 大纲里紧跟着的"Logistic regression, Newton's method, perceptron, generalized linear models"),把"预测数值"换成"预测类别",复用同一套骨架换零件;如果你想先把这节的直觉再夯实一点,也可以自己手算一两组数据的梯度下降过程,再往下走。
@@ -0,0 +1,87 @@
1
+ # 机器学习(Machine Learning) · 第 2 课:从线性到逻辑——分类、决策边界,以及过拟合这道所有人都会踩的坑
2
+
3
+ > source: [CS229 官网](https://cs229.stanford.edu/)(课程说明、讲师信息)| [CS229 syllabus 排课页面](https://cs229.stanford.edu/syllabus-new.html)(20 讲的完整主题顺序,逻辑回归与偏差-方差权衡/正则化都在其中)| [Stanford Engineering Everywhere · CS229 公开版](https://see.stanford.edu/Course/CS229)(Andrew Ng 主讲、可免费看的原版 20 讲视频与讲义)| 类型:讲授(概念) | 前置:`cs229/01-supervised-learning-and-the-line`
4
+ > 教法遵循 `references/pedagogy.md`:像课本一样把概念讲透、给足,不盘问、不当门槛。
5
+
6
+ ## 一句话本质(开场钩子)
7
+ **分类问题不是"把回归换个输出"这么简单——你需要一个新工具把"任意实数"压成"0 到 1 之间的概率",而这个新工具一旦学多了、学"贼"了,就会掉进过拟合的坑:考试原题答得完美,换一道没见过的题就崩。**
8
+
9
+ ## 为什么要在乎(钩子展开)
10
+ 上一课你学的是拟合一条线——给一堆房子的面积和价格,画一条线穿过去,预测新房子多少钱。这是**回归**:输出是一个连续数字。
11
+
12
+ 但现实里更多问题问的不是"多少",而是"是不是":这封邮件是不是垃圾邮件?这张片子里的肿瘤是良性还是恶性?这笔交易是不是欺诈?这些问题的答案只有两类(或几类),不是一个连续数字。这叫**分类**(classification)。你可能会想:那还不简单,把线性回归的输出四舍五入一下不就行了?这一课要告诉你,这个直觉是错的,而且错得很有代表性——这正是 CS229 把"线性回归"和"逻辑回归"分成两节课讲的原因。讲完这道坎,我们再讲另一道几乎所有做机器学习的人都会踩的坑:模型练得太狠,练成了"背题家",一到新数据就露馅——这就是过拟合。
13
+
14
+ ## 核心概念(逐个讲透,内容给足)
15
+
16
+ ### 1. 从"拟合一条线"到"画一条分界线":为什么分类要换个模型
17
+ **是什么**:分类问题的目标不再是预测一个连续值,而是给每个样本判定它属于哪一类。最简单的情形是二分类——答案只有 0 或 1(是/否、垃圾/正常、恶性/良性)。
18
+
19
+ **为什么重要**:直接套用线性回归来做分类,会出两个实打实的问题。第一,线性回归的输出可以是任意实数——负一万到正一万都可能被算出来,但概率只能落在 0 到 1 之间,直接拿线性回归的输出当"是这一类的概率",数字本身就说不通。第二,也是更致命的一点:线性回归对**离群点极度敏感**。设想你在用肿瘤大小预测良性/恶性,训练数据里大多数恶性肿瘤都集中在中等偏大的尺寸区间,你拟合出一条线、定好一个阈值,分类效果还不错;这时候如果数据集里多出几个尺寸特别大的恶性样本,这条线为了照顾这些新点会整体往一个方向倾斜,阈值线跟着挪位置——结果是一些本来分类正确的中等尺寸样本,反而被这条"迁就了离群点"的线判错了。这说明线性回归的"拟合逻辑"(尽量让所有点到线的距离平方和最小)和分类问题真正要的逻辑(把两类样本尽量分开)根本不是一回事。
20
+
21
+ **怎么用/落到哪**:这个认知上的转弯,是理解整个监督学习谱系的关键节点——线性回归和逻辑回归看起来像两个相邻的模型,实际是两种目标:一个预测数值、一个预测类别归属的概率。CS229 把逻辑回归、感知机(perceptron)、以及更抽象的广义线性模型(generalized linear models)排在同一组里讲,就是因为它们都在回答同一个问题:怎么把线性回归那套"加权求和"的骨架,套上一个合适的输出层,让它适配不同类型的预测目标。
22
+
23
+ **例子**:还是拿肿瘤大小 vs 良性/恶性举例——横轴是肿瘤尺寸,纵轴是"是否恶性"(0 或 1)。真实数据画出来会是一群贴着 y=0 和一群贴着 y=1 的点,中间夹着一段过渡区。如果你用一条直线去拟合这堆 0/1 点,这条线会穿过过渡区,但**这条线本身不是一个好的分类器**——它对远处的离群点太敏感,稍微多几个极端样本,整条线(连同你设的判定阈值)都会跟着晃。你需要的不是一条直线,而是一条能"贴着 0 和 1 两头走、中间平滑过渡"的曲线。这正好引出下一个概念。
24
+
25
+ ### 2. 逻辑回归:把线性得分压成概率的 sigmoid 技巧
26
+ **是什么**:逻辑回归(logistic regression)的思路是:先像线性回归一样,把特征加权求和算出一个分数 z = θᵀx(这一步和线性回归完全一样),但不直接把这个分数当结果输出,而是丢进一个叫 **sigmoid(也叫 logistic 函数)** 的函数里再处理一遍:
27
+
28
+ `h(x) = 1 / (1 + e^(−θᵀx))`
29
+
30
+ 这个函数的形状是一条 S 形曲线:输入趋于负无穷时,输出趋于 0;输入趋于正无穷时,输出趋于 1;输入正好是 0 时,输出正好是 0.5。不管 θᵀx 算出来多大多小,塞进这个函数,出来的结果永远乖乖落在 (0, 1) 区间里——这才能名正言顺地当"属于这一类的概率"来用。
31
+
32
+ **为什么重要**:这一个函数解决了上一节提的两个问题。输出永远在 0 到 1 之间,可以直接当概率解释;而且 sigmoid 是一条平滑曲线,不是一条直线,两端会"压平",一个离群的极端样本(比如 θᵀx 算出来是 +50 还是 +500)经过 sigmoid 之后输出都几乎贴着 1,不会像线性回归那样让离群点使劲拽着整条拟合线跑偏。这就是为什么逻辑回归能扛住线性回归扛不住的那种离群点冲击。
33
+
34
+ **怎么用/落到哪**:训练逻辑回归,本质上是在找一组参数 θ,让模型对训练集里"真实是 1"的样本尽量输出接近 1 的概率、对"真实是 0"的样本尽量输出接近 0 的概率——这个优化目标叫**最大似然估计**,用梯度上升(或梯度下降配合负对数似然)来求解,和线性回归用梯度下降最小化平方误差是同一套优化框架,只是目标函数换了。这也是 CS229 把逻辑回归排在牛顿法(Newton's method)之前讲的原因——牛顿法是求解这套优化问题更快收敛的一种数值方法,先懂逻辑回归要优化什么,再学怎么更快地优化它。
35
+
36
+ **例子**:假设你训练出的模型对某个肿瘤样本算出 h(x) = 0.87,意思不是"这个肿瘤 87% 是恶性的一部分",而是"模型判断这个样本属于恶性类别的概率是 87%"。实际做判断时通常设一个阈值(默认 0.5):h(x) ≥ 0.5 就判定为恶性,否则判定为良性。这条"h(x) = 0.5 的界线",就是下一个概念的主角。
37
+
38
+ ### 3. 决策边界:模型在特征空间里画出的那条分界线
39
+ **是什么**:决策边界(decision boundary)是特征空间里的一条线(或更高维的一个面),把模型判定为"类别 0"的区域和判定为"类别 1"的区域分隔开。对逻辑回归来说,因为判定规则是"h(x) ≥ 0.5 就判 1",而 h(x) = 0.5 恰好对应 θᵀx = 0(sigmoid 函数在输入为 0 时正好等于 0.5),所以决策边界就是方程 **θᵀx = 0** 所描出的那条线——当特征只有两个时,这是一条直线;特征更多时,是更高维空间里的一个平面或超平面。
40
+
41
+ **为什么重要**:决策边界是把"抽象的参数 θ"翻译成"你能画出来、能直觉理解"的东西的桥梁。它把分类问题变成了一个几何问题:模型学习的过程,本质上就是在特征空间里搜索一条能把两类样本尽量分开的线(或面)该摆在哪个位置、朝哪个角度。理解了这一点,你才能理解为什么有的分类任务逻辑回归做得很好、有的却做不好——**关键要看真实的两类数据在特征空间里是不是本来就能被一条直线(线性)分开**。如果两类数据长得像两个同心圆(一类在里圈、一类在外圈),任何一条直线都不可能把它们分对,这时候就需要给特征加上非线性变换(比如加入 x₁²、x₂² 这类多项式特征),或者换用支持向量机的核方法、神经网络这类天生能画出弯曲边界的模型——这也是 CS229 后面几讲要讲核方法(kernels)和神经网络的动机之一。
42
+
43
+ **怎么用/落到哪**:判断一个分类问题好不好做,第一步经常就是看数据在特征空间里画出来长什么样、两类样本能不能被一条直线大致分开(线性可分)。如果能,逻辑回归这类线性分类器往往又快又稳;如果明显分不开,硬上线性模型只会得到一个很差的决策边界,无论怎么调参数都救不回来——这不是优化算法的问题,是模型本身的表达能力(capacity)不够。
44
+
45
+ **例子**:还是垃圾邮件分类——如果只用"邮件里感叹号的个数"这一个特征,垃圾邮件和正常邮件的感叹号数量分布如果有明显重叠,你会发现无论这条决策边界(在一维里就是一个阈值点)摆在哪,都会错判不少邮件。但如果同时用"感叹号个数"和"‘免费’这个词出现的次数"两个特征,垃圾邮件可能会明显聚集在"两者都偏高"的那个角落,这时候一条斜着切过去的直线(二维里的决策边界)就能把两类样本分得干净得多。特征选对了,决策边界才画得动。
46
+
47
+ ### 4. 欠拟合与过拟合:模型学多学少的两种失败模式
48
+ **是什么**:模型训练完之后,我们真正关心的不是它在训练集上表现多好,而是它在**没见过的新数据**上表现好不好——这叫泛化能力(generalization)。围绕这一点,模型会出现两种典型的失败:
49
+ - **欠拟合(underfitting)**:模型太简单,连训练数据里的规律都没学到位,训练集和新数据上表现都差。比如硬用一条直线去拟合明显是曲线关系的数据。
50
+ - **过拟合(overfitting)**:模型太复杂、学得太"贴合"训练数据的每一个细节甚至噪声,训练集上表现好得离谱(甚至完全无误),但换成没见过的新数据表现就明显变差。
51
+
52
+ **为什么重要**:这是所有机器学习实践者迟早会踩、而且会反复踩的坑,比选错哪个模型更根本。你可以直觉地把它理解成"学习方式"的两种极端:欠拟合像是根本没认真复习,考试自然考不好;过拟合像是把练习册的每一道题连同题号、错别字都死记硬背下来了,原题答得分毫不差,可一旦题目换个数字、换种问法,立刻就懵——因为它记住的是具体的样本,不是背后的规律。判断一个模型是欠拟合还是过拟合,标准做法是把数据切成训练集和测试集(或再加一个验证集),只用训练集训练、用没参与训练的测试集打分:如果训练集和测试集上表现都差,是欠拟合;如果训练集表现远好于测试集,是过拟合。
53
+
54
+ **怎么用/落到哪**:这背后有一个更系统的理论框架叫**偏差-方差权衡(bias-variance tradeoff)**——欠拟合对应"高偏差"(模型的假设空间太简单,无论怎么调参数都系统性地偏离真实规律),过拟合对应"高方差"(模型对训练数据的细微扰动太敏感,换一批训练样本,学出来的模型可能差很多)。这不是一个"哪个更差"的问题,而是一个此消彼长的权衡:一味把模型变复杂(比如给线性回归加越来越高次的多项式特征)能不断降低训练误差,但测试误差会先降后升,中间那个"测试误差最低点"才是你真正想要的模型复杂度。CS229 把这一块和树模型、集成方法(tree ensembles、boosting)放在相近的位置讲,正是因为这些更强大的模型天生表达能力强、更容易过拟合,理解偏差-方差权衡是用好它们的前提。
55
+
56
+ **例子**:还是拿房价预测练手——如果只用"面积"一个特征拟合一条直线,可能欠拟合,因为真实房价还受房龄、地段、房间数等因素影响,一条直线太简单,训练集上的误差本身就不小。反过来,如果你把面积一路加到十次方项(面积、面积²、面积³……面积¹⁰)去拟合,这条曲线会像蛇一样扭来扭去,硬穿过训练集里的每一个点,训练误差几乎为零;可一旦拿一套没见过的新房子数据去测,这条扭曲的曲线在训练数据点之间的那些"没数据撑着"的区间会预测出离谱的价格——这就是教科书式的过拟合。
57
+
58
+ ### 5. 正则化与模型/特征选择:怎么把"死记硬背"逼回"学规律"
59
+ **是什么**:正则化(regularization)是应对过拟合最常用的工具之一——在模型的训练目标里加一个惩罚项,专门惩罚参数 θ 的数值变得过大或过于复杂,逼着模型在"拟合训练数据"和"保持简单"之间找平衡,不让它为了讨好个别训练样本、把某些参数调得极端夸张。除了正则化,另外两条常用路径是**模型选择**(在几个候选模型/超参数之间,用验证集表现挑一个泛化能力最好的)和**特征选择**(去掉那些对预测没什么真实贡献、只会增加噪声和过拟合风险的特征)。
60
+
61
+ **为什么重要**:如果说"欠拟合/过拟合"是诊断出的病症,正则化、模型选择、特征选择就是开出的药方。没有这套工具,你面对过拟合唯一能做的就是"凭手感调模型复杂度",很难有章法;有了这套工具,你可以让模型本身自带"别学太狠"的约束,用数据(验证集表现)来定这个约束该有多强,而不是靠猜。
62
+
63
+ **怎么用/落到哪**:实践中最常见的做法是——先把数据切成训练集/验证集/测试集,用训练集拟合模型、用验证集尝试不同强度的正则化和不同的特征组合,挑验证集表现最好的那一版,最后用完全没碰过的测试集给出一个诚实的最终评估。这一整套流程贯穿几乎所有监督学习任务,不管你后面用的是线性模型、神经网络还是树模型,都逃不开"怎么在偏差和方差之间找到那个甜蜜点"这个问题。
64
+
65
+ **例子**:回到刚才那个十次多项式过拟合房价的例子——加了正则化之后,即便你依然给模型准备了面积的十次方项,惩罚项会把那些让曲线剧烈扭曲的高次项系数压得很小甚至接近零,曲线自然会变得平滑很多,重新贴近数据背后真实的趋势,而不是死记硬背每一个训练点。这就是"给模型一点约束,反而让它学得更聪明"的直觉体现。
66
+
67
+ ## 带学生读 source
68
+ 现在这一届 CS229(讲师 Jehangir Amjad、Anand Avati)的授课视频没有公开链接,但完整的 20 讲排课顺序可以直接去 [syllabus 页面](https://cs229.stanford.edu/syllabus-new.html) 看——逻辑回归、牛顿法、感知机、广义线性模型排在一组,偏差-方差权衡、正则化、模型/特征选择又排在另一组,看着这份顺序对照今天讲的内容,会更清楚这两块知识在整门课里各自的位置。如果想真看一遍原汁原味的课堂讲授,[Stanford Engineering Everywhere 上的公开版 CS229](https://see.stanford.edu/Course/CS229)(Andrew Ng 主讲)提供 20 讲免费视频和讲义,是外面能免费看到的、和今天内容最贴近的第一手材料。
69
+
70
+ ## 金句(引用时标出处)
71
+ 本课暂无可靠可引用的原话金句——不编造。
72
+
73
+ ## 讲完这节,你应该能答上(可选巩固 · 别逐题盘问、别当门槛)
74
+ 1. **Q:为什么不能直接拿线性回归的输出当分类概率用?**
75
+ - 好答案信号:能说出两点——线性回归的输出可以是任意实数,不天然落在 [0,1];线性回归对离群点敏感,容易导致决策阈值被个别极端样本带偏,sigmoid 因为两端"压平"而不会这样。
76
+ 2. **Q:决策边界和模型参数 θ 是什么关系?看到一个分类效果很差的模型,你会先怀疑哪里?**
77
+ - 好答案信号:知道决策边界就是 θᵀx = 0 这条线/面;会先看真实数据在特征空间里是不是线性可分——如果两类数据本身就绞在一起分不开,换什么优化算法都救不了一个线性模型。
78
+ 3. **Q:一个模型训练集准确率 99%、测试集准确率 60%,你判断它是欠拟合还是过拟合?下一步会做什么?**
79
+ - 好答案信号:判断为过拟合(高方差);能提到用正则化、减少特征、或换更简单的模型来压方差,而不是继续加复杂度。
80
+
81
+ ## 常见误解(听到就纠正)
82
+ - ❌"分类问题直接用线性回归、结果四舍五入一下就行。" → 输出范围和离群点敏感性两个问题都没解决,四舍五入救不了一条被离群点带偏的拟合线,这也是逻辑回归这个专门模型存在的理由。
83
+ - ❌"模型训练集准确率越高越好。" → 训练集准确率高到接近 100% 反而是过拟合的危险信号,真正该看的是模型在没参与训练的测试集/验证集上的表现。
84
+ - ❌"正则化就是让模型变差、少用点参数将就一下。" → 正则化的目的是提升泛化能力,牺牲一点训练集上的完美拟合,换来测试集上更稳的表现,本质是主动控制方差、不是"凑合"。
85
+
86
+ ## 收尾 & 排下一课
87
+ 这节课把"回归怎么变成分类"这道弯讲透了:线性回归的输出范围不对、又怕离群点,逻辑回归用 sigmoid 解决了这两件事,顺带带出了决策边界这个几何直觉;然后讲了几乎每个做机器学习的人都会踩的坑——过拟合/欠拟合,以及偏差-方差权衡这套诊断框架,还有正则化/模型选择/特征选择这套药方。记一下进度:`cs229/02-classification-and-overfitting` 完成。默认下一课往生成式分类模型方向走(高斯判别分析 Gaussian discriminant analysis、朴素贝叶斯 Naive Bayes 这类"反过来建模每一类长什么样"的思路,和这节课逻辑回归"直接建模决策边界"的思路正好形成对照);如果你对"决策边界画不直"这件事意犹未尽,也可以直接跳去支持向量机与核方法那节,提前看看非线性决策边界是怎么被系统化解决的。