CS229 Lecture 11
课程要点:
Bayesian statistics and regularization
Online Learning
Advice for apply ML Algorithm
贝叶斯统计和正则化
上节课讲了如何通过特征选择减少特征数目,进而降低算法出现过拟合的风险,本节会介绍另一种降低过拟合的方法,即正则化,这种方法不会减少特征的数目。
前面讲述过线性回归其通过最大似然的方式求解 θ \theta θ
max θ ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) \mathop {\max }\limits_{\theta}\;\prod_{i=1}^{m}p(y^{(i)}|x^{(i)};\theta) θmaxi=1∏mp(y(i)∣x(i);θ)
这种通过极大似然求解 θ \theta θ实际上是频率学派的观点,他们认为 θ \theta θ并不是变量,而是确定的。它影响着 y y y。我们拿到的一组数据样本是由 θ \theta θ控制者 y y y与 x x x,虽然无法确切的知道 θ \theta θ是什么,但 θ \theta θ并不是变量,因此频率学派认为想得到 θ \theta θ,找到一个 θ ^ \hat{\theta} θ^使得 x ( i ) x^{(i)} x(i)出现那么 y ( i ) y^{(i)} y(i)也以最大概率出现,那么这个 θ ^ \hat{\theta} θ^就十分贴近 θ \theta θ了。
贝叶斯学派的观点认为 θ \theta θ是随机变量,当我们想预测房价的时候,我们会首先猜测 θ \theta θ的分布,即基于其一个先验概率。假设 θ \theta θ服从均值为 0 0 0方差为 τ 2 I \tau^2I τ2I的高斯分布。
p ( θ ) − p r i o r p(\theta) -prior p(θ)−prior
θ ∼ N ( 0 , τ 2 I ) \theta\sim N(0,\tau^{2}I) θ∼N(0,τ2I)
在给予训练数据后
S = { ( x ( i ) , y ( i ) ) } i = 1 m S=\{(x^{(i)},y^{(i)})\}_{i=1}^{m} S={(x(i),y(i))}i=1m
计算 θ \theta θ的后验概率为:
P ( θ ∣ S ) ∝ ( ∏ i = 1 m P ( y ( i ) ∣ x ( i ) , θ ) ) P ( θ ) P(\theta|S)\propto(\prod_{i=1}^{m}P(y^{(i)}|x^{(i)},\theta))P(\theta) P(θ∣S)∝(i=1∏mP(y(i)∣x(i),θ))P(θ)
可以注意到上式中的 θ \theta θ和 x ( i ) x^{(i)} x(i)是通过 , , ,分隔的,这里表示 θ \theta θ是个变量。
当由新的数据 x x x时,其预测值为 y y y的概率为:
P ( y ∣ x , S ) = ∫ θ P ( y ∣ x , θ ) p ( θ ∣ S ) d θ P(y|x,S)=\int_{\theta}P(y|x,\theta)p(\theta|S)d\theta P(y∣x,S)=∫θP(y∣x,θ)p(θ∣S)dθ
关于 y y y的数学期望为:
E [ y ∣ x , S ] = ∫ y y P ( y ∣ x , S ) d y E[y|x,S]=\int_{y}yP(y|x,S)dy E[y∣x,S]=∫yyP(y∣x,S)dy
从上面的式子中很容易看出,要真正求解 θ \theta θ的后验概率是很难的, θ \theta θ是 n + 1 n+1 n+1维向量,而且还要做积分。
因此在实际应用中我们会使用一个近似方法替代后验概率,通常使用MAP(maximum a posteriori)估计 θ \theta θ:
θ ^ M A P = a r g max θ ∏ i = 1 m p ( y ( i ) ∣ x ( i ) , θ ) p ( θ ) \hat{\theta}_{MAP}=arg\;\mathop {\max }\limits_{\theta}\;\prod_{i=1}^{m}p(y^{(i)}|x^{(i)},\theta)p(\theta) θ^MAP=argθmax∏i=1mp(y(i)∣x(i),θ)p(θ)
预测时:
h
(
θ
^
)
=
θ
^
M
A
P
T
x
h(\hat{\theta})=\hat{\theta}_{MAP}^{T}x
h(θ^)=θ^MAPTx
上面式子中前半段实际和极大似然是一致的,后半段多乘以了 p ( θ ) p(\theta) p(θ),通常会选 θ \theta θ的先验分布为 θ ∼ N ( 0 , τ 2 I ) \theta\sim N(0,\tau^{2}I) θ∼N(0,τ2I),这样估计出来的 θ \theta θ通常会比较小,这就意味着 n + 1 n+1 n+1维上有很多参数接近0,那么就算是多项式,即使 n ≫ m n\gg m n≫m也可以尽量的避免过拟合。
极大似然尝试最小化 m i n ∑ ∣ ∣ y ( i ) − θ T x ( i ) ∣ ∣ 2 min\sum||y^{(i)}-\theta^{T}x^{(i)}||^{2} min∑∣∣y(i)−θTx(i)∣∣2,我们知道如果数据点较少,用极大似然估计的化很有可能会出现过拟合的情况,而使用贝叶斯由于大多数参数接近于0,拟合出的曲线就无较大波动。使用先验概率就相当于 m i n ∑ ∣ ∣ y ( i ) − θ T x ( i ) ∣ ∣ 2 + λ ∣ ∣ θ ∣ ∣ 2 min\sum||y^{(i)}-\theta^{T}x^{(i)}||^{2}+\lambda||\theta||^{2} min∑∣∣y(i)−θTx(i)∣∣2+λ∣∣θ∣∣2,式子后面的 ∣ ∣ θ ∣ ∣ 2 ||\theta||^{2} ∣∣θ∣∣2起惩罚作用,这样会使得拟合的曲线更为平滑,即使 θ \theta θ维度很高。
Online Learning
前面提及的基本都是批量学习,即给予一批(batch)数据,然后我们根据这批数据学习出一个模型来,然后通过这个模型根据 x x x去预测 y y y。
但是在线学习不同与批量学习,在线学习的数据是不断过来的,模型需要不断的学习,比如又一个在线学习的分类学习算法,最开始给一个 x ( 1 ) x^{(1)} x(1)然后预测 y ( 1 ) y^{(1)} y(1)是1还是0,你预测出 y ^ ( 1 ) \hat y^{(1)} y^(1)后,告诉你真正的 y ( 1 ) y^{(1)} y(1),如果 y ^ ( 1 ) ≠ y ( 1 ) \hat y^{(1)}\neq y^{(1)} y^(1)=y(1),需要更新模型。,给予 x ( ) 2 x^{()2} x()2预测 y ( 2 ) y^{(2)} y(2),预测出的值为 y ^ ( 2 ) \hat y^{(2)} y^(2),如果 y ^ ( 2 ) ≠ y ( 2 ) \hat y^{(2)}\neq y^{(2)} y^(2)=y(2),需要更新模型。给予 x ( 3 ) x^{(3)} x(3)…,以此类推。不断预测不断学习的过程。
现在学习总的在线误差计算方式为 ∑ i = 1 m 1 { y ^ ( 2 ) ≠ y ( 2 ) } \sum_{i=1}^{m} 1\{\hat y^{(2)}\neq y^{(2)}\} ∑i=1m1{y^(2)=y(2)}
例如前面学习的感知器学习算法就是一种在线学习。
其初始化
θ
=
0
⃗
\theta=\vec{0}
θ=0。
其参数的更新策略是
θ
(
k
+
1
)
=
θ
(
k
)
+
α
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
(
i
)
\theta^{(k+1)}=\theta^{(k)}+\alpha(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}
θ(k+1)=θ(k)+α(y(i)−hθ(x(i)))x(i)
实际上可以通过数学证明,感知器算法的错误率实际上是有上界的,而且上界和具体的学习样本数和特征维度无关。
详细证明请参见cs229-notes6
The perceptron and large margin classifiers
应用机器学习算法的建议
- 算法模型bug诊断
- 错误分析和消蚀(ablative)分析
- 过早优化
如果有一个反垃圾的算法,测试误差高达20%,这显然是不可接受的,那么如何去分析优化这个问题,那些方向优化才是正确的呢?
- 找到更多的训练数据
- 使用更少的特征
- 用更多的特征
- 改变邮件提取的特征
- 运行更多轮的梯度下降
- 使用牛顿方法
- 使用SVM方法
上面有很多方法可选,但是到底要使用那个方法,首先需要分清问题的原因处在何处,而不是着急去尝试。否则可能会浪费更多的时间。
算法测试误差高首先分清是高方差导致还是高偏差导致。
上图表现的是算法存在高方差,训练误差和测试误差随着样本变化的情况。可以看到后期随着样本数目的增多,测试误差依然下降,测试误差和训练误差差距较大。那么可以通过增加样本数,减少训练误差和测试误差的差距。之所以随着训练样本的增多,训练误差会增加,是因为样本越多也就越难以拟合。
上图表现的是算法存在高偏差,训练误差和测试误差随着样本变化的情况。可以看到后期随着样本数目的增多,测试误差基本不再下降,且训练误差过大,训练误差和测试误差差距较小。就算增加样本数目也不可能使得训练误差下降。(高偏差类似于用一个以此方程去拟合一个二次方程的数据)
通过上面的论述可知,更多的样本和更小的特征可以修复高方差问题。而更多的特征和改变特征可以修复高偏差问题。
如果说你的学习算法分为很多步,那么可以应用错误分析和消蚀分析的方法。
错误分析主要是假设当前步骤做的不够好,替换一个更好的解决方案,观察其是否对准确率有较大提升,进而确定我们重点优化的方向。
消蚀分析就是抽出某部分,观察其对准确率的影响,同样可以观察到某部分对整个算法的重要程度。
一般是快速作出你的算法来,然后再诊断你算法准确率不佳的原因,而不是一开始就小心翼翼的设计特征的选取等细枝末节。有时候算法不佳问题根本不是出在你认为的地方,算法构建出来后通过诊断分析其原因渐渐提升其准确率,才是更为正确应用机器学习算法的方式。避免过早的优化浪费时间。