import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
# %matplotlib inline
%pylab inline
pylab.rcParams['figure.figsize'] = (30, 20)
Populating the interactive namespace from numpy and matplotlib
def sigmoid(x):
return 1/(1+np.exp(-x))
def nn_func(x, y):
def apply(hw, hb, lw, lb):
p = sigmoid(sigmoid(x.dot(hw)+hb).dot(lw)+lb)
return -np.mean((y * np.log(p) + (1-y)*np.log(1-p)))
return apply
img, label = np.random.uniform(-0.5, 0.5, size=(10,28*28)), (np.random.uniform(size=(10,1)) > 0.5).astype(np.float32)
base_hw, base_hb, base_lw, base_lb = \
np.random.uniform(-0.5, 0.5, size=(28*28,100)),\
np.random.uniform(-0.5, 0.5, size=(1,100)),\
np.random.uniform(-0.5, 0.5, size=(100,1)),\
np.random.uniform(-0.5, 0.5, size=(1,1))
dir_hw, dir_hb, dir_lw, dir_lb = \
np.random.uniform(-0.5, 0.5, size=(28*28,100)),\
np.random.uniform(-0.5, 0.5, size=(1,100)),\
np.random.uniform(-0.5, 0.5, size=(100,1)),\
np.random.uniform(-0.5, 0.5, size=(1,1))
loss_func = nn_func(img, label)
loss_func(base_hw, base_hb, base_lw, base_lb)
1.4699588455846047
gma = np.linspace(-1.0,3.0,10000)
loss = []
for t in gma:
hw = base_hw + t*dir_hw
hb = base_hb + t*dir_hb
lw = base_lw + t*dir_lw
lb = base_lb + t*dir_lb
loss.append(loss_func(hw, hb, lw, lb))
plt.plot(np.array(gma), loss)
[<matplotlib.lines.Line2D at 0x12238cfd0>]
由 \( f \) 非凸,可知有 \( a_1, a_2, \alpha, \beta \) 满足 \( f(\alpha\cdot{a_1} + \beta\cdot{a_2}) > \alpha\cdot{f(a_1)} + \beta\cdot{f(a_2)} \),其中 \( \alpha > 0, \beta > 0, \alpha + \beta = 1 \)。
由 \( f \) 与 \( L \) 的关系,我们有 \( f(\alpha\cdot{a_1} + \beta\cdot{a_2}) = L(W_0+({\alpha\cdot{a_1} + \beta\cdot{a_2}}){\cdot}W_1) > \alpha\cdot{L(W_0+a_1{\cdot}W_1)} + \beta\cdot{L(W_0+a_2{\cdot}W_1)} \)
而 \( L(W_0+({\alpha\cdot{a_1} + \beta\cdot{a_2}}){\cdot}W_1) = L(\alpha\cdot(W_0+{a_1}\cdot{W_1}) + \beta\cdot(W_0 + {a_2}\cdot{W_1})) \) ,从而 \( L(\alpha\cdot(W_0+{a_1}\cdot{W_1}) + \beta\cdot(W_0 + {a_2}\cdot{W_1})) > \alpha\cdot{L(W_0+a_1{\cdot}W_1)} + \beta\cdot{L(W_0+a_2{\cdot}W_1)} \) ,而这正好说明了 \( L \) 的非凸性。
另外对于由 \( f \) 的非凸性推导 \( L \) 的非凸性,或许我们可以借助一个低维类比来获得一些直观理解。
我们假定 \( W \) 只有2维,那么整个 \( L \) 的图像就可以在三维坐标中展示出来,其形状我们假设是个可能不那么规则的碗状。上面我们做的事情就是在某个位置,从正上方到正下方垂直向这个碗劈一刀,留下的截面就只是一个类似上面的曲线而已。如果我们在这条曲线上发现了一个非凸的实例,那么我们再把视野放到整个碗状图像,这个非凸实例依然是成立的。