无监督学习、推荐系统与强化学习 | Unsupervised Learning, Recommenders and Reinforcement Learning

Based on Professor Andrew Ng's Machine Learning Specialization (2022). Part 3 notes.

周一 4月 06 2026
3826 字 · 14 分钟

本文是我学习吴恩达(Andrew Ng)《Machine Learning Specialization》(2022)后整理的笔记,记录 Unsupervised Learning, Recommenders and Reinforcement Learning 这一部分。

无监督学习

无标签数据与结构

无监督学习处理的是没有显式标签的数据。训练集中只有输入样本,通常没有对应的目标值 yy。因此,模型的任务不再是拟合一个从 xxyy 的预测函数,而是从样本自身的分布中找出结构。

这类结构主要有两种典型形式。若样本在空间中自然形成若干组,问题就会转向聚类;若大多数样本呈现相近模式,少数样本明显偏离主体分布,问题就会转向异常检测。前者关注样本之间的相似性,后者关注样本相对正常模式的偏离程度。

聚类

聚类的目标是把没有标签的样本划分成若干簇。K-means 是这一部分最基础的算法。它先设定簇的个数 KK,并为每个簇维护一个中心点 μk\mu_k。算法在两步之间反复交替:

  • 将每个样本分配给距离最近的中心点;
  • 根据当前分配结果,重新计算每个簇的中心点。

若第 ii 个样本记为 x(i)x^{(i)},第 kk 个聚类中心记为 μk\mu_k,第 ii 个样本所属簇编号记为 c(i)c^{(i)},则 K-means 的目标函数为

J(c(1),,c(m),μ1,,μK)=1mi=1mx(i)μc(i)2J(c^{(1)},\dots,c^{(m)},\mu_1,\dots,\mu_K) = \frac{1}{m}\sum_{i=1}^{m}\left\|x^{(i)}-\mu_{c^{(i)}}\right\|^2

其中 μc(i)\mu_{c^{(i)}} 是样本 x(i)x^{(i)} 所属簇的中心。二范数平方表示样本到该中心的距离平方,整体求和后再除以样本数 mm,得到平均组内偏离程度。K-means 的分配步骤和更新步骤,都是围绕降低这个目标函数进行的。

初始化会影响 K-means 的结果。不同初始中心点可能使算法收敛到不同结果,因此常见做法是多次随机初始化,再保留目标函数值较小的一次。聚类数 KK 的选择也没有唯一公式,通常结合代价函数曲线、数据结构和任务解释来决定。若 KK 太小,多个簇会被合并;若 KK 太大,模型会把原本连续的结构切得过细。

K-means clustering intuition

异常检测

异常检测的目标是识别偏离正常模式的样本。它不要求把所有样本划分成多个簇,而是先刻画正常样本的分布,再根据概率密度判断新样本是否异常。

单个特征常用高斯分布建模。若特征 xx 的均值为 μ\mu,方差为 σ2\sigma^2,则概率密度函数为

p(x;μ,σ2)=12πσexp ⁣((xμ)22σ2)p(x;\mu,\sigma^2) = \frac{1}{\sqrt{2\pi}\sigma} \exp\!\left( -\frac{(x-\mu)^2}{2\sigma^2} \right)

这里 μ\mu 决定分布中心,σ\sigma 决定分布宽度。若 xx 离均值较远,指数项会下降,对应概率密度较小。异常检测正是利用这一点,将低概率样本视为可疑点。

若一个样本包含 nn 个特征,并先采用特征近似独立的建模方式,则整体概率写成

p(x)=j=1np(xj;μj,σj2)p(x)=\prod_{j=1}^{n}p(x_j;\mu_j,\sigma_j^2)

其中 xjx_j 是第 jj 个特征,μj\mu_jσj2\sigma_j^2 分别由训练数据估计得到。判定规则为

p(x)<εp(x)<\varepsilon

当样本概率小于阈值 ε\varepsilon 时,预测为 anomaly。阈值通常通过交叉验证集调节,而不是直接凭直觉指定。

