接记录9,对于加速学习的方法还有
学习率衰减
方法一:α=1/(1+decay-rate*epoch-num) * α0
其中decay-rate为另一个超参,epoch-num是指遍历数据的次数
其他方法:指数下降、引入另一个超参K、离散阶梯式、手动manual
其中引入超参K时,可以选择除以epoch-num或者mini-batch的batch-size的平方根
但其实设定一个fixed的学习率然后去调整它,也会有不错的表现,所以学习率的衰减不会是我们首先要考虑的事情或者是首先要尝试的要点
Deciding what to do next下一步的决策
我们可以让机器学习系统正常工作的效率往往取决于我们对于机器学习项目过程中对于下一步做什么的决策
评估学习算法的性能
将数据集分割成训练集train和测试集test,在训练集上训练模型然后在test集上计算其成本函数
通过判断test和train集上的J,评估学习算法的性能,是否过拟合/欠拟合/just right,并且都需要注意的是test和train集上的J都不包括正则化项,因为已经拟合完且最小化了成本函数得到了w和b参数,直接带进去算error即可,也就无需正则化了
对于分类问题:
通常而言,除了计算loss,我们会使用test和train集上算法错误分类的比例来表示error
此时的错误分类就是原本的标签为0却被分类为1,1被分类为0
通过以上的idea,再进一步使得我们可以自动地选择一个好的模型
交叉验证集作为一个额外的数据集,我们将用于检查或信任检查check不同模型的有效性或真实性
在每个dev set上计算J,比较其中得到最小的J,此时没有对test集进行参数的拟合所以test集上的J是对泛化误差的公平估计
也可以应用在神经网络
在整个过程中,我们在train set上训练模型,在dev set上我们会使用这三个模型去计算J,从而选择其中J最小(最低交叉验证误差)的模型,对于我们模型的选择,参数的选择,多项式的degree数的选择都是对于train 和 dev set,而并没有对test集进行任何操作,只有在所有的选择/决定做出之后,即只有在最终决定一个模型作为最终的模型之后,才会利用test集对泛化误差进行估计,使得test集不会产生低于实际的乐观的估计
Diagnostic机器学习诊断
通过诊断可以深入了解what is/isn't working with a learning algorithm以此来获得指导去提升性能
bias和variance诊断(偏差和方差诊断)
当面对更高维度时我们无法画出其图像,只需要对于train和dev集上的J进行计算,比较Jtrain和Jcv就可以知道是过拟合、欠拟合还是同时有高偏差和高方差
正则化是如何影响偏差和方差(更实质讲,正则化参数lambda如何影响偏差和方差)
我们讨论这个问题的背景是在,我们需要拟合这个4次方多项式,并且使用了正则化
当lambda很大时,w就会趋向于0,当lambda很小时,极端情况为0,也就是没有采用正则化避免过拟合,于是当lambda增大时,其模型的复杂度将会降低,由此影响偏差和方差:
通过dev set选择合适的正则化参数lambda
我们可以通过在dev set上尝试不同的lambda值,在最小化成本函数之后得到的参数w和b,代入计算Jcv,选择其中Jcv最小的lambda值
在选择好Jcv最小的参数后,我们可以代入计算test集下的误差
如何判断Jcv或者Jtrain是大还是小呢(性能评估的判断标准)
以语音识别为例,这里的train error是指没有完整地正确转录的比例(与分类问题中是错误分类的比例相似)
为了去判断训练误差是否高,可以想到我们需要去比较训练误差和人类表现水平,因此判断训练误差是否高,需要有一个判断性能的基准
通过比较基准水平和training error,可以得出是否是high bias问题,通过比较training error和cv上的error,可以得出是否是high variance问题
当我们使用非结构化数据(音频,图像,文本等)时,人类水平的表现通常是一个很好的基准;或者使用已经应用过的算法/竞争者的算法表现;或根据之前的经验进行猜测