神经网络技巧
1、检验神经网络
Reference:
2、特征标准化 (Feature Normalization)
1、minmax normalization (0 , 1)
2、std normalization (mean = 0, std = 1)
Reference:
3、选取好用的特征(Good Features)
以分类问题为例
1、避免无用信息,即:对于区分类别不大的特征要忽略掉
2、避免选取重复的特征,如:距离:1公里 = 2里,这两个特征是具有同样的意义的
3、避免复杂的特征,如:描述距离,两个地点的经纬度(A: 10,98 B:25,97)可以算出距离,但是已经有了一个A、B间的距离:3KM,我们选取复杂度更小的
Reference:
4、处理不均衡的数据
不均衡的数据,预测多的那一方准确率就能达到很高,神经网络在学习时,也会变成“多数派”
1、想办法获取更多的数据,使得数据均衡
2、换个评判方式
原因:对于不均衡数据,Accuracy和Cost变得不在那么重要(为什么不重要了?)
使用F1 score(or F-score)评判:
Confusion Matrix —-> Precision & Recall ——> F1 Score(or F-score)
3、重组数据
- 砍掉多数部分的一些数据
- 对少数部分的数据进行复制和生成(具体怎么做?)
4、使用其他机器学习方法
如:决策树,不均衡类别的数据并不会对所生成的决策树的性能有所影响
原因:决策树的每一个非叶子节点都是样本的特征,只有叶子节点是分类,在最终分类之前决策树只利用到了样本的特征和特征值,在最终分类时
5、修改算法
例如:Sigmoid函数,在x = 0 时,f(0) = 0.5
当f(x) > 0.5 时划分为正例
当f(x) < 0.5 时划分为反例
我们可以适当的提升 f(x) > ? 时的正反例划分,如:f(x) > 0.8时划分为正例,f(x) < 0.8时划分为反例
Reference:
5、激活函数(Activation Function)
使得线性不可分问题转化为一个非线性可分问题
Reference:
6、过拟合问题(Overfitting)
模型在训练集性能上很好,在实际问题中性能很差
1、L1/L2/… regularization
2、dropout
Reference:
7、加速神经网络的训练
SGD
Momentum
AdaGrad
RMSprop
Adam
Reference:
8、批标准化(Batch Normalization)
问题:输入层/隐藏层神经元的激活函数对于输入饱和
例如:对于Sigmoid函数,对于x <= -5,x >= 5的输入数据,神经元的输出变化值非常小(即:梯度会非常小),激活函数对于过大过小的输入不敏感
我们可以说,输入数据的分布对于激活函数来说是很重要的
Reference:
9、L1/L2 正规化(Regularization)
Reference:
神经网络的黑盒不黑
对于神经网络的每一层进行查看
特征(输入)——>代表特征——>更高级(抽象)的代表特征——>…..——>输出
其中:
‘’——>“: 表示神经网络的一层对于上一层的输出的处理
输入、输出是我们人类所能理解的
而神经网络中间层的特征抽象是人类很难以理解的,但是对于计算机来说很容易理解
Reference:
神经网络的进化
基于遗传算法、进化策略使得神经网络得以‘’代代进化‘’,即:每代神经网络对于目标问题的解更优,或说泛化误差更低。
Reference:
[什么是神经网络进化? What is Neuro-Evolution?](