异常检测和监督学习分类的分界,主要取决于异常样本的数量与类型。如果异常样本很少,且未来可能出现未见过的新异常,异常检测更合适;如果正负样本都比较充足,且异常类型相对固定,监督学习分类更自然。特征选择同样关键。一个特征若无法区分正常和异常,放进概率模型后也不会带来有效判断;好的特征应能让异常样本在分布中落到低概率区域。

Anomaly detection with Gaussian model

推荐系统

评分矩阵与预测形式

推荐系统的数据通常由用户、项目和交互记录组成。若用矩阵表示,行可对应项目,列可对应用户,矩阵元素是评分、点击、收藏或其他反馈。这个矩阵往往很稀疏,因为每个用户只接触过项目集合中的一小部分。

若用户 jj 对项目 ii 的真实评分记为 y(i,j)y^{(i,j)},是否存在反馈用 r(i,j)r(i,j) 表示,则 r(i,j)=1r(i,j)=1 表示这个位置有观测数据。推荐模型只应在 r(i,j)=1r(i,j)=1 的位置上计算误差,未观测位置不能直接当作负样本处理。

若项目特征向量为 x(i)x^{(i)},用户参数向量为 w(j)w^{(j)},用户偏置为 b(j)b^{(j)},预测评分为

y^(i,j)=(w(j))Tx(i)+b(j)\hat y^{(i,j)}=(w^{(j)})^T x^{(i)}+b^{(j)}

这里 x(i)x^{(i)} 表示项目在特征空间中的位置,w(j)w^{(j)} 表示用户在同一特征空间中的偏好方向,内积给出项目和用户之间的匹配分数,偏置项 b(j)b^{(j)} 用于表示用户整体评分倾向。

协同过滤

协同过滤的核心在于同时学习项目特征和用户参数。项目特征 x(i)x^{(i)} 不再完全依赖人工指定,而是从用户评分矩阵中学习出来;用户参数 w(j),b(j)w^{(j)}, b^{(j)} 也在同一目标函数中一起优化。

常见代价函数为

J=12(i,j):r(i,j)=1((w(j))Tx(i)+b(j)y(i,j))2+λ2(jw(j)2+ix(i)2)J= \frac{1}{2} \sum_{(i,j):r(i,j)=1} \left((w^{(j)})^T x^{(i)}+b^{(j)}-y^{(i,j)}\right)^2 + \frac{\lambda}{2} \left( \sum_j\|w^{(j)}\|^2+\sum_i\|x^{(i)}\|^2 \right)

第一项只在有评分的位置上计算预测误差。第二项是正则化项,约束用户参数和项目特征的规模,减少参数过大带来的不稳定。这个公式说明推荐系统的训练对象不是普通样本表,而是稀疏的用户项目交互矩阵。

反馈标签也可以是二值形式。收藏、点赞、点击都可以作为 binary labels,用 0 或 1 记录用户是否产生某种行为。此时预测目标从评分值变为偏好概率或点击概率,损失函数也会随任务形式调整。

均值归一化用于处理不同项目整体评分水平的差异。若项目 ii 的平均评分是 μi\mu_i,归一化标签可以写成

ynorm(i,j)=y(i,j)μiy_{\mathrm{norm}}^{(i,j)}=y^{(i,j)}-\mu_i

模型先学习用户相对该项目平均评分的偏离,预测时再把均值加回去。这样可以避免模型过多地学习项目整体受欢迎程度,而忽略用户个体差异。

在 TensorFlow 中,协同过滤通常把用户参数矩阵和项目特征矩阵设为可训练变量,再用自动微分最小化上面的代价函数。实现中最容易出错的是维度:项目数、用户数、特征维度必须和评分矩阵的行列对应。训练完成后,每个项目都有一个向量表示,因此可以通过向量距离寻找相似项目。

基于内容的过滤

协同过滤主要依赖用户项目交互。基于内容的过滤把项目本身的内容特征放进模型,例如类型、关键词、文本描述、价格区间或其他结构化属性。用户也可以由历史行为、画像特征或上下文特征表示。两类方法的差别主要在输入来源:协同过滤更依赖交互矩阵,基于内容的过滤更依赖用户和项目自身特征。

引入深度学习后,用户和项目可以分别经过神经网络映射到同一个向量空间。若用户网络输出 vuv_u,项目网络输出 vmv_m,推荐分数可写成

