几个常见问题:
1、为什么损失函数采用最小二乘法,而不是绝对值形式,也不采用最小三乘法?关于这个问题的答案,后面的课程会给出,主要是从最大似然函数角度给出的合理化解释,如果你追问,最大似然函数就代表科学的、合理的吗?那你听说过大数定律、极限中心定律吗?感觉有点像哲学问题了。
2、梯度下降法中提到学习率的问题,我们的目标函数是一个凸二次函数(就是你吃饭的碗的形状),我们知道学习率大会导致震荡,太小会走的慢,那么有没有必要动态调节这个学习率的大小,刚开始下降时可以先大,快收敛时再变小?这个是没有必要的,理由是公式中为(学习率*梯度)而梯度就是逐渐减小的。但是在实际算法代码中,Python版《机器学习实战》中P82-83给出一种改进策略,学习率是逐渐下降的,但又不是严格下降的,部分代码为:
for j in range(numIter):
for i in range(m):
alpha = 4/(1.0+j+i)+0.01
所以alpha每次减少1/(j+i),当j<<max(i),就不是严格下降的。模拟退火算法就是这么干的。
3、随机梯度下降能找到使代价函数最小的值么?不见得,但是随着迭代次数的增加,它会在最优解附近晃悠,但是这个值对我们而言就够用了,机器学习本身就不是100%正确的算法。
4、多大的数据量我们认为比较大?批量梯度下降一般可承受多大的数据量?我们一般认为1000左右各特征值左右吧,但凡事也不是绝对的,要结合自己的数据特点去尝试一下。
5、既然有正规组方程,可以直接求解,何必使用梯度下降法?因为正规方程组涉及矩阵求逆操作,但并不是任何时候这个逆矩阵都存在,比如样本数少于特征值数时即m<n,另外,当样本数很大,特征值很多,这是个多么庞大的矩阵,显然直接求解不可取。
6、随机梯度下降也叫在线学习方式,在线和离线的最大区别就是离线是批量的,一次性处理,而在线更像是流式的。