小强的 AI 已经会「看图认物」,这学期它要学更多本事:把主体从图里抠出来、自己画画、把照片变成油画(CV 线);还要认字、写诗、听懂人话(NLP 线)。压轴出场的是 Transformer——今天所有大模型(包括 GPT)共同的地基。学完这学期,你看 AI 新闻的眼光将完全不同。
计算机视觉与自然语言双线并行:图像分割、GAN 画画、风格迁移、RNN/词向量、注意力与 Transformer、语音识别合成。
用故事和生活类比打开这学期的大门,先「知其所以然」再学语法。
小强的 AI 已经会「看图认物」,这学期它要学更多本事:把主体从图里抠出来、自己画画、把照片变成油画(CV 线);还要认字、写诗、听懂人话(NLP 线)。压轴出场的是 Transformer——今天所有大模型(包括 GPT)共同的地基。学完这学期,你看 AI 新闻的眼光将完全不同。
沿着轮廓把主体剪下来,背景全部不要(U-Net)。
像素级分类一个拼命造假画,一个拼命打假,斗到最后双双登峰造极。
对抗训练每听一个词都记得前面说过什么,越传越有上下文。
序列记忆一句话里先看清哪些词最关键,再决定怎么理解。
加权聚焦CV与NLP双方向 —— 共 12 课时,全部知识点一网打尽。
# U-Net 形状:先下采样再上采样,形如字母 U
# 下采样(Encoder):图像变小、特征变深
down = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1), nn.ReLU(),
nn.MaxPool2d(2)) # 256→128
# 上采样(Decoder):特征变大、恢复分辨率
up = nn.Sequential(
nn.ConvTranspose2d(64, 64, 2, 2), # 128→256
nn.Conv2d(64, 1, 1)) # 输出每像素的前景概率(每个像素都回答:我是前景还是背景 → 完成抠图)# GAN = 生成器 G + 判别器 D 对抗训练
G = Generator() # 造假者:噪声 → 假图
D = Discriminator() # 鉴定师:图 → 真/假
# 训练循环(示意):
# 1. 固定G,训D:分辨真图和G造的假图
# 2. 固定D,训G:让假图骗过D
# 双方互相逼着进步 → 假图越来越像真图(训练后期:G 生成的图片肉眼难辨真假)# 思路:内容图 C 的内容 + 风格图 S 的笔触 = 新图 G
# loss = α·内容损失(C,G) + β·风格损失(S,G)
# 内容损失:卷积特征图逐像素差
# 风格损失:特征图的「格拉姆矩阵」差(纹理统计)
print("输入:你的照片 + 梵高《星月夜》")
print("优化:梯度下降一点点「重画」输出图")
print("产出:一张星月夜笔触的你的照片")输入:你的照片 + 梵高《星月夜》
优化:梯度下降一点点「重画」输出图
产出:一张星月夜笔触的你的照片import torch.nn as nn
rnn = nn.LSTM(input_size=100, # 每个词 100 维
hidden_size=256, # 记忆容量
num_layers=2, batch_first=True)
# x 形状: (批, 句长, 100)
# out, (h, c) = rnn(x)
# h 是短期记忆总结,c 是长期记忆门控(逐词读入,越读越懂上下文)import torch.nn as nn
# 词汇表 1 万词,每词映射为 128 维向量
emb = nn.Embedding(num_embeddings=10000,
embedding_dim=128)
# "猫" 的编号是 520 → 一个 128 维向量
# 语义相近的词在空间中距离也近:
# king - man + woman ≈ queen(词义被编码成空间中的位置,可做加减法)# 流程:分词 → 向量化 → 分类器
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
docs = ["剧情 太棒 了 结尾 催泪", "无聊 透顶 烂片 一个", "好看 感动 推荐"]
labels = [1, 0, 1] # 1=好评 0=差评
vec = TfidfVectorizer()
X = vec.fit_transform(docs)
clf = MultinomialNB().fit(X, labels)
test = vec.transform(["太 无聊 了"])
print("『太无聊了』→ 预测:", "差评" if clf.predict(test)[0] == 0 else "好评")『太无聊了』→ 预测: 差评import torch, torch.nn.functional as F
Q = torch.randn(2, 8) # 查询:我在找什么
K = torch.randn(5, 8) # 键:每个词的标签
V = torch.randn(5, 8) # 值:每个词的内容
score = Q @ K.T / 8**0.5 # 相关性打分
w = F.softmax(score, dim=-1) # 归一化成权重
out = w @ V # 加权汇总信息
print("注意力权重:", w.round(decimals=2))注意力权重: tensor([[0.10, 0.45, 0.30, 0.05, 0.10],
[0.20, 0.10, 0.10, 0.40, 0.20]])# Self-Attention:每个词同时是 Q、K、V
# Attention(Q, K, V) = softmax(QKᵀ / √d) · V
# 一句话里每个词都环顾四周,
# 决定「该重点参考哪些词」再更新自己。
# 多头 = 多个视角并行看(语法头/语义头…)
# 位置编码告诉模型词的先后顺序
print("GPT 的全部魔法都从这里开始")GPT 的全部魔法都从这里开始# 声音 → 声谱图(把声音画成图)→ 当作图像用 CNN/Transformer 识别
# 概念流程:
# ① 采样:每秒录 16000 个点(16kHz)
# ② 分帧加窗:切成 25ms 小段
# ③ 特征:每段算 MFCC 向量 → 排成「声谱图」
# ④ 模型:输入声谱图,输出文字序列
print("『你好』(0.8 秒) → 12800 个采样点")
print("→ 80 帧 × 13 维 MFCC 的『声音照片』")
print("→ 模型读图 → 输出文本『你好』")
print("实战调用:whisper / 讯飞语音 API")『你好』(0.8 秒) → 12800 个采样点
→ 80 帧 × 13 维 MFCC 的『声音照片』
→ 模型读图 → 输出文本『你好』
实战调用:whisper / 讯飞语音 API# 文本 → 音素序列 → 声学特征(怎么发音)→ 波形(声音本体)
print("流程:文本分析 → 韵律预测 → 声学模型 → 声码器")
print("文本:『今天天气真好』")
print("音素:j-īn-t-iān-t-iān-qì-zhēn-hǎo")
print("韵律:今天 | 天气 | 真好 ↑")
print("波形:48kHz 的 .wav 文件")
print("调用:edge-tts / 火山引擎 TTS API")流程:文本分析 → 韵律预测 → 声学模型 → 声码器
文本:『今天天气真好』
音素:j-īn-t-iān-t-iān-qì-zhēn-hǎo
韵律:今天 | 天气 | 真好 ↑
波形:48kHz 的 .wav 文件
调用:edge-tts / 火山引擎 TTS API# CLIP:图和文字各过一个编码器,映射到同一个向量空间
# 图片“狗”和文本“a photo of a dog”距离很近
import numpy as np
def cos(a, b):
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
img_dog = np.array([0.9, 0.1, 0.0])
t_dog = np.array([0.85, 0.15, 0.05])
t_cat = np.array([0.05, 0.9, 0.1])
print("狗图 ↔ 『a dog』:", round(cos(img_dog, t_dog), 2))
print("狗图 ↔ 『a cat』:", round(cos(img_dog, t_cat), 2))
print("零样本分类:算图和每个候选文本的相似度,取最高的")狗图 ↔ 『a dog』: 0.99
狗图 ↔ 『a cat』: 0.15
零样本分类:算图和每个候选文本的相似度,取最高的# 文生图(扩散模型)的极简理解:
# ① 给一张纯噪声图
# ② 模型学会「擦掉一点噪声」
# ③ 重复几百次,噪声里浮现出画面
# 文本(Prompt)用来指挥擦成什么样
prompt = {"主体": "一只戴宇航头盔的猫",
"风格": "像素风,明亮色彩",
"细节": "背景是星云,8-bit"}
print("Prompt:", prompt)
print("参数:steps=30(擦几轮), size=512×512")
print("接口:Stable Diffusion 本地 / 文心一格 API")Prompt: {'主体': '一只戴宇航头盔的猫', '风格': '像素风,明亮色彩', '细节': '背景是星云,8-bit'}
参数:steps=30(擦几轮), size=512×512
接口:Stable Diffusion 本地 / 文心一格 API每个知识点都要落到能跑、能玩、能演示的作品上。
期末项目是整学期知识点的综合检验场:综合运用。学生将独立完成需求拆解 → 功能实现 → 调试打磨 → 上台演示的完整闭环。
| 课次 | 主题 | 趣味项目 | 知识点 |
|---|---|---|---|
| 1 | 图像分割 | 抠图神器 | U-Net、语义分割 |
| 2 | 生成对抗网络 | AI画画入门 | GAN原理、DCGAN |
| 3 | 风格迁移 | 把照片变成油画 | 神经风格迁移 |
| 4 | 循环神经网络 | 写藏头诗 | RNN、LSTM |
| 5 | 词向量 | 词语相似度计算 | Word2Vec、Embedding |
| 6 | 文本分类 | 电影评论情感分析 | 文本预处理、分类模型 |
| 7 | 注意力机制 | 翻译小助手 | Attention原理 |
| 8 | Transformer入门 | 理解GPT的基础 | Self-Attention、编码器解码器 |
| 9 | 语音识别入门 | 语音转文字 | 音频处理、ASR概念 |
| 10 | 语音合成 | 让AI说话 | TTS概念、调用API |
| 11 | 多模态入门 | 图文理解 | CLIP概念 |
| 12 | 期末项目 | AI绘画小助手 | 综合运用 |
把一学期的知识点串成体系,看清来路与去向。
◀ 上一章:四年级 下学期 · 神经网络与PyTorch入门
下一章 ▶:五年级 下学期 · NOAI复赛备战与阶段毕业
计算机视觉与自然语言双线并行:图像分割、GAN 画画、风格迁移、RNN/词向量、注意力与 Transformer、语音识别合成。
结业时你将带走:2 个 AI 项目(CV+NLP)+ 云端 GPU 训练经验 + NOAI 复赛实力。
避开高频易错点,再用速查表把语法焊进肌肉记忆。
只让鉴别器狂练
生成器永远学不会两边的 loss 都要盯着
必要时降低一方学习率emb_dim = 2
# 语义全挤成一团emb_dim = 64~300长短句直接打包
模型维度对不上pad_sequence 补齐
(配合 mask)attn = Q @ K.T / sqrt(d)
# 权重可为负、不归一attn = softmax(
Q @ K.T / sqrt(d))| 功能 | 写法 | 一句话理解 |
|---|---|---|
| 转置卷积 | nn.ConvTranspose2d(64, 3) | 上采样还原图像 |
| LSTM | nn.LSTM(input, hidden) | 带门控的长记忆 RNN |
| 词嵌入 | nn.Embedding(vocab, 128) | 词 → 128 维向量 |
| 注意力 | softmax(QKᵀ/√d)V | 自注意力核心公式 |
| 编码解码 | Encoder 提特征 → Decoder 生成 | 翻译/摘要通用架构 |
| 语音识别 | 音频 → 梅尔频谱 → 模型 → 文本 | ASR 流水线 |
| 图文对齐 | CLIP:图和文映射到同一空间 | 多模态基石 |
| 风格迁移 | 内容图特征 + 风格图纹理 | 照片变油画 |
按 A / B / C 三档难度自主选择:保底完成 A 组,学有余力挑战 B、C 组。