神经网络的计算图如何发现?

神经网络可以看作是一个大的变分优化器:

  给定 y=f(x1, x2..., w),求w使L(y, x..)最小

x是输入,y输出,w是网络参数,L是损失函数。

而任一函数y=f(x1, x2...),他的实际计算过程一般而言是分步骤的,例如:

    h1=h1(x1,x2),

    h2=h2(x3,x4),

    h3=h3(h1,x2..),...

    y=f(h2,h3,x5...)

也就是说该函数存在若干中间变量。

这种计算步骤可以画成计算图。

本文想说的是,对于一个待训练的{X,Y}数据集,如果我们能通过一些方法发现最终函数f的计算图关系和中间变量,则我们的神经网络搭建和训练就会大大的简化。

那么问题来了,如何通过数据集去发现计算图呢?该问题暂按下不表。下面举一个实际计算图的例子,详情参考这里,下面简要说明:

该例子是传统rnn的升级版。传统的rnn是一个函数:S1=f(x1,S0),Si就是时序数据在i时刻的总结,我们要求的函数是根据上一刻的总结和这一刻的输入,求出这一刻的总结(需要注意的是,若希望很远的过去的x0对现在的Si也有关的话,需要加一些约束,也就是lstm之类的)。

rnn的升级版on-lstm,是把已有的rnn计算图做了升级,加了一个中间变量r如下:

  r1=r(S0, x1)

表示S1的改写级别,比如S是1*10的张量,r1=3的意思就是本次的S1只改写前3个数,后面7个数不变跟S0一样。

加了这个以后,训练出来的结果更好了,因为这个结构是lstm的一个子集,且最优结果函数依然在该子集内。

这个思想和这一篇文章一样,当计算图足够清晰了,最优解依然在子集内的时候,优化参数w的求解就十分容易了!

本例增加了一个中间变量r,就使得相同训练集下的结果更优就是实证。

所以回到我们的问题,如何发现目标函数的计算图以及中间变量,且保证最优函数依然在子集内呢?

This is a question!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。