损失函数是不是凸的?
不是
-
全局最优不一定是好的解,局部最优不一定是差的解
-
NN中设计得激活函数是为了引入非线性变换,凸不凸都可以
NN不凸,是多个隐藏层导致的,即使每一层激活函数都是凸的,目标函数依旧是非凸问题。 -
激活函数设计为凸就可以得到凸的优化目标,然而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,w2mini∑N∣∣yi^−yi∣∣2 ,其中
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,w2mini∑N∣∣W2W1xi−yi∣∣2变成,显然这是个非凸的目标函数(两次线性变换其实等价于一次线性变换,此处这么写是为了方便举例)。何况设计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)分别是第一层和第二层的激活函数,无论这两个函数是不是凸,最终的目标函数都不会是凸优化问题。
- 凸的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的形状会是布满弹坑的样子:
于是,梯度下降到local minimum如果不是global minimum就出大问题了。
但其实对于deep learning,我们是在一个非常高维的世界里做梯度下降。这时的 local minimum 很难形成,因为局部最小值要求函数在所有维度上都是局部最小。更实际得情况是,函数会落到一个saddle-point上,如下图:
在saddle-point上会有一大片很平坦的平原,让梯度几乎为0,导致无法继续下降。反倒是local/global minimum的问题,大家发现其实不同的local minimum其实差不多(反正都是over-fitting training data,lol)
根据现在最新的研究成果,多层神经网络,大部分局部极小值都在底部 ,已经非常接近全局最小值, 大家看下面这张图,可能就更清楚了
这张图,横坐标是临界点,纵坐标是错误率,可以看到,大部分临界点的确都已经很接近全局最小了.
以我们平时的经验来看,训练到底的全局最小值往往意味着过拟合 ,找到全局最小也许反而是件坏事
参考资料
https://www.zhihu.com/question/38549801