神经网络-损失函数是不是凸的

损失函数是不是凸的?

不是

  1. 全局最优不一定是好的解,局部最优不一定是差的解

  2. NN中设计得激活函数是为了引入非线性变换,凸不凸都可以
    NN不凸,是多个隐藏层导致的,即使每一层激活函数都是凸的,目标函数依旧是非凸问题。

  3. 激活函数设计为凸就可以得到凸的优化目标,然而NN不凸,是多个隐藏层导致的,即使每一层激活函数都是凸的,目标函数依旧是非凸问题,举例说明

举例说明:假设一个NN的最后一层为least square loss(凸的): min ⁡ w 1 , w 2 ∑ i N ∣ ∣ y i ^ − y i ∣ ∣ 2 \min_{w1,w2} \sum_i^N||\hat{y_i}-y_i||^2 w1,w2miniNyi^yi2 ,其中 y i ^ \hat{y_i} yi^是NN的预测值,
对这个NN做最简单的假设,比如 y i ^ = W 2 W 1 x i \hat{y_i}=W_2W_1x_i yi^=W2W1xi ,也就是说这个NN一共有两层,第一层的参数为 W 1 W_1 W1 第二层的参数为 W 2 W_2 W2,两层都使用最简单的作为激活函数f(x)=x,代入到目标函数中,目标函数 min ⁡ w 1 , w 2 ∑ i N ∣ ∣ W 2 W 1 x i − y i ∣ ∣ 2 \min_{w1,w2} \sum_i^N||W_2W_1x_i-y_i||^2 w1,w2miniNW2W1xiyi2变成,显然这是个非凸的目标函数(两次线性变换其实等价于一次线性变换,此处这么写是为了方便举例)。何况设计NN的时候,都会采用更复杂的激活 函数 h i ^ = f 2 ( W 2 f 1 ( W 1 x i ) ) \hat{h_i}=f_2(W_2f_1(W_1x_i)) hi^=f2(W2f1(W1xi)),其中 f 1 ( x ) , f 2 ( x ) f_1(x), f_2(x) f1(x),f2(x)分别是第一层和第二层的激活函数,无论这两个函数是不是凸,最终的目标函数都不会是凸优化问题。

  1. 凸的NN,以前也有人做过。比如:Yoshua Bengio的Convex Neural Networks,还有 Convex Deep Learning via Normalized Kernels

activation 是凸函数,多层之后好多凸函数的composition 也不一定是凸的。

example: f ( x ) = e x p ( x ) , f ( x ) = e x p ( x ) f(x) = exp(x) , f(x) = exp(x) f(x)=exp(x),f(x)=exp(x)

( 0 , + ∞ ) (0, +\infty) (0,+)上凸, ff(fx) 是concave的。

大家以前认为,deep learning的loss的形状会是布满弹坑的样子:

神经网络-损失函数是不是凸的_第1张图片
于是,梯度下降到local minimum如果不是global minimum就出大问题了。
但其实对于deep learning,我们是在一个非常高维的世界里做梯度下降。这时的 local minimum 很难形成,因为局部最小值要求函数在所有维度上都是局部最小。更实际得情况是,函数会落到一个saddle-point上,如下图:
神经网络-损失函数是不是凸的_第2张图片
在saddle-point上会有一大片很平坦的平原,让梯度几乎为0,导致无法继续下降。反倒是local/global minimum的问题,大家发现其实不同的local minimum其实差不多(反正都是over-fitting training data,lol)

根据现在最新的研究成果,多层神经网络,大部分局部极小值都在底部 ,已经非常接近全局最小值, 大家看下面这张图,可能就更清楚了

神经网络-损失函数是不是凸的_第3张图片
这张图,横坐标是临界点,纵坐标是错误率,可以看到,大部分临界点的确都已经很接近全局最小了.
神经网络-损失函数是不是凸的_第4张图片
以我们平时的经验来看,训练到底的全局最小值往往意味着过拟合 ,找到全局最小也许反而是件坏事

参考资料

https://www.zhihu.com/question/38549801

你可能感兴趣的:(tensorflow,神经网络,tensorflow)