关于机器学习的一些思考
说明
从九月份入学到现在已经三个月了,整个过程都处于忙碌的状态。不仅要完成每周的作业,每周还要和导师汇报机器学习的学习进度。在整个过程中遇到了各种各样的问题,这里选择几个写一写。
为什么要去线性化(为什么要加**函数)
为什么要引入relu函数
虽然阶跃函数是最理想的,但它是不可导的,在程序里无法实现前向传播的过程。对sigmoid分析如下。
sigmoid 能够比较好的拟合阶跃函数,而且一直可导,但是在深层网络中前向传递会造成梯度消失。具体分析如下:
在传播过程中,会出现对**函数求导的一项,如图中方框所示,sigmoid函数的范围在(0,1)之间,带入可得其导数在当输出为0.5时才能取到最大值0.25,显然可能每次都取到最大值,就算取到最大值,误差改变量也只有上一层的0.25倍,所以我们可以通过表格看到在向前传的时候会大致呈1/4倍往前传,而一旦层数增多,越深层的节点几乎不变。这就是梯度消失。
而对于relu函数,大于零时导数始终为1,就能够很好地把这种关系保持下去。
层数的增加对于正确率的影响
分析原因可能是:
1.对于第一种情况可能是初始化的问题。导致死的结点太多,更新不了
2.对于第二中情况可能是发生了过拟合,对训练集样本识别效果越来愈好,而对测试集样本识别效果越来越差。
随机梯度下降法 批量梯度下降法 小批量梯度下降法
正则化
在对模型的拟合过程中,高次项系数越大则函数越复杂越容易发生过拟合,我们要得到的左边的图,而过拟合发生时我们得到的是后面的图和函数,所以我们可以通过减少3和4的项从而逼近左边的图。
所以在损失函数中加入正则化项,当传播时要求损失函数的最小值,由于3和4前面加了一个很大的数,就会迫使3和4变得很小,达到了我们的目的。
更一般的有: