论文笔记:HyperNetworks(arXiv版本)

论文笔记:HyperNetworks ICLR_2017(arXiv版本)

*
这篇博客是啥?
论文地址
基本思想

+ 说明
方法

+ 静态 HyperNetworks
+ 动态 HyperNetworks

这篇博客是啥?

这篇博文是有关HyperNetworks arXiv版本的笔记,为啥选择arXiv版本呢,因为ICLR官方编辑版本有许多删减,致使我有一部分公式看不懂😭(可能是因为我个人才疏学浅吧)。 这篇博文主要是讲HyperNetworks的方法,不会对实验进行介绍。

论文地址

arXiv版本: HyperNetworks arXiv
ICLR版本:HyperNetworks ICLR_2017

基本思想

HyperNetworks 的基本思想是想用一个 小网络(HyperNetworks) 为 大网络(main Networks) 生成参数, 如下图

论文笔记:HyperNetworks(arXiv版本)
在上图中, 橙色的方块是 小网络(HyperNetworks) , 黑色的是 大网络(main Networks) 橙色点箭头是小网络为大网络生成的参数矩阵。

; 说明

我们平常怎么保存一个模型?根据我的经验,以上图为例,一般人会将上图中[ W 1 , W 2 , W 3 , . . . , W n ] [W_1, W_2, W_3, …,W_n ][W 1 ​,W 2 ​,W 3 ​,…,W n ​]这些权重矩阵保存下来。于是有人就想这也太浪费空间了吧,我能否找个函数使得[ z 1 , z 2 , z 3 , . . . , z n ] m a p p i n g [ W 1 , W 2 , W 3 , . . . , W n ] [z_1, z_2, z_3, …, z_n] \quad mapping \quad [W_1, W_2, W_3, …,W_n ][z 1 ​,z 2 ​,z 3 ​,…,z n ​]m a p p i n g [W 1 ​,W 2 ​,W 3 ​,…,W n ​]. 这里z z z的维度远小于W W W, 这种做法我只需要保存z z z和m a p p i n g mapping m a p p i n g函数就行了,这样就可以节省空间了!

方法

作者将 HyperNetworks 分为动态的静态的两种模式

静态 HyperNetworks

论文中, 作者拿卷积神经网络(CNN)作为 main Network
我们假设每个卷积层:
输入的channel为N i n N_{in}N i n ​
卷积核size 为f s i z e × f s i z e f_{size} × f_{size}f s i z e ​×f s i z e ​
输出的channel 为N o u t N_{out}N o u t ​
那么这一层的参数量为N i n × f s i z e × f s i z e × N o u t N_{in} × f_{size} × f_{size} × N_{out}N i n ​×f s i z e ​×f s i z e ​×N o u t ​,第j j j层参数量记作 K j ∈ R N i n f s i z e × f s i z e N o u t , j ∈ 1 , . . . . , D K^j ∈ \mathbb{R}^{N_{in} f_{size} × f_{size} N_{out}} ,j ∈ {1, …., D}K j ∈R N i n ​f s i z e ​×f s i z e ​N o u t ​,j ∈1 ,….,D这里D D D为卷积的深度 depth
然后,作者提出了一个生成器g g g使得:
K j = g ( z j ) , ∀ j = 1 , . . . , D (1) K^j = g(z^j), \forall j = 1,…, D \tag{1}K j =g (z j ),∀j =1 ,…,D (1 )
生成器g g g是一个两层的线性网络,作者首先将 K j ∈ R N i n f s i z e × f s i z e N o u t K^j ∈ \mathbb{R}^{N_{in} f_{size} × f_{size} N_{out}}K j ∈R N i n ​f s i z e ​×f s i z e ​N o u t ​拆分成N i n N_{in}N i n ​个slices,
即K j = c o n c a t i = 1 N i n ( K i j ) , K i j ∈ R f s i z e × f s i z e N o u t , i ∈ 1 , . . . . , N i n , j ∈ 1 , . . . . , D K^j = concat {i=1} ^{N{in}}(K^j i), K^j _i∈ \mathbb{R}^{ f{size} × f_{size} N_{out}}, i ∈ {1, …., N_{in}},j ∈ {1, …., D}K j =c o n c a t i =1 N i n ​​(K i j ​),K i j ​∈R f s i z e ​×f s i z e ​N o u t ​,i ∈1 ,….,N i n ​,j ∈1 ,….,D
生成器g g g的公式:

论文笔记:HyperNetworks(arXiv版本)
这里,z j ∈ R N z , W i ∈ R d × N z z^j∈\mathbb R^{N_z}, W_i ∈\mathbb R^{d×N_z}z j ∈R N z ​,W i ​∈R d ×N z ​, d d d为生成器g g g的隐藏层的size;a i j ∈ R d , B i ∈ R d , W o u t ∈ R f s i z e × N o u t f s i z e × d , B o u t ∈ R f s i z e × N o u t f s i z e a_i ^j∈ \mathbb R^d,B_i ∈ \mathbb R^d, W_{out}∈ \mathbb R^{f_{size}×N_{out}f_{size}×d}, B_{out}∈ \mathbb R^{f_{size}×N_{out}f_{size}}a i j ​∈R d ,B i ​∈R d ,W o u t ​∈R f s i z e ​×N o u t ​f s i z e ​×d ,B o u t ​∈R f s i z e ​×N o u t ​f s i z e ​, 运算符

