误差来源
无偏估计
E ( 1 N ∑ x n ) = 1 N ∑ n E x n = N N E x n = μ E(\frac{1}{N}\sum x^n)=\frac{1}{N}\sum_n Ex^n=\frac{N}{N}Ex^n=\mu E(N1∑xn)=N1∑nExn=NNExn=μ
V a r ( 1 N ∑ x n ) = σ 2 N Var(\frac{1}{N}\sum x^n)=\frac{\sigma ^2}{N} Var(N1∑xn)=Nσ2
有偏估计
S 2 = 1 N ∑ ( x n − 1 N ∑ x n ) 2 S^2=\frac{1}{N}\sum (x^n-\frac{1}{N}\sum x^n)^2 S2=N1∑(xn−N1∑xn)2
E S 2 = N − 1 N ES^2=\frac{N-1}{N} ES2=NN−1
过拟合和欠拟合
过拟合
- 方差大。
- 训练数据上误差小,但测试数据上误差大。
- 解决方法:
- 增加数据量:效率高,但往往不现实
- 加入正则化
欠拟合
- 偏差大。
- 模型无法较好地拟合训练数据。
- 解决方法:
- 在设置模型时加入更多特征(变量);
- 使模型更复杂,如提高变量次数。
模型选择
选择误差最小的模型。
在实际操作中,会有两组数据,一组是训练数据一组是测试数据。通常是:经训练数据训练后的模型,使用测试数据选出最好的模型,再交付使用。
但这样选出的模型在实际使用时有可能并不是最优的,对此有解决方法:
将训练数据分为训练子数据集和测试子数据集,用训练子数据集训练模型,测试子数据集选择模型,由此选择出来的模型在测试数据上的表现就与实际使用时的表现接近了。
N次交叉验证
将训练数据划分为N组,每次使用其中一组作为测试数据,其余作为训练数据。类似的操作会执行N次,训练出N个模型,计算各模型在测试数据上的平均误差,以此来选择模型。
梯度下降
θ ∗ = a r g m i n θ L ( θ ) \theta^*=arg\ min_\theta L(\theta) θ∗=arg minθL(θ)
θ ′ = [ θ 1 1 , θ 2 1 ] T \theta^{\prime}=[\theta ^1_1, \theta^1_2]^T θ′=[θ11,θ21]T
Steps
Step1
∇ L ( θ ′ ) = [ ∂ L ∂ θ 1 1 , ∂ L ∂ θ 2 1 ] \nabla L(\theta^{\prime})=[\frac{\partial L}{\partial \theta ^1_1},\frac{\partial L}{\partial \theta ^1_2} ] ∇L(θ′)=[∂θ11∂L,∂θ21∂L]
计算 ∂ L ∂ θ 1 1 \frac{\partial L}{\partial \theta ^1_1} ∂θ11∂L和 ∂ L ∂ θ 2 1 \frac{\partial L}{\partial \theta ^1_2} ∂θ21∂L
Step2
θ 1 2 = θ 1 1 − η ∂ L ∂ θ 1 1 \theta ^2_1 = \theta^1_1 -\eta \frac{\partial L}{\partial \theta ^1_1} θ12=θ11−η∂θ11∂L
θ 2 2 = θ 2 1 − η ∂ L ∂ θ 2 1 \theta ^2_2 = \theta^1_2 -\eta \frac{\partial L}{\partial \theta ^1_2} θ22=θ21−η∂θ21∂L
迭代过程以此类推
注意
- 要小心地选择
η
\eta
η
- 较小:步长过小,计算所需时间过长;
- 较大:可能达不到最小值,会直接在步长内部跳过最小值处。
- 解决方法:绘出迭代次数和
L
(
θ
)
L(\theta)
L(θ)值的变化走势图
自动调整 η \eta η
每次都减小一丢丢
所有参数共用一个学习率,并每次迭代减小学习率一丢丢,如:
η t = η t + 1 \eta ^t =\frac{\eta}{\sqrt{t+1}} ηt=t+1η
每个参数各设置一个学习率,各自调整
如adagrad:
θ t + 1 = θ t − η t σ t g t \theta ^{t+1}=\theta ^t-\frac{\eta ^t}{\sigma ^t}g^t θt+1=θt−σtηtgt 该式子可以简化为:
θ t + 1 = θ t − η t ∑ i = 0 t ( g t ) 2 g t \theta ^{t+1}=\theta ^t-\frac{\eta ^t}{\sqrt{\sum_{i=0}^t(g^t)^2}}g^t θt+1=θt−∑i=0t(gt)2ηtgt
其中 g t = ∂ L ( θ t ) ∂ θ t g^t=\frac{\partial L(\theta ^t)}{\partial \theta ^t} gt=∂θt∂L(θt), σ t = 1 t + 1 ∑ i = 0 t ( g t ) 2 \sigma ^t=\sqrt{\frac{1}{t+1}\sum_{i=0}^t (g^t)^2} σt=t+11∑i=0t(gt)2, η t = η ( t + 1 ) \eta ^t =\frac{\eta}{\sqrt(t+1)} ηt=(t+1)η
- 迭代过程中将每次的 g 0 g^0 g0~ g t g^t gt用列表存储起来,每次计算 σ t \sigma ^t σt时取用
- 其中 σ t \sigma ^t σt用于模拟二次微分
随机梯度下降
随机选取某个 x n x^n xn,计算 L ( θ ) = [ ( ^ y ) n − ( b + ∑ i w i x i n ) ] 2 L(\theta)=[\hat(y)^n-(b+\sum_iw_ix_i^n)]^2 L(θ)=[(^y)n−(b+∑iwixin)]2
计算 θ i = θ i − 1 − η ∇ L ( θ i − 1 ) \theta^i=\theta^{i-1}-\eta\nabla L(\theta^{i-1}) θi=θi−1−η∇L(θi−1),再计算 L ( θ i ) L(\theta^i) L(θi),以此类推…
即不用过完所有数据再更新参数,而是每使用一个数据就更新一次参数,比之前的方法下降得更快。
特征缩放Feature Scaling
计算一组数据的
m
i
=
1
R
∑
r
=
1
R
x
i
r
m_i=\frac{1}{R}\sum_{r=1}^Rx_i^r
mi=R1∑r=1Rxir,
σ
i
=
1
R
∑
r
=
1
R
(
x
r
−
m
i
)
\sigma_i=\sqrt{\frac{1}{R}\sum_{r=1}^R(x^r-m_i)}
σi=R1∑r=1R(xr−mi),则缩放后:
x i r = x i r − m σ i x_i^r=\frac{x_i^r-m}{\sigma_i} xir=σixir−m
- 类似于正态分布的标准化
多变量泰勒展开式
h ( x , y ) = h ( x 0 , y 0 ) + ∂ h ( x 0 , y 0 ) ∂ x ( x − x 0 ) + ∂ h ( x 0 , y 0 ) ∂ y ( y − y 0 ) h(x,y)=h(x_0,y_0)+\frac{\partial h(x_0,y_0)}{\partial x}(x-x_0)+\frac{\partial h(x_0,y_0)}{\partial y}(y-y_0) h(x,y)=h(x0,y0)+∂x∂h(x0,y0)(x−x0)+∂y∂h(x0,y0)(y−y0)+二次式三次式
当 x → x 0 x\to x_0 x→x0, y → t 0 y\to t_0 y→t0时有:
h ( x , y ) = h ( x 0 , y 0 ) + ∂ h ( x 0 , y 0 ) ∂ x ( x − x 0 ) + ∂ h ( x 0 , y 0 ) ∂ y ( y − y 0 ) h(x,y)=h(x_0,y_0)+\frac{\partial h(x_0,y_0)}{\partial x}(x-x_0)+\frac{\partial h(x_0,y_0)}{\partial y}(y-y_0) h(x,y)=h(x0,y0)+∂x∂h(x0,y0)(x−x0)+∂y∂h(x0,y0)(y−y0)
梯度下降的局限性
- 更新参数后 L ( θ ) L(\theta) L(θ)值不一定会减小
- 可能会卡在局部最小,拐点或拐点附近(当梯度趋于0时容易认为已经在最小值附近而停止继续迭代)