0%

深度学习——损失函数


在机器机器学习和深度学习中有许多常见的损失函数,主要包括:

​ 1.平方差函数MSE(Mean Squared Error)

​ 2.交叉熵函数(Cross Entory)

损失函数选择的方法:1.线性模型中使用平方误差函数,深度学习使用交叉熵函数

2.平方误差损失函数更适合输出为连续,并且最后一层不含Sigmoid或Softmax激活函数的神经网络;交叉熵损失函数更适合二分类或多分类的场景

线性模型

效果较好的损失函数:平方误差损失函数

计算公式:

​ 其中,y是我们期望的输出,a是神经元的实际输出a=σ(Wx+b)

损失函数求导:

​ 这也就是每次进行参数更新量的基数,需要再乘以学习速率

为什么深度学习中很少使用MSE作为损失函数?

​ 当使用MSE作为损失函数时,有上面求导后的公式可以明显的看出,每次的参数更新量取决于σ′(z) ,由Sigmod函数的性质可知,σ′(z) 在 z 取大部分值时会取到一个非常小的值,因此参数更新会异常的缓慢

深度学习

效果最好的损失函数:交叉熵函数

计算公式:

​ 如果有多个样本,则整个样本集的平均交叉熵为:

对于二分类而言,交叉损失函数为:

损失函数求导:

​ 对于b的求导同理。

​ 我们可以看出,交叉熵作为损失函数,梯度中的σ′(z) 被消掉了,另外σ(z)-y就是输出值和真实值之间的误差,误差越大,梯度更新越大,参数更新越快。

Softmax损失函数

softmax函数

​ softmax用于多分类过程中,将多个神经元的输出映射到(0,1)区间,可以看做被分为各个类的概率。

​ 其中,

softmax求导相关推导

​ 对于使用作为激活函数的神经网络,最终只输出只有最大的softmax最大的项为1其余项均为0,假设yj=1,带入交叉熵公式中得

​ 去掉了累加和,因为只有一项y为1,其余都为0,而将yj=1带入得

​ 下面我们准备将损失函数对参数求导,参数的形式在该例子中,总共分w41,w42,w43,w51,w52,w53,w61,w62,w63.这些,那么比如我要求出w41,w42,w43的偏导,就需要将Loss函数求偏导传到结点4,然后再利用链式法则继续求导即可,举个例子此时求w41的偏导为:

​ 其中右边第一项q求导为:

​ 右边第三项求导为:

​ 核心是求右侧第二项:$\frac{\partial a_j}{\partial z_j}$,这里我们分两种情况进行讨论

​ 将前两项的结果进行连乘得:

​ 而对于分类问题,只会有一个$y_i$为1,其余均为0,因此,对于分类问题:

​ 最终: