损失函数是神经网络模型构建的关键一步。基于模型预测结果和训练样本之间的距离,构建损失函数,是一个非常容易理解的方法。但是,用于分类模型的训练中,容易导致效率低下的问题。具体原因你知道吗?您知道如何避免出现类似问题吗?
1. 简单的分类模型
下面是一个只有一个输入节点和一个输出节点的二分类单层网络:
y(x,w)=σ(x+w)(1)\tag1
y(x,w)=\sigma(x+w)
y(x,w)=σ(x+w)(1)
其中,σ(∗)\sigma(*)σ(∗) 是 sigmoid 函数。
那么,如果通过训练确定 w 的最佳值呢?
2.简单的训练样本
训练样本只有两个数据:
xix_ixi | yiy_iyi |
---|---|
-1 | 0 |
1 | 1 |
3. 构建最简单的损失函数——直观,但是低效
显而易见,可以依据目标导向的原则,构建损失函数:
L1(w)=∣y(x1,w)−y1∣+∣y(x2,w)−y2∣(2)\tag2
L1(w) = |y(x_1,w)-y_1| + |y(x_2,w)-y_2|
L1(w)=∣y(x1,w)−y1∣+∣y(x2,w)−y2∣(2)
我们假设模型初始状态为 w=10w = 10w=10 ,此时近似地,
y(x1,w)=y(−1,10)=σ(−1+10)≃1y(x2,w)=y(1,10)=σ(1+10)≃1(3)\tag3
\begin{matrix}
y(x_1,w)=y(-1,10) = \sigma(-1+10)\simeq 1\\
y(x_2,w) =y(1,10) = \sigma(1+10)\simeq 1
\end{matrix}
y(x1,w)=y(−1,10)=σ(−1+10)≃1y(x2,w)=y(1,10)=σ(1+10)≃1(3)
我们发现训练样本中的 xix_ixi 分布在一个“平坦”区域,无论 www 减小还是增加,损失函数变化都很微小。因此,我们无法判断是出于一个低谷的底部,还是处于山峰的顶部。为了谨慎,只能小步子变化试探 www 的变化方向,这极大地影响了训练过程的速度。
接下来我们用最小二乘法构建一个性能和 L1(w)L1(w)L1(w) 类似的损失函数,用数学方法做进一步分析。数学不好的可以跳过去这一部分。
4. 用数学方法分析一下
基于最小二乘法,构造一个损失函数
L2(w)=12{[σ(x1+w)−y1]2+[σ(x2+w)−y2]2}(2)\tag2
L2(w) = \frac12\{[\sigma(x_1+w)-y_1]^2+[\sigma(x_2+w)-y_2]^2\}
L2(w)=21{[σ(x1+w)−y1]2+[σ(x2+w)−y2]2}(2)
看上去一切都好,但是如何把 www 求出来呢?看我们继续分析。
把训练样本代入(2),简化得到,
L2(w)=12{[σ(w−1)]2+[σ(w+1)−1]2}(3)\tag3
L2(w) = \frac12\{[\sigma(w-1)]^2+[\sigma(w+1)-1]^2\}
L2(w)=21{[σ(w−1)]2+[σ(w+1)−1]2}(3)
为了利用梯度下降法迭代求 www 的最佳值,我们对(3)式求导,
∂L2(w)∂w=σ(w−1)∂σ(w−1)∂w+[σ(w+1)−1]∂σ(w+1)∂w(4)\tag4
\frac{\partial L2(w)}{\partial w } = \sigma(w-1) \frac{\partial \sigma(w-1)}{\partial w}+[\sigma(w+1) - 1]\frac{\partial \sigma(w+1)}{\partial w}
∂w∂L2(w)=σ(w−1)∂w∂σ(w−1)+[σ(w+1)−1]∂w∂σ(w+1)(4)
现在问题来了。我们知道,本题中 www 的最优解为 w=0w=0w=0。如果 www 的初始值很大或很小,例如 w=−10w=-10w=−10 或 w=10w = 10w=10, σ(∗)\sigma(*)σ(∗) 的图像非常平坦,其导数接近 0。这导致一个很不正常的结果:
www 距离最佳位置越远,(4) 式的值就越小,因此梯度下降得就越慢。
这个特点极大地增加了训练过程所需的时间,效率极低。因此我们需要构建更有效的损失函数,请继续关注本博客后续文章。