偏差和方差
偏差
初始模型训练完成后,首先要知道算法的偏差高不高
如果偏差较高,试着评估训练集或训练数据的性能。如果偏差的确很高,甚至无法拟合训练集,那么你要做的就是:
- 选择一个新的网络,比如含有更多隐藏层或者隐藏单元的网络,
- 花费更多时间来训练网络,
- 或者尝试更先进的优化算法,
- 你也可以尝试其他方法,可能有用,也可能没用。
采用规模更大的网络通常都会有所帮助,延长训练时间不一定有用,但也没什么坏处。
训练学习算法时,需要不断尝试这些方法,直到解决掉偏差问题,这是最低标准,反复尝试,直到可以拟合数据为止,至少能够拟合训练集。
方差
一旦偏差降低到可以接受的数值,检查一下方差有没有问题,为了评估方差,我们要查看验证集性能,我们能从一个性能理想的训练集推断出验证集的性能是否也理想。
如果方差高,可以:
- 采用更多数据,
- 正则化。
最好的解决办法就是采用更多数据,如果你能做到,会有一定的帮助。
但有时候,我们无法获得更多数据,我们也可以尝试通过正则化来减少过拟合。
有时候我们不得不反复尝试,但是,如果能找到更合适的神经网络框架,有时它可能会一箭双雕,同时减少方差和偏差。如何实现呢?想系统地说出做法很难,总之就是不断重复尝试,直到找到一个低偏差,低方差的框架,这时你就成功了。
关于正则化:
一、L2 regularization
The standard way to avoid overfitting is called L2 regularization. It consists of appropriately modifying your cost function,
from:
J = − 1 m ∑ i = 1 m ( y ( i ) log ( a [ L ] ( i ) ) + ( 1 − y ( i ) ) log ( 1 − a [ L ] ( i ) ) ) (1) J = -\frac{1}{m} \sum\limits_{i = 1}^{m} \large{(}\small y^{(i)}\log\left(a^{[L](i)}\right) + (1-y^{(i)})\log\left(1- a^{[L](i)}\right) \large{)} \tag{1} J=−m1i=1∑m(y(i)log(a