第8章 模型的构建与参数拟合¶
学习目标¶
- 掌握从理论到计算模型的构建步骤
- 理解频率学派与贝叶斯方法的基本思想
- 了解常用的参数估计算法
- 知道如何选择合适的估计方法
关键概念¶
- 参数拟合:从数据中估计模型参数值的过程
- 频率学派:认为参数是未知的常数,追求使数据最可能出现的参数值
- 贝叶斯学派:认为参数有概率分布,combining先验信念与观察数据
- 似然函数:在给定参数下,观察到该数据的概率
- 最大似然估计 (MLE):选择使数据最可能的参数
- 马尔可夫链蒙特卡洛 (MCMC):通过随机抽样来估计参数分布
正文¶
从理论模型到计算模型:构建过程¶
第1步:明确你的假设¶
问题:你想用模型来验证什么?你的假设是什么?
例子: - 假设:"被试的学习速度与任务难度成反比" - 假设:"两个条件下的风险偏好不同" - 假设:"内侧前额叶皮层的激活反映了价值编码"
第2步:选择合适的模型框架¶
问题:现有的哪个理论模型最适合表达我的假设?
可选框架: - 线性模型:\(Y = \beta_0 + \beta_1 X + \epsilon\) - 强化学习:\(Q_t(a) = Q_{t-1}(a) + \alpha[R_t - Q_{t-1}(a)]\) - 决策模型:\(P(\text{choice A}) = \frac{e^{\beta U_A}}{e^{\beta U_A} + e^{\beta U_B}}\) - 贝叶斯模型:\(P(\text{假设}|\text{数据}) \propto P(\text{数据}|\text{假设}) \cdot P(\text{假设})\)
第3步:指定具体的数学形式¶
问题:模型中的各个函数/分布具体是什么?
例子:
框架:强化学习
具体形式1:
Q_t(a) = Q_{t-1}(a) + α[R_t - Q_{t-1}(a)]
α 是学习率参数
具体形式2(更复杂):
α_t = α₀·(1-t/T) (学习率随时间衰减)
需要两个参数:α₀ 和初始值 $Q_0(a)$
第4步:确定参数与初始值¶
问题:我的模型有哪些自由参数?它们的合理范围是什么?
例子:
模型:Q 学习 + Softmax 决策
参数:
- α: 学习率,范围 [0, 1]
- β: 逆温度/决策噪声,范围 [0, +∞)
- Q₀: 初始价值,通常设为 0
第5步:生成模型预测¶
问题:给定参数和实验刺激(输入),模型的预测被试会怎样表现(输出)?
步骤: 1. 用初始参数和 \(Q_0\) 初始化 2. 对每一次试次: - 基于当前Q值和β,计算选择概率:\(P(a_t) = \frac{e^{\beta Q(a)}}{Σ e^{\beta Q(a')}}\) - 生成模型预测的选择 - 如果有真实反馈,更新Q值 3. 得到模型预测的行为序列、选择概率、反应时等
第6步:与真实数据比较¶
问题:模型预测与被试的真实行为有多吻合?
比较方法: - 如果预测是 离散选择(选A还是选B) - 计算准确率,或者对数似然 - 如果预测是 连续值(评分、反应时) - 计算均方误差 (MSE)、相关系数 - 如果预测是 概率(选A的概率) - 计算负对数似然,或交叉熵
参数估计的方法¶
一旦有了模型和数据,下一个问题是:"参数取什么值时,模型的输出与真实数据最相吻合?"
这一步需要找到参数的值。实际上,你无法找到那个绝对正确的参数值,你是在对参数的值做出估计,也就是 参数估计 问题。
方法1:频率学派方法(Frequentist)¶
核心思想:参数是未知的常数。我们要找一个值,使得当参数为这个值时,模型能够输出这个结果的概率(似然值,Likelihood)最大。
最小二乘法 (Least Squares)¶
适用场景:预测值是连续的(如反应时、脑激活)
原理:找参数 \(\theta\) 使得模型预测与真实数据的差平方和最小
优点: - 计算快速 - 易于理解与实现
缺点: - 假设数据服从正态分布 - 无法反映参数的不确定性
极大似然估计 (Maximum Likelihood Estimation, MLE)¶
适用场景:预测值是离散的(如选择哪个选项)或概率
原理:似然函数 \(L(\theta|data)\) 表示"在参数 \(\theta\) 下,观察到该数据的概率"
我们要最大化这个似然,或等价地,最小化 负对数似然 (Negative Log Likelihood):
例子:被试的选择序列是 [A, B, A, A, B, A]
给定参数 \((\alpha, \beta)\),模型可以计算每次选择的概率: - \(P(A_1|\theta) = 0.6\) - \(P(B_2|\theta) = 0.4\) - ...
似然 = 0.6 × 0.4 × 0.6 × ... = 很小的数字
我们要找到使这个似然最大的 \((\alpha, \beta)\)
优点: - 考虑了模型的不确定性 - 适合离散数据 - 有明确的统计性质
缺点: - 计算可能比最小二乘复杂 - 常常会陷入局部最优
方法2:贝叶斯方法 (Bayesian)¶
核心思想:参数不是常数,而是有概率分布的。我们的目标是得到参数的后验分布 \(P(\theta|data)\)
贝叶斯公式: $\(P(\theta|data) = \frac{P(data|\theta) \cdot P(\theta)}{P(data)}\)$
其中: - \(P(\theta|data)\) 后验分布:结合数据与先验后,参数的分布 - \(P(data|\theta)\) 似然函数:在参数 \(\theta\) 下观察到数据的概率 - \(P(\theta)\) 先验分布:在看数据之前,我们对参数的信念 - \(P(data)\) 证据:通常是归一化常数
例子:
假设我们有先验信念:"学习率 \(\alpha\) 很可能是0.3左右"(一个高斯分布)
看到数据后,贝叶斯推理会更新这个信念:"根据数据,α可能是0.35-0.45之间"
与频率学派给出单一点估计不同,贝叶斯方法给出的是一个分布,反映了参数值的不确定性。
优点: - 可以纳入先验知识 - 给出参数的完整分布,反映不确定性 - 对小样本友好
缺点: - 计算通常更复杂 - 先验的选择有主观性
方法3:常用的参数估计算法¶
梯度下降法 / 优化算法¶
原理:沿着损失函数梯度的反方向迭代更新参数,逐渐逼近最优值
简单来说,可以理解为求导计算最小值
特点: - 计算迅速 - 但可能陷入局部最优 - 在求导时,找到了一个极小值(局部最优),误把它当作最小值(全局最优) - 需要好的初值选择
常见算法:Adam、SGD、L-BFGS 等
MCMC (Markov Chain Monte Carlo)¶
原理:通过随机抽样来近似参数的后验分布
步骤: 1. 随机初始化参数值 2. 每一步随机生成一个新的参数值 3. 根据先验和似然决定是否接受这个新值 4. 重复多次后,建立起一个参数值的序列,这个序列的分布就近似后验分布
特点: - 贝叶斯方法中最常用 - 计算量大,速度慢 - 但能处理复杂的高维问题
常见算法:Metropolis-Hastings、Gibbs 抽样、Hamiltonian MCMC 等
变分贝叶斯 (Variational Bayes)¶
原理:用一个简单的分布去近似复杂的后验分布
特点: - 比MCMC快 - 但近似的准确性不如MCMC - 适合实时应用、大数据
参数估计实践中的常见问题¶
1. 模型收敛到局部最优¶
不同的初值可能导致不同的最优解,从而陷入局部最优
建议: - 多次运行优化,每次用不同的随机初值 - 比较结果,选择最好的那个 - 或者用网格搜索初步缩小范围
2. 参数边界与约束¶
参数通常有合理的范围: - 学习率 \(\alpha \in [0,1]\) - 逆温度 \(\beta > 0\) - 概率 \(p \in [0,1]\)
建议: - 在优化时设置参数边界 - 或使用变换(如 logit、softmax)使无限制参数映射到有限范围
3. 计算模型不收敛¶
可能原因: - 模型过于复杂,参数太多 → 减少参数或增加数据 - 优化器选择不当 → 尝试其他算法 - 数据质量差 → 检查数据清洗
4. 过拟合 (Overfitting)¶
问题:模型参数太多,导致它反映的是数据噪声,而不是真正的数据规律
症状: - 模型能完美拟合训练数据(100%准确) - 但在新数据上表现很差
解决方法: - 加入正则项(L1/L2 惩罚项) - 使用交叉验证 - 减少参数数量
5. 模型/参数不可识别¶
问题:即使你有完美的数据,模型也可能无法“唯一地”锁定参数。这意味着模型中存在死结。
例子:假设你的模型公式是 \(Y = a + b \cdot X\),其中 \(a=1, b=2\)。
如果我给你 \(Y=5\) 和 \(X=2\) 的数据:你可能会说 \(a=1, b=2\)。但如果有人说 \(a=3, b=1\),这个模型在 \(X=2\) 时也能输出 \(Y=5\)!
这就叫参数不可识别。模型无法通过数据区分出哪一组参数是“真实的”。
与之相对,也存在模型不可识别的情况:两个模型都可能产生同样的数据。
如何诊断: - 查看相关性矩阵:如果发现两个参数的估算值相关系数极高(接近 1 或 -1),说明它们在相互补偿,无法区分。 - 参数漂移:多次拟合,发现同样的条件下,参数值总是在一个很大的范围内“乱跳”,而模型的拟合效果(Loss)却几乎没变。
解决方法: - 简化模型:去掉多余的参数,模型越简单越好(奥卡姆剃刀原则)。 - 增加任务约束:设计更丰富的实验条件,让不同参数的影响在数据中分离出来。 - 固定参数:将某个不敏感的参数固定为常数,不再让它参与拟合。
小结¶
- 构建流程:从假设→框架→数学形式→参数确定→预测→与数据比较
- 频率学派:找使数据最可能的参数 vs 贝叶斯学派:得到参数的分布
- 常用算法:最小二乘法(快,简单)/ MLE(灵活)/ MCMC(复杂但全面)
- 实践提示:注意初值、边界、过拟合
练习与思考¶
- 选择一个简单的模型(如线性回归),用伪数据进行参数拟合的演练。如果有编程基础,可以尝试用Python/R实现。
- 对比最小二乘法和MLE:什么情况下你会选择一个而不选择另一个?
- 解释贝叶斯方法中"先验"的作用。如果没有合理的先验,应该选择什么样的无信息先验?