论文笔记:HyperNetworks(arXiv版本)
通过这种方法参数分别是: z j : N z × D ; W i : d × N z × N i ; B j : d × N i ; W o u t : f s i z e × N o u t f s i z e × d ; B o u t : f s i z e × N o u t f s i z e z^j: N_z \times D;\quad W_i: d \times N_z \times N_i; \quad B_j: d \times N_i; \quad W_{out}: f_{size}×N_{out}f_{size} × d; \quad B_{out}: f_{size}×N_{out}f_{size}z j :N z ​×D ;W i ​:d ×N z ​×N i ​;B j ​:d ×N i ​;W o u t ​:f s i z e ​×N o u t ​f s i z e ​×d ;B o u t ​:f s i z e ​×N o u t ​f s i z e ​
总共 N z × D + d × ( N z + 1 ) × N i + f s i z e × N o u t × f s i z e × ( d + 1 ) N_z \times D + d \times (N_z +1) \times N_i + f_{size}×N_{out}× f_{size} × (d+1)N z ​×D +d ×(N z ​+1 )×N i ​+f s i z e ​×N o u t ​×f s i z e ​×(d +1 )
不使用 HyperNetwork原参数共D × N i n × f s i z e × N o u t × f s i z e D × N_{in}×f_{size}×N_{out}×f_{size}D ×N i n ​×f s i z e ​×N o u t ​×f s i z e ​,相比之下,使用HyperNetworks的参数大大减少了

; 动态 HyperNetworks

作者这里拿(如下图)大RNN(黑色)来作为 main network,小RNN作为 HyperNetworkRNN(橙色),这里为啥叫动态呢? 是因为RNN时序的,其参数会随时间变化。

论文笔记:HyperNetworks(arXiv版本)
我们知道标准的RNN公式:h t = ϕ ( W h h t − 1 + W x x t + b ) h_t = \phi(W_h h_{t-1} + W_x x_t +b)h t ​=ϕ(W h ​h t −1 ​+W x ​x t ​+b ), 这里共有三个参数W h , W x , b W_h, W_x, b W h ​,W x ​,b 需要HyperNetwork 按时序生成,这就是作者为啥也用时序网络(较小的RNN)作为HyperNetwork的原因,跟静态HyperNetwork一样,作者也用生成器(线性层)生成三个参数W h , W x , b W_h, W_x, b W h ​,W x ​,b, 这里生成器分别用W h ( z h ) , W x ( z x ) , b ( z b ) W_h(z_h), W_x(z_x),b(z_b)W h ​(z h ​),W x ​(z x ​),b (z b ​)表示,这里z h , z x , z b z_h,z_x,z_b z h ​,z x ​,z b ​表示时序条件(这里你可以认为生成器是一种条件GAN,或者也可以叫做解码器)。所以 main RNN 的公式可以改写成:
h t = ϕ ( W h ( z h ) h t − 1 + W x ( z x ) x t + b ( z b ) ) W h ( z h ) = < W h z , z h > W x ( z x ) = < W x z , z x > b ( z b ) = W b z z b + b 0 (2) h_t = \phi(W_h(z_h) h_{t-1} + W_x(z_x) x_t +b(z_b)) \ W_h(z_h) = h t ​=ϕ(W h ​(z h ​)h t −1 ​+W x ​(z x ​)x t ​+b (z b ​))W h ​(z h ​)=W x ​(z x ​)=b (z b ​)=W b z ​z b ​+b 0 ​(2 )
这里 W h z ∈ R N h × N h × N z , W x z ∈ R N h × N x × N z , W b z ∈ R N h × N z , b 0 ∈ R N h W_{hz} \in \mathbb R^{N_h \times N_h \times N_z}, W_{xz} \in \mathbb R^{N_h \times N_x \times N_z}, W_{bz} \in \mathbb R^{ N_h \times N_z}, b_0 \in \mathbb R^{N_h}W h z ​∈R N h ​×N h ​×N z ​,W x z ​∈R N h ​×N x ​×N z ​,W b z ​∈R N h ​×N z ​,b 0 ​∈R N h ​, 运算符 表示张量内积(多维矩阵的乘法)。
为了进一步降低存储,条件z h , z x , z b z_h,z_x,z_b z h ​,z x ​,z b ​也用线性生成器生成(对应上图的橙色的部分):
论文笔记:HyperNetworks(arXiv版本)
貌似终于大功告成了!欸,等会。。 这种方法保存的 线性层的权重矩阵也太多了吧!所以作者就想在
标准的RNN公式:h t = ϕ ( W h h t − 1 + W x x t + b ) h_t = \phi(W_h h_{t-1} + W_x x_t +b)h t ​=ϕ(W h ​h t −1 ​+W x ​x t ​+b )上对权重的放缩,而不是完全替换,比如说像这样W h n e w = d h ( z h ) ⊙ W h o l d , W x n e w = d h ( z x ) ⊙ W x o l d W_h ^{new} = d_h(z_h) \odot W_h ^{old}, W_x ^{new} = d_h(z_x) \odot W_x ^{old}W h n e w ​=d h ​(z h ​)⊙W h o l d ​,W x n e w ​=d h ​(z x ​)⊙W x o l d ​, 这里⊙ \odot ⊙表示按位乘法:
论文笔记:HyperNetworks(arXiv版本)
这种做法是在原有的参数矩阵上进行缩放,大大降低储存量(我只要储存W o l d W^{old}W o l d和一组缩放向量d d d即可),提高了内存效率,最后内存高效率版本可以写做:
(疑惑:这与之前的方法相比,必定损失一定精度)
论文笔记:HyperNetworks(arXiv版本)
太好了终于结束了!

Original: https://blog.csdn.net/weixin_45775432/article/details/125261372
Author: 星光点点wwx
Title: 论文笔记:HyperNetworks(arXiv版本)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/688628/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球