-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
1890 lines (1812 loc) · 337 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>Hi, 很高兴见到你</title>
<url>/2023/07/17/Hi-%E5%BE%88%E9%AB%98%E5%85%B4%E8%A7%81%E5%88%B0%E4%BD%A0/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script>
<div id="aplayer-tVoIbLMN" class="aplayer aplayer-tag-marker" style="margin-bottom: 20px;">
<pre class="aplayer-lrc-content"></pre>
</div>
<script>
var ap = new APlayer({
element: document.getElementById("aplayer-tVoIbLMN"),
narrow: false,
autoplay: false,
showlrc: false,
music: {
title: "日落大道",
author: "梁博",
url: "/music/日落大道.mp3",
pic: "/music/日落大道.jpg",
lrc: ""
}
});
window.aplayers || (window.aplayers = []);
window.aplayers.push(ap);
</script>
<center><strong><font size="5">欢迎来到我的博客!</font></strong></center>
<p>  在这里我将分享我的<strong>学习心得</strong>、<strong>some projects</strong>、<strong>吉他谱</strong>和<strong>一些个人想法</strong>等等。希望能够对你有所帮助。</p>
<p>  创建博客博客的初衷,一是希望有个<strong>个人空间</strong>来存储我的经历,博客就是很好的选择;二是我希望我的心得能够让更多人看见,<strong>帮助一些人</strong>少走一些弯路——在学习过程中我被各路“开源”大佬的文章启发,因此我也想将我的思考“开源”出去。</p>
<p>  整个博客使用<code>hexo</code>搭建,主题是<code>ayer</code>。这两个链接我放在了“<strong>友链</strong>”中供大家参考。此外也运用了如播放器、搜索等功能,大家可自行去探索<code>hexo</code>的诸多功能。</p>
<p> <strong> 那么,enjoy!!!; -)</strong></p>
<p><del>所以你是被谁骗到这里的?</del></p>
<p><strong>既然来了,Why not leave a comment ? (要先点进此博客)</strong> </p>
<p align="right"><strong>2023.07.17</strong></p>
]]></content>
<tags>
<tag>About</tag>
</tags>
</entry>
<entry>
<title>《Recognizing Predictive Substructures with Subgraph Information Bottleneck》论文解读</title>
<url>/2024/09/12/SIB/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://ieeexplore.ieee.org/document/9537601">click here</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本文是TPAMI 2024中的一篇工作。</p>
<p>这个论文其实21年就已经发在网上了,24年这个论文和21年的变化基本不大,目测只加了一个图。</p>
<p>这篇论文目的不是靠信息瓶颈找到一个潜在表示,而是抽象出一个子图结构。<span id="more"></span>整体有着较为完整的推导方式,数学公式很多,有着完备的上下界等等。从实现角度来看,整体网络并不难,远远简单于公式。因此或许这种“意义”+实验好的效果就够了。</p>
<p>整个方法采用了两阶段优化,具体来说分为了内部和外部两个阶段来进行优化。</p>
<p>补:这篇论文是前序工作<a href="https://arxiv.org/pdf/2010.05563">Graph Information Bottleneck for Subgraph Recognition</a>的补充,添加了更多理论支撑。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240912201303023.png"></p>
<p>这次我想换个方式进行介绍。本文只介绍其整体思想和能够借鉴的部分,具体内容与推导不在这里说明。</p>
<p>论文的理论出发点为:</p>
<p><img src="/../pic/image-20240913140410408.png"></p>
<p>下面我们从三个Loss入手吧。</p>
<h4 id="Loss-MI"><a href="#Loss-MI" class="headerlink" title="$Loss_{MI}$"></a>$Loss_{MI}$</h4><p>内层inner optimization是为了考虑<strong>原图和子图之间的互信息</strong>。使用了DONSKER-VARADHAN representation于KL散度中,从而直接将互信息运算转换为一个互信息估计函数 $f_{\varPhi2}$ 的身上。</p>
<p><img src="/../pic/image-20240913104453602.png"></p>
<p>那么复杂的问题转换为仅与 $f_{\varPhi2}$ 有关的一个量,这个量就可以通过网络来学了:</p>
<p><img src="/../pic/image-20240913104716826.png"></p>
<p>具体流程为:分别用共享参数的GNN获得原图和子图的节点特征表示,进而得到图级别的表示,进而拼接以后经过一层MLP得到互信息估计。</p>
<p>we design a statistics network based on modern GNN architectures as shown by Fig. 1: first, we use a GNN to extract embeddings from both $G$ and $G_{sub}$ (parameter shared with the subgraph generator, which will be elaborated in Section 4.3), then concatenate $G$ and $G_{sub}$ embeddings and feed them into a Multi-Layer Perceptron (MLP), which finally produces the real number.</p>
<h4 id="Loss-cls"><a href="#Loss-cls" class="headerlink" title="$Loss_{cls}$"></a>$Loss_{cls}$</h4><p>这个量衡量的是子图与标签之间的互信息。</p>
<p>文中提到了两个结论,我觉得能够借鉴,同时也降低实现难度:</p>
<ul>
<li>maximizing $I(Y; G_{sub})$ is achieved by the minimization of the classification loss between $Y$ and $G_{sub}$ as $L_{cls}$。</li>
</ul>
<p><img src="/../pic/image-20240913105319436.png"></p>
<ul>
<li>we can reduce the estimating error with large training sets and simple prediction models; the KL term decreases when the variational approximation approaches $p(Y ;G_{sub})$</li>
</ul>
<p><img src="/../pic/image-20240913105542200.png"></p>
<p>整体过程也很好理解,就是GNN后筛选点,而后进行预测。对应绿色的上半部分。</p>
<p><strong>可能有误:选择节点是直接对原始的emb进行选择,原始emb的邻居都在,但是选择后可能原本的邻居不在了,这就导致子图的emb其实并不是真正子图的emb——因为其用到了被删去的点作为邻居信息聚合</strong>。</p>
<h4 id="插一嘴,先说子图如何生成"><a href="#插一嘴,先说子图如何生成" class="headerlink" title="插一嘴,先说子图如何生成"></a>插一嘴,先说子图如何生成</h4><p><img src="/../pic/image-20240913112026822.png"></p>
<p>如图所示,经过GNN后过一个MLP,形成一个 $S \in R^{n\times 2}$ 的矩阵,第 $i$ 行的含义为:<br>$$<br>[p(V_i\in G_{sub}|V_i), p(V_i\in \overline G_{sub}|V_i)]<br>$$<br>用公式来表示的话:</p>
<p><img src="/../pic/image-20240913140224428.png"></p>
<p>很好理解。</p>
<h4 id="双层优化流程"><a href="#双层优化流程" class="headerlink" title="双层优化流程"></a>双层优化流程</h4><p><img src="/../pic/image-20240912201723741.png"></p>
<p>红色为内层优化,蓝色为外层优化。</p>
<h4 id="Loss-con"><a href="#Loss-con" class="headerlink" title="$Loss_{con}$"></a>$Loss_{con}$</h4><p>除了IB中的两个Loss,还有一个 $Connectivity\ Loss$——为什么有这个Loss?</p>
<ul>
<li>the found subgraph <strong>is supposed to be compact</strong>. Therefore, we propose the following connectivity loss</li>
</ul>
<p>Loss定义为:<br>$$<br>L_{con} = ||\text{Norm}(S^TAS)-I_2||<br>$$<br>怎么去理解这个呢,不妨我们把这个 $2\times 2$ 的矩阵按照元素看一看:<br>$$<br>a_{11}=\sum_{i,j}A_{ij}p(V_i\in G_{sub}|V_i), p(V_i\in G_{sub}|V_j) \\<br>a_{12}=\sum_{i,j}A_{ij}p(V_i\in G_{sub}|V_i), p(V_i\in \overline G_{sub}|V_j)<br>$$<br>也就是说,有连边的两个点,最好在一个类别里面——要么都在子图要么都不在。</p>
<p>最终模型实际上干的是这些事:</p>
<p><img src="/../pic/image-20240913141113632.png" alt="image-20240913141113632"></p>
<p>和最开始的IB已经不太像了,虽然仔细想想还是IB的思想——理论与实际的区别啊!</p>
<hr>
<h3 id="实验与参数设置"><a href="#实验与参数设置" class="headerlink" title="实验与参数设置"></a>实验与参数设置</h3><p>验实在是太多了,这里放几个我认为比较有意思的实验结果:</p>
<p>做得实验实在是太多了,这里放几个我认为比较有意思的实验结果:</p>
<h4 id="提取分子的主要成分:"><a href="#提取分子的主要成分:" class="headerlink" title="提取分子的主要成分:"></a>提取分子的主要成分:</h4><p><img src="/../pic/image-20240912200859457.png"></p>
<h4 id="提取三维结构的主要成分"><a href="#提取三维结构的主要成分" class="headerlink" title="提取三维结构的主要成分"></a>提取三维结构的主要成分</h4><p><img src="/../pic/image-20240912201007371.png"></p>
<h4 id="从线图中恢复出最初的拓扑结构"><a href="#从线图中恢复出最初的拓扑结构" class="headerlink" title="从线图中恢复出最初的拓扑结构"></a>从线图中恢复出最初的拓扑结构</h4><p><img src="/../pic/image-20240912201044503.png"></p>
<hr>
<h3 id="一些想法"><a href="#一些想法" class="headerlink" title="一些想法"></a>一些想法</h3><p>这篇论文充分体现了理论与实际的差别。理论分析的全面,落实到实验上无非就是优化如GNN、MLP网络等等,只不过赋予他们了一定的意义:如互信息估计器、依旧是loss但表示了图和输出的互信息等等。</p>
<p>那我替换网络模型后是不是就可以用另一套理论去解释呢。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Understanding over-squashing and bottlenecks on graphs via curvature》论文浅析</title>
<url>/2024/08/18/over-squashing%20and%20bottlenecks%20via%20curvature/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://openreview.net/pdf?id=7UmjRGzp-A">click here</a></p>
<h3 id="论文简述"><a href="#论文简述" class="headerlink" title="论文简述"></a>论文简述</h3><p>本文是ICLR 2022中的一篇高分工作(openreview:10/8/8/8)。</p>
<p>本文从理论上提出了一种Ricci曲率计算方法,并根据对其的分析指出重要结论:<strong>负曲率是导致瓶颈的原因</strong>。而后将其与Cheeger constant联系,说明了他们一定程度上是比较相似的,后期也使用Cheeger constant来说明随机游走重建方法的劣势。<span id="more"></span></p>
<p>根据Ricci曲率的计算方法与得到的结论,文章提出了一种<strong>仅仅基于图结构</strong>的图重建方法。此外,文章对当前基于随机游走的方法进行了分析,说明其并不能消除瓶颈效应。</p>
<p>最后通过实验证明了方法的有效性。</p>
<p><strong>与我之前介绍的ICML2024论文不同,那一篇只基于feature而不用structure,本篇只基于原始structure而不基于feature。</strong></p>
<p>本文内容实在是太丰富且深入了。因此这里仅对文章的核心内容简单聊个大概。</p>
<hr>
<h3 id="Balanced-Forman-curvature"><a href="#Balanced-Forman-curvature" class="headerlink" title="Balanced Forman curvature"></a>Balanced Forman curvature</h3><p>这个定义是比较复杂的,我也不好简单对其进行描述,因此将原文的内容在这里展示。其中每一条每一句对理解都很重要。特别要搞清楚里面每个变量是怎么算出来的。</p>
<p><img src="/../pic/image-20240818150323312.png"></p>
<p>曲率反映了空间的性质,曲率大于0那么平行线会相交,等于0则距离不变,小于零会发散。分别对应着球形空间、平面和双曲空间:</p>
<p><img src="/../pic/image-20240818150859196.png"></p>
<hr>
<h3 id="曲率与瓶颈"><a href="#曲率与瓶颈" class="headerlink" title="曲率与瓶颈"></a>曲率与瓶颈</h3><p>常见的信息传递范式如下:<br>$$<br>h_i^{(\ell+1)}=\phi_\ell\left(h_i^{(\ell)},\sum_{j=1}^n\hat A_{ij}\psi_\ell(h_i^{(\ell)},h_j^{(\ell)})\right)<br>$$<br>存在点 $i$ 二阶邻居的一个子集满足如下条件:</p>
<p><img src="/../pic/image-20240818151111460.png"></p>
<p>当 $\delta$ 越小,则导数绝对值越小,即点 $i$ 对 $k$ 的影响越小——信息瓶颈。又因为Ricci曲率本身有性质 $Ric(i,j)>-2$,因此根据 $(ii)$ 可知 $\delta$ 越小也就代表着<strong>更大的负曲率</strong>。从而得到文章中可能是最重要的一个结论:</p>
<p><img src="/../pic/image-20240818151409865.png"></p>
<hr>
<h3 id="Cheeger-constant"><a href="#Cheeger-constant" class="headerlink" title="Cheeger constant"></a>Cheeger constant</h3><p>图的spectral gap可以解释为<strong>图被划分为两个社区的拓扑障碍</strong>,这个量与图瓶颈有关。因此其应该可以由曲率控制。</p>
<p>从一个直观的解释开始:假设我们得到一个图 $G$,其中两个社区由少数边分隔。在这种情况下,我们看到图可以很容易地断开连接——这就是一个瓶颈。</p>
<p>具体度量方法为:</p>
<p><img src="/../pic/image-20240818151857289.png"></p>
<p>更进一步的,作者通过一些定理与推导,得到:<strong>曲率的正下界</strong>为我们<strong>提供了对 $h_G$ 的控制</strong>,即对图的spectral gap的控制。</p>
<p><img src="/../pic/image-20240818152203528.png"></p>
<hr>
<h3 id="根据Ricci曲率的图结构改造方法"><a href="#根据Ricci曲率的图结构改造方法" class="headerlink" title="根据Ricci曲率的图结构改造方法"></a>根据Ricci曲率的图结构改造方法</h3><p>直观来看,本方法就是干了如下的事:</p>
<p><img src="/../pic/image-20240818155015913.png"></p>
<p>伪代码为:</p>
<p><img src="/../pic/image-20240818152537354.png"></p>
<p>简单来说,主要做了两件事:</p>
<ul>
<li>以添加边后Ricci增益为度量,进行一定概率的加边。大的Ricci曲率增益有更高可能性被添加新边,反之更小概率。</li>
<li>减少曲率过大的边缘。</li>
</ul>
<p>其中 $B_1(i)$ 代表的是到 $i$ 距离小于等于1的点的集合,其实就是<strong>一阶邻居加自己</strong>,核心其实是添加三元环或四元环,这些变量在Ricci曲率计算中起着重要的作用。</p>
<p>经过这样操作后,大大减少了负曲率的数量,同时减少过大正曲率,让整体曲率分布较为集中。</p>
<p>从<strong>图结构保存</strong>的角度来讲,主要实现了两点(原文):</p>
<ul>
<li>Theorem 4 tells us how to do the rewiring under such constraints in order to best address the over-squashing: the topological modifications <strong>need to be localized around the most negatively-curved edges</strong>.</li>
<li>Secondly, we also point out that $Ric(i, j) < −2 + \delta$ implies that $\min\{di, dj\} > 2/\delta$. Therefore, if we mostly modify the edge set at those nodes $i, j$ joined by an edge with large negative curvature, then we are perturbing nodes with <strong>high degree where such a change is relatively insignificant</strong>, and thus <strong>overall statistical properties</strong> of the rewired graph such as degree distribution <strong>are likely to be better preserved</strong>.</li>
</ul>
<p>从结果上来看,本方法得到的度分布与原图是很像的,并不像其他方法一般大大改变了度的分布。因此这也反映出本方法能够较好的保留原图的信息。</p>
<p><img src="/../pic/image-20240818154910051.png"></p>
<hr>
<h3 id="为什么随机游走方法无法解决瓶颈问题"><a href="#为什么随机游走方法无法解决瓶颈问题" class="headerlink" title="为什么随机游走方法无法解决瓶颈问题"></a>为什么随机游走方法无法解决瓶颈问题</h3><p>随机游走模型为:<br>$$<br>R_{\alpha}:=\sum_{k=0}^{\infty}\theta_k^{PPR}(D^{-1}A)^k=\alpha\sum_{k=0}^{\infty}\left((1-\alpha)(D^{-1}A)\right)^k<br>$$<br>其中 $\alpha$ 是停机概率,即当前状态有 $\alpha$ 的可能不继续游走,$1-\alpha$ 的概率继续游走。</p>
<p>作者此时就用到了之前提到的Cheeger constant。给出游走后的一个上界。</p>
<p><img src="/../pic/image-20240818154416713.png"></p>
<p>文章指出这种方法优先在community内部进行加边操作而非community间,这也就代表它不会处理掉瓶颈问题。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>图神经网络</tag>
<tag>Over-Squashing</tag>
</tags>
</entry>
<entry>
<title>《Residual Entropy-based Graph Generative Algorithms》论文解读</title>
<url>/2024/08/18/Residual%20Entropy/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://dl.acm.org/doi/10.5555/3535850.3535942">click here</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本文是AAMAS 2022中的一篇工作。</p>
<p>本篇文章的核心工作为:<strong>设计了一种通过原图构造防御图的算法(非神经网络)</strong>。其意义在于通过对原始graph进行加边处理使得其结构信息更加显著,从而帮助模型更好的学习到structure信息。</p>
<p>文章通过1-dimensional structure entropy和2-dimensional structure entropy定义出残差熵(Residual Entropy),这个熵反映了图结构所携带的信息——本文希望最大化这个量。</p>
<p>文章通过残差熵的定义推导出使得残差熵增大的条件,进而根据这个条件对图进行加边处理,旨在提高图的残差熵,从而得到<strong>防御图</strong>。<span id="more"></span></p>
<p>我之前看的论文大多是基于1-dimensional structure entropy,在架构上进行大大小小的改动。而这边文章从底层使用了一种不同的度量方法,因此我还是简单总结一下这篇文章的主要内容。</p>
<p>这篇文章中从定义推导方法的过程值得借鉴,尽管我感觉有些不够严谨,但这个思路是能够将一个工作顺下来的。</p>
<p>补:后来发现残差熵这个概念在<a href="https://proceedings.neurips.cc/paper/2019/file/328347805873e9a9c700591812fb0ec2-Paper.pdf">REM: From Structural Entropy To Community Structure Deception</a>中提出,且部分结论在这里面也有。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240818115633508.png"></p>
<h4 id="残差熵"><a href="#残差熵" class="headerlink" title="残差熵"></a>残差熵</h4><p>先介绍本文提出残差熵用到的两个熵计算方法:</p>
<ul>
<li><p>1-dimensional structure entropy: 1-dimensional structure entropy is defined by the average codeword length of <strong>all interactions</strong> from nodes in $V$。<br>$$<br>\mathcal H(G)=-\sum_{v_i\in V}\frac{d_i}{2|E|}\log_2\frac{d_i}{2|E|}<br>$$<br>其中 $d_i$ 是节点 $v_i$ 的度,$E$ 是总边数。这个度量方式<strong>没有假设任何社区结构</strong>。</p>
</li>
<li><p>2-dimensional structure entropy: 2-dimensional structure entropy is defined by the average encode length of all calls with community partition $P$。<br>$$<br>\mathcal H_P(G)=\sum_{j=1}^L\left(-\frac{\nu_j}{2|E|}\mathcal H(G|X_j)-\frac{g_j}{2|E|}\log_2\frac{\nu_j}{2|E|}\right)<br>$$<br>$P=\{X_1,\dots,X_L\}$ 是对节点的一个分割。 $\mathcal H(G|X_j) = -\sum_{v_i\in X_j} \frac{d_i}{v_j}\log_2\frac{d_i}{v_j}$,$v_i$ 代表第 $i$ 个分割团 $X_i$ 的度之和;$g_i$ 代表只有一个端点在 $X_i$ 内的边数(其实就是连向外面的边数)。这个结构熵反映了一直社区机构后的信息熵。</p>
</li>
</ul>
<p>接下来便可以引出残差熵(已normalized)了:<br>$$<br>\rho p:=R_{P}/\mathcal H(G), \quad R_P=\mathcal H(G)-\mathcal H_P(G)=\frac{v_j-g_j}{2|E|}\log_2\frac{v_j}{2|E|}<br>$$<br>残差熵<strong>表示有关图社区结构的信息量</strong>。一个相对高的残差熵表示分区 $P$ 包含更多的信息。</p>
<h4 id="如何提高残差熵"><a href="#如何提高残差熵" class="headerlink" title="如何提高残差熵"></a>如何提高残差熵</h4><p>提高残差熵无非就两个思路:分子越大越好,分母越小越好。文章给出了几个引理和推论,简单来说如下:</p>
<ul>
<li>对分割 $X_i$ 内部加边后 $R_P$ 会增加更多。</li>
<li>待加边两个端点的度之和越大,则加边后 $H$ 越小。</li>
<li>若度之和相等,则待加边两个端点的度之差越小,加边后 $H$ 越小。</li>
</ul>
<p>根据以上三种规则,我们就可以实现加边算法了。</p>
<h4 id="防御图构建算法"><a href="#防御图构建算法" class="headerlink" title="防御图构建算法"></a>防御图构建算法</h4><p>文中提到了两种攻击方法:无目标攻击(对全图进行攻击),有目标共计(对某一partial进行攻击)。</p>
<p><img src="/../pic/image-20240818140718481.png"></p>
<p>两个算法比较相似,只不过是作用域不同。核心思想与之前介绍的方法是一致的:目标加边集合的选取方法为:</p>
<p><img src="/../pic/image-20240818140835357.png"></p>
<p>具体就不过多介绍了,伪代码比较清晰。</p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><p>文章使用了两种大类评估方法:</p>
<ul>
<li>不需要feature:Louvain、DeepWalk、SCD</li>
<li>需要feature:GCN、GAT、SSP、GCN-LPA</li>
</ul>
<p>节点分类的评估指标采取标准化的互信息(Normalized Mutual Information,NMI)。</p>
<h4 id="有目的加边-or-随机加边"><a href="#有目的加边-or-随机加边" class="headerlink" title="有目的加边 or 随机加边"></a>有目的加边 or 随机加边</h4><p>作者用随机加边作为对比,证明了加边的有效性(有目的当然会比随机加边好)。</p>
<p><img src="/../pic/image-20240818141800928.png"></p>
<h4 id="对无目标攻击的抵御"><a href="#对无目标攻击的抵御" class="headerlink" title="对无目标攻击的抵御"></a>对无目标攻击的抵御</h4><p>攻击方法为REM和DICE。流程为先攻击后训练(即对不完全正确的图结构进行学习)。怎么有的攻击完了反而更好,还好了不少。</p>
<p><img src="/../pic/image-20240818142125546.png"></p>
<h4 id="对有目标攻击的抵御"><a href="#对有目标攻击的抵御" class="headerlink" title="对有目标攻击的抵御"></a>对有目标攻击的抵御</h4><p>攻击方法为FDA和RND,流程与上面一样。</p>
<p><img src="/../pic/image-20240818142353895.png"></p>
<hr>
<h3 id="一些想法"><a href="#一些想法" class="headerlink" title="一些想法"></a>一些想法</h3><p>本方法感觉还是有一些局限,比如只考虑了加边。或许这样方法的表现上线就已经被原图结构进行限制了。</p>
<p>另外一个重要的点是添加的边数是超参数 $K$ 控制的(或者是是实验中 $K=p|E|$ 的 $p$),所以其效果一定程度上还是依赖于人的参数设计的。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>一亩三分地——宿舍桌面v2.0版</title>
<url>/2024/08/16/desktop/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>hi,陆陆续续,从上次装修宿舍以来也已经过了一年了吧。</p>
<p>这期间又经历了很多事,大学从 50% 到 75%,有多少难熬的夜晚,有多少内心的悸动,但都经历过了。岁月留痕,一件物品,一段故事。<span id="more"></span></p>
<p><img src="/../pic/image-20240816232619968.png" alt="我的桌面"></p>
<ul>
<li>这一年,我重拾了魔方,从 sub 28s 练习到 sub 18s。于是我的桌面上多了两个魔方:rs3m2020(自己做了磁力加强)以及奇艺智能魔方竞速版。</li>
<li>花的摆件是我迟来的生日礼物,来自她。这是一个木质拼插积木,却又看起来并不呆板,很好看。</li>
<li>高达旁边的摆件是来自Eason Nuo的维也纳礼物,至于维也纳,2024ICML会议在此召开。</li>
<li>尤克里里是装饰,能弹出声音但并不准,毕竟也只是个摆件价格。上面是空白的,留下了无限可能,或许在未来的某日,我会克服懒惰萌生想法,去装饰它。</li>
<li>尤克里里下面的琴架是我用纸板自己做的,并不难,诚然并不好看,但毕竟也不太能看到……</li>
<li>台灯上的“照片”是我很久以前的QQ头像,一个背着吉他的男孩。这是我很久以前的生日礼物——来自17岁那一年,四年前。</li>
<li>电脑壁纸也是我珍藏很久的一张,抱着吉他,在夜晚吹风。这并不孤独。</li>
<li>高达下面的小相机虽说是个摆件,却真有着拍照和录像功能,在2024年有着2004年的画质,挺好玩的,不过现在仅仅是个摆件罢了。</li>
<li>其他的似乎与之前没什么不同:装饰用的黑胶,Tommy、披头士的海报,假期绘制的数字油画,来自她的奶龙和头戴耳机……</li>
</ul>
<p>我在这个位置还能够待一年的时间,也应该是仅有的一年时间了。时间过后,一切痕迹都会被收拾——露出并不洁白的墙壁,以及部分粗糙的水泥。</p>
<p>但我会将他们布置在新的地方,应该会的。</p>
<p>愿大四精彩。</p>
]]></content>
<categories>
<category>杂</category>
<category>生活分享</category>
</categories>
<tags>
<tag>杂</tag>
</tags>
</entry>
<entry>
<title>《Edge Entropy as an Indicator of the Effectiveness of GNNs over CNNs for Node Classification》论文解读</title>
<url>/2024/08/11/Edge%20Entropy/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://ieeexplore.ieee.org/document/9443451">click here</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>这是CMU在2021 Asilomar Conference上的一篇工作。</p>
<p>GNN与CNN的区别在于,GNN引入了图的结构信息。从实验结果来看,有效的图结构训练结果要远好于简单的单位阵或随机矩阵当做图结构的结果:<span id="more"></span></p>
<p><img src="/../pic/image-20240811140440410.png"></p>
<p>那么结构信息对GNN有了什么样的帮助呢,这篇文章基于此提出两个问题:</p>
<ul>
<li>如何评估图结构对GNN的有效性?</li>
<li>如何评估图结构的有效性?</li>
</ul>
<p>本文以<strong>边缘熵</strong>的思想来对如上问题进行解答。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><h4 id="直观而言"><a href="#直观而言" class="headerlink" title="直观而言"></a>直观而言</h4><p><img src="/../pic/image-20240811140646283.png"></p>
<ul>
<li>(a) 每一个团都只有一类,那么知道其邻居的颜色自身颜色就知道了。但是 (b) 不行</li>
<li>intra-class ration能够代表一定信息,如 (c) 邻居与本身类别一致比例是0,能够提供信息</li>
<li>clustering coefficient能够作为一个指标,比如 (d) 完全图的聚类系数为1,基本不提供信息</li>
</ul>
<p>如何找到一个通用的评判方法?——Edge Entropy。</p>
<h4 id="Edge-Entropy"><a href="#Edge-Entropy" class="headerlink" title="Edge Entropy"></a>Edge Entropy</h4><p>设图 $G$ 有 $M$ 类别,对于任意类别 $l$ 当前类别的熵为:</p>
<p>计算方式如下:<br>$$<br>H(l):=-\sum_{m\in\{1,\dots,M\}}p_{lm}(n)\log_M(p_{lm}(n))<br>$$<br>其中:<br>$$<br>p_{lm}:=\frac{|{\text{edge }w:\text{start}(w)\in\mathcal V_l\wedge\text{end}(w)\in\mathcal V_m}|}{|{\text{edge }w:\text{start}(w)\in\mathcal V_l}|}<br>$$<br>最终整个图的Edge Entropy就可以计算为:<br>$$<br>\hat H=-\sum_{m\in\{1,\dots,M\}} H(m)w_m<br>$$<br>$w_m$ 就是第 $m$ 类节点个数的占比。</p>
<p>接下来就是实验部分——这个特征如何刻画efficiency。</p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><h4 id="在自建图上的实验"><a href="#在自建图上的实验" class="headerlink" title="在自建图上的实验"></a>在自建图上的实验</h4><p>文章生成具有<strong>特定边缘熵</strong>的合成数据集。$r_i$ 代表第 $i$ 类节点数量,同时有 $\sum r_i=N$。</p>
<p>为了具有特定的边缘熵,生成的连通图必须在每个类的节点之间<strong>有一定数量的边</strong>。通过创建一个具有所需边缘熵的 $M \times M$ 矩阵 $T$,其中 $T_{i,j}$ 是将类 $i$ 节点连接到类 $j$ 节点的边数。我们对 $T$ 的每一行进行归一化以产生概率矩阵 $P$ (实际上每一元素就是 $p_{l,m}$)。同时设置了一个变量 $\rho$。</p>
<p><strong>具体图构建方法为</strong>:从 $N$ 个孤立节点开始。每个节点都有一个自循环和随机特征。根据类 $r_i$ 的节点分布,为每个节点分配一个标签。然后我们考虑每对节点 $v_i, v_j$ ,对于每对节点,我们以 $\rho P_{l,m}$ 的概率从 $v_i$ 到 $v_j$ 创建一个有向边,其中 $l$ 是 $v_i$ 的类,$m$ 是 $v_j$ 的类。</p>
<p>设置参数 $N=3000,M=300,r_1=r_2=r_3=1/3,\rho_1=0.1,\rho_2=0.5$,同时设置低熵 $\hat H_{low} \approx 0.52$ 和高熵 $\hat H_{low} \approx 0.97$ 对应的概率矩阵:<br>$$<br>P_{\text{low}}=\begin{bmatrix}0.8&0.05&0.15\\0.05&0.9&0.05\\0.27&0.03&0.7\end{bmatrix}, P_{\text{high}}=\begin{bmatrix}0.4&0.26&0.34\\0.2&0.5&0.3\\0.33&0.31&0.37\end{bmatrix}<br>$$<br>简单来说:$\rho$ 代表在相对比率不变的情况下控制边生成的比例,$P$ 控制边的相对生成比例。</p>
<p>根据如上参数构建四个数据集:</p>
<ul>
<li>dense_low:$\rho_2,P_{low}$</li>
<li>sparse_low:$\rho_1,P_{low}$</li>
<li>dense_high:$\rho_2,P_{high}$</li>
<li>sparse_high:$\rho_1,P_{high}$</li>
</ul>
<p>实验结果为:</p>
<p><img src="/../pic/image-20240811144320893.png"></p>
<p>即<strong>低熵更好</strong>。(为什么不对dense和sparse再进行一下对比)</p>
<p>此外坐着还用了一些真实的数据集来证明这个结论,这里不做展示。</p>
<p>核心就是,Edge Entropy能够代表图结构的作用,并且结论是低熵better。</p>
<hr>
<h3 id="一些想法"><a href="#一些想法" class="headerlink" title="一些想法"></a>一些想法</h3><p>从<strong>边缘上进行熵</strong>的计算是一种不错的思路。与经典的图熵不同,边缘能够考虑相邻两个节点的关系以及本身的结构关系,是一种更加合理的结构原子(一个点的度终究核心还是一个节点,结构信息可能不够全面)。</p>
<p>整篇论文读下来感觉很有道理,但仔细想想似乎也没有什么意料之外的内容,毕竟我们很容易有意识到边的链接以及图的复杂性会影响GNN表现能力。</p>
<p>但是能够借鉴的,或许可以通过label计算出当前边缘的分布概率,换句话来说可以从<strong>大的结构上来计算某一区域structure的分布,计算熵</strong>(这才是我觉得合理的结构熵,而非还是着眼于小的点)。</p>
<p>此外根据label计算structure能够有效的将feature与structure进行结合,更加对图结构的信息进行统一刻画。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Delaunay Graph:Addressing Over-Squashing and Over-Smoothing Using Delaunay Triangulation》论文解读</title>
<url>/2024/08/09/Delaunay%20Graph/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://openreview.net/pdf?id=uyhjKoaIQa">click here</a></p>
<p>code:<a href="https://github.com/Hugo-Attali/Delaunay-Rewiring/blob/main">Delaunay Graph(github)</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本文是来自2024ICML的论文。</p>
<p>图神经网络在计算节点的特征时采用了聚合的思路,但随着gnn层数的增长,会面对如下两个问题:</p>
<ul>
<li><p><strong>Over-smoothing</strong>:如果GNN层很深的话,随着聚合节点的不断扩散,任意两个节点所共享的邻居就会非常多(感受野重叠),导致这两个节点的嵌入非常相似。<span id="more"></span></p>
<p><img src="/../pic/869d48783ef46b9e15b4924b497da972.png"></p>
</li>
<li><p><strong>Over-Squashing</strong>:随着层数的增加,一个结点的k-hop邻居的数量将会呈指数的形式增长,但是与前几层gnn相比,更多的信息被压缩到了一个定长的向量中,这就是 over squashing。</p>
<p><img src="/../pic/8969f6d4a50ada9a8a471cf99feb7023.png"></p>
</li>
</ul>
<p>本文就针对这两个现象,通过改变图结构来得到更好的gnn效果。</p>
<p>与前人的工作不同,此工作<strong>不需要原始的图结构信息</strong>,即仅根据feature即可对图结构进行重构。</p>
<p>本工作从曲率的角度出发,通过引入Delaunay rewiring方法来使得最大化曲率。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240809165221218.png"></p>
<h4 id="曲率计算方式"><a href="#曲率计算方式" class="headerlink" title="曲率计算方式"></a>曲率计算方式</h4><p><strong>Augmented Forman Curvature</strong>:此种曲率度量建议考虑图中的三角形来扩展 Forman 的曲率,以使其更具表现力。对于无向图,边 $e_{ij}$ 的曲率 $c_{ij}$ 计算如下:<br>$$<br>c_{ij}=4-d_i-d_j+3m<br>$$<br>其中 $m$ 是包含 $e_{ij}$ 的三角形数。</p>
<p><strong>Balanced Forman Curvature</strong>:考虑了四元环:<br>$$<br>c_{ij}=\frac2{d_i}+\frac2{d_i}-2\frac m{\max(d_i,d_j)}+\frac m{\min(d_i,d_j)} + \frac {(\Gamma_{max})^{-1}}{\max(d_i,d_j)}(\gamma_i+\gamma_j)<br>$$</p>
<ul>
<li>$\Gamma_{max}(i,j)$ 代表以 $e_{ij}$ 为边且过相同其它节点的四元环数目的最大值</li>
<li>$\gamma_i$ 代表以 $e_{ij}$ 为边,参与到形成<strong>无对角线</strong>的四元环中 $i$ 的邻居的数目</li>
</ul>
<p><a href="https://openreview.net/pdf?id=7UmjRGzp-A">这篇论文</a>有详细的介绍。</p>
<h4 id="Delaunay三角剖分"><a href="#Delaunay三角剖分" class="headerlink" title="Delaunay三角剖分"></a>Delaunay三角剖分</h4><p>对于 $d$ 维欧几里得空间中的一组点集合 $P$,Delaunay 三角剖分表示为 $DT (P )$,是一个三角剖分,其中 $P$ 中没有点位于 $DT (P)$ 中任何 d-单纯形的环绕超球面内。</p>
<p><a href="https://blog.csdn.net/qq_39784672/article/details/131067426">网上资料</a>有如下描述:</p>
<p><img src="/../pic/image-20240809165814229.png"></p>
<p>这种剖分方法有两点好处:</p>
<ul>
<li>最大化由一组点形成的三角形的角度,努力创建尽可能接近等边三角形。(最大化三角形中最小角度的读书)</li>
<li>它确保每个三角形的外接圆不包含集合中的其他点</li>
</ul>
<p>而这导致:<strong>两个节点越像,则越可能在一个三角形内</strong>。</p>
<p>为了缓解Over-Squashing的问题,我们希望<strong>减少负弯曲边的数量</strong>。根据曲率的许多定义,入射在边缘上的三角形数量 $m$ 在增加边缘曲率方面起着重要作用。应用三角剖分可以最大化上述两个曲率的值,同时确保最大团大小为 3。</p>
<h4 id="实验流程"><a href="#实验流程" class="headerlink" title="实验流程"></a>实验流程</h4><p><img src="/../pic/image-20240809163735329.png"></p>
<p><strong>整体流程</strong>:首先对feature进行GNN编码,对得到的编码使用UMAP方法进行降为,对降维后的数据进行Delaunay三角剖分,最终在新的图结构上进行GNN的编码与预测。</p>
<p><strong>为什么不直接对feature进行降维?</strong>因为作者发现这样的效果不好:</p>
<p><img src="/../pic/image-20240809172549426.png"></p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><h4 id="初步检验图结构的有效性"><a href="#初步检验图结构的有效性" class="headerlink" title="初步检验图结构的有效性"></a>初步检验图结构的有效性</h4><p><strong>Homophily</strong>:图的<strong>同质性</strong>在确定节点分类任务体系结构的效率方面起着至关重要的作用。且有方法可以度量。对新得到的图结构计算其同质性,能够发现有极大的改善——一定程度上证明了方法的有效性。此外<strong>边的数量也大大减少</strong>。</p>
<p><img src="/../pic/image-20240809172716523.png"></p>
<p><strong>Ollivier curvature</strong>:使用Olliver的曲率(Ollivier, 2007)来统计图的曲率分布,因为它是有界的,更容易解释。在三角剖分之后构建的图,<strong>删除了自然高度负弯曲的边缘</strong>,这些边缘负责瓶颈(Ttopping 等人,2022),减轻Over-Squashing;得到的新图<strong>不具有强正弯曲的边缘</strong>,减轻Over-Smoothing。</p>
<p><img src="/../pic/image-20240809173236484.png"></p>
<p>其中 $D_i$ 代表第 $i$ 个十分位数。</p>
<h4 id="实验部分"><a href="#实验部分" class="headerlink" title="实验部分"></a>实验部分</h4><h5 id="图结构已知"><a href="#图结构已知" class="headerlink" title="图结构已知"></a>图结构已知</h5><p>使用不同的图结构重构方法,对构造得到的新图进行分类任务。结果表明DR方法得到了最好的效果。</p>
<p><img src="/../pic/image-20240809163501234.png"></p>
<h5 id="图结构未知"><a href="#图结构未知" class="headerlink" title="图结构未知"></a>图结构未知</h5><p>在图结构未知的情况下,与基本的 $k$-NN 方法进行比对,依旧DR效果整体更优:</p>
<p><img src="/../pic/image-20240809163648408.png"></p>
<hr>
<h3 id="一些想法"><a href="#一些想法" class="headerlink" title="一些想法"></a>一些想法</h3><p>这篇论文是我目前看到的思路很简单代码也很少的例子之一,清晰地提出了一个思路,有着很简单的实施过程,但是有着很好地实验效果——四两拨千斤的感觉。</p>
<p>感觉很有意思。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>图神经网络</tag>
<tag>Over-Squashing</tag>
<tag>Over-Smoothing</tag>
</tags>
</entry>
<entry>
<title>《Rethinking Independent Cross-Entropy Loss For Graph-Structured Data》论文解读</title>
<url>/2024/08/02/rethinking%20CEL/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://proceedings.mlr.press/v235/zhang24bt.html">click here</a></p>
<p>code:<a href="https://github.com/MR9812/Joint-Cluster-Supervised-Learning">Joint-Cluster(github)</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本文是来自2024ICML的论文。</p>
<p> 对于节点的表示与预测,会存在如下问题:</p>
<ul>
<li>由独立条件分布 $P(y_i|z_i)$ 和 $CE(y_i, P(y_i|z_i))$ 所导致的:<ul>
<li>过拟合</li>
<li>容易受到adversarial attacks的影响 <span id="more"></span></li>
</ul>
</li>
<li>基于独立同分布的假设:$P(y_1,\cdots,y_n|z_1,\cdots,z_n)=\prod P(y_i|z_i)$<ul>
<li>这种通过独立同分布的假设从而直接分解 $P$,导致未能全面解释固有的节点相关性。</li>
</ul>
</li>
</ul>
<p>本文的解决方式就是将图分成不同的集团,根据<strong>自身emb</strong>和聚类后某一<strong>集团整体的emb</strong>来进行联合概率密度的计算。最终的模型有显著<strong>泛化</strong>能力的提升,为被攻击节点生成更<strong>稳健的分类</strong>,正确率更高。</p>
<p><strong>可以理解为本文提出的是一种损失函数形势,或者说计算方法。</strong></p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240803140117367.png"></p>
<h4 id="联合分布的建模与优化函数"><a href="#联合分布的建模与优化函数" class="headerlink" title="联合分布的建模与优化函数"></a>联合分布的建模与优化函数</h4><p>想要计算完全的联合分布的话,我们的目标其实就是求解 $p(y_1,\ldots,y_L\mid z_1,\ldots,z_L;\tilde{\theta})$,维度为 $\mathbb R^{c^L}$,这显然是难以计算的,所以我们将其向下转变为:图由若干独立集组成,即 $\{\mathcal C_1, \dots,\mathcal C_M\}$,,那么我们的联合分布便可以由若干独立集的分布相乘得到:<br>$$<br>p\left(y_1,\ldots,y_L:\mid z_1,\ldots,z_L;\theta\right)=\prod_{m=1}^Mp\left(\{y_i\mid v_i\in\mathcal C_m\}\mid\{z_i\mid v_i\in\mathcal C_m\} ;\theta\right)<br>$$<br>这种集群上的 i.i.d 假设在一定程度上降低了计算复杂度,但节点子集的<strong>联合建模仍然不切实际</strong>,并且<strong>不适合用于推断测试节点的类</strong>。</p>
<p>针对这个问题,采用每一集团的特征 $\bar y_m, \bar z_m$ 来代替集团信息,联合分布也就变换为:<br>$$<br>p (y_i,\bar y_m\mid z_i,\bar z_m,;\theta),<br>$$<br>所以我们优化的实际内容是这样的:</p>
<p><img src="/../pic/image-20240803142847475.png"></p>
<h4 id="损失函数"><a href="#损失函数" class="headerlink" title="损失函数"></a>损失函数</h4><p>关于cluster的分割,这里采用的是 <strong>METIS 图聚类</strong>算法。</p>
<p>子团的信息:采用平均池化 $\bar z_m = 1/L_m\sum_{i=1}^{L_m}z_i, \ \bar y_m = 1/L_m\sum_{i=1}^{L_m}y_i$,因此“真实的”联合分布概率定义为 $y_i\bar y_m$,而模型训练是通过将当<strong>前节点的emb与cluster的emb拼接</strong>后经过<strong>图分类器</strong>得到的。<br>$$<br>\mathcal L_{JC}=-\sum_{i=1}^L{(y_i\bar y_m^{\top})\cdot\log g_{\phi}\left(\text{con}\left(z_i,\bar z_m\right)\right)+(\bar y_my_i^{\top})\cdot\log g_{\phi}\left(\text{con}\left(\bar z_m,z_i\right)\right)}<br>$$<br>为了<strong>对称</strong>联合分布建模,在上述方程的第二项,将节点和集群嵌入的位置进行交换。</p>
<h4 id="从联合分布到边缘分布"><a href="#从联合分布到边缘分布" class="headerlink" title="从联合分布到边缘分布"></a>从联合分布到边缘分布</h4><p>$$<br>\begin{aligned}<br>p(y_i |z_i;\theta)&=\int_{\mathbb R^d}\sum_{k=1}^c p(y_i,\bar y_m=k\mid z_i,\bar z,;\theta)q(\bar z)d \bar z \\<br>&=\sum_{k=1}^c p(y_i,\bar y_m=k\mid z_i,\bar z_m,;\theta)<br>\end{aligned}<br>$$</p>
<p>等号能过去的原因是子团之间是独立的。</p>
<p>也就是说给定了联合分布 $ p(y_i,\bar y_m\mid z_i,\bar z_m,;\theta) \leftrightarrow y_i\bar y_m^\top$,对其进行逐行求和便是 $y_i$ 类别的边缘分布。</p>
<p>值得注意的是,<strong>在模型的推断过程中,训练中cluster的emb的被利用的</strong>。这个操作和batch norm中的run_mean、run_var是一致的。</p>
<h4 id="整体流程"><a href="#整体流程" class="headerlink" title="整体流程"></a>整体流程</h4><p><img src="/../pic/image-20240803140511284.png"></p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><p>除去正文中展示的实验,其在附录中还存在实验结果。此处只展示部分正文中的实验。</p>
<h4 id="小规模图数据集"><a href="#小规模图数据集" class="headerlink" title="小规模图数据集"></a>小规模图数据集</h4><p>类别均衡:</p>
<p><img src="/../pic/image-20240803152609166.png"></p>
<p>类别不均衡:</p>
<p><img src="/../pic/image-20240803152643124.png"></p>
<p>异质图:</p>
<p><img src="/../pic/image-20240803152715825.png"></p>
<h4 id="大规模图数据"><a href="#大规模图数据" class="headerlink" title="大规模图数据"></a>大规模图数据</h4><p><img src="/../pic/image-20240803152740238.png"></p>
<h4 id="对抗攻击"><a href="#对抗攻击" class="headerlink" title="对抗攻击"></a>对抗攻击</h4><p><img src="/../pic/image-20240803152913681.png"></p>
<h4 id="泛化性更好"><a href="#泛化性更好" class="headerlink" title="泛化性更好"></a>泛化性更好</h4><p><img src="/../pic/image-20240803153455154.png"></p>
<p>他的训练与测试集的误差gap更小。</p>
<hr>
<h3 id="思考与想法"><a href="#思考与想法" class="headerlink" title="思考与想法"></a>思考与想法</h3><ul>
<li><p>本文实际上是吧原本的一维分类交叉熵变为二维的交叉熵。</p>
</li>
<li><p>这里的cluster是训练前直接根据图结构生成的,那么每一个cluster内部label是否一致?或者说这个cluster对节点预测是否有作用(是否是对的)</p>
</li>
<li><p>将图分为若干子团的方法是可以借鉴的</p>
</li>
</ul>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Learning Graph Representation via Graph Entropy Maximization》论文解读</title>
<url>/2024/08/01/GeMax/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://proceedings.mlr.press/v235/sun24i.html">click here</a></p>
<p>code:<a href="https://github.com/MathAdventurer/GeMax">GeMax(github)</a></p>
<h3 id="论文任务与个人想法"><a href="#论文任务与个人想法" class="headerlink" title="论文任务与个人想法"></a>论文任务与个人想法</h3><p>本工作来自于2024ICML。</p>
<p>文章的任务是图表示学习,其不仅对每一张图上的<strong>每个节点得到编码</strong>,更在图整体上得到关于<strong>图的编码</strong>。本文提出了一种利<strong>用正交表示进行图熵最大化</strong>的近似方法。</p>
<p>整篇文章读下来,有让我眼前一亮的感觉,是让我觉得蛮有意思的一篇文章。</p>
<p>文章运用了其他文献未运用的,基于<strong>独立集</strong>表示的熵的表示方法。<span id="more"></span>在计算中,用到了“vertex-packing polytope($VP(G)$)”概念,但是计算复杂,文章论述了为什么<strong>不能</strong>用下界进行训练。为了简化问题,文章取了其子集,并在正交表示的条件下给出了一条定理,从而<strong>转化为一定条件下的优化问题</strong>——规避了复杂的求解独立集的过程。更进一步,将条件转化为优化,使得模型能够学习。</p>
<p>总的来说,我认为论文的亮点如下:</p>
<ul>
<li><p>如何理解文中最大化交叉熵的目的。</p>
</li>
<li><p>找到了正交表示和$VP$之间的一个很妙的关系。</p>
</li>
<li><p>规避了求解独立集的过程,使得计算成为可能。</p>
</li>
<li><p>将有条件的优化问题转化为无条件的优化问题。</p>
</li>
</ul>
<p>光看这一部分大概率是不了解其具体干了什么,那么先往下看,了解完整体内容再回头看,便能够感受到巧妙之处了。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240801234721505.png"></p>
<h4 id="图熵,但不能简单优化下界"><a href="#图熵,但不能简单优化下界" class="headerlink" title="图熵,但不能简单优化下界"></a>图熵,但不能简单优化下界</h4><p>这里的图熵是基于独立集定义的,独立集就是集合中任意两个点事没有边相连的。下面这个例子能够较好的展示,其一共有十个独立集:</p>
<p><img src="/../pic/image-20240802000029372.png"></p>
<p>比如 $b_6$ 就代表 $v_1,v_3$ 所组成的独立集(很好理解吧)。</p>
<p>先引入一个概念:<strong>vertex-packing polytope</strong><br>$$<br>\mathrm{VP}(G):=\{\boldsymbol a\in\mathbb R^{|V|}:\boldsymbol a=\boldsymbol B\boldsymbol{\lambda}, \boldsymbol{\lambda}\geq0, \sum_i\lambda_i=1\}<br>$$<br>得到的 $a_i$ 可以理解为其对整个图的独立集所做的贡献。</p>
<p>那么现在就可以引出本文的<strong>图熵</strong>了:<br>$$<br>H_k(G,P):=\min_{\boldsymbol a\in\text{VP}(G)}\sum_{i=1}^{|G|}-P_i\log(a_i)<br>$$<br>其中 $P_i$ 代表第 $i$ 个节点的额概率密度。$\sum P_i=1$,但是<strong>注意</strong> $\sum a_i\neq1$ 。我们希望最大化图熵 $\max\limits_{F\in\mathcal F} \mathbb E_{G\sim\mathcal D}\begin{bmatrix}H_k\left(G,P_{F(G)}\right)\end{bmatrix}$。</p>
<p>设图表示函数为 $F_g$,图节点函数为 $F_z$:<br>$$<br>\mathbf g^\theta=F_g(\boldsymbol A,\boldsymbol X;\theta)\quad \boldsymbol Z^\phi=F_Z(\boldsymbol A,\boldsymbol X;\phi).<br>$$<br>那么定义Boltzmann distribution:<br>$$<br>P_i(\mathbf g^\theta,\boldsymbol Z^\phi):=\frac{\exp(-||\boldsymbol z_i^\phi-\mathbf g^\theta||^2)}{\sum_{l\in V}\exp(-||\boldsymbol z_l^\phi-\mathbf g^\theta||^2)}, \forall i\in V<br>$$<br>从而最终的优化目标为:<br>$$<br>\max_{\theta,\phi} \sum_{j=1}^NH_k\left(G_j,P(\boldsymbol A_j,\boldsymbol X_j;\theta,\phi)\right)<br>$$<br>或者可以理解为:<br>$$<br>\max_{\theta,\phi}\sum_{j=1}^N\min_{\boldsymbol a\in\mathrm{VP}(G_j)}\sum_{i=1}^{n_j}-P_i(\boldsymbol A_j,\boldsymbol X_j;\theta,\phi)\log(a_i)<br>$$<br>这个熵是有<strong>下界</strong>的:<br>$$<br>H(P)-\log\alpha(G)\leq H_k(G,P)<br>$$<br>其中 $H$ 就是independent number,而 $\alpha(G)$ 是<a href="https://mathworld.wolfram.com/IndependenceNumber.html">独立数</a>。</p>
<p>根据这个界去优化的话<strong>不直接捕获图结构的任何拓扑信息</strong>,且效果不好,因此我们需要一种其他方法来对 $H_k$ 进行估计。</p>
<h4 id="pre解决难以优化的问题"><a href="#pre解决难以优化的问题" class="headerlink" title="pre解决难以优化的问题"></a>pre解决难以优化的问题</h4><p>图熵的计算是 <strong>NP-hard</strong> 问题,显然是不可计算的,因此本文提出了一个vertex-packing polytope子集来减少计算量,当然其意义远不止于此,在后续优化中有很大用处。<br>$$<br>\mathrm{VP}_\mathrm{Sub}(G) = \{ a\in\mathbb R^{|V|}:\mathbb 1(a)\in \mathrm{VP}(G), 0\leq a_i\leq 1 \}<br>$$<br>接下来求解就在这个子集上进行操作了,减少了求解域的大小。</p>
<p>但这个子集仍然需要计算独立的集合指标矩阵 $B$,这<strong>仍然是 NP-hard</strong>。</p>
<h4 id="正交表示解决求独立集的复杂问题"><a href="#正交表示解决求独立集的复杂问题" class="headerlink" title="正交表示解决求独立集的复杂问题"></a>正交表示解决求独立集的复杂问题</h4><p>首先介绍什么是正交表示,简单来说是模长为1,非相邻节点的编码正交形成的编码集合:<br>$$<br>\mathcal T(G):={Z\in\mathbb R^{n\times d}: |z_i|_2=1\ \mathrm{for}\ i=1,2,…,n;z_i^{\top}\boldsymbol z_j=0, \forall(i,j)\notin E}.<br>$$<br>本文提出Theorem,我认为这是本文<strong>最重要</strong>的点:</p>
<p><img src="/../pic/image-20240802093214151.png"></p>
<p>证明在附录中给出了。</p>
<p>正是因为这个原因,将 $\mathrm{VP}_\mathrm{Sub}(G)$ 条件转化为 $D_a(ZZ^{\top})D_a=D_a^2$。从而优化问题转换为:</p>
<p><img src="/../pic/image-20240802093434718.png"></p>
<p>那么 ‘s.t.’ 如何在模型中作出限制呢?</p>
<h4 id="从有限制优化到非限制优化"><a href="#从有限制优化到非限制优化" class="headerlink" title="从有限制优化到非限制优化"></a>从有限制优化到非限制优化</h4><p>对于上面的第一个约束,采用优化如下目标得到:<br>$$<br>\mathcal L_{\mathrm{orth}}(\mathcal G;\phi):=\sum_{j=1}^N\left|M_j\odot\left(\boldsymbol Z_j^\phi(\boldsymbol Z_j^\phi)^\top-\boldsymbol I_n\right)\right|F^2<br>$$<br>其中 $M_j=1_{n_j\times n_j}-A_j$ ,脚标代表第 $j$ 个图。事实上就是一个mask矩阵。</p>
<p>对于上面的第二个约束:<br>$$<br>\mathcal L_{\mathrm{s-vp}}(\mathcal G;\theta,\phi,\mathcal A):=\sum_{j=1}^N\left|D_{a_j}\left(\boldsymbol Z_j^{\phi}(\boldsymbol Z_j^{\phi})^{\top}\right)\boldsymbol D_{a_j}-\boldsymbol D_{a_j}^2\right|^2<br>$$</p>
<p>$$<br>\mathrm{s.t.} 0\leq a_{ij}\leq1, \forall i\in[n_j], \boldsymbol{a}_j\in\mathcal A<br>$$</p>
<p>这样就大大降低了约束条件。</p>
<p>接下来就是对Loss的优化,因为需要$\max\min$,因此采用交替优化如下两个过程:</p>
<ul>
<li><p>优化图编码器参数:<br>$$<br>\theta^{(t+1)},\phi^{(t+1)}=\operatorname*{argmax}_{\theta,\phi}\mathcal J_1(\mathcal G;\theta,\phi,\mathcal A^{(t)})<br>$$</p>
<p>$$<br>\mathcal J_1(\mathcal G;\theta,\phi,\mathcal A):=\mathcal L_{H_k}(\mathcal G;\theta,\phi,\mathcal A)-\mu\cdot\mathcal L_{\mathrm{orth}}(\mathcal G;\phi)-\gamma\cdot\mathcal L_{\mathrm{s-vp}}(\mathcal G;\theta,\phi,\mathcal A)<br>$$</p>
</li>
<li><p>优化 $a$:<br>$$<br>\mathcal A^{(t+1)}=\underset{\mathcal A\in\mathcal C}{\operatorname*{argmin}}\mathcal J_2(\mathcal G;\theta^{(t+1)},\phi^{(t+1)},\mathcal A )<br>$$</p>
<p>$$<br>\mathcal J_2(\mathcal G;\theta,\phi,\mathcal A):=\mathcal L_{H_k}(\mathcal G;\theta,\phi,\mathcal A)+\gamma\cdot\mathcal L_{\mathrm{s-vp}}(\mathcal G;\theta,\phi,\mathcal A)<br>$$</p>
</li>
</ul>
<p>特别的,在 $a$ 更新时,用函数将其限制在 $[0,1]$:<br>$$<br>\operatorname{Proj}_{[0,1]}\left(\bar a\right)=\begin{cases}0,&\text{if}\ \bar a\leq0,\\1,&\text{if}\ \bar a\geq1,\\ \bar a,&\text{otherwise}.\end{cases}<br>$$<br>至此,大功告成!</p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><p>本文实验进行了很多,除了下面的还有很多,都在最终的<strong>附录</strong>中。</p>
<h4 id="不同原则之间的比较"><a href="#不同原则之间的比较" class="headerlink" title="不同原则之间的比较"></a>不同原则之间的比较</h4><ul>
<li><p>InfoMax:最大化图级和节点级表示之间的互信息<br>$$<br>\phi^*,\theta^*,\varphi^*=\arg\max_{\phi,\theta,\varphi}\sum_{j=1}^{|\mathcal G|}\frac1{|V_j|}\sum_{i\in V_j}I_\varphi(\boldsymbol g_j^\theta,\boldsymbol z_{ij}^\phi),<br>$$</p>
</li>
<li><p>Lovasz Principle:其中$\ell_\text{orth}$是正交正则化(orthonormal regularization)<br>$$<br>\phi^*,\theta^*=\arg\min_{\phi,\theta}\sum_{j=1}^{|\mathcal G|}\max_{i\in V_j}\frac1{\left((z_i^\phi)^\top g_j^\theta\right)^2}+\eta\ell_\text{orth}(\mathcal G;\theta,\phi),<br>$$</p>
</li>
</ul>
<p>具体方法可在<strong>附录</strong>中找到。文章探究了在如上原则与本文提出的最大化图熵的实验效果:</p>
<h5 id="在非监督学习中:"><a href="#在非监督学习中:" class="headerlink" title="在非监督学习中:"></a>在非监督学习中:</h5><p><img src="/../pic/image-20240801233326255.png"></p>
<p><img src="/../pic/image-20240801233408485.png"></p>
<h5 id="在半监督学习中:"><a href="#在半监督学习中:" class="headerlink" title="在半监督学习中:"></a>在半监督学习中:</h5><p><img src="/../pic/image-20240801233440667.png"></p>
<p><img src="/../pic/image-20240801233504193.png"></p>
<h4 id="最大化不同熵计算方法之间的比较"><a href="#最大化不同熵计算方法之间的比较" class="headerlink" title="最大化不同熵计算方法之间的比较"></a>最大化不同熵计算方法之间的比较</h4><ul>
<li><p>Shannon entropy:<br>$$<br>J_\mathrm{Sh}(\mathcal G;\theta,\phi)=\sum_j^{|\mathcal G|}\sum_{i\in V_j}-P_i(\mathbf g^\theta,\boldsymbol Z^\phi)\log(P_i(\mathbf g^\theta,\boldsymbol Z^\phi))<br>$$</p>
</li>
<li><p>Renyi entropy:<br>$$<br>J_\text{Renyi}(\mathcal G;\theta,\phi)=\sum_j^{|\mathcal G|}\frac1{1-\alpha}\log\left(\sum_{i\in V_j}(P_i(\mathbf g^\theta,\boldsymbol Z^\phi))^\alpha\right)<br>$$</p>
</li>
</ul>
<p>当然还包括本文中的结构熵,来进行比较。</p>
<h5 id="在非监督学习中:-1"><a href="#在非监督学习中:-1" class="headerlink" title="在非监督学习中:"></a>在非监督学习中:</h5><p><img src="/../pic/image-20240801234032946.png"></p>
<p><img src="/../pic/image-20240801234053411.png"></p>
<h5 id="在半监督学习中:-1"><a href="#在半监督学习中:-1" class="headerlink" title="在半监督学习中:"></a>在半监督学习中:</h5><p><img src="/../pic/image-20240801234405457.png"></p>
<p><img src="/../pic/image-20240801234113983.png"></p>
<h4 id="消融实验、灵敏度分析、本文熵在不同模型上的效果"><a href="#消融实验、灵敏度分析、本文熵在不同模型上的效果" class="headerlink" title="消融实验、灵敏度分析、本文熵在不同模型上的效果"></a>消融实验、灵敏度分析、本文熵在不同模型上的效果</h4><p>见附录。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Dynamic Graph Information Bottleneck》论文解读</title>
<url>/2024/07/26/DGIB/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://arxiv.org/abs/2402.06716">click here</a></p>
<p>Code:<a href="https://github.com/RingBDStack/DGIB/tree/main">DGIB(github.com)</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本篇论文是2024WWW上的论文。</p>
<p>这篇论文将<strong>信息瓶颈理论</strong>创新性地应用于动态图神经网络中,遇上一篇论文类似,文章核心围绕着信息瓶颈理论的——minimal sufficient 特点展开。但动态图具有时间特征,因此在时间特征上的编码一致性是重要的,针对此问题,本文将minimal - sufficient进行扩展,<strong>得到Minimal-Sufficient-Consensual (MSC)原则</strong>。</p>
<span id="more"></span>
<p>整体论文架构思路与<a href="https://hydrogenhy.github.io/2024/07/24/GIB/">《Graph Information Bottleneck》论文解读</a>有些相似,但应用于不同场景。本文讲重点介绍思想与区别,一些之前提到过得内容会简单略过。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240725213950724.png"></p>
<h4 id="DGIB-MS"><a href="#DGIB-MS" class="headerlink" title="$DGIB_{MS}$"></a>$DGIB_{MS}$</h4><p>与GIB类似,仍然有如下假设:当前节点时空特征只与$k$-hop邻居有关,与其它结点相互独立。</p>
<p>针对最小-充足性特征,编码应该满足:<br>$$<br>\mathrm Z^{T+1} =\arg\min_{\mathbb P(Z^{T+1}|\mathcal D ,\theta)\in\Omega}\mathrm{DGIB}_{MS}(\mathcal D,\mathrm Y^{I+1};\mathrm Z^{I+1})<br>\triangleq\left[- I(\mathrm Y^{T+1};\mathrm Z^{T+1}) +\beta_1 I(\mathrm D;\mathrm Z^{T+1}) \right].<br>$$<br>这里是与原始数据 $\mathcal D $ 相比,保留了原始BI理念的特点。</p>
<p><strong>变分界:</strong></p>
<p><img src="/../pic/image-20240730004303791.png"></p>
<h4 id="DGIB-C"><a href="#DGIB-C" class="headerlink" title="$DGIB_{C}$"></a>$DGIB_{C}$</h4><p>针对一致性特征,编码应该满足:<br>$$<br>\mathrm Z^{T+1} =\arg\min_{\mathbb P(Z^{T+1}|Z^{1:T},C(\theta))\in\Omega}\mathrm{DGIB}_{MS}(Z^{1:T},\mathrm Y^{I+1};\mathrm Z^{I+1})<br>\triangleq\left[- I(\mathrm Y^{T+1};\mathrm Z^{T+1}) +\beta_1 I(Z^{1:T};\mathrm Z^{T+1}) \right].<br>$$<br>这里是与时间尺度上的特征$Z^{1:T}$ 相比,保持了编码空间的一致性。</p>
<p><strong>变分界:</strong></p>
<p><img src="/../pic/image-20240730004334597.png"></p>
<p><img src="/../pic/image-20240730004419028.png"></p>
<h4 id="实际应用"><a href="#实际应用" class="headerlink" title="实际应用"></a>实际应用</h4><p>交叉熵代替互信息:</p>
<p><img src="/../pic/image-20240730004604781.png"></p>
<p>假设 $\mathbb P(\hat{\mathrm A}^t\mid\hat{\mathrm Z}^t,\mathrm Z^{t-1},\mathrm A^t)$服从伯努利or类别分布,进而得到 $A$:</p>
<p><img src="/../pic/image-20240730004918569.png"></p>
<p>假设 $\mathbb P(\mathrm Z^t\mid\hat{\mathrm Z}^t,\mathrm Z^{t-1},\hat{\mathrm A^t})$服从多元正态分布,进而得到 $Z$,其中 $\Phi$是正态分布:</p>
<p><img src="/../pic/image-20240730005208383.png"></p>
<p>对于Eq(14)而言:</p>
<p><img src="/../pic/image-20240730005353997.png"></p>
<h4 id="优化目标"><a href="#优化目标" class="headerlink" title="优化目标"></a>优化目标</h4><p>优化目标为:<br>$$<br>\mathcal L_{\mathrm{DGIB}}=\alpha\mathrm{DGIB}_{MS}+(1-\alpha)\mathrm{DGIB}_C<br>$$<br>而两种信息瓶颈的区别就在于已知量是谁:</p>
<p><img src="/../pic/image-20240730005615993.png"></p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><ul>
<li><p>在原始数据集上训练,然后对测试集进行特征或结构的攻击:</p>
<p><img src="/../pic/image-20240725215038674.png"></p>
</li>
<li><p>使用NETTACK对数据集进行攻击,包括evasion attacking 和 poisoning attacking:</p>
<p><img src="/../pic/image-20240725215227696.png"></p>
</li>
<li><p>消融实验,探究损失函数中的不同部分对结果的影响(Figure 4)</p>
</li>
<li><p>训练过程中DGIB理论每一部分互信息的变化情况(Figure 5)</p>
</li>
<li><p>DGIB中控制最小性和充足性的超参数 $\beta$ 对结果的影响(Figure 6)</p>
<p><img src="/../pic/image-20240725215510232.png"></p>
</li>
</ul>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>按钮无法使用与数学公式无法显示bug修复</title>
<url>/2024/07/25/http_bug/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h3 id="bug发现"><a href="#bug发现" class="headerlink" title="bug发现"></a>bug发现</h3><p>7月17日,当再次提交一个新的博客内容后,发现<strong>提交到github上的网页无法正常显示(但在本地localhost上是正常的)</strong>,直观上有以下几个问题:</p>
<ul>
<li>按钮点击无效,如一键回顶部、白天黑夜模式调整</li>
<li>数学公式无法正常显示</li>
</ul>
<span id="more"></span>
<p><img src="/../pic/image-20240726120459410.png"></p>
<hr>
<h3 id="bug排查"><a href="#bug排查" class="headerlink" title="bug排查"></a>bug排查</h3><h4 id="怀疑文件问题"><a href="#怀疑文件问题" class="headerlink" title="怀疑文件问题"></a>怀疑文件问题</h4><p>因为这个文件是我post一个新文章后才发现的,所以自然而然怀疑这篇文章有问题。删除掉文章后发现问题依旧存在,因此初步排除了文章本身的问题。</p>
<h4 id="怀疑代码问题"><a href="#怀疑代码问题" class="headerlink" title="怀疑代码问题"></a>怀疑代码问题</h4><p>F12进入开发者模式,发现很多报错:</p>
<p><img src="/../pic/image-20240726120340078.png"></p>
<p>经过分析,其中最主要的也是最直接导致错误的应该是如下错误:</p>
<p><img src="/../pic/image-20240726120617980.png"></p>
<p>简单来说本网页使用的是<code>https</code>,但在加载过程中出现了<code>http</code>请求,<strong>请求混用从而<code>http</code>请求被block</strong>,这也就导致一些<code>js</code>组件无法被加载,反映到网页中就是无法正常执行功能。</p>
<p>接下来的任务就是如何解决<code>http</code>请求。</p>
<hr>
<h3 id="bug解决"><a href="#bug解决" class="headerlink" title="bug解决"></a>bug解决</h3><h4 id="网上资料"><a href="#网上资料" class="headerlink" title="网上资料"></a>网上资料</h4><p>搜索了一些资料,解决措施也大差不差,最直接的方式是增加一行代码:</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="tag"><<span class="name">meta</span> <span class="attr">http-equiv</span>=<span class="string">"Content-Security-Policy"</span> <span class="attr">content</span>=<span class="string">"upgrade-insecure-requests"</span>></span></span><br></pre></td></tr></table></figure>
<p>但因为本博客的<code>Html</code>生成是靠着<code>hexo</code>将<code>md</code>文件转写得到的,我不知道如何直接修改其编辑逻辑,于是暂时搁置了这个方案,转而去代码中寻找到底哪里出现了<code>http</code>请求。</p>
<h4 id="代码修改——解决"><a href="#代码修改——解决" class="headerlink" title="代码修改——解决"></a>代码修改——解决</h4><p>浏览生成的网页代码,很容易发现里面并没有<code>http://xxxx</code>,相反,全部都是<code>https://xxxx</code>,这就很奇怪了。</p>
<p>进一步看报错位置所涉及的文件,将报错的文件名反向去<code>Html</code>中寻找,如:</p>
<figure class="highlight html"><table><tr><td class="code"><pre><span class="line"><span class="comment"><!--报错中无法请求pace.min.js文件--></span></span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"https://cdn.staticfile.org/pace/1.2.4/pace.min.js"</span>></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure>
<p>大概搜了几个,发现报错的资源地址都是<code>"https://cdn.staticfile.org/xxx</code>形式。</p>
<p>直接去搜索这个网址会直接<strong>跳转到</strong><code>https://cdn.staticfile.net/xxx</code>,本质上他们应该指向一个地方。这个地方<strong>恰好也是我在控制台中搜索其对应<code>http://</code>报错所得到的内容</strong>,这便启示我可能是<code>"https://cdn.staticfile.org/xxx</code>的形式不正确,将<code>org</code>改为<code>net</code>即可。</p>
<p>尝试后问题解决,一切恢复正常:</p>
<p><img src="/../pic/image-20240726122515504.png"></p>
<p><img src="/../pic/image-20240726122329111.png"></p>
<p>最终写一个<code>python</code>脚本,遍历编译生成的所有网页源代码,将其中对应的内容进行修改即可::</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line">current_directory = <span class="string">'.'</span></span><br><span class="line">html_file_pattern = re.<span class="built_in">compile</span>(<span class="string">r'.*\.html$'</span>, re.IGNORECASE)</span><br><span class="line"><span class="keyword">def</span> <span class="title function_">replace_org_with_net</span>(<span class="params">content</span>):</span><br><span class="line"> <span class="keyword">return</span> re.sub(<span class="string">r'cdn.staticfile.org'</span>, <span class="string">'cdn.staticfile.net'</span>, content)</span><br><span class="line"><span class="keyword">for</span> root, dirs, files <span class="keyword">in</span> os.walk(current_directory):</span><br><span class="line"> <span class="keyword">for</span> file <span class="keyword">in</span> files:</span><br><span class="line"> <span class="keyword">if</span> html_file_pattern.<span class="keyword">match</span>(file):</span><br><span class="line"> file_path = os.path.join(root, file)</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(file_path, <span class="string">'r'</span>, encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> content = f.read()</span><br><span class="line"> new_content = replace_org_with_net(content)</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(file_path, <span class="string">'w'</span>, encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> f.write(new_content)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">f'Updated file: <span class="subst">{file_path}</span>'</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">'Finished processing all HTML files.'</span>)</span><br></pre></td></tr></table></figure>
<hr>
<h3 id="bug猜想"><a href="#bug猜想" class="headerlink" title="bug猜想"></a>bug猜想</h3><p>可能是网站协议发生了更新,导致之前可行的方案如今变得不可行。</p>
<p>当然这个问题可能也反映出我安装的库有一些老旧了,但是毕竟好久没有接触到这个环境,我也不太敢去乱动什么,因此才采用了这种较为“麻烦”的方案来进行解决</p>
]]></content>
<categories>
<category>test_categories</category>
</categories>
<tags>
<tag>test_tag</tag>
</tags>
</entry>
<entry>
<title>《Graph Information Bottleneck》论文解读</title>
<url>/2024/07/25/GIB/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://arxiv.org/abs/2010.12811">click here</a></p>
<p>Code:<a href="https://github.com/snap-stanford/GIB">GIB(github.com)</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本篇论文是2020Neurips上的论文。</p>
<p>这篇论文将<strong>信息瓶颈理论</strong>创新性地应用于图神经网络中,具体来说,文章核心围绕着信息瓶颈理论的——minimal sufficient 特点展开的,从理论推导、实例化、实验证明等方面证明了这种方法的重要性。</p>
<span id="more"></span>
<p>信息瓶颈理论的最小-充足特点,能够在<strong>保证特征表达</strong>的同时很好地<strong>提高模型的鲁棒性</strong>。但其若直接应用在图上,会有两个较大的<strong>问题</strong>:</p>
<ul>
<li>IB 的模型假设数据集中的训练示例是<strong>独立的和同分布</strong>的($i.i.d$)。对于图结构数据,这个假设<strong>不再成立</strong>。</li>
<li><strong>结构</strong>信息对于表示图结构数据是必不可少的。</li>
</ul>
<p>因此如何建模这个问题至关重要。如何将IB理论迁移到图中,让我们正式开始了解这篇论文的内容。</p>
<hr>
<h3 id="前置理论"><a href="#前置理论" class="headerlink" title="前置理论"></a>前置理论</h3><p><img src="/../pic/image-20240725194555026.png"></p>
<h4 id="图上的信息瓶颈理论"><a href="#图上的信息瓶颈理论" class="headerlink" title="图上的信息瓶颈理论"></a>图上的信息瓶颈理论</h4><p><img src="/../pic/image-20240725180435634.png"></p>
<p>图信息瓶颈的核心公式如上图所示,旨在<strong>增加</strong>潜在表示 $Z$ 与目标 $Y$ 之间的互信息,同时<strong>减少</strong>潜在表示 $Z$ 与原始特征 $X$ 之间的互信息。这也就是所谓的“最小 - 充足”原则。</p>
<p>针对之前提到的<strong>两个问题</strong>,文中使用local-dependence assumption来限制 $P(Z|D)$ 的搜索域,同时运用Markov chain来逐层对feature和structure进行提取,使IB原则迁移到图中。</p>
<p><img src="/../pic/image-20240725181530343.png" alt="local-dependence assumption"></p>
<p><strong>local-dependence assumption</strong>:点 $v$ 只与他 $k$ 跳邻居有关,与其他节点是独立的。</p>
<p><img src="/../pic/image-20240725181855813.png" alt="Markov chain"></p>
<p><strong>Markov chain</strong>:第 $l$ 层图结构信息只与原始图结构 $A$ 和第 $l-1$ 层特征信息有关,第 $l$ 层特征信息只与第 $l$ 层图结构信息和第 $l-1$ 层特征信息有关。</p>
<p>所以优化目标函数:<br>$$<br>\min_{\mathbb{P}(Z_X^{(L)}|\mathcal{D})\in\Omega}\mathrm{GIB}_\beta(\mathcal{D},Y;Z_X^{(L)})\triangleq\left[-I(Y;Z_X^{(L)})+\beta I(\mathcal{D};Z_X^{(L)})\right]<br>$$<br>实际上就是在优化两个分布:$\mathbb P(Z_X^{(l)}|Z_X^{(l-1)},Z_A^{(l)}),\ \mathbb{P}(Z_A^{(l)}|Z_X^{(l-1)},A)$。</p>
<h4 id="GIB的变分界"><a href="#GIB的变分界" class="headerlink" title="GIB的变分界"></a>GIB的变分界</h4><p>具体证明可在appendix中找到。</p>
<p>(1) $I(Y;Z_X^{(L)})$ 的下界:</p>
<p><img src="/../pic/image-20240725191245373.png"></p>
<p><del>为什么我看附录感觉第二个加号应该是减号</del></p>
<p>(2) $I(\mathcal D; Z_X^{(L)})$ 的上界:</p>
<p><img src="/../pic/image-20240725191310666.png"></p>
<p>所以模型中<strong>优化函数实际上优化的是GBI的上界</strong>。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><h4 id="算法过程"><a href="#算法过程" class="headerlink" title="算法过程"></a>算法过程</h4><p>本文给出了两个GIB使用方法:GIB-Cat(基于categorical distributions)和GIB-Bern(基于Bernoulli distribution)。</p>
<p>第三步的邻居采样应用了图注意力机制网络(GAT)来计算目标节点邻居的注意力。</p>
<p>此外:</p>
<ul>
<li>GIB-Cat将注意力值作为分类分布的参数,从多跳邻居中采样 $k$ 个节点构成 $Z_{A,v}^{(l+1)}$(Algorithm 2)</li>
<li>GIB-Bern则是将注意力值(softmax替换为sigmoid)作为对邻居分别独立采样的伯努利分布的参数(Algorithm 3)</li>
</ul>
<p>第3、7步使用了重参数化技巧。</p>
<p><img src="/../pic/image-20240725191938833.png"></p>
<p><img src="/../pic/image-20240725192004626.png"></p>
<h4 id="训练目标"><a href="#训练目标" class="headerlink" title="训练目标"></a>训练目标</h4><ul>
<li><p>$\widehat{AIB}$的估计:对于两种分布</p>
<p><img src="/../pic/image-20240725192252644.png"></p>
</li>
<li><p>$\widehat{XIB}$的估计:假设 $\mathbb Q(Z_X^{(l)})$ 服从混合的高斯分布,具体而言,每一个点的分布服从于若干高斯分布的加权求和,其中<strong>权重、均值、方差是可学习的</strong>。</p>
<p><img src="/../pic/image-20240725192353031.png"></p>
</li>
</ul>
<p>至此便有:$I(\mathcal D;Z_X^{(L)})\to\sum_{l\in S_A}\widehat{\mathrm{AIB}}^{(l)}+\sum_{l\in S_X}\widehat{\mathrm{XIB}}^{(l)}$。</p>
<ul>
<li><p>$I(Y,Z_X^{(L)})$的估计:通过忽略常量,得</p>
<p><img src="/../pic/image-20240725193036315.png"></p>
</li>
</ul>
<p>至此完成了理论到实际的转换。</p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><p>本文针对性的对鲁棒性进行了验证。</p>
<ul>
<li><p>鲁棒性检验,使用Nettack方式,两种测试模式:模型训练后攻击(Evasive)和模型训练前攻击(Poisoning)。</p>
<p><img src="/../pic/image-20240725194147099.png"></p>
</li>
<li><p>消融实验,使用不停地训练目标</p>
<p><img src="/../pic/image-20240725194249685.png"></p>
<p>只使用AIB或XIB,那岂不是没有了特征与目标之间的训练???</p>
</li>
<li><p>对节点特征的噪声攻击:</p>
<p><img src="/../pic/image-20240725194450796.png"></p>
</li>
</ul>
<hr>
<h3 id="可能深入方向"><a href="#可能深入方向" class="headerlink" title="可能深入方向"></a>可能深入方向</h3><p>本文图的结构服务于特征 $Z$ 的生成,并没有显式的计算结构熵,或许可以将结构熵加入,进一步简化图本身的复杂度,来更好的对信息进行抽取。</p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Structural Entropy Based Graph Structure Learning for Node Classification》论文解读</title>
<url>/2024/07/18/Structural%20Entropy%20based%20GSL/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://ojs.aaai.org/index.php/AAAI/article/view/28679">click here</a></p>
<p>可参考资料:<a href="https://arxiv.org/abs/2201.05540">$CoGSL$</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本篇论文是2024AAAI上的论文。</p>
<p>由于GNN的性能高度依赖于输入图结构的质量,因此如今学者已经提出了各种**图结构学习(GSL)**技术来增强图结构。</p>
<p>大多数现有的GSL方法都专注于融合从图中提取的不同结构特征(基本视图),但很少包含图语义,例如<strong>层次社区</strong>。因此,在处理包含来自现实世界复杂系统的噪声的图时,它们可能还不够。</p>
<span id="more"></span>
<p>本文结合了<strong>信息瓶颈、最大化互信息</strong>等理论,通过<strong>图增强、编码树、图混合</strong>等技术完成了图结构学习,并形成节点的embedding。</p>
<hr>
<h3 id="小梳理"><a href="#小梳理" class="headerlink" title="小梳理"></a>小梳理</h3><p>本篇论文通读下来感觉信息量还是蛮大的,所以在介绍之前我先简单做一个梳理。</p>
<p>本篇论文我理解为是在 $CoGSL$ 后续所做的工作,其最大的贡献是<strong>将图视角与编码树视角相结合</strong>,不仅最大化图之间、编码与标签之间的互信息,同时还要优化图与编码树之间的互信息,因此本文有很多的篇章来描述编码树如何构造以及损失函数如何定义。</p>
<p>整个流程下图描述的很清晰,再读文章的时候与这张图对照能够更好的了解具体流程。</p>
<p><img src="/../pic/image-20240718150406931.png"></p>
<p>简单来说,首先对两个得到的图基础视图进行增强,并根据这两张图生成融合后的图。分别对每张图构造编码树,并根据图上的编码得到编码树上每个节点的编码。接下来优化图与图之间、树与树之间、图与数之间、编码与标签之间的互信息即可。</p>
<p>本篇论文我个人感觉就是在不同视角下不断切换,提供更多的互信息优化依据,以得到更好的模型效果。</p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><h4 id="前置知识"><a href="#前置知识" class="headerlink" title="前置知识"></a>前置知识</h4><p><strong>图的一维结构熵:</strong><br>$$<br>H^1(G)=-\sum_{v\in V}\frac{d_v}{vol(G)}\log_2\frac{d_v}{vol(G)}<br>$$<br>其中 $d_v$ 代表 $v$ 节点所连边的权重和,$vol(G)=\sum_v d_v$</p>
<p><strong>编码树的 $K$ 维结构熵:</strong><br>$$<br>H^{K}(G)=\min_{\mathcal{T}}\sum_{\alpha\in\mathcal{T},\alpha\neq\lambda}H^{\mathcal{T}}(G;\alpha),\quad\quad H^{\mathcal{T}}(G;\alpha)=-\frac{g_\alpha}{vol(G)}\log_{2}\frac{\mathcal V_\alpha}{\mathcal V_{\alpha^-}}<br>$$<br>$\alpha$ 为树上结点,$\lambda$ 为根节点,其中包含图上的所有node。$g_\alpha$ 是从点 $\alpha$ 连向外部的边权之和,$\mathcal V_a$ 是$\alpha$ 内图节点所连边权的和 $\mathcal V_\alpha=\sum_{v\in T_\alpha} d_v$,$\alpha^-$是 $\alpha$ 节点的父节点。</p>
<h4 id="理论优化思想"><a href="#理论优化思想" class="headerlink" title="理论优化思想"></a>理论优化思想</h4><p>图结构学习能够用以下公式刻画:<br>$$<br>\mathcal L_{gsl}=\mathcal L_{cls}(Z^\star,Y_L)+\mu\mathcal L_{reg}(A^\star,Z^\star,A)<br>$$<br>前者是编码与标签的关系,后者是重建的图结构与原始图结构、标签之间的约束。</p>
<p>在本文总,采用<strong>信息瓶颈理论</strong>进行建模:<br>$$<br>GIB(G,Y;Z^\star)=\max_{\boldsymbol{Z}}\left[I(\boldsymbol{Z};Y)-\beta I(\boldsymbol{Z};G)\right]<br>$$<br>旨在最大化编码与标签的关系,同时希望从图 $G$ 中提取较少的信息即可。但是 $I(Z,G)$ 的计算是困难的,因此转化问题(<strong>感觉可以借鉴</strong>):<br>$$<br>\min_{G_{s}}\max_{\boldsymbol{Z}}I(\boldsymbol{Z};Y_{L})+\beta I(\boldsymbol{Z};G_{s}) \ s.t.,H^{1}(G)>H^{1}(G_{s}),I(G;Y_{L})=I(G_{s};Y_{L})<br>$$<br>其中 $G_s$ 为 $G$ 的采样子图。也就是说提取较少有用信息这个限制通过 $G_s$ 来进行限制,换句话来说,其保证了<strong>捕获节点分类的最小和充分信息</strong>。</p>
<p>但是方法中具体而言并不是直接优化这个式子,而是采用不同损失来实现这个思想。</p>
<h4 id="理论方法"><a href="#理论方法" class="headerlink" title="理论方法"></a>理论方法</h4><p><img src="/../pic/image-20240718150406931.png"></p>
<p>首先根据 $CoGSL$ 方法,生成两个基础视图的图结构 $G^1,G^2$。</p>
<h5 id="图增强"><a href="#图增强" class="headerlink" title="图增强"></a>图增强</h5><p>接下来对图进行增强,使用 GCN 网络得到每个节点的编码 $z_i$,根据<strong>余弦相似度</strong>计算出节点对之间的相似度。进一步,根据这些相似度,构造 $kNN$ graph,而 $k$ 的选择需要满足图结构熵的最小:<br>$$<br>H^1(G^1_{k-1}) \geq H^1(G^1_{k}) \leq H^1(G^1_{k+1})<br>$$<br>最终增强后的图为 $G_{en}^1=G^1+\xi G_k^{1}$,$G^2_{en}$ 同理。</p>
<h5 id="编码树的构建"><a href="#编码树的构建" class="headerlink" title="编码树的构建"></a>编码树的构建</h5><p>构建目标依旧用到了熵思想:<br>$$<br>\mathcal{T}^{\star}=\underset{\forall\mathcal{T}:height(\mathcal{T})\leq K}{\arg\min}(H^{\mathcal{T}}(G))<br>$$<br>为了构建一个树,有三种操作:</p>
<ul>
<li><p>合并:对于两个community $P_i,P_j$,合并操作 $op_m(P_i,P_j)$ 后剩下的community集合为 $\mathcal{P}=\{P_{1},…,P_{i-1},P_{i+1},…,P_{j-1},P_{j+1},…,P_{c},P_{x}\}$</p>
<p>另外文中给出了合并后的结构熵变化,我理解与<strong>决策树中的信息增益类似</strong>。选择信息增益最大的一对进行合并。</p>
</li>
<li><p>压缩:$op_c(\mathcal P)$ 即将 $\mathcal P$ 内的所有community分别压缩成一个点,边权为之前若干边权的和。</p>
</li>
<li><p>更新:$op_u(\mathcal T,\mathcal P)$ ,将 $\mathcal P$ 内部所有的community作为 $\mathcal T$ 的叶子结点。</p>
</li>
</ul>
<p>算法过程为:</p>
<p><img src="/../pic/image-20240718154119776.png"></p>
<p>感觉跟决策树、霍夫曼编码思想相似。</p>
<h5 id="最终合并图结构的构建"><a href="#最终合并图结构的构建" class="headerlink" title="最终合并图结构的构建"></a>最终合并图结构的构建</h5><p>合并的适合考虑了community之间的关系,也就是说考虑了<strong>编码树</strong>。定义叶子结点的社区影响:<br>$$<br>\varepsilon_{\alpha}=\frac{H^{\mathcal T}(G;\alpha)}{\sum_{\delta\in\mathcal T}H^{\mathcal T}(G;\delta)}<br>$$<br>其中 $\delta$ 是从树根 $\lambda$ 到 $\alpha$ 路径上的点。</p>
<p>接下来获得系数 $a$,以 $G^1$ 为例:<br>$$<br>a_i^1=\frac{\sigma(\pi_i^1)\cdot\pi_i^1+\sigma(\varepsilon_i^1)\cdot\varepsilon_i^1}{\sigma(\pi_i^1)+\sigma(\varepsilon_i^1)}<br>$$<br>其中 $\sigma(·)$ 是激活函数,$\pi_i^1$ 是 $v_i$ 对 $G^1$ 的预测置信度(方法与$CoGSL$)一致。</p>
<p>进一步获得权重:<br>$$<br>w_i^1=a_i^1/(a_i^1+a_i^2),\quad w_i^2=a_i^2/(a_i^1+a_i^2)<br>$$<br>然后便能得到融合后的图了:<br>$$<br>G_i^\star=w_i^1\cdot G_{en,i}^1+w_i^2\cdot G_{en,i}^2<br>$$</p>
<h4 id="双目标优化损失"><a href="#双目标优化损失" class="headerlink" title="双目标优化损失"></a>双目标优化损失</h4><p><strong>第一个</strong>损失当然是预测准确率的交叉熵:<br>$$<br>\mathcal L_{cls}=\sum_{i=1}^2\mathcal L_{cross}(\Pi^i,Y_L)+\mathcal L_{cross}(\Pi^\star,Y_L)<br>$$<br><strong>第二个</strong>就略有复杂了。</p>
<p>我们先定义编码树上除去叶节点的编码方式(因为叶节点每个节点代表图上一个点,他的编码就是GCN得到的):<br>$$<br>h_\alpha=\sum_{i=1}^m\left[\frac{h^{\mathcal{T}}(G;\alpha^{\langle i\rangle})}{\sum_{j=1}^mh^{\mathcal{T}}(G;\alpha^{\langle j\rangle})}h_{\alpha\langle i\rangle}\right]<br>$$<br>其中 $m$ 代表的是 $\alpha$ 的子节点。</p>
<p>这样我们就能够刻画节点与树之间的信息关系了:<br>$$<br>\mathcal L_{hc}(\boldsymbol Z;\mathcal{T})=-\sum_{l=2}^K\theta_l\log_2\sum_{i=1}^n\frac{sim(\boldsymbol z_i,\boldsymbol h_{(i,l)})}{\sum_{j=1,j\neq i}^nsim(\boldsymbol z_j,\boldsymbol h_{(j,l)})},\quad \theta_l=\gamma(1-\gamma)^l<br>$$<br>$h_{(i,l)}$ 是节点 $v_i$ 的第 $l$ 层community在 $\mathcal T$ 中的嵌入。这样每一组图和编码树之间的损失定义为:<br>$$<br>\mathcal L_{mmp}^1=\mathcal L_{cross}^1(\Pi^1,Y_L)+\mathcal L_{hc}(Z^1;\mathcal{T}^1)<br>$$<br>因为共有三组($G^1,G^2,G^\star$),因此 $\mathcal L_{mmp}=\mathcal L_{mmp}^{1}+\mathcal L_{mmp}^{2}+\mathcal L_{mmp}^{\star}$</p>
<p>除此之外,还要最大化不同组之间的互信息:<br>$$<br>\mathcal L_{miet}(\mathcal{T}^1,\mathcal{T}^2)=\frac{1}{2}\left[\mathcal L_{hc}(Z^1;\mathcal{T}^2)+\mathcal L_{hc}(Z^2;\mathcal{T}^1)\right]<br>$$<br>最终才能得到第二个损失优化目标(太复杂了):<br>$$<br>\mathcal L_{ve}=\mathcal L_{mmp}+(\mathcal L_{miet}(\mathcal T^{1},\mathcal T^{2})+\mathcal L_{miet}(\mathcal T^{1},\mathcal T^{\star}) +\mathcal L_{miet}(\mathcal T^{2},\mathcal T^{\star}))<br>$$</p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><h4 id="不同模型的横向对比"><a href="#不同模型的横向对比" class="headerlink" title="不同模型的横向对比"></a>不同模型的横向对比</h4><p><img src="/../pic/image-20240718161728649.png"></p>
<h4 id="当图被攻击后"><a href="#当图被攻击后" class="headerlink" title="当图被攻击后"></a>当图被攻击后</h4><p>‘Ours_v1’、’Ours_v2’ 和 ‘Ours_both’的曲线是我们方法的第一、第二和所有基本视图的结果,都被攻击。</p>
<p><img src="/../pic/image-20240718162224568.png"></p>
<h4 id="编码树的有效性"><a href="#编码树的有效性" class="headerlink" title="编码树的有效性"></a>编码树的有效性</h4><p>与其他两种社区结构提取方法kNN和Louvain进行比较。同时探究编码树深度的影响。</p>
<p><img src="/../pic/image-20240718162337376.png"></p>
<h4 id="两个视图的混合方法的有效性"><a href="#两个视图的混合方法的有效性" class="headerlink" title="两个视图的混合方法的有效性"></a>两个视图的混合方法的有效性</h4><p>与其他三种机制进行比较:average, attention and prediction confidence</p>
<p><img src="/../pic/image-20240718162442705.png"></p>
<hr>
<h3 id="补充"><a href="#补充" class="headerlink" title="补充"></a>补充</h3><p>后期阅读其他论文发现这篇论文其实是如下论文的一个<strong>改编与延伸</strong>,因为内容很相似,因此不另外书写一篇内容:</p>
<ul>
<li>[<a href="https://arxiv.org/abs/2303.09778">2303.09778] SE-GSL: A General and Effective Graph Structure Learning Framework through Structural Entropy Optimization (arxiv.org)</a></li>
</ul>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Graph Entropy Guided Node Embedding Dimension Selection for Graph Neural Networks》论文解读</title>
<url>/2024/07/17/MinGE/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://www.ijcai.org/proceedings/2021/381">click here</a></p>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><p>本篇论文是2021IJCAI上的论文。</p>
<p>在Node Embedding Dimension Selection (NEDS)问题中,对于编码维度的设置,常使用梯度搜索或者经验知识的方法来进行选择,但这种方法面临着<strong>庞大的计算量和较差的模型表现</strong>等问题。</p>
<span id="more"></span>
<p>而本文受到维度选择工作的启发,以最小熵原理(minimum entropy principle)重新审视这个问题,提出了<strong>Minimum Graph Entropy 算法</strong>,特别的,从两方面来考虑熵:</p>
<ul>
<li>从feature层面上</li>
<li>从structure层面上</li>
</ul>
<p>结果也证明了这种方法的有效性</p>
<p><strong>注:这篇论文是设计了一种算法找到最优的编码维度空间大小,而非设计了一种深度学习方法。</strong></p>
<hr>
<h3 id="方法论"><a href="#方法论" class="headerlink" title="方法论"></a>方法论</h3><p><img src="/../pic/image-20240717142624016.png"></p>
<p>定义图熵为:<br>$$<br>H_g=H_f+\lambda H_s<br>$$<br>其中 $H_f$ 是feature熵, $H_s$ 是structure熵。通过设置 $H_g=0$ 我们能够得到合适的embedding维度 $n$。</p>
<h4 id="Feature-Entropy"><a href="#Feature-Entropy" class="headerlink" title="Feature Entropy"></a>Feature Entropy</h4><p>说道熵就一定要提到概率分布,那么这里的概率分布如何定义的呢?<br>$$<br>P(v_i,v_j)=\frac{e^{\langle v_i,v_j\rangle}}{\sum_{i,j}e^{\langle v_i,v_j\rangle}},<br>$$<br>其中 $\langle v_i,v_j\rangle$ 代表两个节点的embedding向量的点乘。<del>至于点乘越大概率越大是否合理、是否有意义呢</del></p>
<p>简单的化简过后,我们便能够得到熵的表达式:<br>$$<br>H_f=logZ-\frac{1}{Z}\sum_{ij}e^{\langle v_i,v_j\rangle}\langle v_i,v_j\rangle, \quad Z=\sum_{i,j}e^{\langle v_i,v_j\rangle}<br>$$<br>接下来用<strong>样本的均值来代替分布的期望</strong>:<br>$$<br>Z=\sum_{ij}e^{\langle v_{i},v_{j}\rangle}=N^{2}\frac{1}{N^{2}}\sum_{ij}e^{\langle v_{i},v_{j}\rangle}\approx N^{2}E_{v_{i},v_{j}}(e^{\langle v_{i},v_{j}\rangle})<br>$$</p>
<p>$$<br>\sum_{ij}e^{\langle v_{i},v_{j}\rangle}\langle v_{i},v_{j}\rangle=N^{2}\frac{1}{N^{2}}\sum_{ij}e^{\langle v_{i},v_{j}\rangle}\langle v_{i},v_{j}\rangle\approx N^{2}E_{v_{i},v_{j}}(e^{\langle v_{i},v_{j}\rangle}\langle v_{i},v_{j}\rangle)<br>$$</p>
<p>从而代回熵的计算公式,我们有:<br>$$<br>H_f=logN^2+logE_{v_i,v_j}(e^{\langle v_i,v_j\rangle})-\frac{E_{v_i,v_j}(e^{\langle v_i,v_j\rangle}\langle v_i,v_j\rangle)}{E_{v_i,v_j}(e^{\langle v_i,v_j\rangle})}<br>$$<br>接下来遇到的问题就是,点乘并不好计算,因为我不知道编码后向量的具体数值。此处作者采用的方式为:<strong>将embedding映射到半径为 $\sqrt n$ 的 $n$ 维超球体上</strong>。此时有 $\langle v_i,v_j\rangle=n\cdot\cos(\theta)$。</p>
<p><img src="/../pic/image-20240717155547471.png"></p>
<p>为了方便计算,将一个向量固定为 $y=(1, 0,\cdots,0)$,这样能够的得到 $\cos \theta=\varphi_1$</p>
<p>根据文献,能够知道角度的概率密度函数(这是怎么找到的):<br>$$<br>P_n(\theta)=\frac{\Gamma(\frac{n}{2})}{\Gamma(\frac{n-1}{2})\sqrt{\pi}}sin^{n-2}\theta.<br>$$<br>最终<strong>计算点乘的期望</strong>巧妙地转换为<strong>计算角度的期望</strong>:<br>$$<br>E(e^{ncos\theta}ncos\theta)=\int_0^\pi e^{ncos\theta}ncos\theta P_n(\theta)d_\theta<br>$$</p>
<p>$$<br>E(e^{ncos\theta})=\int_0^\pi e^{ncos\theta}P_n(\theta)d_\theta<br>$$</p>
<h4 id="结构熵"><a href="#结构熵" class="headerlink" title="结构熵"></a>结构熵</h4><p>结构熵考虑的是two-hop邻居。</p>
<p>根据邻接矩阵的特点,两跳邻居便可以通过 $A^2=A^TA$ 来进行刻画。进一步得到能够描述度信息的向量 $D_r$:<br>$$<br>D_r=D^TA_r^2, \quad A_r^2[i,j]=\frac{A^2[i,j]}{\sum_jA^2[i,j]}<br>$$<br>从而有:<br>$$<br>H_s=-\sum_i^NP_ilogP_i=-\sum_i\frac{D_r[i]}{\sum_iD_r[i]}log(\frac{D_r[i]}{\sum_iD_r[i]}),<br>$$<br>有一些问题:</p>
<ul>
<li>邻接矩阵平方后得到的是二跳邻居的连接信息,此时没有一跳邻居的信息。</li>
<li>$D_r$ 的意义解释是什么。</li>
</ul>
<h4 id="总结来看"><a href="#总结来看" class="headerlink" title="总结来看"></a>总结来看</h4><p>最终我们目标为求解 $H_g=0$ 时候的 $n$。<br>$$<br>H_{g}=H_f+\lambda H_s =logN^2+log\int_0^\pi e^{ncos\theta}P_n(\theta)d_\theta - \frac{\int_0^\pi e^{ncos\theta}ncos\theta P_n(\theta)d_\theta}{\int_0^\pi e^{ncos\theta}P_n(\theta)d_\theta}<br>-\lambda\sum_{i}\frac{D_{r}[i]}{\sum_{i}D_{r}[i]}log(\frac{D_{r}[i]}{\sum_{i}D_{r}[i]})<br>$$<br>整体过程也比较清晰,重复:设计的是<strong>算法</strong>,<strong>不是模型</strong>:</p>
<p><img src="/../pic/image-20240717160733853.png"></p>
<p><strong>能否将其结合到图网络中,形成端到端的模型?</strong></p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><p>文中进行了节点分类与链路预测任务。<strong>从结果上看,在算法得到的维度数量上的实验结果,为最优或接近最优的效果,证明了有效性。</strong></p>
<p><img src="/../pic/image-20240717160924478.png"></p>
<p>这段话也表现了此方法的优越性:</p>
<p><img src="/../pic/image-20240717161012388.png"></p>
<p>另外文中还分析了时间复杂度等问题,说明了其在时间上的消耗是可接受的。</p>
<p><img src="/../pic/image-20240717161101508.png"></p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>《Deep Graph Infomax》论文解读</title>
<url>/2024/07/14/Deep%20Graph%20Infomax/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>论文传送门:<a href="https://arxiv.org/pdf/1809.10341">click here</a></p>
<p>推荐参考链接:</p>
<ul>
<li>DIM:<a href="https://www.jiqizhixin.com/articles/2018-10-12-11">深度学习中的互信息:无监督提取特征 | 机器之心 (jiqizhixin.com)</a></li>
<li>$f$ 散度($D_f$)的估算:<a href="https://kexue.fm/archives/6016">f-GAN简介:GAN模型的生产车间 - 科学空间|Scientific Spaces (kexue.fm)</a></li>
</ul>
<h3 id="论文动机"><a href="#论文动机" class="headerlink" title="论文动机"></a>论文动机</h3><span id="more"></span>
<p>图神经网络已经有了很大发展,但大多数成功的方法使用的是监督学习,而在现实中大多数的图数据事实上是未标记的。因此针对这种无标签的图信息,一种<strong>无监督/自监督学习方法</strong>是重要的。</p>
<p>目前的无监督表示学习<strong>大多依赖于随机游走</strong>方法,其有如下的缺点:</p>
<ul>
<li>过分强调了邻居之间的信息,而牺牲了整体的结构信息</li>
<li>性能高度依赖于超参设置</li>
<li>可解释性较差,即无法确定随机游走是不是真的提供了有用信息(假设节点与邻居较为相似的观点是一种归纳偏置)</li>
</ul>
<p>因此本文提出了一种<strong>基于互信息</strong>得到的<strong>无监督图学习方法</strong>。</p>
<p>具体来说,本文将<a href="https://arxiv.org/abs/1808.06670">这篇论文</a>的 <code>Deep InfoMax</code> 思想运用到了图神经网络中。</p>
<hr>
<h3 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h3><p><del>(我感觉这篇论文就是把CV中的方法直接运用到图神经网络中,似乎并没有改变什么)</del></p>
<h4 id="我们有什么?"><a href="#我们有什么?" class="headerlink" title="我们有什么?"></a>我们有什么?</h4><ol>
<li>对于图上每一个节点,我们有他们的特征向量集合 $X=\{\vec {x_1}, \vec {x_2}, \dots,\vec {x_N}\}$</li>
<li>我们有邻接矩阵 $A$,论文中设置无边权,即 $A_{ij}\in\{0,1\}$</li>
</ol>
<h4 id="我们要做什么?"><a href="#我们要做什么?" class="headerlink" title="我们要做什么?"></a>我们要做什么?</h4><p>我们希望能够训练出一个编码器 ${\mathcal E} : \mathbb{R}^{N\times F} \times \mathbb{R}^{N\times N} \to \mathbb{R}^{N\times F^{\prime}}$,使得 ${\mathcal E}(X,A)=H=\{\vec {h_1}, \vec {h_2}, \dots,\vec {h_N}\}$表示每个节点编码后的高级表示。</p>
<h4 id="我们怎么做?"><a href="#我们怎么做?" class="headerlink" title="我们怎么做?"></a>我们怎么做?</h4><p>核心思想为<strong>局部-全局互信息最大化</strong>。</p>
<p>具体来说,运用图卷积方法作为编码器 ${\mathcal E}$ ,获得每个节点的表示 $H$ 。事实上,图卷积得到的向量是<strong>以节点为中心的图的patch</strong>。这是<strong>局部</strong>信息。</p>
<p>接下来获得<strong>全局</strong>的图级向量表示 $\vec s$。定义函数 ${\mathcal R} : \mathbb{R}^{N\times F} \to \mathbb{R}^{F}$,实现了从patch到全局的信息汇总:$\vec s=\mathcal R({\mathcal E}(X,A))$。在实验中使用的就是均值函数:<br>$$<br>\mathcal R(H)=\sigma\left(\frac1N\sum_{i=1}^N\vec{h}_i\right)<br>$$<br>接下来的步骤与对比学习类似,构造图的负样例,得到负样本图上的每一个patch的表示 $\tilde H$。与对比学习不同的是,这里希望 $H$ 与 $\vec s$ 尽可能接“近”,$\tilde H$ 与 $\vec s$ 尽可能”远“。如下图:</p>
<p><img src="/../pic/image-20240715001048611.png"></p>
<p>而这里刻画”远近“是通过一个判别器 ${\mathcal D}$ 来实现的,这是网络<strong>学出来的</strong>,具体而言:<br>$$<br>\mathcal D(\vec h,\vec s)=\sigma(\vec h^TW\vec s)<br>$$<br>整个方法的优化目标为优化如下函数:</p>
<p><img src="/../pic/image-20240715012617347.png"></p>
<p><strong>优化这个函数事实上就是极大化互信息量</strong>。至于为什么,<strong>参考链接</strong>中给出的两个网址较为清晰全面的进行了推导。</p>
<p>总结!整个过程可以分为五个部分:</p>
<p><img src="/../pic/image-20240715012655032.png"></p>
<hr>
<h3 id="实验设置与结果"><a href="#实验设置与结果" class="headerlink" title="实验设置与结果"></a>实验设置与结果</h3><h4 id="Transductive-learning——直推式学习"><a href="#Transductive-learning——直推式学习" class="headerlink" title="Transductive learning——直推式学习"></a>Transductive learning——直推式学习</h4><p>编码器采用GCN网络:<br>$$<br>\mathcal{E}(\mathbf{X},\mathbf{A})=\sigma\left(\mathbf{\hat{D}}^{-\frac{1}{2}}\mathbf{\hat{A}}\mathbf{\hat{D}}^{-\frac{1}{2}}\mathbf{X}\mathbf{\Theta}\right)<br>$$<br>负样例的构造方式为:讲 $X$ 打乱,即每个节点的位置不变,但特征变成其他节点了。至于为什么要保留原图结构,论文给出的说法为 “we find those that preserve the graph structure result in the strongest features.”</p>
<h4 id="Inductive-learning-on-large-graphs——大图上的归纳学习"><a href="#Inductive-learning-on-large-graphs——大图上的归纳学习" class="headerlink" title="Inductive learning on large graphs——大图上的归纳学习"></a>Inductive learning on large graphs——大图上的归纳学习</h4><p>编码参考 GraphSAGE-GCN 论文中的方法:<br>$$<br>\mathrm{MP}(\mathbf{X},\mathbf{A})=\mathrm{\hat{D}}^{-1}\mathrm{\hat{A}X}\Theta<br>$$<br>改变后得到编码器为:<br>$$<br>\widetilde{\mathrm{MP}}(\mathbf{X},\mathbf{A})=\sigma\left(\mathbf{X}\mathbf{\Theta}^{\prime}|\mathrm{MP}(\mathbf{X},\mathbf{A})\right)\quad\mathcal{E}(\mathbf{X},\mathbf{A})=\widetilde{\mathrm{MP}}_3(\widetilde{\mathrm{MP}}_2(\widetilde{\mathrm{MP}}_1(\mathbf{X},\mathbf{A}),\mathbf{A}),\mathbf{A})<br>$$<br>又因为图比较大,因此整个图的汇总向量是不方便求解的,因此采用了<strong>采样</strong>以及<strong>minibatch上的汇总向量</strong>。</p>
<p><img src="/../pic/image-20240715130935648.png"></p>
<p><img src="/../pic/image-20240715131002076.png"></p>
<p>创造负样例的方式与直推式学习一致,不过对每一个子图patch来进行这种操作。</p>
<h4 id="Inductive-learning-on-large-graphs——多图上的归纳学习"><a href="#Inductive-learning-on-large-graphs——多图上的归纳学习" class="headerlink" title="Inductive learning on large graphs——多图上的归纳学习"></a>Inductive learning on large graphs——多图上的归纳学习</h4><p>编码器为:a three-layer mean-pooling model with dense skip connections<br>$$<br>\mathbf H_1=\sigma\left(\mathrm{MP_1}(\mathbf{X},\mathbf{A})\right) \quad<br>\mathbf H_2=\sigma\left(\mathrm{MP_2}(\mathbf{H_1}+\mathbf{XW_{skip}},\mathbf{A})\right)<br>$$<br>得到:<br>$$<br>\mathcal{E}(\mathbf{X},\mathbf{A}) =\sigma\left(\mathrm{MP_3}(\mathbf{H_2}+\mathbf{H_1}+\mathbf{XW_\mathrm{skip}},\mathbf{A})\right)<br>$$<br>负样例采取的方式为随机采样 (randomly sampled training graphs),也采用了dropout。</p>
<h4 id="实验结果"><a href="#实验结果" class="headerlink" title="实验结果"></a>实验结果</h4><p><img src="/../pic/image-20240715131745833.png"></p>
<p><img src="/../pic/image-20240715131824999.png"></p>
]]></content>
<categories>
<category>深度学习</category>
<category>图神经网络</category>
</categories>
<tags>
<tag>信息论</tag>
<tag>图神经网络</tag>
</tags>
</entry>
<entry>
<title>Adaboost</title>
<url>/2023/10/29/Adaboost/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>我默认大家已经掌握了 $Adaboost$ 的基本操作方法。这篇博客中我将会首先简要介绍一下 $Adaboost$ 的具体流程,接下来将会用大段的推导解决这两个问题:</p>
<blockquote>
<ul>
<li>$Adaboost$ 的误差上界是多少,收敛速率如何。</li>
<li>$Adaboost$ 中最重要的两个参数:第 $m$ 轮得到分类器 $G_m(x)$ 与其对应的权重 $\alpha_m$ 是如何求得的。</li>
</ul>
</blockquote>
<span id="more"></span>
<h2 id="Adaboost-算法流程"><a href="#Adaboost-算法流程" class="headerlink" title="$Adaboost$ 算法流程"></a>$Adaboost$ 算法流程</h2><p><img src="/../pic/adaboost.png"></p>
<p>定义变量:</p>
<blockquote>
<ul>
<li>$G_m(x)$ 为第 $m$ 次迭代得到的弱分类器,是一种映射:$x_i \to \{-1,+1\}$</li>
<li>$f_m(x) = \sum_m^{M} G_m(x)$ 是当前得到的强分类器。即弱分类器的线性组合,<strong>值域是连续的</strong>而非只有 $\pm1$.</li>
<li>$w_{m,i}$ 为第 $m$ 次迭代时第 $i$ 个样本的权重.</li>
<li>$\alpha_m$ 为对应 $G_m(x)$ 的权重.</li>
<li>$I(x)$ 为判断函数,当 $x$ 为真则返回 $1$,否则返回 $0$.</li>
<li>$e_m$ 为 $G_m(x)$ 的得到的误差.</li>
<li>$Z_m = \sum_i w_{m,i}\exp(-\alpha_my_iG_m(x_i))$ 是规范化子,为了让权重归一化。</li>
</ul>
</blockquote>
<p> 此算法的<strong>循环过程</strong>是这样的:</p>
<ol>
<li>在当前数据集下训练一个简单的分类模型 $G_m(x)$ 使得<strong>误差最小</strong> $\min(\sum_i w_{m,i} I(y_i \neq G_m(x_i)))$</li>
<li>计算当前分类<strong>误差</strong> $e_m=\sum_i w_{m,i} I(y_i \neq G_m(x_i))$</li>
<li>计算当前<strong>分类器的权重</strong> $\alpha_m = \frac{1}{2}ln(\frac{1-e_m}{e_m})$</li>
<li>更新<strong>样本权重</strong> $w_{m+1,i}=\frac{w_{m,i}\exp(-\alpha_my_iG_m(x_i))}{Z_m}$</li>
<li>将弱分类器加入到强分类器中 $f_m(x) = f_{m-1}(x) + \alpha_mG_m(x)$</li>
<li>若迭代未结束,则返回第一步,在新的权值下去<strong>寻找新的弱分类器</strong>。</li>
</ol>
<hr>
<h2 id="Adaboost-的误差上界与收敛速率"><a href="#Adaboost-的误差上界与收敛速率" class="headerlink" title="$Adaboost$ 的误差上界与收敛速率"></a>$Adaboost$ 的误差上界与收敛速率</h2><p>在这个部分中我将首先推导出 $Adaboost$ 的<strong>误差上界</strong>,并通过误差上界进行<strong>放缩</strong>,得出其收敛速率随着新弱分类器的加入是<strong>指数下降</strong>的结论。</p>
<h3 id="Adaboost-误差上界"><a href="#Adaboost-误差上界" class="headerlink" title="$Adaboost$ 误差上界"></a>$Adaboost$ 误差上界</h3><p>先给出结论,然后我们对其进行证明。对于最终的误差 $Loss=\frac{1}{N}\sum_{i=1}^{N}I(G(x_i)\neq y_i)$ 有:<br>$$<br>\begin{aligned}\frac{1}{N}\sum_{i=1}^{N}I(G(x_i)\neq y_i)\leq\frac{1}{N}\sum_{i}exp(-y_if(x_i))=\prod_{m}Z_m\end{aligned}<br>$$</p>
<h4 id="首先证明第一个不等号是成立的"><a href="#首先证明第一个不等号是成立的" class="headerlink" title="首先证明第一个不等号是成立的"></a>首先证明第一个不等号是成立的</h4><ul>
<li>当 $G(x_i)= y_i$ 时,$I(G(x_i)\neq y_i)= 0$ 而 $exp(-y_if(x_i))>0$</li>
<li>当 $G(x_i)\neq y_i$ 时,$I(G(x_i)\neq y_i)= 1$,但因为 $-y_if(x_i) \ge 0$,所以 $exp(-y_if(x_i))\ge 1$</li>
</ul>
<p>综上,$I(G(x_i)\neq y_i)\le exp(-y_if(x_i))$ 总是成立的,因此第一个不等号得证。</p>
<h4 id="接下来证明第二个等号是成立的"><a href="#接下来证明第二个等号是成立的" class="headerlink" title="接下来证明第二个等号是成立的"></a>接下来证明第二个等号是成立的</h4><p>考虑在更新权重的时候,为了使得权重归一化,因此权重 $w_{m+1, i}$ 与规范化子 $Z_m$ 有如下关系:<br>$$<br>w_{m+1,i}=\frac{w_{m,i}exp(-\alpha_my_{i}G_m(x_i))}{Z_{m}}<br>$$<br>因此:<br>$$<br>w_{m,i}exp(-\alpha_my_{i}G_m(x_i))=Z_{m}w_{m+1,i}<br>$$<br>先做一个简单的变换,为我们后续证明做一个铺垫:<br>$$<br>\begin{aligned}<br>&\sum_iw_{m,i}exp(-\alpha_my_iG_m(x_i))<br>\\=&\sum_iZ_mw_{m+1,i}<br>\\=&Z_m\sum_iw_{m+1,i}<br>\end{aligned}<br>$$<br>所以对于待证明不等式组的中间式子,做如下变形。其中有两点注意:1. 在<strong>初始时刻样本权重均为 $\frac1N$,即 $w_{1,i} = \frac1N$<strong>,2. 所有</strong>权重和为1</strong>,即 $\sum_iw_{m,i}=1$:<br>$$<br>\begin{aligned}<br>&\frac1N\sum_iexp(-y_if(x_i)) \\<br>=&\frac1N\sum_iexp(-\sum_{m=1}^M\alpha_my_iG_m(x_i)) \\<br>=&\sum_{i}w_{1,i}\cdot exp[-\alpha_{1}y_{i}G_{1}\left(x_{i}\right)-\alpha_{2}y_{i}G_{2}\left(x_{i}\right)-\ldots-\alpha_{M}y_{i}G_{M}\left(x_{i}\right)] \\<br>=&\sum_iw_{1,i}\prod_{m=1}^Mexp(-\alpha_my_iG_m(x_i)) \\<br>=&Z_1\sum_iw_{2,i}\prod_{m=2}^Mexp(-\alpha_my_iG_m(x_i)) \\<br>=&Z_1Z_2\sum_iw_{3,i}\prod_{m=3}^Mexp(-\alpha_my_iG_m(x_i)) \\<br>=&\ldots \\<br>=&Z_1Z_2 \cdots Z_{M-1}\sum_iw_{M,i}exp(-\alpha_My_iG_M(x_i)) \\<br>=&Z_1Z_2 \cdots Z_{M}\sum_iw_{M+1,i}\\<br>=&\prod_m^MZ_m<br>\end{aligned}<br>$$<br>因此我们证明了第二个等号是成立的。</p>
<h3 id="Adaboost-收敛速率"><a href="#Adaboost-收敛速率" class="headerlink" title="$Adaboost$ 收敛速率"></a>$Adaboost$ 收敛速率</h3><p>那么收敛速率如何呢?在我们解决这个问题之前,我们首先要找到 $Z_m$ 与误差 $e_m$ 之间的关系。</p>
<p>在求解过程中我们需要用的 $\alpha_m=\frac{1}{2}ln(\frac{1-e_m}{e_m})$ 这个结论。至于为什么 $\alpha_m$ 是这个值,我将会在第三部分讲到。<br>$$<br>\begin{aligned}<br>Z_{m}& =\sum_{i=1}^{N}\left.w_{m,i}\exp(-\alpha_{m}\left.y_{i}\left(x_{i}\right)\right)\right. \\<br>&=\sum_{y_i=G_m{(x_i)}}w_{m,i}e^{-\alpha_m}+\sum_{y_i\neq G_m{(x_i)}}w_{m,i}e^{\alpha_m} \\<br>&=e^{-\alpha_m}\sum_{y_i=G_m\left(x_i\right)}w_{m,i}+e^{\alpha_m}\sum_{y_i\neq G_m\left(x_i\right)}w_{m,i} \\<br>&=\sqrt{\frac{e_m}{1-e_m}}(1-e_m) + \sqrt{\frac{1-e_m}{e_m}}e_m\\<br>&=2\sqrt{e_m\left(1-e_m\right)} \\<br>&=\sqrt{1-4{\gamma}_m^2}<br>\end{aligned}<br>$$<br>其中我们令 $\gamma_m = \frac12 - e_m$。事实上 $\gamma_m$ 一定是正值,我们考虑某分类器得到的误差 $e_m > \frac12$ ,则将这个分类器的分类结果<strong>加个负号得到新分类器</strong>,而此时 $e_m’=1-e_m$,即误差小于 $\frac12$ ,因此在得到最优的 $G_m(x)$ 时 $\gamma_m > 0$ 一定成立。</p>
<p>下面我们来证明指数收敛,我们先证明:<br>$$<br>\sqrt{(1-4\gamma_m^2)}\leq exp(-2\gamma_m^2)<br>$$<br>通过泰勒展开,我们能够较容易的证明这个命题:<br>$$<br>\sqrt{1-4r^2}=1-2r^2-2r^4+O(r^4)\\<br>e^{-2r^2}=1-2r^2+2r^4+O(r^4)<br>$$<br>通过图像我们能够更直观的看出两者的大小关系:</p>
<img src="../pic/放缩.png" style="zoom:50%;" />
<p>因此我们再次对误差进行放缩,能够得到:<br>$$<br>\prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leq\prod_{m=1}^Mexp(-2\gamma_m^2)=exp(-2\sum_{m=1}^M\gamma_m^2)<br>$$<br>也就是说,随着分类器的增多,指数项上不断减小,这也就表明了 $Adaboost$ 的训练误差是以指数速度下降的。</p>
<h2 id="Adaboost-中分类器与权重的选取——以加法模型解释"><a href="#Adaboost-中分类器与权重的选取——以加法模型解释" class="headerlink" title="$Adaboost$ 中分类器与权重的选取——以加法模型解释"></a>$Adaboost$ 中分类器与权重的选取——以加法模型解释</h2><p>对于分类器来说:<br>$$<br>f(x)=\sum_{m=1}^M \alpha_mG_m(x)<br>$$<br>我们针对此问题选择损失函数为:<br>$$<br>Loss = \sum_{i=1}^N exp(-y_if(x_i))<br>$$<br>设强分类器一共有 $M$ 个弱分类器组成,如果直接优化的话,我们需要同时优化 $2M$ 个参数,体量是大的。所以我们采取逐步学习的方法——一次只学习一组 $\alpha_m,G_m(x)$ ,然后加到强分类器中。在这种情况下我们的优化问题变为:<br>$$<br>\begin{aligned}<br>(\alpha_m,G_m(x))&=\arg\min_{\alpha,G_m}\sum_{i=1}^{N}exp[-y_i\left(f_{m-1}\left(x_i\right)+{\alpha_m}G_m(x_i)\right)]\\<br>&=\arg\min_{\alpha,G_m}\sum_{i=1}^N\bar{w}_{m,i}exp[-y_i{\alpha_m}G_m(x_i)]<br>\end{aligned}<br>$$</p>
<p>此时 $\bar w_{m,i}$ 对优化问题来说是一个定值,$\bar w_{m,i} = \prod_{m=1}exp(-\alpha_my_iG_m(x_i))=w_{m,i}N\prod_{m=1}Z_m=Aw_{m,i}$。值得注意的是 $\bar w_{m+1,i}=\bar w_{m,i}exp(-\alpha_my_iG_m(x_i))$ 这就是 $Adaboost$ 的权重更新关系。</p>
<h3 id="G-m-x-的选择"><a href="#G-m-x-的选择" class="headerlink" title="$G_m(x)$ 的选择"></a>$G_m(x)$ 的选择</h3><p>我们希望误差最小,观察上面式子,此时 $\alpha_m$ 作为常量看待。因此最优化上式等价于:<br>$$<br>G_m^*(x)=\arg\min_G\sum_{i=1}^N\bar w_{m,i}I(y_i\neq G(x_i)) = \arg\min_G\sum_{i=1}^N w_{m,i}I(y_i\neq G(x_i))<br>$$<br>此分类器 $G_m^*(x)$ 即为 $AdaBoost$ 算法的基分类器 $G_m ( x )$ ,它是使得第m次迭代时加权训练数据分类误差最小的基分类器。</p>
<h3 id="alpha-m-的求解"><a href="#alpha-m-的求解" class="headerlink" title="$\alpha_m$ 的求解"></a>$\alpha_m$ 的求解</h3><p>$$<br>\sum_{i=1}^N\bar w_{m,i}exp(-y_i \alpha_m G(x_i))=\sum_{y_i=G_m(x_i)}\bar w_{m,i}e^{-\alpha_m}+\sum_{y_i\neq G_m(x_i)}\bar w_{m,i}e^{\alpha_m}<br>$$</p>
<p>求极值我们需要令其对 $\alpha_m$ 求偏导等于0:<br>$$<br>e^{-\alpha_m}\sum_{y_i=G_m(x_i)}\bar w_{m,i}=e^{\alpha_m}\sum_{y_i\neq G_m(x_i)}\bar w_{m,i}<br>$$<br>等式两边取对数:<br>$$<br>\begin{aligned}<br>-\alpha_m + ln(\sum_{y_i=G_m(x_i)}\bar w_{m,i})&=\alpha_m+ ln(\sum_{y_i\neq G_m(x_i)}\bar w_{m,i}) \\<br>2\alpha_m&=ln(\frac{\sum_{y_i= G_m(x_i)}\bar w_{m,i}}{\sum_{y_i\neq G_m(x_i)}\bar w_{m,i}}) \\<br>2\alpha_m&=ln(\frac{\sum_{y_i= G_m(x_i)} w_{m,i}}{\sum_{y_i\neq G_m(x_i)} w_{m,i}}) \\<br>2\alpha_m&=ln(\frac{1-\sum_{y_i\neq G_m(x_i)} w_{m,i}}{\sum_{y_i\neq G_m(x_i)} w_{m,i}}) \\<br>\alpha_m&=\frac12 ln(\frac{1-e_m}{e_m}) \\<br>\end{aligned}<br>$$<br>综上我们就能够得到 $\alpha_m$ 的取值了。</p>
<p>因此我们知道了 $Adaboost$ 实际上就是以 $Loss = \sum_{i=1}^N exp(-y_if(x_i))$ 为目标函数的加法模型。</p>
]]></content>
<categories>
<category>Machine Learning</category>
</categories>
<tags>
<tag>ML</tag>
<tag>分类器</tag>
</tags>
</entry>
<entry>
<title>BP神经网络</title>
<url>/2023/10/17/BP%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>这篇博客中,我将会与大家分享最基本的<strong>BP神经网络</strong>的工作原理——主要包括<strong>网络的结构、参数的更新方法(反向传播)、网络优缺点</strong>等。BP神经网络是最基本的一种神经网络,难度小但我们能够见微知著得了解大型网络的训练过程。<span id="more"></span></p>
<h2 id="模型的架构"><a href="#模型的架构" class="headerlink" title="模型的架构"></a>模型的架构</h2><p><strong>反向传播模型</strong>也称B-P模型,<strong>是一种用于前向多层的反向传播学习算法。</strong></p>
<p>具体而言:</p>
<blockquote>
<ul>
<li>它可以对组成前向多层网络的各人工神经元之间的连接<strong>权值进行不断的修改</strong>,从而使该前向多层网络能够将输入它的信息变换成所期望的输出信息,因此是<strong>可学习的</strong>。</li>
<li>在修改各人工神经元的连接权值时,所依据的是该网络的<strong>实际输出与其期望的输出之差</strong>,将这一差值<strong>反向一层一层的向回传播</strong>,因此称作<strong>反向传播</strong>。</li>
</ul>
</blockquote>
<p>首先从整体对BP神经网络有一定的认识:</p>
<p><img src="/../pic/image-20231018004015157.png"></p>
<p>BP神经网络能够实现<strong>多输入——多输出</strong>的任务。</p>
<p>对于每一个节点来说,其是由若干前继节点<strong>加权求和$+$激活</strong>得到的。具体让我们来对<strong>一个神经元</strong>进行观察:</p>
<p><img src="/../pic/image-20231018005640938.png"></p>
<p>从这幅图中我们能够看出当且节点得到的输入为<br>$$<br>o = f(\sum_j x_jw_j)<br>$$<br>当然,你也可以加入偏置项(bias),使得网络有更好的拟合效果:<br>$$<br>o = f(\sum_j x_jw_j + b_j)<br>$$<br>公式中 $f$ 为激活函数,是一个<strong>非线性映射</strong>。常用的函数有 $Relu$ 及其变种,$Sigmoid$ 函数等等。在这里我们以 $Sigmoid$ 为例。<br>$$<br>Sigmoid:\quad \sigma(t) = \frac{1}{1+e^{-t}}<br>$$<br><strong>考虑为什么一定要进行非线性映射?</strong></p>
<blockquote>
<p>倘若不进行非线性映射,则无论网络有多深,输出结果永远是输入的线性组合,但我们欲解决的问题是线性的情况少之又少。因此非线性映射(激活)能够让我们的网络有着更强的拟合能力。</p>
</blockquote>
<p>在经过若干层映射后,我们得到预测的输出 $\hat{y_1}, \hat{y_2}, \dots ,\hat{y_n}$,定义与真实值 $y_1,y_2,\dots,y_n$ 之间的误差函数:<br>$$<br>e=E(\overrightarrow{w})=\frac12 \sum_i(\hat{y_i}-y_i)^2<br>$$<br>而我们的目的就是调整 $\overrightarrow{w}=(w1,w2,\dots,w_m)^T$ 的值<strong>使得误差 $e$ 尽可能小</strong>。</p>
<p>原理部分到此就结束了。实质上就是每一层数据经过加权并激活后传入到下一层。而具体如何更新参数,接下来我们将会讲到。</p>
<hr>
<h2 id="参数的更新"><a href="#参数的更新" class="headerlink" title="参数的更新"></a>参数的更新</h2><p>更新方法我们采用最朴素也最通用的——<strong>梯度下降法</strong>。</p>
<p>梯度下降法简单来说就是:对某一变量,其更新方向应该是沿着误差<strong>梯度方向的反方向</strong>——也就是<strong>梯度下降</strong>方向去更新。这样能够减小我们的误差值。而梯度方向我们可以用<strong>偏导</strong>求出。</p>
<p>让我们来看一个很简单的例子:</p>
<p><img src="/../pic/image-20231018012735470.png"></p>
<p>列出各个节点的关系式:<br>$$<br>\begin{array}{ll}<br>O_1=x_1&O_2=x_2<br>\\ I_3=W_{13}O_1+W_{23}O_2&O_3=f(I_3)<br>\\ I_4=W_{34}O_3&O_4=f(I_4)<br>\\ I_5=W_{35}O_3&O_5=f(I_5)<br>\\ y_1=O_4&y_2=O_5<br>\end{array}<br>$$<br>定义误差函数 $e$ :<br>$$<br>e = \frac12 [(\hat{y_1} - y_1)^2 + (\hat{y_2} - y_2)^2]<br>$$</p>
<p>求偏导:<br>$$<br>\begin{gathered}<br>\frac{\partial e}{\partial W_{13}}=\frac{\partial e}{\partial I_3}\cdot\frac{\partial I_3}{\partial W_{13}}=\frac{\partial e}{\partial I_3}O_1=\delta_3 x_1<br>\\ \frac{\partial e}{\partial W_{23}}=\frac{\partial e}{\partial I_3}\cdot\frac{\partial I_3}{\partial W_{23}}=\frac{\partial e}{\partial I_3}O_2=\delta_3 x_2<br>\\ \frac{\partial e}{\partial W_{34}}=\frac{\partial e}{\partial I_4}\cdot\frac{\partial I_4}{\partial W_{34}}=\frac{\partial e}{\partial I_4}O_3 =\delta_4 O_3<br>\\ \frac{\partial e}{\partial W_{35}}=\frac{\partial e}{\partial I_5}\cdot\frac{\partial I_5}{\partial W_{55}}=\frac{\partial e}{\partial I_5}O_3 =\delta_5 O_3<br>\end{gathered}<br>$$<br>所以我们接下来的任务就是求 $\delta_3, \delta_4,\delta_5$<br>$$<br>\begin{gathered}<br>\delta_4=\frac{\partial e}{\partial I_4}=(\hat{y_1}-y_1)f’(I_4)<br>\\ \delta_5=\frac{\partial e}{\partial I_5}=(\hat{y_2}-y_2)f’(I_5)<br>\\ \delta_3=\frac{\partial e}{\partial I_3}=(\delta_4W_{34}+\delta_5 W_{35})f’(I_3)<br>\end{gathered}<br>$$<br><strong>注意激活函数也要求导!</strong></p>
<p>观察结果,能够发现 $\delta_3$ 的值依赖于 $\delta_4,\delta_5$——当且节点计算要依赖于后一层节点的计算——这也就是反向传播的很好表现。 </p>
<p>接下来通过设置学习率 $\alpha$,对参数进行更新即可:<br>$$<br>W_{k}^{(t+1)} = W_{k}^{(t)} - \alpha \frac{\partial e}{\partial I_k}<br>$$<br>即沿着梯度下降的方向走一段距离,使得误差减小。我们完成了对参数的一次更新。接下来不断给出新的一组输入与输出,再更新参数,直至 $e < \epsilon$ 停止。</p>
<hr>
<h2 id="前馈网络的表征能力"><a href="#前馈网络的表征能力" class="headerlink" title="前馈网络的表征能力"></a>前馈网络的表征能力</h2><ul>
<li><p><strong>布尔函数</strong>:任何布尔函数可以用两层网络准确表示。<strong>隐层单元数随输入数增加呈指数增长。</strong></p>
</li>
<li><p><strong>连续函数</strong>:每个有界连续函数可以用两层网络以任意小的误差逼近。<strong>隐层使用Sigmoid函数</strong>。</p>
</li>
<li><p><strong>任意函数</strong>:任意函数可以用三层网络以任意精度逼近。输出层线性单元,<strong>隐层Sigmoid单元</strong>。</p>
</li>
</ul>
<hr>