零、均值和方差
设随机变量 X ∼ F ( μ , σ 2 ) X \thicksim F(\mu, \sigma^2) X∼F(μ,σ2),且 X i X_i Xi 独立同分布于 F F F,则:
名称 | 符号 | 表达式 |
---|---|---|
总体均值 | μ \mu μ | 离散型1:
E
(
X
)
=
∑
i
=
1
n
x
i
p
i
E(X)=\sum_{i=1}^n{x_ip_i}
E(X)=∑i=1nxipi 连续型1: E ( X ) = ∫ − ∞ + ∞ x f ( x ) d x E(X)=\int_{-\infty}^{+\infty}{xf(x)dx} E(X)=∫−∞+∞xf(x)dx |
总体方差 | σ 2 \sigma^2 σ2 | 1 n ∑ i = 1 n ( X i − μ ) 2 \frac{1}{n}\sum_{i=1}^{n}{(X_i-\mu)^2} n1∑i=1n(Xi−μ)2 |
样本均值 (估计) | X ˉ \bar X Xˉ | 1 n ∑ i = 1 n X i \frac{1}{n}\sum_{i=1}^{n}{X_i} n1∑i=1nXi |
样本方差(估计) | S 2 S^2 S2 | 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 \frac{1}{n-1}\sum_{i=1}^{n}{(X_i-\bar X)^2} n−11∑i=1n(Xi−Xˉ)2 |
- E ( X ˉ ) = μ E(\bar X)=\mu E(Xˉ)=μ, D ( X ˉ ) = σ 2 n D(\bar X)=\frac{\sigma^2}{n} D(Xˉ)=nσ2
- E ( S 2 ) = n − 1 n σ 2 E(S^2)=\frac{n-1}{n}\sigma^2 E(S2)=nn−1σ2,当 n → ∞ n→∞ n→∞ 时, E ( S 2 ) = σ 2 E(S^2)=\sigma^2 E(S2)=σ2
概率论中,方差用于度量随机变量和其数学期望(即均值)之间的偏离程度。2
一、误差
1. 误差的来源
- 偏差 (bias) b b b
- 方差 (variance) σ 2 \sigma^2 σ2
2. 误差分析
假设待估计的值为 f ^ \hat f f^,我们训练出来的最佳值为 f ∗ f^* f∗,用 f ∗ f^* f∗来估计 f ^ \hat f f^,就需要评价其准确程度。
打个比方,将 f ^ \hat f f^ 看作靶心,做一次训练的 f ∗ f^* f∗ 看作打到靶上的弹孔,多个弹孔构成一个样本集合 X X X:
- 偏差:取这些弹孔的期望值 f ˉ \bar f fˉ(样本均值),即我们自己瞄准的位置,其 与靶心的距离 即为偏差。
- 方差: f ∗ f^* f∗到 f ˉ \bar f fˉ的距离,即我们 打出的点 和我们 瞄准的点 之前的距离。方差越大,点的离散程度越大。
越复杂的模型不一定能带来更好的结果,其点的散布程度越大,从而导致偏离程度可能越小。而简单的模型受到不同数据的影响比较小。
较简单的模型 | 较复杂的模型 |
---|---|
方差小,偏差大 | 方差大,偏差小 |
误差受偏差影响大 | 误差受方差影响大 |
欠拟合 | 过拟合 |
需要重新设计模型 (增加输入特征,换复杂模型) | 增加数据、正则化(平滑曲线) |
3. 减小误差
- 权衡偏差和方差
- 选一个模型,衡量两种误差使得总错误最小
训练好的模型,在我们自己的测试集上误差达到最小,但是在其它公共测试集上的误差不一定达到最小!
3.1 交叉验证
- 把训练集分为两组:训练集 + 验证集(用于选择最好的模型)
- 经过训练后,在验证集上测试,选出误差最小的模型 f ∗ f^* f∗
- 将 f ∗ f^* f∗ 用于公共测试集上,这时候的误差才能真正反映在私有测试集上得到的误差
- 不建议从公共测试集测试后,再回头考虑模型——这样会考虑公共测试集的偏差bias,不能真实反映在私有测试集得到的结果。
若担心训练集拆分的时候分的效果比较差,则可使用如下方法。
3.2 N-折交叉验证
将训练集分成N份,比如分成3份,每次拿1份作验证集,其他两份作训练集。
- 计算多次训练后每个模型的平均误差
- 选取平均误差最小的模型,在公共测试集上测试
二、梯度下降
1. 回顾
在回归问题3的第三步中,需要解决下面的最优化问题:
θ
∗
=
arg min
θ
L
(
θ
)
\theta^*=\argmin_\theta L(\theta)
θ∗=θargminL(θ)
L
L
L:损失函数
θ
\theta
θ:一组参数
这里假设一组有两个参数 { θ 1 , θ 2 } \{\theta_1, \theta_2\} {θ1,θ2},随机初始化一组参数,记作 θ 0 = [ θ 1 0 θ 2 0 ] \theta^0= \left[ \begin{matrix} \theta_1^0 \\ \theta_2^0 \end{matrix} \right] θ0=[θ10θ20].
参数更新:
[
θ
1
0
θ
2
0
]
=
[
θ
1
0
θ
2
0
]
−
η
[
∂
L
(
θ
1
0
)
/
∂
θ
1
∂
L
(
θ
2
0
)
/
∂
θ
2
]
\left[ \begin{matrix} \theta_1^0 \\ \theta_2^0 \end{matrix} \right]=\left[ \begin{matrix} \theta_1^0 \\ \theta_2^0 \end{matrix} \right]-\eta\left[ \begin{matrix} \partial L(\theta_1^0)/\partial \theta_1 \\ \partial L(\theta_2^0)/\partial \theta_2 \end{matrix} \right]
[θ10θ20]=[θ10θ20]−η[∂L(θ10)/∂θ1∂L(θ20)/∂θ2]
反复执行如下步骤:
- 在某点处计算一次梯度(方向)
- 向该方向移动
2. 梯度下降法的优化
Tip1:调整学习率
调整学习率就是调整梯度下降的步伐,步子太小,下降太慢,步子太大,很可能就跨过了局部最小点。
自适应学习率(Adaptive Learning Rates)原则:
- 学习率随着参数的更新越来越小
- 例如:在第 t 次训练时,学习率 η t = η / t + 1 \eta^t= \eta/\sqrt{t+1} ηt=η/t+1
- 最好不同的参数都给不同的学习率
Adagrad 算法
每个参数的学习率都把它除上之前微分的均方根。下表为参数更新对比:
常规梯度下降法 | Adagrad 算法 |
---|---|
w
t
+
1
←
w
t
−
η
t
g
t
w^{t+1} \leftarrow w^t - \eta^tg^t
wt+1←wt−ηtgt | w t + 1 ← w t − η t σ t g t w^{t+1} \leftarrow w^t-\frac{\eta^t}{\sigma^t}g^t wt+1←wt−σtηtgt |
- w w w 是某一个参数
- σ t \sigma^t σt 为之前参数的所有微分的均方根,对于每个参数都是不一样的
Adagrad 算法参数更新的过程:
解释:
Tip2:随机梯度下降法(Stochastic Gradient Descent)
常规梯度下降法 | 随机梯度下降法 |
---|---|
L o s s = ∑ n [ y ^ n − ( b + ∑ w i x i n ) ] Loss=\sum_n [\hat y^n - (b+\sum w_ix_i^n)] Loss=∑n[y^n−(b+∑wixin)] | L o s s n = [ y ^ n − ( b + ∑ w i x i n ) ] 2 Loss^n=[\hat y^n-(b+\sum w_ix^n_i)]^2 Lossn=[y^n−(b+∑wixin)]2 |
θ i = θ i − 1 − η ∇ L o s s ( θ i − 1 ) \theta^i=\theta^{i-1}-\eta\nabla Loss(\theta^{i-1}) θi=θi−1−η∇Loss(θi−1) | θ i = θ i − 1 − η ∇ L o s s n ( θ i − 1 ) \theta^i=\theta^{i-1}-\eta\nabla Loss^n(\theta^{i-1}) θi=θi−1−η∇Lossn(θi−1) |
这里的损失函数不需要处理训练集所有的数据,选取一个样本 x n x_n xn 即可
- 随机梯度下降更快:常规梯度下降法走一步要处理所有20个例子,但随机算法此时已经走了20步
Tip3:特征缩放(Feature Scaling)
- 解释:把不同的特征分布调整到同一个范围内
对于不同权重的参数,左边的梯度下降是顺着等高线切线法线方向走的;但对于差不多权重的参数来说,右边就可以向着圆心(最低点)走,这样更有效率。
做法 —— 正态分布标准化
- 对每个维度 i i i(绿色框)都计算平均数 m i m_i mi 和标准差 σ i \sigma_i σi
- 对第 r r r 个例子的第 i i i 个输入做 标准化 处理
3. 梯度下降的限制
- 容易卡在局部极值(非最小值)
- 有可能停在偏导值为0或趋于0的点(非极值点)