误差来源
主要分为两类 variance 和 bias,如上图
variance
简单的模型比较不容易受样本数据的影响,简单的模型variance较小,复杂的模型有比较大的variance
bias
简单的模型有较大的bias,复杂的模型有较小的bias
error来源于 bias较大 —— underfitting
error来源于 variance较大 —— overfitting
如果模型不能在训练集上得到较好的效果 ➡️ large bias ➡️ underfitting ➡️ redesign model(add more features as input, use a more complex model)
如果模型在训练集上效果较好,但在测试集上有很大的错误 ➡️ large variance ➡️ overfitting ➡️ more data, regularization(使曲线变平滑)
usually need a trade-off between bias and variance
cross validation
Training Data -> Training Set + Validation Set (Select Model)
N-fold cross validation
将数据分成几份(i.e. 3份),其中 任选一份做测试数据,其余两份做训练数据;重复训练多次,如3次
梯度下降
寻找使损失函数的值最小的参数的方法
tuning learning rate
popular 和 simple idea:每训练几轮就对学习率减小一个系数
- 开始时,选取较大的学习率
- 训练几轮之后,减小学习率
- 1/t decay:
- η t = η t + 1 \eta^t = \frac{\eta} {\sqrt{t+1}} ηt=t+1η
给不同的参数选用不同的学习率,小tips:(adaptive learning)
- Adagrad: 把每个参数的学习率除以它的之前的导数的均方根
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
$ \sigma^t $ root mean square(均方根,平方平均再开根号) of 前一层参数w的导数,对每个参数是独立的
σ
t
=
1
t
+
1
∑
i
=
0
t
(
g
i
)
2
\sigma^t = \sqrt{\frac{1}{t+1}\sum_{i=0}^t(g^i)^2}
σt=t+11i=0∑t(gi)2
化简后:
w
t
+
1
←
w
t
−
η
∑
i
=
0
t
(
g
i
)
2
g
t
w^{t+1} \leftarrow w^t - \frac{\eta}{\sqrt{\sum_{i=0}^t(g^i)^2}}g^t
wt+1←wt−∑i=0t(gi)2ηgt
-
stochastic gradient descent 随机梯度下降
随机选取一个x^n, 计算其损失函数的值:
L n = ( y ^ n − ( b + ∑ w i x i n ) ) 2 L^n = (\hat y^n - (b+\sum w_ix_i^n))^2 Ln=(y^n−(b+∑wixin))2
根据其计算梯度,更新参数
θ i = θ i − 1 − η ∇ L n ( θ i − 1 ) \theta^i = \theta^{i-1} - \eta \nabla L^n(\theta^{i-1}) θi=θi−1−η∇Ln(θi−1)
训练速度更快 -
feature scaling 特征缩放
使不同的特征有相同的范围,消除权重本身大小对模型训练的影响
对每个维度i,做特征缩放:
x i r ← x i r − m i σ i x_i^r \leftarrow \frac{x_i^r - m_i}{\sigma_i} xir←σixir−mi
其中,m_i 是 均值, σ_i是标准差
标准化
gradient descent的局限性:
可能会陷入局部最优 stuck at local minimal
卡在梯度为0的时候 stuck at saddle point
在高原地区梯度下降的非常慢 very slow at the plateau