1、习题4-1对于一个神经元,并使用梯度下降优化参数w时,如果输入x恒大于0,其收敛速度会比零均值化的输入更慢.
回答:如图1,右边那个图为sigmoid的导数曲线,可以看到,导数均为正值。当使用梯度下降优化参数w时,会对w进行求导,其结果是损失函数L关于输出y的梯度*x*sigmoid的导数,x与sigmoid的导数都恒大于0,每个w共用同一个损失函数L关于输出y的梯度,故对每个w进行求导的结果对应梯度同正或同负,所以更新的方向如图2,不是右上方向就是左下方向,如果最优解在右下方向,需要迭代更多次,收敛速度更慢一些。
另一版本:零均值化的输入,使得神经元在0附近,sigmoid函数在零点处的导数最大,所有收敛速度最快。
总之记住:为了权重参数收敛更快一点,数据记得零均值化一下~
图1 Sigmoid函数曲线和导数曲线
图2 全负或全正时的收敛情况
2、习题4-5如果限制一个神经网络的总神经元数量(不考虑输入层)为N+1,输入层大小为M,输出层大小为1,隐藏层的层数为L,每个隐藏层的神经元数量为,试分析参数数量和隐藏层层数L的关系.
回答:(未考虑偏置)
3、习题4-7为什么在神经网络模型的结构化风险函数中不对偏置b进行正则化?
回答:
L2正则化可以防止过拟合的原因在于它对模型中的权重进行约束,使权重趋向于较小的值,避免它得到的权重值过大,对训练数据的过度学习。另外一方面,省的输入细微的变化会导致输出值的突变。
对权重正则化,是因为权重与输入有一个相乘的步骤,权重的大小,严重影响着输入与输出的联系,而偏置不会和输入x有运算,影响不大。
浅插一句:偏置为啥存在?偏置的存在是为了更好的拟合数据。比如说输入是个非零的数,你想让她输出是0,无论怎么改权重,结果都得不到零,加个偏置就可以啦!
4、习题4-8为什么在用反向传播算法进行参数学习时要采用随机参数初始化的方式而不是直接令W=0,b=0?
回答:当W=0,b=0,在输入层之后的所有隐藏层神经元接收到的输入都是一样的,这样每一层的输出都一样,反向传播时,每一个梯度也都一样,当直接令w=0,b=0时,会让下一层神经网络中所有神经元进行着相同的计算,具有同样的梯度,同样权重更新。权重更新方向一致,可能会出现第1小问中图2的现象
而且在作业4中提到当使用Relu激活函数时:相关参数均为0,参数不更新。Sigmoid函数:收敛速度可能慢些,但最后能够达到很好的值。作业4
5、习题4-9梯度消失问题是否可以通过增加学习率来缓解?
回答:
梯度消失:在链式法则中,是多个导数值相乘,有那么几个导数趋于0就可能导致整体趋于0,也就是梯度消失
学习率:更新权重的步长
两者没有很大的关系,通过增加学习率可能会缓解梯度消失问题,但是也可能加重,也可能导致梯度爆炸,都有可能。适当地增加学习率可以加快收敛速度,但是增的太多也不好,会导致跳过全局最优,去找局部最优。
(摘自同学的博客)梯度消失问题的原因在于对参数求偏导时,根据链式法则得到的连乘式中多个几乎为0的导数值连乘导致。导数小会导致每次更新时的值过小,从而使训练变得困难。比如激活函数为类似于sigmoid与tanh,其值太大或太小时导数都趋于0(左右趋近于饱和)。