神经网络
梯度检验
有时由于一些不易觉察的错误,梯度下降算法虽然代价在减小,但最终可能达不到最优解。因此在测试刚建立的模型时,还可以引入梯度检验来确定每个参数在网络中的导数(梯度)是不是正常。
梯度检验方法很简单:在代价函数上沿着切线方向选择两个很近的点,求两个代价的平均(导数定义)。
权重初始化
对于LR算法,权重初始化为0是可行的;但在神经网络中,如果初始权重都相同(包括全为0的情况),将导致后面层的神经元输出也相同。
因此对于神经网络,合理的方式是对所有权重随机赋值。
输出
每个输出层的神经元,其结果是 [0,1] ,因此该层神经元数 == 类别数。
隐含层
隐含层越多精度越高(但要考虑随之而来的复杂度上升的情况及过拟合的可能),对于多个隐含层的情况,一般每层的神经元数目相等。
机器学习Tips
数据的分布
假设设计了10个模型,用 train set 训练,用 cv set 筛选出最优的模型,用 test set 得到该模型的推广精度(如果既用 test set 选模型,又用其报告精度,会有过拟合的嫌疑,精度不可信)。
欠拟合与过拟合的判定
比较 train error 与 cv error
图2. 欠拟合 OR 过拟合(图片来源:andrew课程视频)
很好理解,若 train error 与 cv error 都较高,则为欠拟合;若 train error 较低而 cv error 较高,则为过拟合。
训练集大小的选择
通过对模型是否为 欠拟合 还是 过拟合 来做决定
图3. 训练集大小的选择(图片来源:andrew课程视频)
上图左是欠拟合,右是过拟合的情况。也很好理解,欠拟合其实就是模型太简单,这时增加 train set 也没什么作用;过拟合就是模型较复杂,而目前的样本过于集中或数目太少,因此增加 train set 会有提升。
正负样本比例失衡的情况
在实际中这种情况很常见,需要预测的正样本往往是小概率事件。
假设算法对所有样本都输出 0 (占大概率的事件),那么其精度是很高的,但我们都知道,然并卵。。。
因此需要另外的准则来评估该算法的精度
图4. 查准率 和 差全率
查准率(Precision) = TP / ( TP + FP )
查全率(Recall) = TP / (TP + FN)
这样,上面假设的Recall为0
一般希望模型在这2个指标上的表现尽可能均衡:MAX[ ( Precision*Recall )/(Precision+Recall) ]
总结
1. 对过拟合模型,可以考虑:增加训练样本、减少特征、提高正则化参数lambda
2. 对欠拟合模型,可以考虑:增加特征、提高模型复杂度、降低lambda
3. 从简单的算法开始,先把模型搭建好,通过模型分析来修正思路
4. 画出学习曲线,对交叉验证集的误差做分析