奇奇怪怪的损失函数Loss
前言
本篇博客仅涉及直觉理解,不包括严谨的数学运算。默认读者已经很熟系神经网络的基本结构和反向传播过程,这里仅仅对损失函数的一小点知识做出个人理解,说错了请大哥们指正。
这里博主是看到了如下b站up主的视频链接有感而发的:
https://www.bilibili.com/video/BV1bx411M7Zx?t=211
本篇小博客内容:loss函数本身在训练过程中是否不变
1.loss函数数学角度的输入输出关系:
从数学角度来看,神经网络本质上是一个函数,叫它f(x);Loss函数也是个函数,叫它L(f(x),Y),其中Y是标签。
对于f而言:
输入:x;
输出:网络的输出端口;
函数参数:W
对于L而言:
输入:w;
输出:损失值,往往是一个数;
函数参数:x,y
这是我认为两个函数应有的输入输出关系。在学习过程中也有发现f(x,w)这样的说法,即x和w都是输入,函数本身没有参数。我想说这样的理解也没什么问题,但是我没有从这个角度考虑过后续的Loss和梯度下降的理解,可能我看完计算图就又有启发了吧
在默认该输入输出关系的情况下,我就有一个问题了:我们训练神经网络的时候是用batch进行输入训练,极端情况甚至是用单个(x,y)进行数据训练,从数学角度而言,L的函数参数一直在改变,那么L本身的形状也一直在改变,那又如何谈到什么下山之类的,毕竟你这个山是变化的啊。
比如 给L输入(x1,y1)和(x2,y2)两个数据点,L可能完全是两个不同形状的函数了:
(x1,y1)作为参数:
(x2,y2)作为参数:
这个图可能很极端,可能差别没有这么大,但是x和y作为参数本身不一致的话函数形状就确实不一致。
那我这一寻思,这梯度下降啥的都无从谈起啊,这函数形状都不一样,都懵了。
然后我看了b站视频好像有点懂了:最开始训练的时候,是把所有的x,y都输入到网络中,然后求个loss的平均值,也就是说,这个时候(x,y)不是单个点的数据,而是整个数据集
那这就恍然大明白了,这个L的参数是固定的,那么函数本身就是固定的,应用梯度下降进行下山自然和合理
*然后就是博主猜测:当使用mini-batch和单个SGD进行损失函数计算时,每个batch或者每个单个数据点进行loss计算时,其loss函数形状都不太一致,但是由于mini-batch本身代表包含了整个数据集的特征,其L = (Loss求和) / batch_size,相当于每一个单个的(x,y)对应的L函数相加求平均,可以理解成:整个数据集这样的L求和再平均,与一个batch的L求和在平均的函数形状几乎差不多,所以可以采用这样的方法;而单个SGD也能偶尔好使也可能说明,每个(x,y)对应的L函数可能也张差不多,或者其有种特殊联系之类的,还没有深究