神经网络究竟看到了什么

神经网络的迷人之处部分在于其难解释性,很多时候,神秘的东西更能激发人们的兴趣,笔者今天在学习词向量的时候,受到了一些启发,在一些NLP任务中,过将词向量融入到任务中,使用神经网络进行端到端的学习,从而能使词向量朝着我们预期的方向(也就是解决当前任务的方向)改变,这一点是由误差反向传播完成的,从而引出本文的中心思想:能否通过一个训练好的神经网络,将一个随机的输入向量作为参数,得到与目标最适配的向量?

背景

我曾经训练过一个识别MINST的单隐层神经网络,准确率约有99%,我能否使用这个神经网络,反向生成一个数字的图片?

思路

为了生成数字的图片,我假设,如果有这么一个向量,通过神经网络作用后与给定的某个label(如1)距离最小,那么,这个向量就是这个label(如1)对应的图片,这个问题的目标在于,我给定label之后,要寻找一个最适配的输入向量,也就是相当于我问神经网络:“你觉得,什么样的图片更像1?”我通过将输入向量看作变量,预测与目标的欧式距离看作目标函数,这事实上也就演变成了一个优化问题。
KaTeX parse error: No such environment: align at position 47: …^2}{2}\\ \begin{̲a̲l̲i̲g̲n̲}̲ st. & a_j = \…
乍一看,这不就是神经网络嘛?但是在这里,我们优化的参数不是 W W 或者 θ \theta ,而是 x x

优化

方法一:梯度下降

既然梯度可以求到 x x ,那不妨就用梯度下降法来进行优化
E x i = Σ k = 1 h ( y ^ k y k ) y k ( 1 y k ) Σ j = 1 q W k j ( 2 ) z j ( 1 z j ) W j i ( 1 ) \dfrac{\partial{E}}{\partial{x_i}} = \Sigma_{k=1}^{h}(\hat{y}_{k}-y_k)y_k(1-y_k)\Sigma_{j=1}^{q}W^{(2)}_{kj}z_j(1-z_j)W^{(1)}_{ji}
结果:非常慢!!由于 σ \sigma 函数对剃度弥散的作用太明显,当初优化的时候就花了整整一个通宵,由于急于想看结果,所以不采用这个方法。

方法二:进化策略

这个方法是一个stackoverflow上的老哥教给我的,就是保存一个最优的参数(误差最小的 x x ),然后每轮通过在最优的 x x 上做一个微小的扰动,通过大量的随机查找获得最优的 x x ,为了避免陷入局部最优,进行多次初始化。最后得到的结果如下:
0:
0
1:
1
2:
2
3:
3
4:
4
5:
5
6:
6
7:
7
8:
8
9:
9

结论

在训练集的图片中,数字是白色的,所以现在我要尝试把图片中白色部分解释成数字(强行解释),其实就我的角度看,图中白色的部分倒是没什么规律,而网络似乎很明确地知道一个数字哪些部分应当是黑色的,比如0,通过优化得到的图片说明网络知道大多数0中间有一个大大的黑圈,6也是,从强行解释的角度,4的结果大致可以看出中间白色的部分能够围成一个类似4的形状,有些数字(比如2和5)黑色的部分与数字的形状十分相似,这可能是因为黑色部分也是沿着数字的走势分布在周围的吧,可见还是有一定的结果的,只是并没有十分明显。

一些思考

结果并没有给出十分符合人类直观的数字图片,我想结果有几点:

  • 优化结果的唯一性是一个矛盾,我们都知道这类非线性优化问题的最优解往往唯一(往往还找不到),而神经网络被训练的目标之一是泛化性能,倘若生成的图片十分明确清晰,可能网络本身存在过拟合,这点同时也否定了我们之前的假设,即图片应该是给定label使误差最小的那个 x x ,其实,这个使误差最小 x x 的更可能是集成所有训练集中对应label图片的特点得到的一张图片。
  • 没了

某天下午闲来无聊的瞎想…

猜你喜欢

转载自blog.csdn.net/luo3300612/article/details/81137191