这一章介绍了一些搭建网络的方式和技巧,可以帮助我们的网络更好的学习,包括:一种更好的损失函数叫cross-entropy交叉熵损失函数;四种“正则化”方法(L1和L2正则化、dropout、训练数据的artificial expansion);更好的初始化权重的方法;一些帮助我们选择超参数hyper-parameters的启发。【一些词汇我怕自己翻译不准确就直接用英文了
cross-entropy cost function
大家都知道如果有人把自己的错误指出来了,下次就会进步的特别快,那我们对待神经元也要认真的指出它们的错误,它们才可以好好学习呀~来,让我们从一个可爱的小神经元说起,要求它接收1的输入,输出为0。
当我们初始weight为0.6,初始bias为0.9时,我们大概需要经历300个epoch可以将output降为0.09,C函数曲线如图
但是我们如果把初始权重和偏置改为2.0,则曲线如图所示(两个学习率都是0.15)
可以看到,几乎有一半的时间,权重、偏置和损失函数没有太大的改变。那为什么在刚开始错误比较大时学习这么慢呢?有没有方法避免?
说学习慢,其实我们只需要关注C/w和C/b两个值。根据损失函数公式C=计算两个值
so,这两个值跟sigmoid函数的平缓程度都很大的关系,回想一下sigmoid函数的图像,在值接近1或者0时特别平缓,导数趋近于0,所以这两个值就变得很小,导致学习太慢。上面的第二个例子初始输出是0.98,所以刚开始学习就慢了。
Introducing the cross-entropy cost function
定义cross-entropy损失函数为:
这个是单层的,下面给出多层神经网络的交叉熵损失:
首先,显而易见这个函数是非负的,而且当a接近于理想输出y时,这个函数趋近于零,具备了成为损失函数的条件。并且它比原先的损失函数好在它没有学习变慢的问题,我们先计算一下偏导数,将a=(z)代入上式:
代入sigmoid函数的导数形式,上式变为
所以这个偏导数的大小取决于(z)-y而不是单纯的(z),所以error越大的时候,学习越快,这也是比较符合常识的。对于偏置的偏导也是一样不含’(z)。【交叉熵损失就是因为约掉了’(z),所以才没有了学习速率下降的问题
Softmax
emmm之后的部分明天继续学习!