李宏毅老师2021深度学习课程笔记

神经网络的连接方式是由自己来设定的,常见的有如下几种:

1.全连接前向传递神经网络

 误差反向传播是一种有效计算偏微分的方法,提供这种方法的有如下若干的工具箱。

 

 我们简化神经网络结构如下,来说明反向传播原理,z对w1 w2求偏导的结果分别是x1和x2。

扫描二维码关注公众号,回复: 15952094 查看本文章

上图中,不难理解,一个权重直接连接的输出对该权重的微分就是所直接连接的输入的值。像这样,每一次微分的值都是按照从输入到输出的前向顺序计算出每一层的输入值,以此来确定输出对权重的导数,这样的过程就叫做前向传播。

上图中,我们求得了C对第一层神经元输入z的偏导,它是由后一层的C对神经元输入z的偏导计算得到的。可以形象地通过下图看出来。注意由于在前向传递的过程中,z值已被确定,所以此处激活函数在z处的导数的值实际上是一个常数。

现在的问题只剩下如何计算最后一层C对该层神经元输入值z的导数,由于已经是最后一层,故其输出就是yi,我们通过如下方式计算(此处假设网络仅有两层)

C对y1 y2的导数则与损失函数的定义有关。

 具体过程就是,先通过前向算出各个神经元输入的值,以此来确定激活函数在这些点处导数的值,然后再通过上图中反向传播方式(类似于另一个神经网络,传递函数就是常数值)最后确定C对z的偏导数。最后,再把z对w的偏导数与C对z的偏导数相乘就是C对某一个权重w的偏导数了。

有的时候,我们选用了一些层数更深的model,结果loss反而更大了,那么这个时候就是一个优化问题了(optimization issue),可能是陷入了局部最优解,这个时候就要寻找更好的优化方法了。只有在训练集上loss小,在测试集上loss大,这样才叫做overfitting。

之所以会出现过拟合的问题,可以从以下这么一个极端的例子去理解,在训练集上,function做的事情是,每给到一个输入,函数输出都是将该输入与训练集中数据对应后的y值,而在不一致时,输出则是一个随机值,这样在训练集上,函数的loss是0,而在测试集上则会非常大,因为他的输出可能完全是随机的。

更一般的情况,可以参考如下,蓝色的点是训练集,我们在右上图中拟合出了图示的结果,但是在测试集上还是会有比较大的loss,这就是过拟合。

解决过拟合的问题,首先可以加大数据量,把训练集变大些,还可以进行数据增强,如在做图像识别的过程中,可以把图像左右翻转或进行局部放大,这样就可以扩充网络训练所需要的数据量。最有效的方式是,如果我们对要处理的问题十分的了解,我们知道模型应该长什么样子(比如我们知道下图中x与y之间的关系就是二次函数),那么我们就可以直接设计好模型,用不那么大的数据集就可以得出与真实函数十分接近的拟合函数。

 当我们给出了模型一些限制后(如把参数数目减少、或者一些参数设置成一样的数值),模型的函数集可能会变小,但是这些函数可能反而会更接近真正的函数关系,从而使得避免陷入局部最优,如全连接与CNN之间的关系。

猜你喜欢

转载自blog.csdn.net/cyy0789/article/details/120541605