s(u,m)=vuTvms(u,m)=v_u^T v_m

其中 vuv_uvmv_m 是同维向量。内积越大,表示二者在该表示空间中越接近,推荐分数也越高。这一形式和协同过滤中的内积预测相似,但向量不再只是直接训练出的自由参数,而是由输入特征经过网络得到。

当项目目录很大时,推荐系统还需要处理检索问题。对每个用户遍历所有项目再排序代价很高,因此通常先召回候选集合,再对候选项目做精排。建模和检索在这里开始同时出现,推荐系统不只是一个评分预测模型,也是一套需要在大规模项目库上运行的系统。

推荐系统的边界

推荐系统会持续影响用户看到什么、点击什么和停留多久。模型输出会改变用户行为,新的用户行为又会反过来成为后续训练数据。这样的反馈循环使目标函数的选择变得很敏感。

若训练目标只围绕 clicks、likes 或 watch time 展开,系统可能持续强化高反馈内容,而不一定符合用户长期利益。推荐系统的目标设计、反馈信号选择和上线后的监控,都直接影响系统输出方向。这里的核心不是给出一个额外公式,而是明确推荐系统的训练目标本身需要被谨慎定义。

强化学习

状态 动作 奖励

强化学习研究的是连续决策问题。主体在环境中采取动作,环境返回新的状态和奖励;下一步动作又会继续影响之后的状态。因此,它不再只处理固定数据集上的单次预测,而是关注一串动作带来的长期结果。

基本对象包括:

  • state ss:当前状态
  • action aa:当前状态下采取的动作
  • reward RtR_t:时刻 tt 收到的即时反馈
  • policy π\pi:从状态到动作的决策规则

即时奖励只描述某一步反馈,强化学习优化的是从当前时刻开始的累计回报。若从时刻 tt 开始,return 定义为

Gt=Rt+γRt+1+γ2Rt+2+G_t=R_t+\gamma R_{t+1}+\gamma^2R_{t+2}+\cdots

其中 γ[0,1)\gamma\in[0,1) 是折扣因子。RtR_t 是当前奖励,γRt+1\gamma R_{t+1} 是下一步奖励折扣后的贡献,γ2Rt+2\gamma^2R_{t+2} 是再下一步奖励的贡献。γ\gamma 越接近 1,未来奖励的影响越大;γ\gamma 越小,目标越偏向近期反馈。

状态动作值函数

在状态 ss 下采取动作 aa 后,后续如果按策略 π\pi 行动,可以得到一个期望 return。这个量称为状态动作值函数,记为

Qπ(s,a)=E[GtSt=s,At=a]Q^\pi(s,a)=\mathbb{E}[G_t\mid S_t=s,A_t=a]

其中 St=sS_t=s 表示当前状态为 ssAt=aA_t=a 表示当前动作是 aaGtG_t 是从当前时刻开始的 return。上标 π\pi 说明后续动作由策略 π\pi 决定。

Qπ(s,a)Q^\pi(s,a) 不是单步 reward。它评估的是当前动作和后续策略共同带来的长期回报。若某个动作的 QQ 值更高,表示在当前状态下先采取该动作,并在之后遵循策略 π\pi,能够得到更高的期望 return。

Bellman 方程

Bellman 方程把长期 return 写成递归形式。对状态动作值函数,可以写成

Qπ(s,a)=R(s,a)+γEs,a[Qπ(s,a)]Q^\pi(s,a) = R(s,a) + \gamma\mathbb{E}_{s',a'} \left[ Q^\pi(s',a') \right]

其中 R(s,a)R(s,a) 是在状态 ss 下采取动作 aa 得到的即时奖励,ss' 是下一状态,aa' 是下一状态下按照策略 π\pi 选择的动作。右侧第一项是当前一步反馈,第二项是折扣后的未来价值期望。

若环境是确定性的,下一状态和下一动作可以直接确定;若环境存在随机性,就需要对可能的 ss'aa' 取期望。这个方程将完整的长期回报拆成当前奖励和下一状态价值,因此是价值函数学习的基础。

最优状态动作值函数记为 Q(s,a)Q^*(s,a)。对应的 Bellman 最优方程为

