零、train loss与test loss结果分析
1、train loss 不断下降,test loss不断下降,说明网络仍在学习;(最好的)
2、train loss 不断下降,test loss趋于不变,说明网络过拟合;(max pool或者正则化)
3、train loss 趋于不变,test loss不断下降,说明数据集100%有问题;(检查dataset)
4、train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;(减少学习率)
5、train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。(最不好的情况)
一、将数据分为训练数据和测试数据
一般用于训练的数据可以是所有数据的70%,剩下的30%可以拿来测试学习结果。为什么要分开成两批,就像我们读书时的时候, 考试题和作业题大部分都是不一样的吧,这也是同一个道理。
二、观察曲线
观察误差曲线和精确度曲线、R2分数在回归问题、F1分数用于测量不均衡数据的精度。
三、特征选择,选择好的特征
1、避免无意义特征,比如颜色都差不多相同;
2、避免重复特征,比如重量单位斤和千克;
3、避免复杂特征,比如让机器学习预测从A走到B的时间,如果我有两种输入特征信息可以选,一种是 A, B的经纬度,另一种是 AB间的距离。虽然这些信息都属于地理位置的信息,不过让计算机计算经纬度可能会比计算距离麻烦很多。
四、处理不均衡数据
1、获取更多数据
2、更换评判方式,通常, 我们会用到 准确率 accuracy, 或者误差 cost来判断机器学习的成果. 可是这些评判方法在不均衡数据面前, 高的准确率和低的误差变得没那么重要。所以我们得换一种方式评判. 通过 confusion matrix 来计算 precision 和 recall, 然后通过 precision 和 recall 再计算f1 分数.这种方式能成功地区分不均衡数据, 给出更好的评判分数;
3、重组数据
方式一: 复制或者合成少数部分的样本,使之和多数部分差不多数量。
方式二: 砍掉一些多数部分, 使两者数量差不多;使用其他机器学习方法:如果使用的机器学习方法像神经网络等, 在面对不均衡数据时, 通常是束手无策. 不过有些机器学习方法, 像决策树, decision trees 就不会受到不均很数据的影响;修改算法,如果你用的是 Sigmoid 的激励函数, activation function, 他会有一个预测门槛, 一般如果输出结果落在门槛的这一段,预测结果为梨,如果落在这一段, 预测结果为苹果,不过因为现在的梨是多数派, 我们得调整一下门槛的位置, 使得门槛偏向苹果这边,只有很自信的时候,模型才会预测这是苹果。让机器学习,学习到更好的效果。
五、特征数据的标准化
1、一种叫做 min max normalization,将所有特征数据按比例缩放到0-1的这个取值区间,有时也可以是-1到1的区间;
2、还有一种叫做 standard deviation normalization,会将所有特征数据缩放成平均值为0,方差为1。使用这些标准化手段,我们不仅可以快速推进机器学习的学习速度,还可以避免机器学习 学得特扭曲。
六、批标准化
Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent. 而且在每批数据进行前向传递 forward propagation 的时候, 对每一层的全连接和激励函数之间都进行 normalization 的处理。
七、过拟合
1、增加数据量;
2、l1,l2正规化,原始的cost误差是cost = 预测值-真实值的平方。现在把 误差值W 也考虑进来,变成一种惩罚机制. l1 正规化是绝对值abs,L2 正规化只是绝对值换成了平方;
3、dropout,在训练的时候, 我们随机忽略掉一些神经元和神经联结,使这个神经网络变得”不完整”,用一个不完整的神经网络训练一次,到第二次再随机忽略另一些,变成另一个不完整的神经网络。有了这些随机 drop 掉的规则,我们可以想象其实每次训练的时候,我们都让每一次预测结果都不会依赖于其中某部分特定的神经元。像l1,l2正规化一样,过度依赖的 W ,也就是训练参数的数值会很大,l1, l2会惩罚这些大的参数。Dropout 的做法是从根本上让神经网络没机会过度依赖。
八、交叉验证
神经网络也有很多参数, 我们怎么确定哪样的参数能够更有效的解决现有的问题呢?交叉验证就是最好的办法了。
九、激活函数选择
在卷积神经网络 Convolutional neural networks 的卷积层中,推荐的激励函数是relu;在循环神经网络中recurrent neural networks,推荐的是tanh或者是relu。
十、加速神经网络训练速度
原理是梯度下降的方式不一样,分别有Stochastic Gradient Descent (SGD)、Momentum、AdaGrad、RMSProp、Adam,默认用 adam 就好了, 效果比较好。