- capsule:
其中c1 c2是dynamic routing的,而不是back propagation train出来的,c1和c2的和必须是1,如何得到c1和c2?:
循环的意义在于,不断的调整中,使偏离集体的输入有更低的c,每一个capsule可以看成一个类似于rnn的结构,而真正起预测作用的,是v的模长:
也就是说,当你需要n分类输出的时候,你需要在输出层有n个capsule,每个capsule输出的vector的模长表示该类的置信度
同时,加上reconstruction层有助于训练:
- 视频中讲到一个让我觉得眼界一开的训练方法:用RNN和Reinforcement Learning来调CNN的参数:
甚至可以决定你网络的架构
还可以用来决定train的过程中learning rate怎么变化
- 当loss不再随着时间下降的时候,有可能是卡在local minima,更大的可能性是卡在saddle point, 还有可能是在山谷周围弹跳,所以需要检查梯度,在山谷周围弹跳的时候,梯度不会小
- 用deep的network的输出来train shallow的network似乎会比直接用label取train shallow的network得到更好的效果:
- GAN:
- 首先是公式推导:
其中KL散度为如下:
有一个问题是,discriminator容易overfitting,一个原因是数据点是采样出来的,确实容易被over fitting,一个方法是把discriminator变笨一点,让他只能学习简单边界;另一个原因是,高维空间不容易有重叠和接近的地方,所以G产生的数据点和真实数据点在高维空间中经常可能相差很远,方法是加一些noise使他们有交集,使loss能够有减小的空间而不是保持0;
还有一个问题,是你可能只学习了原始数据集众多模式中的一部分
一个可能的原因如下,是因为取reverse的操作导致了,真实数据集无分布的地方,G不能产生点,否则loss会无穷大,就导致了G会变成真实数据集的一个子集,而不reverse之前是真实数据集有分布的地方G一定得有分布,但也有人提出来不是这个原因
随后视频讲了一下conditional generator,就是根据你输入的条件产生符合条件的东西,但是此时generator可能会无视你的随机灵感输入,可以替换成drop-out;同时要注意,Disciriminatior的输入也有两个,而且训练的时候,如果原始数据输出和给定的conditional不匹配,会被判别成negative,只有原始数据输入匹配时才是是positive - GAN 的 JS divergence可以用任何f divergence 代替,只要 f 满足convex且f(1) = 0 :
- 接下来讲到了fechel conjugate
- GAN的 Df 可以把 f-divergence 转化为 f* ,需要找到这样一个D使得越等号后面的式子值最大,越大就越接近 Df
-
这里划红线的地方正负号写错了
- 首先是公式推导:
- WGAN与GAN的区别是:
- WGAN的loss没有log,所以GAN需要的D(x)最后一层需要的sigmiod对于WGAN来说不必要
- 为了满足lipschitz条件,WGAN需要一个weight clipping的步骤
- GAN要求CNN架构的filter每一层要是前一层的两倍,如果每层filter数量都相同结果会坏掉
- WGAN不能用Adam来train,会坏掉,得用RMSProp
- improved WGAN将求1-lipschitz的D转换为求普通的D加上一个惩罚项,当D的output对input的导数大于1时惩罚,惩罚项的x ~ P_penalty是用这种方法找的:在P_data和P_G分别sample一个点,在连线上sample,这个方法取消了weight clipping(因为不要求D是lipschitz函数了),事实也证明gradient penalty 的WGAN效果比weight clipping的WGAN效果好很多
- 但事实上我们的惩罚项要改一下,因为当我们希望这个loss衡量Pdata和PG的时候有最大的差,但是又希望它的梯度有个上界,那么如果梯度处处达到上界,给定距离,PG和Pdata就会有最大的差,所以把max项改为梯度与1的距离项,也即希望梯度越接近1越好,而不是原来希望的那样小于1(理论上行得通,实际上发现改为距离会有更好的效果)
- 跟DCGAN GAN LSGAN比较之下,WGAN的鲁棒性很好,在bad structure的情况下仍然能有不崩坏的结果