Q(s,a)=R(s,a)+γEs[maxaQ(s,a)]Q^*(s,a) = R(s,a) + \gamma\mathbb{E}_{s'} \left[ \max_{a'}Q^*(s',a') \right]

这里的 maxa\max_{a'} 表示在下一状态 ss' 中选择未来价值最大的动作。最优策略可以由最优 Q 函数得到:

π(s)=argmaxaQ(s,a)\pi^*(s)=\arg\max_a Q^*(s,a)

这个式子表示,在状态 ss 下选择使 Q(s,a)Q^*(s,a) 最大的动作。

函数逼近

当状态和动作数量很少时,可以用表格存储每个状态动作对的 Q 值。连续状态空间中,这种表格方法不再可行。例如状态可能包含位置、速度、角度、角速度等连续量,状态组合几乎不可穷举。此时需要用函数逼近表示 Q 函数。

若用神经网络近似状态动作值函数,可以写成

Q(s,a;w)Q(s,a;w)

其中 ww 是网络参数。输入为状态和动作,输出为对应 Q 值估计。若动作集合离散且数量不大,也可以让网络输入状态 ss,一次输出所有动作对应的 Q 值:

Q(s,;w)=[Q(s,a1;w)Q(s,a2;w)Q(s,ak;w)]Q(s,\cdot;w)= \begin{bmatrix} Q(s,a_1;w)\\ Q(s,a_2;w)\\ \vdots\\ Q(s,a_k;w) \end{bmatrix}

其中 a1,,aka_1,\dots,a_k 是可选动作集合。这样可以一次前向传播得到同一状态下所有动作的价值估计。

根据 Bellman 最优方程,一步训练目标可写为

y=R+γmaxaQ(s,a;w)y= R+\gamma\max_{a'}Q(s',a';w^-)

其中 RR 是当前转移得到的奖励,ss' 是下一状态,ww^- 表示目标网络参数。训练损失写成

L(w)=12(yQ(s,a;w))2L(w)=\frac{1}{2}\left(y-Q(s,a;w)\right)^2

这里 Q(s,a;w)Q(s,a;w) 是当前网络对当前状态动作对的估计,yy 是由奖励和下一状态最大 Q 值构成的目标。训练的任务是让当前 Q 估计接近这个 Bellman 目标。

探索与稳定训练

有了 Q 值估计后,最直接的动作选择方式是选择当前 Q 值最大的动作。但强化学习中的数据由动作产生,如果一直只选择当前估计最好的动作,模型可能无法发现更优路径。探索与利用需要同时保留。

ϵ\epsilon-贪婪策略给出了一种简单规则:

  • 以概率 1ϵ1-\epsilon 选择当前 Q 值最大的动作
  • 以概率 ϵ\epsilon 随机选择一个动作

其中 ϵ\epsilon 控制探索比例。ϵ\epsilon 较大时,行为更随机;ϵ\epsilon 较小时,行为更依赖当前价值估计。这个机制用于在已有知识和新动作尝试之间保持平衡。

训练中还会使用 mini-batch 和 soft update。mini-batch 从经验样本中取一小批转移一起更新,减少单条样本带来的波动。soft update 用于缓慢更新目标网络参数:

wτw+(1τ)ww^-\leftarrow\tau w+(1-\tau)w^-

其中 ww 是当前网络参数,ww^- 是目标网络参数,τ\tau 是较小的更新系数。这个式子表示目标网络只向当前网络移动一小步,而不是直接复制当前网络。目标网络变化较平滑,Bellman target 也会更稳定。

状态表示

状态表示决定了价值函数能够利用哪些信息。状态应包含影响后续决策和回报的关键变量。若状态缺少必要信息,即使 Bellman 方程和神经网络结构都写得正确,模型也难以学习稳定策略。

这一点和前面机器学习中的特征选择相通。区别在于,强化学习中的状态会影响后续动作、环境转移和长期 return,因此状态表示的质量会直接影响整条决策链。


Thanks for reading!

无监督学习、推荐系统与强化学习 | Unsupervised Learning, Recommenders and Reinforcement Learning

周一 4月 06 2026
3826 字 · 14 分钟