损失函数是设计神经网络中很重要的一个关键因素,面对特定的问题,我们要设计不同的损失函数,比如我们参数kaggle比赛时,一般赛事举办者都会给出来一个损失函数。

损失函数是模型对数据拟合程度的反映,拟合的越差,损失函数的值就应该越大,同时我们还期望,损失函数在比较大时,它对应的梯度也要比较大,这样的话更新变量就可以更新的更快一点。事实上,我们对损失函数的也就两个方面的要求,首先要能反映出你求解问题的真实标签,第二就是损失函数要有合理的梯度,有利于求解梯度,进而对权重和参数进行更新。

损失函数本身的种类还是挺多的,最常见的就是MSE(最小平均方误差准则)

sae神经网络 神经网络mse_损失函数

当然如果我们使用框架,可以看到keras里面提供了很多loss函数,这里不一一解释,可以去看一下keras文档,预测值和真实标签的之间的差距被计算出来之后,会对损失函数求导,进而反向传播去更新权重。这里有一个迭代计算的过程,直到模型发现最小的损失函数值为止,在通常的训练过程中就表现为loss不再变化或者loss变化及其缓慢,就认为模型已经收敛。这个过程中我们会设计优化器的问题,使用良好的适合问题的优化器,可以帮助我们更好的找到梯度下降的方向,从而加快模型的收敛速度。

损失函数的选择往往也是结合激活函数来的,因为反向传播算法进行链式求导的过程中,不可避免要遇到激活函数,激活函数是正向传播中最重要的设计之一,它增加了模型的复杂性,提供了个更多的非线性操作。

下面提供几种思路:

sigmoid系之外的激活函数 + MSE

sigmoid + Cross Entropy

Softmax + Cross Entopy