机器学习的框架
-
训练数据:包括 xi{x^i}xi 和 y^i\hat{y}^iy^i

-
training:

-
测试数据:只有 xN+M{x^{N+M}}xN+M

一、总览–如何达到更好的效果?

(一)检查model在training data的loss
1. loss较大,有两个可能
(1) Model Bias太过简单
问题:Model不包含任何一个可以让loss变小的function(海里面根本没针)

解决:重新设计Model来增加复杂度
a. 增加输入的 feature (eg.前一天的资讯增加为前56天的咨询)
b. 使用Deep Learning来设置一个更大的Model,增加弹性

(2)OPtimization Issue
问题:存在loss最低的function,但是gradient 算法没办法找到这个function. (针在大海里却捞不到)

(3)怎么分辨是哪个问题
对比
- 测试数据,20层的loss比56层的loss低,并不一定是``过拟合
- 56层肯定比20层的弹性大
- 训练数据,20层的loss也比较低,说明56层的Optimization issue没有做好

判断方法
- 先训练一下简单的Model
- 然后训练一个深的Model
- 如果深的loss反而更大,说明optimization issue有问题
2. loss小了
(二)检查model在testing data的loss
1. loss较大
(1)过拟合
**问题:**过拟合是在训练数据上loss很小,但在测试数据上loss很大


- 当输入为训练的数据,它就直接对应
- 不是训练过的数据,它就取随机值了
解决
- 更多的训练数据( 最简单 不建议)
- 数据扩增
- 限制模型(弹性不大)
- 减少参数、共享参数
- 减少特征features
- early stopping:设置提前结束的条件
- Regularization正则化
- Dropout:将部分神经元进行禁用
但模型的限制不能太多了,不然又成了Model bias太过简单
偏差-复杂度权衡

- 在训练集上,model更复杂,loss越小
- 在测试集上,有时候Model越复杂,loss反而越大
- 选择一个model,既不是太复杂也不是太简单,使得Model在测试集上面的loss最低
怎么选呢
Cross Validation交叉验证
方法:
- 将训练集分为训练集(90%)和验证集(10%)
- 在训练集上面训练出来的Model,在验证集上衡量它的分数
- 选择后,放到公共测试集上测试的结果可以反应私有测试集的结果

怎么分训练集和验证集呢,为防止分的效果不好可以采用
2. N-fold Cross Validation(N折交叉验证)
方法
- 将训练集分为n等份,每份分别当一次验证集,其它为训练集
- 将现有的model在每种集上面分别衡量分数
- 算出每个model的平均分数,选出最好的那个来作用于公共测试集上

(2)Mismatch
出现原因与overfitting无关
训练集和测试集的分布不一样
二、类神经网络训练不起来——optimization失败
(一)局部最小值(local minima)和鞍点(saddle point)
- 当发现无论如何改变参数,训练损失都不会减少
- 这时候的位置的梯度(
gradient)太接近于0,这个点称为临界点(critical point)- 梯度接近于0,参数更新的步伐也接近于0,导致训练损失不减少
- 临界点分为
local minima和saddle point

区别:
local minima:没有路可走,四周的loss都比较高
saddle point:逃离这个点,有路使得loss更低
如何辨别临界点的类型
需要用到一点数学知识。选择跳过
2419

被折叠的 条评论
为什么被折叠?



