<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Graph 블로그</title>
    <description>Connect Everything 새로운 연결, 새로운 세상.
</description>
    <link>https://pseudo-lab.github.io/graph/graph/</link>
    <atom:link href="https://pseudo-lab.github.io/graph/graph/rss" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 17 Nov 2022 21:46:42 +0900</pubDate>
    <lastBuildDate>Thu, 17 Nov 2022 21:46:42 +0900</lastBuildDate>
    <generator>Jekyll v3.9.2</generator>
    
      <item>
        <title>How Powerful are Graph Neural Networks</title>
        <description>&lt;p&gt;ㅤ안녕하세요, 가짜연구소 Groovy Graph 팀의 신재식입니다. 이 글은, ‘&lt;a href=&quot;https://arxiv.org/abs/1810.00826&quot;&gt;How Powerful are Graph Neural Networks?&lt;/a&gt;’ 논문을 읽고, 정리한 글 입니다.&lt;/p&gt;

&lt;p&gt;ㅤ혹시 내용중 잘못된 점이나 보완할 점 있다면 댓글로 알려주시면 감사하겠습니다. 그럼 시작하겠습니다.&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;목차&quot;&gt;목차&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Introduction&lt;/li&gt;
  &lt;li&gt;Preliminaries&lt;/li&gt;
  &lt;li&gt;Theoretical Framework : Overview&lt;/li&gt;
  &lt;li&gt;Building Powerful Graph Neural Networks&lt;/li&gt;
  &lt;li&gt;Less Powerful but Still Interesting GNNs&lt;/li&gt;
  &lt;li&gt;Other Related work&lt;/li&gt;
  &lt;li&gt;Experiments&lt;/li&gt;
  &lt;li&gt;Conclustion&lt;/li&gt;
  &lt;li&gt;Reference&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;1-introduction&quot;&gt;1 Introduction&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;GNN은 노드 분류, link 예측, graph 분류 작업에서 좋은 성과를 보임
    &lt;ul&gt;
      &lt;li&gt;Moleculses,social,biological,financial networks 분야&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;신규 도메인의 GNN은 경험에 기반한 직관, 실험적 시행착오를 기반하고 있음&lt;/li&gt;
  &lt;li&gt;GNN의 속성과 한계에 대한 이론적 이해는 부족하며, GNN 표현 방식에 대한 분석도 제한적&lt;/li&gt;
  &lt;li&gt;방법론
    &lt;ul&gt;
      &lt;li&gt;주어진 노드의 이웃에 대한 벡터세트를 반복 가능한 요소가 있는 multi-set으로 나타냄&lt;/li&gt;
      &lt;li&gt;GNN의 인접 집계(aggregation)는 다중 집합에 대한 집계 기능으로 생각할 수 있음&lt;/li&gt;
      &lt;li&gt;GNN이 서로 다른 multi-set을 서로 다른 표현으로 aggregation할 수 있어야 함&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;11-본-논문에서-제안하고자-하는-내용&quot;&gt;1.1 본 논문에서 제안하고자 하는 내용&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;GNN의  표현을 분석하기 위한 이론적 프레임워크 제시&lt;/li&gt;
  &lt;li&gt;GNN 변형이 얼마나 표현력이 있는지 분석&lt;/li&gt;
  &lt;li&gt;WL Test(Weisfeilier-Lehman,웨이스페일러-레흐만 테스트)에서 아이디어를 얻음
    &lt;ul&gt;
      &lt;li&gt;WL 테스트는 GNN과 유사한데, 이웃의 특징 벡터를 집계하여 주어진 노드의 벡터를 반복적으로 업데이트&lt;/li&gt;
      &lt;li&gt;다른 노드을 다른 기능 벡터에 맵핑하여 업데이트 하는 방식이 장점&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GNN이 WL 처럼 집계하는 시스템의 표현력이 좋고, 다른 노드에  매핑할 수 있는 기능을 모델링 할 경우 GNN이 WL처럼 분류하는데 큰 판별 성능을 가질 수 있다고 판단&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;12-main-results&quot;&gt;1.2 Main Results&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;GNN이 그래프 구조를 구별할 때  WL 테스트만큼 판별 성능이 뛰어난 것을 증명&lt;/li&gt;
  &lt;li&gt;GNN 결과가 WL 테스트만큼 neighborhood aggregation 및 그래프 판독 기능을 가질 수 있는 파라미터 설정&lt;/li&gt;
  &lt;li&gt;GCN 및 GraphSAGE와 같은 GNN 변형으로 구분할 수 없는 그래프 구조를 식별하고 GNN 기반 모델과 같은 그래프 구조의 종류를 정확하게 분별 가능&lt;/li&gt;
  &lt;li&gt;간단한 신경 아키텍처인 &lt;strong&gt;GIN(Graph Isomorphism Network)을 개발&lt;/strong&gt;하고 Discriminative/Representational value과 WL test와 동일함을 증명&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;2-preliminaries&quot;&gt;2. Preliminaries&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Node Classification
    &lt;ul&gt;
      &lt;li&gt;각 노드 v ∈ V에는 연관된 레이블 y_v가 있고 목표는 v의 레이블이 y_v = f(h_v)로 예측될 수 있도록 v의 표현 벡터 h_v를 학습하는 것&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Graph Classification
    &lt;ul&gt;
      &lt;li&gt;{G_1 , …, G_N } ⊆ G 와 레이블 {y_1 , …, y_N } ⊆ Y 가 주어지면 예측에 도움이 되는 표현 벡터 h_G를 학습하는 것을 목표&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;21-graph-neural-networksgnn&quot;&gt;2.1 Graph Neural Networks(GNN)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GNN은 그래프 구조와 노드  X_v를 사용하여 노드 h_v / 전체 그래프 h_G의 표현 벡터를 학습&lt;/li&gt;
  &lt;li&gt;GNN은 neighborhood aggregation strategy 전략을 따르며, neighbor의 representations을 집계하여 반복적으로 업데이트 함&lt;/li&gt;
  &lt;li&gt;k 반복 집계 후 노드의 표현은 k-hop 네트워크 이웃 내의 구조적 정보를 caputre함&lt;/li&gt;
  &lt;li&gt;GNN의 k번째 레이어의 수식
    &lt;ul&gt;
      &lt;li&gt;Aggregate함수는 multiset에 정의된 함수이며 주로 summation사용&lt;/li&gt;
      &lt;li&gt;Combine함수에서는 전 단계에서 수집한 정보 a_v와, 현재의 feautre vector h_v를 사용해서 Node의 새로운 feature vector에 Update
  &amp;lt;img src=”https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F7db7cb8c-f7dd-4a84-83b3-f1246399356d%2FUntitled.png?table=block&amp;amp;id=4b87148c-3295-4e1e-ad53-442f748c0437&amp;amp;spaceId=333f96cf-396d-45ff-8331-232d41bd4d55&amp;amp;width=1920&amp;amp;userId=b188a853-05ac-4bc5-92c3-a256967ab022&amp;amp;cache=v2”width=”400px”&amp;gt;&lt;/li&gt;
      &lt;li&gt;h_v(k) : feature vector of node v at the k-th iteration/layer&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;22-weisfeilier-lehman-testwl-test&quot;&gt;2.2 Weisfeilier-Lehman test(WL test)&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Graph Isomorphism problem : 두 그래프가 위상적으로 동일한지 여부를 확인하는 부분이지만, 이 부분은 challenging problem&lt;/li&gt;
  &lt;li&gt;그래프 동형의 Weisfeiler-Lehman(WL) 테스트는 광범위한 그래프 클래스를 구별하는 효과적이고 계산적으로 효율적인 테스트&lt;/li&gt;
  &lt;li&gt;1차원 형태인 “navie vertex refinement”는 GNN의 이웃 집합과 유사&lt;/li&gt;
  &lt;li&gt;WL 테스트는
    &lt;ul&gt;
      &lt;li&gt;(1) 노드와 그 이웃의 레이블을 반복적으로 집계하고&lt;/li&gt;
      &lt;li&gt;(2) 집계된 레이블을 고유한 새 레이블로 해시(다양한 길이를 가진 데이터를 고정된 거리를 가진 데이터로 매핑한 값)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;알고리즘은 일부 반복에서 두 그래프 사이의 노드 레이블이 다른 경우 두 그래프가 non-isomorphic이라고 결정&lt;/li&gt;
  &lt;li&gt;WL 테스트를 기반으로 그래프 간의 유사도를 측정하는 WL 하위 트리 커널을 제안
    &lt;ul&gt;
      &lt;li&gt;커널 : WL 테스트는 여러번 반복하여 노드 레이블 수를 그래프의 특징 벡터로 사용&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;직관적으로 WL 테스트의 k번째 반복에서 노드의 레이블 :
    &lt;ul&gt;
      &lt;li&gt;노드에 뿌리를 둔 k의 하위 트리 구조를 나타냄&lt;/li&gt;
      &lt;li&gt;중간 그림: WL 테스트가 다른 그래프를 구별하기 위해 사용하는 루트 하위 트리 구조(파란색 노드).&lt;/li&gt;
      &lt;li&gt;오른쪽 그림: GNN의 aggregating 기능이 노드 이웃의 multi set을 캡처하는 경우 GNN은 재귀 방식으로 루트 하위 트리를 캡처 → WL 테스트만큼의 성능이 나옴&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;동형 그래프의 예시(Graph1 = Graph2)&lt;/li&gt;
  &lt;li&gt;동형 그래프 계산 과정
    &lt;ul&gt;
      &lt;li&gt;생긴 형태는 다르게 보이지만, 노드와 연결되어 있는 링크(엣지)가 동일하므로 동형 그래프&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⇒WL 알고리즘의 목표 :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;두 그래프 간의 동형을 판정하는 것&lt;/li&gt;
  &lt;li&gt;k번의 반복 후에도 두 그래프가 같은 컬러일 경우, 두 그래프는 동형일 가능성이 있음을 알려줌&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;3-theoretical-framework--overview&quot;&gt;3 Theoretical Framework : Overview&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;위 그림 설명 :
    &lt;ul&gt;
      &lt;li&gt;GNN은 각 노드의 기능 벡터를 재귀적으로 업데이트하여 네트워크 구조와 주변의 다른 노드의 기능이 정의됨&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;인접 노드 집합의 특징 벡터가 multi-set을 형성함
    &lt;ul&gt;
      &lt;li&gt;다른 노드가 동일한 특징 벡터를 가질 수 있기 때문에 동일한 요소가 여러 번 나타날 수 있음&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Multi-set(다중 집합)
    &lt;ul&gt;
      &lt;li&gt;다중 집합은 해당 요소에 대해 여러 instance를 허용하는 집합의 일반화된 개념&lt;/li&gt;
      &lt;li&gt;더 형식적인 다중 집합은 2-tuple로 구성된 집합을 X = (S, m)로 표현한다면,
        &lt;ul&gt;
          &lt;li&gt;S:  고유한 요소로 구성된 X의 기본 집합&lt;/li&gt;
          &lt;li&gt;m : S → N≥1은 요소의 다중성을 나타냄&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GNN의 표현력을 연구하기 위해 GNN이 임베딩 공간의 동일한 위치에 두 개의 노드를 매핑할 때를 분석&lt;/li&gt;
  &lt;li&gt;직관적으로,  GNN은 해당 노드에서 ‘&lt;strong&gt;동일한 기능을 가진’ ‘동일한 하위 트리 구조’&lt;/strong&gt;가 있는 경우에만, 두 노드를 동일한 위치에 매핑함&lt;/li&gt;
  &lt;li&gt;하위 트리 구조는 노드 이웃을 통해 재귀적으로 정의되기 때문에(그림참고),
    &lt;ul&gt;
      &lt;li&gt;GNN이 두 개의 이웃(즉, 두 개의 다중 집합)을 동일한 임베딩 또는 매핑하는지 여부에 대한 관점으로 분석접근이 가능&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GNN의 집계 체계를 신경망이 나타낼 수 있는 다중 집합에 대한 함수 클래스로 추상화하고 multi-set function을 나타낼 수 있는지 연구&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;4-building-powerful-graph-neural-networks&quot;&gt;4. Building Powerful Graph Neural Networks&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;WL test와 GNN의 representational power의 관계에 대해 알아볼 예정&lt;/li&gt;
  &lt;li&gt;GNN은 임베딩 공간의 다른 표현에 매핑하여 다른 그래프 구조를 구별할 수 있음
    &lt;ul&gt;
      &lt;li&gt;But, 두 개의 서로 다른 그래프를 서로 다른 임베딩에 매핑하는 기능은 어려운 그래프 동형 현상 문제&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;즉, ‘&lt;strong&gt;동형 그래프가 동일한 표현에 매핑&lt;/strong&gt;’되고 ‘&lt;strong&gt;비동형 그래프가 다른 표현에 매핑&lt;/strong&gt;’ 형태가 좋은 형태&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Lemma 2&lt;/strong&gt;. G1과 G2를 두 개의 비동형 그래프라고 가정&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;그래프 신경망 A : G → R^d가 G1과 G2를 &lt;strong&gt;다른 임베딩에 매핑하면&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;Weisfeiler-Lehman 그래프 동형 테스트도 G1과 G2가 동형이 아닌 것으로 결정&lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;⇒ Lemma 2를 통해 WL Test로 구별해내지 못하는 그래프들에 대해서 GNN도 역시 구별해내지 못한다는 것을 강조&lt;/p&gt;

    &lt;p&gt;⇒ Lemma 2의 증명은 WL Test는 feature vector를 update하는 과정이 injective하다는 점을 설명&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;GNN의 neighborhood aggregation이 injective하다면 WL Test만큼의 성능이 가능한가?
        &lt;ul&gt;
          &lt;li&gt;Theorem 3에서 답변해줌&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Theorem 3.&lt;/strong&gt; A : G → R^d를 GNN이라고 가정&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;
        &lt;p&gt;충분한 수의 GNN 레이어를 사용하여 A는 동형에 대한 WL 테스트가 비동형으로 결정한 모든 그래프 G1 및 G2를 다음 조건이 충족되는 경우 다른 임베딩에 매핑.&lt;/p&gt;

        &lt;p&gt;a) A는 반복적으로 노드 기능을 집계 및 업데이트, 함수 f는 multiset에서 작동하고 공집합은 주입식임&lt;/p&gt;

        &lt;p&gt;(b) 노드 기능의 다중 집합에서 작동하는 A의 그래프 수준을 판독, h_v(k)는 주입식임&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;

    &lt;p&gt;⇒ Aggregate, combine, readout 함수가 multiset에 대해서 injective 일 때, &lt;strong&gt;GNN은 WL Test와 같은 분별성능을 가질 수 있다&lt;/strong&gt;라는 결론&lt;/p&gt;

    &lt;p&gt;*injective function(단사 함수) : 정의역 원소에 대해 다른 치역 원소로 맵핑되는 함수 / 입력값의 정보를 온전히 출력값으로 전달하는 함수&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;GNN의 이점
    &lt;ul&gt;
      &lt;li&gt;WL 테스트의 노드 기능 벡터는 본질적으로 원-핫 인코딩이므로 하위 트리 간의 &lt;strong&gt;유사성을 확인할 수 없음&lt;/strong&gt;&lt;/li&gt;
      &lt;li&gt;대조적으로 Theorem 3의 기준을 만족하는 GNN은 하위 트리를 저차원 공간에 injective하는 방법을 학습하여 WL 테스트를 일반화하여,
        &lt;ul&gt;
          &lt;li&gt;&lt;strong&gt;이를 통해 GNN은 다른 구조를 구별할 수 있을 뿐만 아니라 유사한 그래프 구조를 유사한 임베딩에 매핑하고 그래프 구조 간의 종속성을 확인하는 방법 학습 가능&lt;/strong&gt;&lt;/li&gt;
        &lt;/ul&gt;

        &lt;p&gt;⇒ WL test는 그래프가 다르다는 것은 알아도, 얼마나 다른지에 대해서 알 수 없음!&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;41-graph-isomorphism-networkgin&quot;&gt;4.1 Graph Isomorphism Network(GIN)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Theorem 3의 조건을 증명할 수 있는 GIN(Graph Isomorphism Network)이라는 간단한 아키텍처를 개발
    &lt;ul&gt;
      &lt;li&gt;이 모델은 WL 테스트를 일반화하므로 GNN 간의 최대 판별력의 성능 표현이 가능&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Neighbor aggregation에 대한 injective multiset functions modeling하기 위해 “Deep Multiset” 이론 개발
    &lt;ul&gt;
      &lt;li&gt;Deep Multiset : 신경망을 사용하여 범용성 다중 집합 함수를 parameterizing하는 이론&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Lemma5과 Corollary 6을 통해서 Aggregate와 Combine 함수가 multiset에 대해 injective한 함수가 존재하는지 확인해야 함&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;42-graph-level-readout-of-gin&quot;&gt;4.2 Graph-Level Readout of GIN&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GIN을 학습한 노드 임베딩은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;노드 분류&lt;/code&gt; 및 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;링크 예측&lt;/code&gt;과 같은 작업에 직접 사용 가능
    &lt;ul&gt;
      &lt;li&gt;그래프 분류 작업을 위해 우리는 개별 노드의 임베딩이 주어지면 전체 그래프의 임베딩을 생성하는 다음 “판독” 기능 가능&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;그래프 수준 판독에서 중요한 부분은 하위 트리 구조에 해당하는 Node representaion이 반복 횟수가 증가함에 따라 범위가 global해짐
    &lt;ul&gt;
      &lt;li&gt;layer가 많으면 Global한 특성만 남고, Layer가 적으면 local한 특성만 남는 것 ⇒ 적당한 Layer의 수가 필요&lt;/li&gt;
      &lt;li&gt;GNN의 고질적인 문제인 over-smoothing의 문제라고 해석할 수 있음
        &lt;ul&gt;
          &lt;li&gt;over-smoothing : 그래프 신경망의 layer 수가 증가하면서 정점의 임베딩이 서로 유사해지는 현상&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;적절한 Layer를 위해 layer의 graph representation을 concatenation을 모두 합쳐줌&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Theorem 3와 Corollary 6에 따라 GIN이 위 식의 READOUT을 대체하는 경우,
    &lt;ul&gt;
      &lt;li&gt;동일한 반복의 모든 노드 기능을 합산하면, WL 테스트와 WL 하위 트리 커널 일반화 가능&lt;/li&gt;
      &lt;li&gt;Readout(=graph representation)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;5-less-powerful-but-still-interesting-gnns&quot;&gt;5 Less Powerful but Still Interesting GNNs&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;GCN 및 GraphSAGE를 포함하여 Theorem 3의 조건을 충족하지 않는 GNN을 연구
    &lt;ul&gt;
      &lt;li&gt;Theorem 3의 핵심 아이디어 : Aggregate, combine, readout 함수가 multiset에 대해서 injective 일 때, &lt;strong&gt;GNN은 WL Test와 같은 분별성능을 가질 수 있다&lt;/strong&gt;라는 결론&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;위 같은 GNN의 변형 모델이 WL 테스트보다 설명력이 좋지 않지만, 그럼에도 불구하고 GCN과 같은 평균 집계(Mean Aggregator)가 있는 모델은 노드 분류 작업에 대해 잘 수행&lt;/li&gt;
  &lt;li&gt;이를 더 잘 이해하기 위해 다양한 GNN 변형이 그래프에 대해
    &lt;ul&gt;
      &lt;li&gt;캡처할 수 있는 것과&lt;/li&gt;
      &lt;li&gt;캡처할 수 없는 것
        &lt;ul&gt;
          &lt;li&gt;위 2개를 정확하게 특성화하고 그래프를 통한 학습의 의미를 파악&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Graph를 학습하는 데에 있어 다른 GNN의 변형 버전들이 어떻게 Graph에 대해 학습하고 정보를 습득하는지에 대한 설명&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;6-other-related-work&quot;&gt;6 Other Related work&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;GNN의 속성에 대해 수학적으로 연구하는 작업은 상대적으로 적음&lt;/li&gt;
  &lt;li&gt;가장 초기의 GNN 모델(Scarselli et al., 2009b)이 확률로 측정 가능한 함수를 근사할 수 있음을 보여줌&lt;/li&gt;
  &lt;li&gt;Lei et al. (2017)은 제안된 아키텍처가 그래프 커널의 RKHS에 있음을 보여주지만 어떤 그래프를 구별할 수 있는지 명시적으로 연구하지는 않음&lt;/li&gt;
  &lt;li&gt;sum 집계 및 MLP 인코딩(Battaglia et al., 2016; Scarselli et al., 2009b; Duvenaud et al., 2015)을 포함하여 대부분의 GNN 기반 아키텍처가 제안&lt;/li&gt;
  &lt;li&gt;다른 GNN 아키텍처와 달리 GIN(Graph Isomorphism Network)은 단순하지만 Powerful함&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;7-experiments&quot;&gt;7 Experiments&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;GIN과 GNN 변형의 훈련 및 테스트 성능을 평가 및 비교
    &lt;ul&gt;
      &lt;li&gt;본 실험의 목적은 모델이 단지 Input Node Feature에 의존하지 않고, Network 구조를 학습하도록 하는 것임
        &lt;ul&gt;
          &lt;li&gt;따라서 생물 정보 그래프에서 노드는 범주형 입력 기능을 갖지만 소셜 네트워크에서는 기능이 없음&lt;/li&gt;
          &lt;li&gt;소셜 네트워크의 경우 같이 노드 기능을 생성
            &lt;ul&gt;
              &lt;li&gt;REDDIT 데이터 세트의 경우 모든 노드 기능 벡터를 동일하게 설정&lt;/li&gt;
              &lt;li&gt;다른 소셜 그래프의 경우 노드 정도의 원-핫 인코딩을 사용&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;데이터 세트
    &lt;ul&gt;
      &lt;li&gt;9개의 그래프 분류 벤치마크 사용
        &lt;ul&gt;
          &lt;li&gt;4개의 생물정보학 데이터세트 : MUTAG, PTC, NCI1, PROTEINS&lt;/li&gt;
          &lt;li&gt;5개의 소셜 네트워크 데이터세트 :COLLAB, IMDB-BINARY, IMDB-MULTI, REDDIT-BINARY 및 REDDIT-MULTI5K&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;모델-및-구성&quot;&gt;모델 및 구성&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;GIN과 GNN 변형을 평가&lt;/li&gt;
  &lt;li&gt;GIN 프레임워크에서 두 가지 변형을 고려
    &lt;ul&gt;
      &lt;li&gt;(1) Eq4.1에서 경사하강법으로 학습시킨 ε을 GIN-ε라고 함&lt;/li&gt;
      &lt;li&gt;(2) Eq4.1에서 ε을 0인 경우를  GIN-0이라고 함 &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;높은 Representational Power를 갖고 있는 모델일수록 Training set에서의 정확도도 높을 것&lt;/strong&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;그림 4: GIN,  GNN 변형 및 WL 하위 트리 커널의 훈련 세트 성능.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;하이퍼 매개변수 조정 리스트
    &lt;ul&gt;
      &lt;li&gt;(1) 은닉 유닛의 수 ∈ {16, 32} 생물정보학 그래프, 64 소셜 그래프&lt;/li&gt;
      &lt;li&gt;(2) 배치 크기 ∈ {32, 128};&lt;/li&gt;
      &lt;li&gt;(3) 조밀한 층 이후의 드롭아웃 비율 ∈ {0, 0.5}&lt;/li&gt;
      &lt;li&gt;(4) 에포크의 수, 즉 10겹에 걸쳐 평균화된 최고의 교차 검증 정확도를 가진 단일 에포크가 선택&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;데이터 세트 크기가 작기 때문에 하이퍼파라미터 선택이 유효성 검사 세트를 사용하여 수행되는 대체 설정은 매우 불안정
    &lt;ul&gt;
      &lt;li&gt;(예: MUTAG의 경우 유효성 검사 세트에는 18개의 데이터 포인트만 포함됨).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;추가로 5개의 GNN 레이어(입력 레이어 포함), 64 크기의 은닉 유닛, 128 크기의 미니배치 및 0.5 드롭아웃 비율과 같은 데이터 세트에서 모든 하이퍼 매개변수가 고정된 다양한 GNN의 훈련 정확도를 확인함
    &lt;ul&gt;
      &lt;li&gt;비교를 위해 WL 하위 트리 커널의 훈련 정확도가 확인되며, 여기서 반복 횟수를 4로 설정했으며 이는 5개의 GNN 레이어와 비슷함&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;baseline&quot;&gt;BASELINE&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;아래 리스트와 비교
    &lt;ul&gt;
      &lt;li&gt;(1) C-SVM이 사용된 WL 하위 트리 커널 분류기
        &lt;ul&gt;
          &lt;li&gt;조정하는 하이퍼파라미터는 SVM의 C와 WL 반복 횟수 ∈ {1, 2, . . . , 6}&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;(2) Defusion-convolution 신경망(DCNN) 및 Deep Graph CNN(DGCNN)&lt;/li&gt;
      &lt;li&gt;(3) Anonymous Walk Embedding(AWL) 딥 러닝 방법과 AWL의 경우 원본 논문에 기재된 정확도&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;71-results&quot;&gt;7.1 Results&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;표 1: Test-Set 분류 정확도(%).
    &lt;ul&gt;
      &lt;li&gt;볼드체 : GIN의 정확도가 GNN 변형 중에서가장 높지 않은 데이터 세트에서 유의 수준 10%에서 paired t-test사용하여 GIN의 성능 평가&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;training-set-performance&quot;&gt;Training-set Performance&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;훈련 정확도를 비교하여 GNN의 표현력에 대한 이론적 분석을 검증
    &lt;ul&gt;
      &lt;li&gt;더 높은 표현력을 가진 모델은 더 높은 훈련 세트 정확도가 필수&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;그림 4는 동일한 하이퍼 매개변수 설정을 사용하여 GIN 및 GNN 변형의 train curve보여줌&lt;/li&gt;
  &lt;li&gt;첫째, 이론적으로 가장 표현력이 좋은 GNN, 즉 GIN-ε 및 GIN-0은 모든 훈련 세트에 거의 완벽하게 적합가능
    &lt;ul&gt;
      &lt;li&gt;이에 비해 mean/max 풀링 또는 1-layer 퍼셉트론을 사용하는 GNN 변형은 많은 데이터 세트에서 심하게 과소적합(underfit)됨&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Training-set 경향
    &lt;ul&gt;
      &lt;li&gt;특히 훈련 정확도 패턴은 모델의 표현력에 따른 순위와 일치함&lt;/li&gt;
      &lt;li&gt;MLP가 있는 GNN 변형은 1-layer 퍼셉트론이 있는 GNN보다 더 높은 훈련 정확도를 갖는 경향이 있음&lt;/li&gt;
      &lt;li&gt;Sum aggregator의 GNN은 mean/max 풀링 집계자가 있는 GNN보다 훈련 세트에 더 잘 맞는 경향이 있음&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;본 데이터 세트에서 GNN의 훈련 정확도는 WL 하위 트리 커널의 정확도를 결코 초과하지 않음
    &lt;ul&gt;
      &lt;li&gt;이는 GNN이 일반적으로 WL 테스트보다 판별력이 낮기 때문이라고 예상됨
        &lt;ul&gt;
          &lt;li&gt;예를 들어, IMDBBINARY에서 어떤 모델도 훈련 세트에 완벽하게 맞을 수 없으며 GNN은 WL 커널과 기껏해야 동일한 훈련 정확도를 달성함&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;이 패턴은 WL 테스트가 집계 기반 GNN의 표현 용량에 대한 upper bound을 제공한다는 본 논문의 결과와 일치함
        &lt;ul&gt;
          &lt;li&gt;그러나 WL 커널은 노드 기능을 결합하는 방법을 배울 수 없음&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;test-set-performance&quot;&gt;Test-set Performance&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;높은 표현력을 가진 GNN이 그래프 구조를 정확하게 포착하여 잘 일반화할 수 있다고 가정&lt;/li&gt;
  &lt;li&gt;표 1은 GIN(Sum–MLP) 및 기타 GNN 변형 및 최신 base line의 테스트 정확도를 비교&lt;/li&gt;
  &lt;li&gt;첫째, GIN, 특히 GIN-0은 9개 데이터 세트 모두에서 GNN 변형보다 성능이 우수(또는 유사한 성능을 달성)하여 SOTA달성&lt;/li&gt;
  &lt;li&gt;GIN은 상대적으로 많은 수의 훈련 그래프가 포함된 소셜 네트워크 데이터 세트에서 강점이 있음
    &lt;ul&gt;
      &lt;li&gt;Reddit 데이터 세트의 경우 모든 노드는 노드 기능과 동일한 스칼라를 공유&lt;/li&gt;
      &lt;li&gt;여기서 GIN과 sum-aggregation GNN은 그래프 구조를 정확하게 포착하고 다른 모델보다 높은 성능을 보여줌&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GIN(GIN-0 및 GIN-ε)을 비교하면 GIN-0이 약간 그러나 일관되게 GIN-ε을 능가함&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;8-conclusion&quot;&gt;8 Conclusion&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;GNN의 표현력에 대한 추론을 위한 이론적 토대를 개발&lt;/li&gt;
  &lt;li&gt;GNN 변형의 표현 능력에 대한 boundary를 증명&lt;/li&gt;
  &lt;li&gt;Neighbor set framework에서 증명할 수 있는  GNN 설계&lt;/li&gt;
  &lt;li&gt;Future work :
    &lt;ul&gt;
      &lt;li&gt;그래프로 학습하기 위한 훨씬 더 강력한 아키텍처를 위해 negibor aggregation(또는 메시지 전달)보다 성능을 향상시키는 것&lt;/li&gt;
      &lt;li&gt;GNN의 속성을 이해하고 개선하고 최적화 환경을 더 잘 이해하는 것&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⇒ MLP(Multi-Layer Perceptron)이 injective function일 때 GIN은 WL만큼 강한 성능을 가질 수 있음&lt;/p&gt;

&lt;p&gt;*Training process에서 MLP가 injective할지는 보장할 수 없음&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;# 9 Reference&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;GIN : &lt;a href=&quot;https://harryjo97.github.io/paper%20review/How-Powerful-are-Graph-Neural-Networks/&quot;&gt;https://harryjo97.github.io/paper review/How-Powerful-are-Graph-Neural-Networks/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GIN : &lt;a href=&quot;https://greeksharifa.github.io/&quot;&gt;https://greeksharifa.github.io/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;WL Test : &lt;a href=&quot;https://davidbieber.com/post/2019-05-10-weisfeiler-lehman-isomorphism-test/&quot;&gt;https://davidbieber.com/post/2019-05-10-weisfeiler-lehman-isomorphism-test/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Injective Function : &lt;a href=&quot;https://velog.io/@stapers/Lecture-9-Theory-of-Graph-Neural-Networks&quot;&gt;https://velog.io/@stapers/Lecture-9-Theory-of-Graph-Neural-Networks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GIN : &lt;a href=&quot;https://junklee.tistory.com/125&quot;&gt;https://junklee.tistory.com/125&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Mon, 25 Jul 2022 04:30:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/How-Powerful-Are-Graph-Neural-Networks/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/How-Powerful-Are-Graph-Neural-Networks/</guid>
        
        <category>GIN</category>
        
        
      </item>
    
      <item>
        <title>Exploiting Edge Features in Graph Neural Networks</title>
        <description>&lt;p&gt;안녕하세요, 가짜연구소 Groovy Graph 팀의 서호준입니다. 이번 포스트에서는 2018년도에 소개 된 Exploiting Edge Features in Graph Neural Networks 논문에 대해 리뷰해 보도록 하겠습니다.&lt;/p&gt;

&lt;h3 id=&quot;목차&quot;&gt;목차&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;Abstract&lt;/li&gt;
  &lt;li&gt;Introduction&lt;/li&gt;
  &lt;li&gt;Related works&lt;/li&gt;
  &lt;li&gt;Edge feature enhanced graph neural networks&lt;/li&gt;
  &lt;li&gt;Experimental results&lt;/li&gt;
  &lt;li&gt;Conclusions&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;0-abstract&quot;&gt;0. Abstract&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;많은 사람들이 현재 활발히 사용하고 있는 GCNs와 GAT모델은 edge feature 활용성 면에 대해 제한적인 측면이 있다.&lt;/li&gt;
  &lt;li&gt;그렇기 때문에 edge feature를 undirected or multi-dimensional edges 측면에서도 더욱 충분히 사용할 수 있는 새로운 프레임워크를 고안해 내었다.&lt;/li&gt;
  &lt;li&gt;현재 주 모델들에서 사용되고 있는 symmetric normalization 방법이 아닌 doubly stochastic normalization 방법을 제안하였다.&lt;/li&gt;
  &lt;li&gt;각 레이어에서 새로운 formula를 생성해 내어 multi dimensional edge feature를 사용 할 수 있도록 한다.&lt;/li&gt;
  &lt;li&gt;Edge features가 네트워크 레이어 전반적으로 고루 사용될 수 있다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;1-introduction&quot;&gt;1. Introduction&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;현재 대표적인 GNN 모델로 &lt;strong&gt;GCNs&lt;/strong&gt;와 &lt;strong&gt;GAT&lt;/strong&gt; 등이 많이 사용되고 있다.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GCNs&lt;/strong&gt;와 &lt;strong&gt;GAT&lt;/strong&gt;의 본질은 확연히 다르다 
→ &lt;strong&gt;GCNs&lt;/strong&gt;에서 이웃 노드를 취합하는 것은 Graph Topological Structure에 의해 정의되는 반면 (Node feature와는 무관하게),
&lt;strong&gt;GAT&lt;/strong&gt;의 weights는 어텐션 메카니즘에 의해 node feature의 함수로 정의된다.
&lt;strong&gt;GCNs&lt;/strong&gt;에서는 오직 one-dimensional real value edge feature를 사용하기 때문에 이 역시 edge information은 그저 edge가 존재 하느냐 마느냐 인 것이기 때문에 edge feature를 제대로 사용하고 발휘하고 있다고 볼 수 없다.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GAT&lt;/strong&gt;과 &lt;strong&gt;GCN&lt;/strong&gt;의 레이어는 node feature를 original adjacency matrix를 인풋으로 사용하는데, 이는 noisy하거나 not optimal할 수 있기 때문에 효과가 제한적일 수 있다고 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/GNNvsEGNN.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2-related-work&quot;&gt;2. Related work&lt;/h2&gt;

&lt;p&gt;옛날에 graph learning에서 그래프 데이터의 복잡한 non-Euclidean structure를 해결하기 위해&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Graph-statistics (e.g., degrees)를 추출하거나&lt;/li&gt;
  &lt;li&gt;Kernel functions을 사용하거나&lt;/li&gt;
  &lt;li&gt;Hand-crafted features를 고안하였다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이후에는 data driven embedding approach를 사용하게 되었다.&lt;/p&gt;

&lt;p&gt;대표적인 embedding approach들의 한계점은&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Low-dimensional vectors를 맵핑하는 function이 linear하거나 너무 간단한 function을 사용하여 복잡한 패턴을 풀어내지 못하였다.&lt;/li&gt;
  &lt;li&gt;DeepWalk, Node2Vec 등 대부분은 node features를 모델에서 사용하지 않는 문제가 있었다.&lt;/li&gt;
  &lt;li&gt;이러한 모델들은 모두 transductive한 문제가 있었다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;이러한 문제점을 풀기위해 이후에는 neural networks가 graph learning에서 사용되기 시작하였다. GCNs와 GAT이 대표적인 예이다.&lt;/p&gt;

&lt;h2 id=&quot;3-edge-feature-enhanced-graph-neural-networks&quot;&gt;3. Edge feature enhanced graph neural networks&lt;/h2&gt;
&lt;h3 id=&quot;31-architecture-overview&quot;&gt;3.1. Architecture overview&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;N개의 nodes가 있을 때, node feature를 X라고 한다면 X는 NxF matrix representation이 된다고 정의한다.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;·&lt;/strong&gt; 은 whole range of a dimension을 슬라이스 하는 것을 말한다.&lt;/li&gt;
  &lt;li&gt;즉, X$_i$,$_j$는 X$i$의 $j$번째 feature를 말하는 것이다.&lt;/li&gt;
  &lt;li&gt;X$_i$&lt;strong&gt;·&lt;/strong&gt; ∈ &lt;strong&gt;R$^F$&lt;/strong&gt; 는 $i$번째 노드의 F dimensional feature를 말하는 것이다.&lt;/li&gt;
  &lt;li&gt;E는 NxNxP 형태의 텐서로서 edge feature를 나타낸다.&lt;/li&gt;
  &lt;li&gt;E$_i$,$_j$&lt;strong&gt;·&lt;/strong&gt; ∈ &lt;strong&gt;R$^P$&lt;/strong&gt; 는 P dimensional feature를 가지고 있고 node $i$에서 node $j$로 이어지는 edge를 말하는 것이다.&lt;/li&gt;
  &lt;li&gt;E$_i$,$_j$&lt;strong&gt;· = 0&lt;/strong&gt; 인 경우는 $i$와 $j$사이에 edge가 존재하지 않는다고 정의한다.&lt;/li&gt;
  &lt;li&gt;$l$을 superscript로 사용하여 lth 레이어임을 표시해 준다.&lt;/li&gt;
  &lt;li&gt;Input은 X$^0$와 E$^0$로 나타낸다.&lt;/li&gt;
  &lt;li&gt;첫 EGAT레이어를 거치고 나면, X$^0$는 NxF$^1$의 value를 생성해 내고 이는 X$^1$이다.&lt;/li&gt;
  &lt;li&gt;그 와중에 E$^1$은 E$^0$의 dimension을 모두 preserving 하며 만들어지고, 이 E$^1$는 그 다음 레이어의 edge feature로 사용된다.&lt;/li&gt;
  &lt;li&gt;The node features X$^l$은 F$^l$ 차원공간에서의 노드 엠베딩이다.&lt;/li&gt;
  &lt;li&gt;노드 분류 문제에서는 각 노드 엠베딩 값 X$^l$,$_i$의 last dimension 값을 softmax를 통과시켜 아웃풋을 얻어낸다.&lt;/li&gt;
  &lt;li&gt;그래프 prediction 문제(Regression and classification)는 pooling layer가 first dimension에 적용되어 feature matrix가 전체 그래프를 나타내는 single vector embedding로 만들고, 그 후에 fully connected layer를 적용하여 아웃풋을 만들어 이 아웃풋으로 regression을 하던 classification을 진행하던 한다.&lt;/li&gt;
  &lt;li&gt;E$^0$는 pre-normalized되어 있다는 것을 참고하자. (Pre-normalization에 대해서는 뒤에 얘기)&lt;/li&gt;
  &lt;li&gt;이 논문에서는 EGNN을 EGNN(A), EGNN(C)로 두가지를 제안하여 GAT과 GCNs과 비교한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;32-doubly-stochahstic-normalization-of-edges&quot;&gt;3.2 Doubly stochahstic normalization of edges&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;                                               Doubly Stochastic Matrix  &amp;lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/Doubly_stochastic.png&quot; width=&quot;500px&quot;&amp;gt; 일반적으로 Markov Transition Matrix가 행과 열 모든 곳에서 1.0으로 총합을 이루는 것 Matrix를 Doubly Stochastic Matrix라고 한다.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;doubly-stochastic-normalization&quot;&gt;Doubly Stochastic Normalization&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/Doubly_Stochastic_Normalization_formula1.png&quot; width=&quot;500px&quot; /&gt;
E~$_i$,$_j$,$_p$는 일반적인 E$_i$,$_j$,$_p$를 softmax로 normalizing하는 것이지만 이 논문에서는 이렇게 한번 정규화 시킨 후 다시 한번 더 루프를 돌면서 정규화를 해준다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/Doubly_Stochastic_Normalization_formula2.png&quot; width=&quot;500px&quot; /&gt;
즉, source node 측면에서도 합은 1, destination node 측면에서도 합은 1이 되어 doubly stochastic matrix가 된다.&lt;/p&gt;

&lt;p&gt;그렇기 때문에 수학적으로,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;a stationary finite Markov chain with
a doubly stochastic transition matrix will have a uniform
stationary distribution&lt;/em&gt;
하다&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;*Stationary Markov Chain은 Mp = M이 되는 matrix이다.&lt;/p&gt;

&lt;p&gt;Graph neural networks에서는 edge features가 레이어를 지남에 따라 반복적으로 곱해지는데, 이때 doubly stochastic normalization이 이 프로세스를 안정화 시킬 수 있다고 한다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Wang, A. Pourshafeie, M. Zitnik, J. Zhu, C. D. Bustamante, S. Batzoglou, and J. Leskovec. Network Enhancement: a general method to denoise weighted biological networks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Doubly Stochastic Matrix의 효과는 위의 논문에서 graph edge denoising측면에서 이미 입증되었다고 한다.&lt;/p&gt;

&lt;h3 id=&quot;33-egnna-attention-based-egnn-layer&quot;&gt;3.3. EGNN(A): Attention based EGNN layer&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;GAT의 경우 edge feature는 그저 이웃노드들이 있는지 없는지의 binary value를 가지고 있을 뿐이다. 즉, weights같은 real value feature는 고려하지 않는다.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;이 논문에서는 다양한 edge feature를 같이 사용하는 새로운 어텐션 메카니즘을 제안한다.
&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/EGNN(A) layer formula.png&quot; width=&quot;500px&quot; /&gt;
EGNN(A) layer formula
&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/g-transformation formula.png&quot; width=&quot;500px&quot; /&gt;
g$^l$-transformation formula&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;g$^l$-transformation은 단순히 이전 레이어의 node embedding을 weight matrix W$%l$$^l$에 행렬곱을 해 주는 operation이다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;요약:&lt;/strong&gt; g-transformation된 node feature와, p-edge feature와 node feature를 α-transformtion한 값을 곱한 것을 P채널로 concatenation(?)한 값을 non-linear activation을 통과시켜 준다. 그렇게 함으로써 그 다음번 레이어의 node embedding을 구하는데 사용한다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;α$_i^l$,$_j$,$_p$값은 $X_i^l$ $^-$ $^1$, X$_j^l$ $^-$ $^1$의 함수이며 α는 우리가 말하는 attention coefficients이다.&lt;/p&gt;

    &lt;p&gt;일반적으로 attention mechanism의 attention coefficients는 X$&lt;em&gt;i$,$&lt;/em&gt;.$와 X$&lt;em&gt;j$,$&lt;/em&gt;.$두 nodes에만 의존하여 계산되지만, 이 논문에서는 그 두 nodes외에 edge features에도 의존하여 계산될 수 있게 하였다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Multi dimensional edge feautures를 위해서 각 feature channel마다 위 공식으로 계산을 한 후 concatenation을 통해 병합하여 계산한다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;특정 edge feature channel을 위해 이 논문의 attention function을 요약해보면 다음과 같다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/edge_features.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;DS: Doubly Stochastic Normalization&lt;/p&gt;

&lt;p&gt;f$^l$: Scalar value로 아웃풋을 나타내는 아무 attention function을 말한다.&lt;/p&gt;

&lt;p&gt;이 논문에서는 아래 공식 (11)과 같이 linear function을 사용하였다고 한다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/attention_.png&quot; width=&quot;500px&quot; /&gt;
아래 공식 (12)에서 볼 수 있듯이 attention coefficients가 다음 레이어에서 edge features로 사용된다고 한다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/12.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;34-egnnc-convultion-based-egnn-layer&quot;&gt;3.4 EGNN(C): Convultion based EGNN layer&lt;/h3&gt;

&lt;p&gt;EGNN(C)와 EGNN(A)의 차이는 attention coefficients를 사용하는가 adjacency matrix를 사용하는지이다. 그러므로 이 논문에서 α..$_p$대신 E..$_p$를 사용하는 차이가 있다.&lt;/p&gt;

&lt;h3 id=&quot;35-edge-features-for-directed-graph&quot;&gt;3.5. Edge features for directed graph&lt;/h3&gt;

&lt;p&gt;이 논문에서는 edges의 방향성이 representation expressiveness에 중요하기 때문에 direction을 잃지 않는 것이 중요하다고 하였다. 그래서 directed E$_i$,$_j$,$_p$가 아래와 같이 표현되도록 하였다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/Edge_features_for_directed_graph.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;이렇게 모든 directed channel들은 3개의 channels로 증강된다. 이렇게 증강된 3개의 채널은 3타입의 이웃을 정의한다 (Forward, Backward and Undirected).&lt;/p&gt;

&lt;h2 id=&quot;4-experimental-results&quot;&gt;4. Experimental results&lt;/h2&gt;

&lt;h3 id=&quot;41-citation-networks&quot;&gt;4.1. Citation networks&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;텐서플로우 sparse tensor functionality를 사용하여 아주 효율적으로 메모리를 줄이고 복잡한 계산을 할 수 있었다고 한다 (On Nvidia Tesla K40 with 12G graphics memory)&lt;/li&gt;
  &lt;li&gt;Cora, Citeseer 그리고 Pubmed 데이터 셋을 사용하였다.&lt;/li&gt;
  &lt;li&gt;일반적으로 이 데이터들은 edge direction을 버리는 pre-processing을 거친 것이기 때문에 오리지널 데이터를 가져와서 edge direction을 참고했다.&lt;/li&gt;
  &lt;li&gt;Activation Function으로 ELU를 사용했다.&lt;/li&gt;
  &lt;li&gt;20번씩 모든 버전의 알고리즘을 돌려봤다. 그 후 classification accuracies의 mean과 standard deviation기록하였다.&lt;/li&gt;
  &lt;li&gt;데이터들의 Class distribution이 다 imbalanced하기 때문에 이를 테스트 하기 위해 unweighted와 weighted losses를 둘 다 테스트해서 퍼포먼스를 보았다. Class k에 속하는 노드의 weight를 계산하기 위해 아래 공식이 사용 되었다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/14.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;K: class의 갯수&lt;/p&gt;

&lt;p&gt;n$_k$: Training se 에서 k-class에 속하는 nodes.&lt;/p&gt;

&lt;p&gt;즉, 숫자가 적은 소수 클래스에 있는 nodes는 더 큰 weights를 가지고 그에 따라 loss계산 시 더 penalized된다.&lt;/p&gt;

&lt;p&gt;성능 결과는 아래와 같다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/result1.png&quot; width=&quot;700px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;EGNN(C)-M* or EGNN(C)-D*은 GCN이랑 비슷하거나 조금 더 나쁜 성능을 보여준다. 그러나 EGNN(C)는 훨씬 좋은 성능을 보인다. Multi-dimensional edeg features와 doubly stochastic normalization이 같이 사용되었을 때 확연히 좋은 성능을 보이는 것이 감지되었다.&lt;/p&gt;

&lt;h3 id=&quot;42-molecular-analysis&quot;&gt;4.2. Molecular analysis&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;분자 구조 분석 태스크에서는 Whole graph prediction을 하게 되는 경우가 대부분이다.&lt;/li&gt;
  &lt;li&gt;데이터는 Tox21(multi-label classification problem) , Lipo 그리고 Freesolv(regression tasks)를 사용하였다.&lt;/li&gt;
  &lt;li&gt;이 실험에서 2 graph processing layers를 사용하였고, a gloabal max-pooling layer와 a fully connected layer를 사용하였다고 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;성능 결과는 아래와 같다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Exploiting-Edge-Features-for-Graph-Neural-Networks/result2.png&quot; width=&quot;600px&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;5-conclusions&quot;&gt;5. Conclusions&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;그래프 인공 신경망에서 현존하는 문제점들을 풀어내기 위한 새로운 프레임워크를 제안하였다.&lt;/li&gt;
  &lt;li&gt;Multi-dimensional edge features를 활용하였다.&lt;/li&gt;
  &lt;li&gt;Doubly Stochastic Normalization을 사용하였다.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 23 Jul 2022 13:37:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/Exploiting-Edge-Features-in-Graph-Neural-Networks/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/Exploiting-Edge-Features-in-Graph-Neural-Networks/</guid>
        
        
      </item>
    
      <item>
        <title>Inductive Representation Learning on Large Graphs</title>
        <description>&lt;p&gt;ㅤ안녕하세요, 가짜연구소 Groovy Graph 팀의 최선웅입니다. 이 글은, ‘&lt;a href=&quot;https://arxiv.org/abs/1706.02216&quot;&gt;Inductive Representation Learning on Large Graphs&lt;/a&gt;’ 논문을 읽고, 정리한 글 입니다.&lt;/p&gt;

&lt;p&gt;ㅤ이 글은 Reference 자료들을 참고하여 정리하였음을 먼저 밝힙니다. 혹시 내용중 잘못된 점이나 보완할 점 있다면 댓글로 알려주시면 감사하겠습니다. 그럼 시작하겠습니다.&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;
&lt;h1 id=&quot;목차&quot;&gt;목차&lt;/h1&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#Abstract&quot;&gt;Abstract&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#Introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#Related-work&quot;&gt;Related work&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;#Propsed-method:-GraphSAGE&quot;&gt;Propsed method: GraphSAGE&lt;/a&gt;&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#Embedding-generation-algorithm&quot;&gt;Embedding generation algorithm&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#Learning-the-parameters-of-GraphSAGE&quot;&gt;Learning the parameters of GraphSAGE&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#Aggregator-Architectures&quot;&gt;Aggregator Architectures&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#CONCLUSIONS&quot;&gt;CONCLUSIONS&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;0-abstract&quot;&gt;0. Abstract&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Large graphs에서 node embedding은 다양한 prediction 문제에 매우 유용하게 사용됩니다.&lt;/li&gt;
  &lt;li&gt;하지만 기존의 방법들의 embedding을 학습하는 과정에서 모든 node가 필요하다는 문제점을 가지고 있습니다.&lt;/li&gt;
  &lt;li&gt;기존의 방법들은 Transductive하고, 보지 못한 node에 대해 일반화를 하지 못합니다.&lt;/li&gt;
  &lt;li&gt;GraphSAGE는 Inductive한 방법이기 때문에 이러한 문제를 해결할 수 있습니다.
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://komputervision.wordpress.com/2020/03/24/inductive-learning-vs-transductive-learning/&quot;&gt;Transductive vs Inductive&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Embedding을 만드는 function을 학습하는 방식으로 진행됩니다.&lt;/li&gt;
  &lt;li&gt;여러 데이터셋에 SOTA 성능을 달성했습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;1-introduction&quot;&gt;1. Introduction&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Node embedding의 기본적인 아이디어는 Dimensionality Reduction 입니다. 즉 고차원의 정보를 저차원의 dense vector embedding으로 변환시키는 것입니다.&lt;/li&gt;
  &lt;li&gt;이전의 연구들은 고정된 그래프에 대한 embedding을 다루는데, 이는 그래프의 사이즈가 계속해서 변하는(dynamic) 현실에 적용하기 적합하지 않습니다.&lt;/li&gt;
  &lt;li&gt;따라서 계속해서 변하고 새로운 노드들을 다루는 상황에서는 inductive한 방식이 필요하게 됩니다.&lt;/li&gt;
  &lt;li&gt;하지만 inductive한 방식에는 어려운 측면이 존재합니다.
    &lt;ul&gt;
      &lt;li&gt;unseen nodes에 대한 일반화는 새로 관측된 subgraph를 기존에 알고리즘이 최적화된 embedding에 맞게 “aligning” 하는 과정이 필요하기 때문입니다.&lt;/li&gt;
      &lt;li&gt;Graph A에 최적화 된 알고리즘을 새로 관측된 subgraph B에 맞춰야 한다는 점이 어렵다고 이해했습니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;기존의 방식들은 대부분 transductive 하기 때문에 inductive하게 수정할 경우 많은 계산비용이 듭니다.&lt;/li&gt;
  &lt;li&gt;GCN 방법 또한 고정된 그래프에서의 transductive한 경우에서만 적용가능한 문제가 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;present-work&quot;&gt;Present work&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GraphSAGE(SAmple and aggreGatE)는 node feature를 활용해서 unseen nodes에 대한 일반화 문제를 해결하려고 합니다.&lt;/li&gt;
  &lt;li&gt;학습 알고리즘에서 node features들을 통합하면서 node의 이웃들에 대한 topological structure와 이웃에 속한 node feature들의 distribution에 대해서도 학습합니다.&lt;/li&gt;
  &lt;li&gt;각 node에 대해 embedding vector를 학습하기 보다는, 주변 이웃(local neighborhood)를 이용한 &lt;strong&gt;aggregator functions&lt;/strong&gt;의 집합을 학습합니다.&lt;/li&gt;
  &lt;li&gt;따라서 예측 단계에서도 학습한 aggregator functions를 이용해 embedding을 만들어냅니다.&lt;/li&gt;
  &lt;li&gt;실제 다양한 citation, Reddit, protein-protein interactions 데이터에 대해 좋은 결과를 보입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;2-related-work&quot;&gt;2. Related work&lt;/h1&gt;

&lt;p&gt;기존 GNN에서 사용하던 다양한 embedding 방법들에 대해 알아보겠습니다.&lt;/p&gt;

&lt;h2 id=&quot;factorization-based-embedding-approaches&quot;&gt;Factorization-based embedding approaches&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Random walk와 MF(Matrix Factorization)-based learning objective를 통해 저차원 node embeddings를 학습합니다.
    &lt;ul&gt;
      &lt;li&gt;이러한 방법에는 Spectral clustering, multi-dimensional scaling, PageRank등이 있다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;각 노드들에 대한 embedding을 학습한다. 따라서 transductive하고 추가적인 학습이 필요합니다.
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;Objective ft이 orthogonal transformation에 대해 invariant하기 때문에, embedding space가 일반화 되기 어렵고 re-training과정에서 drift할 수 있다.&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul&gt;
      &lt;li&gt;Planetoid I 라는 방법이 존재하나 그래프 구조를 regularization으로 활용한다. (이 부분은 추가적으로 이해가 되는대로 내용을 보충하겠습니다.)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;supervised-learning-over-graphs&quot;&gt;Supervised learning over graphs.&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Node embedding 방법 이외에도 다양한 supervised learning 방법이 존재합니다. Graph kernel을 사용해 graph의 feature vector를 구하는 다양한 kernel-based 방법이 존재합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;graph-convolutional-networks&quot;&gt;Graph convolutional networks&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Convolutional neural networks를 통해 학습시키는 여러개의 방법이 제안됐는데, 이러한 방법들의 대다수는 큰 그래프로 scaling되지 않고, 전체 그래프 분류를 목적으로 하고 있습니다.&lt;/li&gt;
  &lt;li&gt;GraphSAGE 방법은 GCN과 높은 관련성이 있습니다. 하지만 GCN은 transductive한 상황에서 semi-supervised learning 방법으로 만들어져있고, 학습과정에서 graph Laplacian을 알고 있어야한다는 문제가 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;3-propsed-method-graphsage&quot;&gt;3. Propsed method: GraphSAGE&lt;/h1&gt;
&lt;p&gt;GraphSAGE에서 제안한 방법들을 본격적으로 살펴보겠습니다.&lt;/p&gt;

&lt;h2 id=&quot;31-embedding-generation-algorithm&quot;&gt;3.1 Embedding generation algorithm&lt;/h2&gt;
&lt;p&gt;우선 알고리즘 형태로 간단하게 살펴보겠습니다.
&lt;img src=&quot;/graph/files/posts/GraphSAGE/alg1.png&quot; width=&quot;300px&quot; class=&quot;center&quot; /&gt;
간단하게 그림으로 표현하면 아래와 같습니다.
&lt;img src=&quot;/graph/files/posts/GraphSAGE/alg1-sketch.png&quot; width=&quot;300px&quot; class=&quot;center&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Node의 이웃들로부터 정보를 aggregate 한다.&lt;/li&gt;
  &lt;li&gt;Aggregate된 정보를 원래의 representation $h^{k-1}_{v}$와 concatenate 한다.&lt;/li&gt;
  &lt;li&gt;2를 non-linear activation을 사용한 fully connected layer로 보낸다.&lt;/li&gt;
  &lt;li&gt;3의 결과를 normalization 한다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;→ 이 과정 K번 거쳐 최종적으로 나오는 representation을 $z_{v} = h^{K}_v$로 notate한다.&lt;/p&gt;

&lt;h3 id=&quot;releation-to-the-weisfeiler-lehman-isomorphism-test&quot;&gt;Releation to the Weisfeiler-Lehman Isomorphism Test.&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;다음의 조건들을 가정하면 Algorithm1이 WL test, “naive vertex refinement”의 한 예가 될 수 있습니다. 즉, 두 그래프의 최종 representation이 똑같은 경우, 두 그래프가 isomorphic하다고 할 수 있다는 의미가 된다고 합니다.&lt;/li&gt;
  &lt;li&gt;상세 내용은 아래와 같습니다.
    &lt;ol&gt;
      &lt;li&gt;
        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;$K =&lt;/td&gt;
              &lt;td&gt;V&lt;/td&gt;
              &lt;td&gt;$&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/li&gt;
      &lt;li&gt;$W = I, \text{ Identity matrix.}$&lt;/li&gt;
      &lt;li&gt;No-non-linear hash function as an aggregator&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;neighborhood-definition&quot;&gt;Neighborhood definition&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;table&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;GraphSAGE에서는 Computational footprint를 위해 고정된 크기의 이웃 집합을 사용합니다. (계산량을 체크할 수 있다는 의미 같습니다.) 이러한 과정 없이는 최악의 경우 계산량이 $O(&lt;/td&gt;
          &lt;td&gt;\mathcal{V}&lt;/td&gt;
          &lt;td&gt;)$가 될 수 있습니다.&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;32-learning-the-parameters-of-graphsage&quot;&gt;3.2 Learning the parameters of GraphSAGE&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Fully unsupervised한 학습을 하기 위해 최종 representation $\mathbf{z}_u$에 graph-based loss function을 적용합니다.&lt;/li&gt;
  &lt;li&gt;Weight matrices $\mathbf{W}^k$와 aggregator function의 parameter를 stochastic gradient descent를 통해 조정합니다.&lt;/li&gt;
&lt;/ul&gt;

\[J_{\mathcal{G}} = -\log{\sigma{(\mathbf{z}_u^T \mathbf{z}_v)}} - Q \cdot \mathbb{E}_{v_n \sim P_n{(v)}} \log{\sigma{(-\mathbf{z}_u^T \mathbf{z}_{v_n})}}\]

&lt;p&gt;→ Positive sample은 random walk를 통해서 계산, negative sample은 랜덤(분포)하게 계산합니다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$v$: $u$ 근처에서 fixed-length random walk를 했을 때 공통적으로 나타나는 노드.&lt;/li&gt;
  &lt;li&gt;$\sigma$: sigmoid function&lt;/li&gt;
  &lt;li&gt;$P_n$: negative sampling distribution&lt;/li&gt;
  &lt;li&gt;$Q$: negative sample의 갯수&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;33--aggregator-architectures&quot;&gt;3.3  Aggregator Architectures&lt;/h2&gt;

&lt;p&gt;그래프 구조에 순서가 있지 않기 때문에 순서에 영향이 없는 aggregator가 필요하게 됩니다.&lt;/p&gt;

&lt;h3 id=&quot;mean-aggregator&quot;&gt;Mean aggregator&lt;/h3&gt;

\[h^k_v \leftarrow \sigma(\mathbf{W}\cdot\text{MEAN}(\{\mathbf{h}^{k-1}_v\} \cup \{\mathbf{h}^{k-1}_u, \forall u \in \mathcal{N}(v)\})).\]

&lt;ul&gt;
  &lt;li&gt;Localized spectral convolution의 rough한 linear approx.이기 때문에 &lt;em&gt;convolutional&lt;/em&gt; 이라고 부릅니다.&lt;/li&gt;
  &lt;li&gt;이 aggregator를 사용할 때는 별도의 concatenation을 진행하지 않는데, 이는 일종의 skip connection으로 볼 수 있기 때문입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;lstm-aggregator&quot;&gt;LSTM aggregator&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;LSTM 구조를 통해 표현력을 높일 수 있습니다.&lt;/li&gt;
  &lt;li&gt;LSTM 에서도 순서를 상관하지 않기 위해 random하게 permutation을 통해 계산합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;pooling-aggregator&quot;&gt;Pooling aggregator&lt;/h3&gt;

\[\text{AGGREGATE}^{\text{pool}}_k = \max(\{\sigma(\mathbf{W}_{\text{pool}}\mathbf{h}^{k}_{u_i}+b), \forall u_i \in \mathcal{N}(v)\})\]

&lt;h1 id=&quot;4-experiment&quot;&gt;4. Experiment&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;3가지 benchmart tasks에 대해 실험을 진행했습니다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GraphSAGE/table1.png&quot; width=&quot;300px&quot; class=&quot;center&quot; /&gt;&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;GraphSAGE가 다른 방법보다 더 좋은 성능을 보입니다.&lt;/li&gt;
      &lt;li&gt;속도측면에서도 효과적이며, 이웃의 수가 증가함에 따라 속도와 성능 둘다 증가합니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;5-therotical-analysis&quot;&gt;5. Therotical analysis&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;조금 더 보완 후 내용을 추가하겠습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;6-conclusion&quot;&gt;6. Conclusion&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;unseen node의 임베딩을 효과적으로 만드는 inductive한 방법을 제안했습니다.&lt;/li&gt;
  &lt;li&gt;3개의 데이터셋에 대해 SOTA 성능을 보입니다.&lt;/li&gt;
  &lt;li&gt;하지만 성능과 샘플 수에 따른 trade-off가 존재합니다.&lt;/li&gt;
  &lt;li&gt;추후에는 non-uniform하게 샘플링하는 방법을 제안할 예정.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 29 Jun 2022 10:41:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/Inductive-Representation-Learning-on-Large-Graphs/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/Inductive-Representation-Learning-on-Large-Graphs/</guid>
        
        <category>GraphSAGE</category>
        
        
      </item>
    
      <item>
        <title>Graph Attention Network</title>
        <description>&lt;p&gt;안녕하세요, 가짜연구소 Groovy Graph 팀의 김주연입니다. 이 글은, ‘&lt;a href=&quot;https://arxiv.org/abs/1710.10903&quot;&gt;Graph Attention Network&lt;/a&gt;’ 
논문을 읽고, 정리한 글 입니다. 논문을 읽고, 정리한 글 입니다.&lt;/p&gt;

&lt;p&gt;이 글은 Reference 자료들을 참고하여 정리하였음을 먼저 밝힙니다. 혹시 내용중 잘못된 점이나 보완할 점 있다면 댓글로 알려주시면 감사하겠습니다. 그럼 시작하겠습니다.&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;목차&quot;&gt;목차&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#들어가기_앞서&quot;&gt;들어가기 앞서&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#ABSTRACT&quot;&gt;ABSTRACT&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#GAT_ARCHITECTURE&quot;&gt;GAT ARCHITECTURE&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#EVALUATION&quot;&gt;EVALUATION&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#CONCLUSIONS&quot;&gt;CONCLUSIONS&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;들어가기-앞서&quot;&gt;들어가기 앞서&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Graph Neural Networks의 흐름(&lt;/strong&gt;A Comprehensive Survey on Graph Neural Networks, 2019&lt;strong&gt;) [1]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;그리드 구조에서 CNN은 좋은 성능(semantic segmentation, machine translation) 
→ 학습된 파라미터를 local filter에 효율적으로 재사용 가능&lt;/li&gt;
  &lt;li&gt;하지만, 많은 구조들이 그리드 구조로 되어있지 않고 주로 &lt;strong&gt;그래프의 형태&lt;/strong&gt;로 표현 (3D meshes, social networks, telecommunication networks, biological networks or brain connectomes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/1.png&quot; width=&quot;500px&quot; /&gt;
&lt;img src=&quot;/graph/files/posts/GAT/2.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spectral approaches&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;그래프를 spectral 표현으로 인식, context of node classification에 성공적으로 적용(e.g. &lt;strong&gt;GCN&lt;/strong&gt;)
    &lt;ol&gt;
      &lt;li&gt;그래프 라플라시안의 eigendecomposition을 계산함으로써 푸리에 도메인 안에서 convolution 연산&lt;/li&gt;
      &lt;li&gt;Smooth coefficients의 spectral filter의 parameterization도입&lt;/li&gt;
      &lt;li&gt;그래프 라플라시안의 Chebyshev expansion 도입&lt;/li&gt;
      &lt;li&gt;마지막으로, 각 노드 주변의 1-hop 이웃에서 필터가 작동하도록 제한하여 방법 단순화&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;한계 : 학습된 필터는 그래프 구조에 의존하는 라플라시안 eigenbasis에 의존 → 특정 구조에 의해서 훈련된 모델은 구조가 다른 그래프에 적용 불가&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Non-spectral approaches&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Convolution 을 직접 그래프에 적용, Central node와 그 이웃 노드들 간의 관계 모델링&lt;/li&gt;
  &lt;li&gt;각각의 node degree를 위한 weight matrix를 학습하는 방식
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;GraphSAGE&lt;/strong&gt;
  Inductive 방식으로 노드의 representations을 계산하는 방식, 각 노드의 &lt;strong&gt;고정된 크기의 이웃&lt;/strong&gt;을 샘플링 후 특정한 &lt;strong&gt;aggregator&lt;/strong&gt;를 수행(이웃의 특징 벡터를 평균내어 샘플링)하고 결과를 recurrent neural network에 먹이는 방식
  &lt;img src=&quot;/graph/files/posts/GAT/3.png&quot; width=&quot;300px&quot; /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GAT&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Self-attention으로 노드 embedding layer가 정의, 노드의 embedding을 생성할 때 인접한 노드들에 대한 중요도를 계산하여 이를 기반으로 새로운 embedding 생성&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/4.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-attention Mechanism [3]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/5.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Sequence-based task 주로 사용&lt;/li&gt;
  &lt;li&gt;it 이 나타내는 것은?&lt;/li&gt;
  &lt;li&gt;이를 알기 위해서는 같이 입력된 문장 전체 고려&lt;/li&gt;
  &lt;li&gt;어떠한 입력을 이해하기 위해서 같이 입력된 요소들 중에서 무엇을 중요하게 고려햐아 하는가를 수치적으로 나타내는 기법 (가장 관련있는 부분에 초점)&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;del&gt;Attention vs Self-attention&lt;/del&gt;&lt;/p&gt;

    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th&gt;종류&lt;/th&gt;
          &lt;th&gt;설명&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;Attention&lt;/td&gt;
          &lt;td&gt;방향이 정해졌을 때 자신보다 미래에 Input으로 들어갈 단어들은 활용 불가&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Self-attention&lt;/td&gt;
          &lt;td&gt;(Encoder측에서) 존재하는 모든 단어와 동시에 Attention 연산이 일어나기 때문에 문장에서 단어의 위차와 관계 없이 문장 내 모든 단어를 활용하여 연산 진행&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Attention 구조의 흥미로운 전략&lt;/strong&gt;
    &lt;ol&gt;
      &lt;li&gt;효율적인 작동(노드-이웃 쌍 간에 &lt;strong&gt;병렬&lt;/strong&gt; 처리 가능)&lt;/li&gt;
      &lt;li&gt;이웃에게 &lt;strong&gt;weight&lt;/strong&gt;를 설정함으로써 그래프 노드의 중요도 반영 가능&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Inductive&lt;/strong&gt; learning problems(unseen graph에 대해서 모델의 일반화 가능)&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;ABSTRACT&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GAT (Graph Attention networks)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Graph convolutions 기반 이전 연구들의 단점 극복을 위해서 self-attentional layer를 추가한 novel한 neural network 구조&lt;/li&gt;
  &lt;li&gt;이웃들의 features 학습 → 각각의 이웃에 다른 가중치를 부여(costly한 matrix 연산 없이(such as inversion) &amp;amp; 그래프 구조에 상관 없이)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spectral&lt;/strong&gt;-based graph neural network, I&lt;strong&gt;nductive&lt;/strong&gt; &amp;amp; T&lt;strong&gt;ransductive&lt;/strong&gt; problem 모두에 손쉽게 적용 가능 + 두가지 task SOTA 달성&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;gat-architecture&quot;&gt;GAT ARCHITECTURE&lt;/h2&gt;

&lt;h3 id=&quot;21-graph-attentional-layer-4&quot;&gt;&lt;strong&gt;2.1 GRAPH ATTENTIONAL LAYER [4]&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/6.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;파라미터&lt;/th&gt;
      &lt;th&gt;노드의 feature의 set&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Input&lt;/td&gt;
      &lt;td&gt;노드의 feature의 set&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Layer&lt;/td&gt;
      &lt;td&gt;노드 feature의 새로운 set 생산&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;N&lt;/td&gt;
      &lt;td&gt;노드의 수&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;F&lt;/td&gt;
      &lt;td&gt;각 노드의 features의 수&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;F’&lt;/td&gt;
      &lt;td&gt;Hidden layer 길이&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;W&lt;/td&gt;
      &lt;td&gt;Trainable parameter&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;노드에 self-attention 적용, 
Attention coefficients (node i 에 대해 node j의 feature가 갖는 importance) j는 i의 이웃&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/7.png&quot; width=&quot;200px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;다른 노드로부터 coefficients를 쉽게 비교하게 만들기 위해, softmax 함수를 이용&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/8.png&quot; width=&quot;300px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;위의  $a$ = single-layer feedforward neural network weight vector($\overrightarrow a \in \mathbb{R}^{2F’}$)와 LeakyReLU activation으로 정의
   &lt;img src=&quot;/graph/files/posts/GAT/9.png&quot; width=&quot;300px&quot; /&gt;
   &lt;img src=&quot;/graph/files/posts/GAT/10.png&quot; width=&quot;300px&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;이렇게 계산된 Attention score는 Node i 의 중요도를 결정하여 Input data를 다시 정의&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/11.png&quot; width=&quot;300px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;GAT에서는 concat한 임베딩 벡터를 feed forward하는 어텐션 네트워크를 K개 가진다.
(|| = concatenation operation)&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/12.png&quot; width=&quot;300px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;만약 h’ 뒤에 output을 위한 fc layer가 추가되는 것이 아닐 때 취하는 구조
5번과 같이 concat 하는 것이 아니라 K개의 F’ 길이 벡터들을 합해준 뒤 평균&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/13.png&quot; width=&quot;300px&quot; /&gt;
&lt;img src=&quot;/graph/files/posts/GAT/14.png&quot; width=&quot;600px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;22-comparisons-to-related-work&quot;&gt;&lt;strong&gt;2.2 COMPARISONS TO RELATED WORK&lt;/strong&gt;&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;계산이 매우 효율적
    &lt;ul&gt;
      &lt;li&gt;Self-attentional layer → 모든 edge 병렬화 가능&lt;/li&gt;
      &lt;li&gt;Eigendecompositions or similar costly matrix 작동 필요 X&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GCN과 반대로, 우리의 모델은 주변 이웃의 노드에 &lt;em&gt;different importance&lt;/em&gt;를 부여&lt;/li&gt;
  &lt;li&gt;Attention mechanism은 그래프의 모든 Edge에 공유 방식으로 적용, 전체적인 그래프 구조 혹은 모든 노드에 대한 사전 접근에 의존 X
    &lt;ul&gt;
      &lt;li&gt;그래프는 undirected(무방향)가 아니여도 OK (만약  $j → i$ 의 edge가 없다면 $a_{i,j}$를 계산하지 않아도 OK ) → inductive learning을 가능하게 함, 훈련동안 완전히 unseen한 그래프 평가 가능&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;최근의 방식 =  LSTM기반 이웃 aggregator를 사용할 때 가장 좋은 결과
    &lt;ul&gt;
      &lt;li&gt;이것은 neighbor 전체에 걸쳐 일관된 sequential node의 &lt;strong&gt;순서&lt;/strong&gt;를 가정하고, 저자는 무작위로 정렬된 sequence를 일관되고 LSTM에 공급하여 이를 수정&lt;/li&gt;
      &lt;li&gt;우리의 technique은 더 이상 이러한 이슈를 겪지 않음, 순서를 가정할 필요가 없음.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;GAT는 MoNet의 특정 속성으로써 reformulated 될 수 있음
    &lt;ul&gt;
      &lt;li&gt;
        &lt;table&gt;
          &lt;tbody&gt;
            &lt;tr&gt;
              &lt;td&gt;pseudo-coordinate function을 setting하여 to be u(x,y) = f(x)&lt;/td&gt;
              &lt;td&gt; &lt;/td&gt;
              &lt;td&gt;f(y)&lt;/td&gt;
            &lt;/tr&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/li&gt;
      &lt;li&gt;그럼에도 불구하고 Monet 인스턴스들과 비교하자면, 우리의 모델은 비슷한 계산을 위해서 노드의 구조적인 속성 보다는 &lt;strong&gt;노드의 features들을 사용&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;evaluation&quot;&gt;EVALUATION&lt;/h2&gt;

&lt;h3 id=&quot;31-datasets&quot;&gt;&lt;strong&gt;3.1 DATASETS&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/15.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Transductive &amp;amp; Inductive 모두에 적용되는 graph benchmark dataset&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;32-state-of-the-art-methods&quot;&gt;3.2 STATE-OF-THE-ART METHODS&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Transductive learning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Label propagation (LP), semi-supervised embedding(SemiEmb), manifold regularization, skip-gram based embeddings(Deep Walk), iterative classification algorithm(ICA), Planetoid, GCNs, graph convolutional model (Chebyshev filters를 활용한), MoNet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inductive learning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GraphSAGE(GraphSAGE-GCN, GraphSAGE-mean, GraphSAGE-LSTM, GraphSAGE-pool)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;33-experimental-setup&quot;&gt;3.3 EXPERIMENTAL SETUP&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Transductive learning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Two-layer GAT model&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;First layer&lt;/th&gt;
      &lt;th&gt;Second layer(classification)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Attention heads&lt;/td&gt;
      &lt;td&gt;K = 8&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Features&lt;/td&gt;
      &lt;td&gt;F’ = 8&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Activation function&lt;/td&gt;
      &lt;td&gt;Exponential linear unit (ELU) nonlinearity&lt;/td&gt;
      &lt;td&gt;softmax&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;ELU&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/16.png&quot; width=&quot;400px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hyperparameter를 Cora dataset에 최적화 시킨 후, Cite-seer dataset에도 재사용&lt;/p&gt;

    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th&gt;Hyperparameter&lt;/th&gt;
          &lt;th&gt;사용여부&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;L2 regularization (⁍ = 0.0005)&lt;/td&gt;
          &lt;td&gt;적용&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Normalized attention coefficients&lt;/td&gt;
          &lt;td&gt;적용&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Dropout(⁍)&lt;/td&gt;
          &lt;td&gt;both layer input에 적용&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Monet의 연구에도 비슷하게, &lt;strong&gt;Pubmed’s trainig dataset&lt;/strong&gt;에 약간의 GAT 구조의 변화 필요, K=8, ouput attention heads, L2 regularization 강화($λ = 0.001$)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inductive learning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Three-layer GAT model&lt;/p&gt;

    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th&gt; &lt;/th&gt;
          &lt;th&gt;First &amp;amp; Second layer&lt;/th&gt;
          &lt;th&gt;Final layer(multi-label classification)&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;Attention heads&lt;/td&gt;
          &lt;td&gt;K = 4&lt;/td&gt;
          &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Features&lt;/td&gt;
          &lt;td&gt;F’ = 256&lt;/td&gt;
          &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Activation function&lt;/td&gt;
          &lt;td&gt;Exponential linear unit (ELU) nonlinearity&lt;/td&gt;
          &lt;td&gt;Sigmoid activation&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hyperparameter&lt;/p&gt;

    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th&gt;Hyperparameter&lt;/th&gt;
          &lt;th&gt;사용여부&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;L2 regularization&lt;/td&gt;
          &lt;td&gt;미적용 (데이터 셋이 크기 때문에)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Dropout&lt;/td&gt;
          &lt;td&gt;미적용&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Skip connection&lt;/td&gt;
          &lt;td&gt;적용(intermediate attentional layer)&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Transductive &amp;amp; Inductive&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;table&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th&gt;Hyperparameter&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td&gt;Glorot initialization&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Minimize cross-entropy(Adam SGD optimizer)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;LR 0.01(Pubmed 0.05)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Early stopping strategy&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;100 epoch&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;34-results&quot;&gt;3.4 RESULTS&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Transductive learning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/17.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;평가 : Mean classification accuracy (표준편차 포함)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inductive learning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/18.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;평가 : Micro averaged F1 score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;→ 4개의 데이터 셋(Trans, Induct)에서 모두 SOTA 달성&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Cora, Citeseer dataset에서 GCN의 성능 개선 → 같은 이웃 노드에 서로 다른 가중치를 적용하는 것이 의미가 있다&lt;/li&gt;
  &lt;li&gt;PPI dataset, best GraphSAGE 모델보다 20.5%나 성능 개선  → Inductive setting에 적용해도 좋은 결과를 보인다는 것을 증명&lt;/li&gt;
  &lt;li&gt;Const-GAT (the identical architecture with constant attention mechanism)는 서로 다른 이웃에 서로 다른 가중치를 할당한다는 것의 중요성을 의미&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;학습된 features의 표현의 효과를 질적으로 측정 가능, Cora dataset에서 사전 훈련된 GAT 모델의 첫번째 layer에서 추출한 features representation의 시각화 제공&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/graph/files/posts/GAT/19.png&quot; width=&quot;500px&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;conclusions&quot;&gt;CONCLUSIONS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GAT = 그래프 구조에 작동하는 masked self-attentional layer를 활용한 novel convolution-style neural networks&lt;/li&gt;
  &lt;li&gt;Graph attentional layer = 효율적인 계산(matrix operation 필요 없음, 모든 노드를 병렬로 계산 가능), 서로 다른 노드에 서로 다른 가중치 부여 가능, 전체 그래프 구조에 의존하지 않고, spectral-based approaches 사용&lt;/li&gt;
  &lt;li&gt;4가지 dataset에서 좋은 성능 → Transductive and Inductive에서 좋은 성능&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;limitation &amp;amp; Future work&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;더 큰 batch size 를 처리할 수 있도록&lt;/li&gt;
  &lt;li&gt;Attention mechanism을 활용하여 모델 해석 가능성에 대한 분석&lt;/li&gt;
  &lt;li&gt;노드 분류 대신 그래프 분류에도 적용 가능&lt;/li&gt;
  &lt;li&gt;Edge feature를 통합하도록 모델 확장 필요&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;reference&quot;&gt;Reference&lt;/h2&gt;

&lt;p&gt;[1] &lt;a href=&quot;https://tootouch.github.io/research/gnn_summary/&quot;&gt;Graph Neural Network 찍어먹기&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] &lt;a href=&quot;https://untitledtblog.tistory.com/174&quot;&gt;[머신 러닝/딥 러닝] 그래프 어텐션 네트워크 (Graph Attention Network) 구조 및 설명&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] &lt;a href=&quot;https://chioni.github.io/posts/gat/&quot;&gt;Graph Attention Networks (Pytorch)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] &lt;a href=&quot;http://dmqm.korea.ac.kr/activity/seminar/296&quot;&gt;고려대학교 DMQA 연구실&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Jun 2022 13:03:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/GRAPH-ATTENTION-NETWORKS/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/GRAPH-ATTENTION-NETWORKS/</guid>
        
        <category>GAT</category>
        
        
      </item>
    
      <item>
        <title>Distributed Representations of Words and Phrases and their Compositionality</title>
        <description>&lt;p&gt;안녕하세요, 가짜연구소 Groovy Graph 팀의 김은희입니다😀. 첫 포스팅으로는 NeurIPS 2013에 소개된 &lt;a href=&quot;https://pseudo-lab.com/Distributed-Representations-of-Words-and-Phrases-and-their-Compositionality-84ad9b5d2d8b4d69b8d5412a97b1063b&quot;&gt;Distributed Representations of Words and Phrases and their Compositionality&lt;/a&gt; 를 리뷰하도록 하겠습니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;목차&quot;&gt;목차&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;Goal
    &lt;ol&gt;
      &lt;li&gt;기존 Skip-gram의 문제&lt;/li&gt;
      &lt;li&gt;기존 Skip-gram의 보완 방법&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;첫번째 아이디어 : Phrase 기반 학습&lt;/li&gt;
  &lt;li&gt;두번째 아이디어 : Negative sampling(NEG) 사용
    &lt;ol&gt;
      &lt;li&gt;기존 Skip-gram의 objective function&lt;/li&gt;
      &lt;li&gt;기존 Skip-gram의 hierarchical softmax&lt;/li&gt;
      &lt;li&gt;Negative sampling의 도입&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;세번째 아이디어 : Subsampling 사용&lt;/li&gt;
  &lt;li&gt;References&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;goal&quot;&gt;Goal&lt;/h1&gt;
&lt;blockquote&gt;
  &lt;p&gt;Skip-gram의 vector representation quality를 높이자!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/1403.6652&quot;&gt;Skip-gram&lt;/a&gt; 은 ① 단어 기반으로 학습을 진행하고 ② Objective function 안에 softmax function을 사용하며 ③ 말뭉치(corpus) 안에 드물게 등장하는 단어와 빈번하게 등장하는 단어 간의 불균형이 존재하는 특징이 있습니다.&lt;/p&gt;

&lt;h2 id=&quot;기존-skip-gram의-문제&quot;&gt;기존 Skip-gram의 문제&lt;/h2&gt;
&lt;p&gt;이러한 특징들은 크게 세 가지의 문제를 발생시킵니다.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;관용구들을 잘 represent하지 못합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;예를 들어 ‘Air’와 ‘Canada’는 각 단어의 의미상 연관성이 존재하지 않습니다. 하지만 ‘Air Canada’는 항공사 ‘Air Canada’라는 의미를 가지고 있습니다. 단어 기반으로 학습을 진행하는 Skip-gram은 이와 같은 관용구를 잘 represent하지 못합니다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;많은 연산량을 요구합니다.&lt;/li&gt;
  &lt;li&gt;빈번하게 등장하는 단어가 항상 드물게 등장하는 단어보다 중요한 의미를 포함하고 있다고 볼 수는 없습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;물론, 문서에서 빈번하게 등장하는 단어는 문서의 핵심 내용을 담고 있을 수도 있습니다. 하지만 관사 ‘a’나 ‘the’를 생각해 본다면 빈번하게 등장하는 단어가 꼭 중요한 의미를 가지고 있지는 않다는 것을 쉽게 이해할 수 있습니다.&lt;/p&gt;

&lt;h2 id=&quot;기존-skip-gram의-보완-방법&quot;&gt;기존 Skip-gram의 보완 방법&lt;/h2&gt;
&lt;p&gt;그래서 Word2vec은 위의 세 문제를 보완하기 위해 세 가지 전략을 제시합니다.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;구(phrase)를 represent하는 방식으로 학습을 진행&lt;/li&gt;
  &lt;li&gt;Negative sampling 사용&lt;/li&gt;
  &lt;li&gt;Subsampling 사용&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이제 각각의 아이디어들이 구체적으로 무엇을 의미하는지 살펴보겠습니다.&lt;/p&gt;

&lt;h1 id=&quot;첫번째-아이디어--phrase-기반-학습&quot;&gt;첫번째 아이디어 : Phrase 기반 학습&lt;/h1&gt;
&lt;blockquote&gt;
  &lt;p&gt;빈번하게 함께 등장하지만 다른 문맥에서는 드물게 함께 등장하는 단어들의 phrase를 unique token으로 설정하자&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Translating-Embeddings-for-Modeling-Multi-relational-Data/fig_01.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;예를 들어, ‘New York’과 ‘Times’ 은 다른 문맥에서는 함께 잘 등장하지 않지만 ‘New York Times’라는 phrase로는 잘 등장합니다. 이를 바탕으로 score 함수를 다음과 같이 작성합니다.&lt;/p&gt;

\[\text{score}(w_i, w_j)=\frac{\text{count}(w_i, w_j)-\delta}{\text{count}(w_i)\times \text{count}(w_j)}\]

&lt;ul&gt;
  &lt;li&gt;$\delta$ : 할인 계수(discounting coefficient)로 빈번하지 않은 단어들의 조합으로 구성된 phrase를 학습에 사용하는 것을 방지합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이렇게 계산된 score가 일정 threshold를 넘는 phrase들만 학습에 사용하는데요, 학습에 실제 사용된 phrase의 조합들은 &lt;a href=&quot;https://code.google.com/archive/p/word2vec/source/default/source&quot;&gt;링크&lt;/a&gt; 에서 확인할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Translating-Embeddings-for-Modeling-Multi-relational-Data/fig_02.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;이렇게 단어 기반이 아니라 관용구들을 이용한 phrase 기반 학습을 진행하면 representation quality를 더 높일 수 있다고 합니다.&lt;/p&gt;

&lt;h1 id=&quot;두번째-아이디어--negative-sampling-neg-사용&quot;&gt;두번째 아이디어 : Negative sampling (NEG) 사용&lt;/h1&gt;
&lt;h2 id=&quot;기존-skip-gram의-objective-function&quot;&gt;기존 Skip-gram의 objective function&lt;/h2&gt;
&lt;blockquote&gt;
  &lt;p&gt;Target word가 주어졌을 때, context word를 잘 예측하는 일이 문장 전반에 걸쳐 잘 일어나게 하고 싶다&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;\(\max \frac{1}{T}\sum_{t=1}^T\sum_{-c\le j\le c \ \  (j\neq0)}\log P(w_{t+j}|w_t)\)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;$w_t$ : Target word (center word)&lt;/li&gt;
  &lt;li&gt;$w_{t+j}$ : Context word (surrounding word)&lt;/li&gt;
  &lt;li&gt;$c$ : Window size, target word 주위 몇 개의 단어를 context word로 포함할 것인지 범위를 지정하는 역할&lt;/li&gt;
  &lt;li&gt;$T$ : 분석하고자 하는 문장(sequence)의 길이&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Translating-Embeddings-for-Modeling-Multi-relational-Data/fig_03.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Skip-gram 이전에 등장했던 CBOW는 왼쪽처럼 context 단어들이 주어졌을 때 target 단어를 잘 예측하는 task를 수행했습니다. 하지만 Skip-gram은 반대의 task를 수행하는데요, ‘target 단어가 주어졌을 때 context 단어들을 잘 예측하기’를 수행합니다.&lt;/p&gt;

&lt;p&gt;예를 들어 ‘The quick brown fox jumped over the lazy dog’이라는 문장이 있다고 해 보겠습니다. 여기서 target word와 window size를 다음처럼 설정할게요.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Target word $w_t$ : fox&lt;/li&gt;
  &lt;li&gt;Window size $c$ : 2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;그러면 위 문장의 input word와 output word의 조합은 이렇게 생성됩니다.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;(fox, quick)&lt;/li&gt;
  &lt;li&gt;(fox, brown)&lt;/li&gt;
  &lt;li&gt;(fox, jumped)&lt;/li&gt;
  &lt;li&gt;(fox, over)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;기존-skip-gram의-hierarchical-softmax&quot;&gt;기존 Skip-gram의 hierarchical softmax&lt;/h2&gt;
&lt;p&gt;원래 Skip-gram에서 사용하려던 softmax function은 다음과 같습니다.&lt;/p&gt;

\[\max \frac{1}{T}\sum_{t=1}^T\sum_{-c\le j\le c \ \  (j\neq0)}\log P(w_{t+j}|w_t)\]

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;여기서 사용하는 $P(w_{t+j}&lt;/td&gt;
      &lt;td&gt;w_t)$은 0과 1 사이의 확률값으로 나타낼 수 있습니다.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

\[P(W_O|W_I)=\frac{\exp({V'_{w_O}}^TV_{w_I})}{\sum_{w=1}^W\exp({V'_w}^TV_{w_I})}\]

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;이 방식은 objective function을 optimize하기 위해서 $\nabla \log P(W_O&lt;/td&gt;
      &lt;td&gt;W_I)$를 사용합니다. 그런데 이것의 분모를 계산하기 위해서 많은 연산량이 든다는 한계가 생기게 됩니다.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/Translating-Embeddings-for-Modeling-Multi-relational-Data/fig_04.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;이를 극복하기 위해 등장한 것이 hierarchical softmax인데요, 예를 들어 target word가 $w_2$라고 하면 출발지점(root)에서 target word까지 닿는 데 만나는 모든 node들을 내적합니다.&lt;/p&gt;

&lt;p&gt;\(p(w|w_I)=\prod_{j=1}^{L(w)-1}\sigma([n(w,j+1)=\ch(n(w,j)]\cdot {v'_{n(w,j)}}^Tv_{w_I}) \\ \text{where} \\\ [x]=1 \ \ \ \text{if} \ \ x \ \ \text{is true, -1 otherwise}\)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;/li&gt;
  &lt;li&gt;$n$ : node&lt;/li&gt;
  &lt;li&gt;$\ch$ : child node&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;예를 들어 $n(w_2,1)$의 child node가 $n(w_2,2)$와 일치하다면 1, 그렇지 않다면 -1을 부여합니다. 이는 다음의 세 가지 특징을 가집니다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Root에서 leaf까지 가는 경로를 확률 계산에 사용하는 아이디어&lt;/li&gt;
  &lt;li&gt;Binary tree structure 이용 → softmax function 구조(일부/전체 = 확률)를 사용하지 않음 → 연산량 감소&lt;/li&gt;
  &lt;li&gt;Softmax function 대신 sigmoid function $\sigma$를 사용해 확률로 만들어 줌&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;negative-sampling의-도입&quot;&gt;Negative sampling의 도입&lt;/h2&gt;
&lt;blockquote&gt;
  &lt;p&gt;Noise Contrasive Estimation을 일부 단어에만 적용해 연산량을 감소시키자.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Noise Contrastive Eestimation은 무엇일까요? 간단히 말해 실제 data distribution으로부터 얻은 sample과 noise distribution으로부터 얻은 sample을 잘 구분할 수 있도록 하는 것입니다. 하지만 이 때에도 여전히 softmax function을 사용하기 때문에 연산량이 많습니다.&lt;/p&gt;

&lt;p&gt;반면 Negative sampling은 전체 단어들을 분모로 사용해야 하는 softmax 구조를 사용하지 않습니다. 대신 일부 단어를 sampling해서 학습한 다음 전체에 대해 근사하는 방식을 사용함으로써 연산량이 줄어들게 됩니다.
\(\log \sigma({v'_{w_O}}^Tv_{w_I})+\sum_{i=1}^k \mathbb E_{w_i\sim P_n(w)}[\log \sigma({-v'_{w_i}}^Tv_{w_I})]\)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;$P_n(w_i)=\frac{f(w_i)^\frac{3}{4}}{\sum_{j=0}^n(f(w_i))^\frac{3}{4}}$ : window size 밖의 단어가 negative sample로 포함될 확률&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;그러면 다시 단어를 sampling하는 기준에 대해 생각해 보아야 하는데요, 논문에서는 지정한 window size $c$ 범위에서 정답 단어(positive) + window size에 등장하지 않는 단어(negative) 의 조합으로 sample을 뽑는다고 합니다. 참고로 작은 dataset에서는 5-20개, 큰 dataset에서는 2-5개의 negative sample을 뽑습니다.&lt;/p&gt;

&lt;h1 id=&quot;세번째-아이디어--subsampling-사용&quot;&gt;세번째 아이디어 : Subsampling 사용&lt;/h1&gt;
&lt;blockquote&gt;
  &lt;p&gt;빈번하게 등장한다고 해서 항상 더 정보가 풍부한 것은 아니다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;앞서 말씀드린 것처럼 $\text{count}(\text{france}, \text{paris}) &amp;lt; \text{count}(\text{france}, \text{the})$ 라고 해서 단순히 the가 france에 더 어울리는 context word라고 보기에는 무리가 있습니다. 오히려 (france, paris)의 조합에 더 많은 benefit을 부여하는 것이 타당합니다. 그래서 논문에서는 마지막으로 빈번하게 등장하는 단어들과 드물게 등장하는 단어들 사이의 불균형을 해소하고자 하였습니다.
\(P(w_i)=1-\sqrt{\frac{t}{f(w_i)}}\)&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;$P(w_i)$ : 특정 단어 $w_i$가 sampling될 확률&lt;/li&gt;
  &lt;li&gt;$f(w_i)$ : frequency of word&lt;/li&gt;
  &lt;li&gt;$t$ : threshold, 대략 $10^{-5}$&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;많이 등장하는 단어($f(w_i)$가 큰 단어)는 subsampling 과정에서 탈락될(discarded) 확률이 높아지게 됩니다. 이는 학습률과 학습 속도의 상승으로 이어진다고 논문에서 소개합니다.&lt;/p&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://forbetterdays.tistory.com/97&quot;&gt;https://forbetterdays.tistory.com/97&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/tutorials/word2vec/&quot;&gt;https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/tutorials/word2vec/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://velog.io/@xuio/NLP-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Distributed-Representations-of-Words-and-Phrases-and-their-Compositionality&quot;&gt;https://velog.io/@xuio/NLP-논문리뷰-Distributed-Representations-of-Words-and-Phrases-and-their-Compositionality&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/1309.4168&quot;&gt;Exploiting Similarities among Languages for Machine Translation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 12 Apr 2022 00:00:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/Distributed-Representations-of-Words-and-Phrases-and-their-Compositionality/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/Distributed-Representations-of-Words-and-Phrases-and-their-Compositionality/</guid>
        
        <category>word2vec</category>
        
        
      </item>
    
      <item>
        <title>Translating Embeddings for Modeling Multi-relational Data</title>
        <description>&lt;h3 id=&quot;목차&quot;&gt;목차&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;Objective&lt;/li&gt;
  &lt;li&gt;Dataset&lt;/li&gt;
  &lt;li&gt;Evaluation Metric&lt;/li&gt;
  &lt;li&gt;Method&lt;/li&gt;
  &lt;li&gt;Result&lt;/li&gt;
  &lt;li&gt;Limit&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;objective&quot;&gt;Objective&lt;/h1&gt;
&lt;p&gt;Entity, relation을 embedding 할 수 있어야한다.&lt;/p&gt;

&lt;p&gt;기존 방법에 비해 학습하기 쉬워야하며 파라미터 갯수가 적어야 한다.&lt;/p&gt;

&lt;p&gt;큰 데이터셋에 대해 scalable 해야합니다.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1058&quot; alt=&quot;스크린샷 2022-05-05 오후 1 30 27&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166863816-00e5b020-705c-4294-9b3b-d380aba83d39.png&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;dataset&quot;&gt;Dataset&lt;/h1&gt;
&lt;p&gt;Freebase, WordNet 데이터셋에서 사용되는 Relation&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;293&quot; alt=&quot;스크린샷 2022-05-05 오후 1 32 26&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166863956-895240b6-3d26-4c52-884d-bb801fc7e520.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;실제 Freebase 데이터셋의 Entity와 Relation 예시&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;703&quot; alt=&quot;스크린샷 2022-0![Uploading 스크린샷 2022-05-05 오후 1.35.08.png…]() 5-05 오후 1 33 09&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166863991-c5de4511-a3a2-439f-a3c5-6b6365cbe477.png&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;evaluation-metric&quot;&gt;Evaluation Metric&lt;/h1&gt;
&lt;p&gt;벡터의 합과 벡터간의 거리(distance / dissimilarity)가 사용됩니다.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;745&quot; alt=&quot;스크린샷 2022-05-05 오후 1 35 45&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166864170-2c6050e7-c63a-4f3d-aabb-aacb1e8547a2.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;rank&quot;&gt;rank&lt;/h2&gt;

&lt;p&gt;거리값을 기준을 벡터들을 정렬할 수 있고 그 중 테스트셋의 정답 벡터의 순위로 ‘rank’를 구할 수 있습니다.&lt;/p&gt;

&lt;p&gt;‘rank’의 평균값을 통해 테스트셋에 대한 ‘mean-rank’를 구할수 있습니다.&lt;/p&gt;

&lt;p&gt;또한 상위 10 순위에 포함되는지 유무를 통해 ‘hits@10(%)’ 비율을 구할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;340&quot; alt=&quot;스크린샷 2022-05-05 오후 1 43 40&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166864704-27d53b55-49c1-4dcc-a4c1-be4109158a70.png&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;method&quot;&gt;Method&lt;/h1&gt;

&lt;p&gt;&lt;img width=&quot;555&quot; alt=&quot;스크린샷 2022-05-05 오후 1 44 08&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166864730-835f140f-af21-4d84-8c08-38c43797fadd.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;algorithm&quot;&gt;Algorithm&lt;/h2&gt;

&lt;p&gt;&lt;img width=&quot;562&quot; alt=&quot;스크린샷 2022-05-05 오후 1 44 23&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166864739-7e025561-34f4-4d8e-96cb-331c2a7a9fe9.png&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;result&quot;&gt;Result&lt;/h1&gt;

&lt;p&gt;Link prediction Task에서 이전의 방법에 비해 좋은 성능을 보였습니다.&lt;/p&gt;

&lt;p&gt;큰 데이터셋(FB1M)에 대해서도 동작하였고 좋은 성능을 보입니다.&lt;/p&gt;

&lt;p&gt;모델의 파라미터의 갯수도 적은 편(0.81M)입니다. 기존 방법들과 비교했을 때 Unstructured를 제외하면 가장 적습니다.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;664&quot; alt=&quot;스크린샷 2022-05-05 오후 1 51 18&quot; src=&quot;https://user-images.githubusercontent.com/25244851/166865288-bc85c481-2d22-4ef2-85fa-b1795667b23d.png&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 29 Mar 2022 00:00:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/Translating-Embeddings-for-Modeling-Multi-relational-Data/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/Translating-Embeddings-for-Modeling-Multi-relational-Data/</guid>
        
        <category>TransE</category>
        
        
      </item>
    
      <item>
        <title>The PageRank Citation Ranking: Bringing Order to the Web</title>
        <description>&lt;p&gt;ㅤ안녕하세요, 가짜연구소 Groovy Graph 팀의 한수민입니다. 이 글은, ‘&lt;a href=&quot;http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf&quot;&gt;The PageRank Citation Ranking Bringing Order to the Web&lt;/a&gt;’ 논문을 읽고, 정리한 글 입니다.&lt;/p&gt;

&lt;p&gt;ㅤ이 글은 Reference 자료들을 참고하여 정리하였음을 먼저 밝힙니다. 혹시 내용중 잘못된 점이나 보완할 점 있다면 댓글로 알려주시면 감사하겠습니다. 그럼 시작하겠습니다.&lt;/p&gt;

&lt;!--more--&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;목차&quot;&gt;목차&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Reference&lt;/li&gt;
  &lt;li&gt;PageRank의 배경&lt;/li&gt;
  &lt;li&gt;PageRank 정의 &amp;amp; 개념
    &lt;ol&gt;
      &lt;li&gt;웹 그래프&lt;/li&gt;
      &lt;li&gt;PageRank란?&lt;/li&gt;
      &lt;li&gt;PageRank에 대한 직관&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;Simple PageRank
    &lt;ol&gt;
      &lt;li&gt;투표 (vote) 관점&lt;/li&gt;
      &lt;li&gt;random walk 관점&lt;/li&gt;
      &lt;li&gt;관점 정리&lt;/li&gt;
      &lt;li&gt;Simple PageRank 계산&lt;/li&gt;
      &lt;li&gt;Simple PageRank의 문제점&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;del&gt;Simple&lt;/del&gt; PageRank
    &lt;ol&gt;
      &lt;li&gt;Spider trap과 Dead end 문제 해결&lt;/li&gt;
      &lt;li&gt;&lt;del&gt;Simple&lt;/del&gt; PageRank 계산 예시&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;PageRank의 결과
    &lt;ol&gt;
      &lt;li&gt;Convergence Properties&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;+ 질문&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;1-reference&quot;&gt;1 Reference&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://web.stanford.edu/class/cs224w/slides/04-pagerank.pdf&quot;&gt;CS224W 4. Link Analysis: PageRank&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.boostcourse.org/ai211&quot;&gt;그래프와 추천 시스템&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://youtu.be/2CWnZfBSj0Q&quot;&gt;[Paper Review] The PageRank Citation Ranking: Bringing Order to the Web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;2-pagerank의-배경&quot;&gt;2 PageRank의 배경&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;구글 이전의 검색 엔진은, 사용자가 입력한 키워드에 의존하여 웹 페이지를 반환했습니다.&lt;/li&gt;
  &lt;li&gt;하지만 이러한 키워드에 의존하는 검색 엔진에는 취약점이 있습니다. 악성 웹 페이지들이 검색 엔진을 속여, 사용자의 검색 키워드에 상관 없이, 사용자들을 자신의 페이지로 오게 만들기 쉬웠습니다.
    &lt;ul&gt;
      &lt;li&gt;(e.g.) “운동화” 판매자가 자신의 페이지에, 자신의 “운동화” 판매와 상관 없는 내용들을 (e.g., 영화, 음악, …), 보이지 않게 (바탕색과 똑같은 색깔의 글씨로) 가득 적어놓으면, 검색 엔진은 “영화”를 키워드로 검색에도 “운동화” 판매 페이지를 보여줍니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;구글은, 검색 엔진의 품질을 향상시키기 위해, &lt;strong&gt;PageRank&lt;/strong&gt; 기술을 도입했습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;3-pagerank-정의--개념&quot;&gt;3 PageRank 정의 &amp;amp; 개념&lt;/h1&gt;

&lt;h2 id=&quot;31-웹-그래프&quot;&gt;3.1 웹 그래프&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;웹은 &lt;strong&gt;directed graph&lt;/strong&gt;로 표현할 수 있습니다.
    &lt;ul&gt;
      &lt;li&gt;node: 웹 페이지&lt;/li&gt;
      &lt;li&gt;edge: 하이퍼링크&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_01.png&quot; alt=&quot;그림 1 (출처: 논문 The PageRank Citation Ranking: Bringing Order to the Web)&quot; width=&quot;300px&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;32-pagerank란&quot;&gt;3.2 PageRank란?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;구하고 싶은, 웹 페이지의 점수(중요성, 신뢰성)를 &lt;strong&gt;rank&lt;/strong&gt;라고 하겠습니다.&lt;/li&gt;
  &lt;li&gt;PageRank는 &lt;strong&gt;웹 그래프&lt;/strong&gt;를 이용하여 웹 페이지의 rank를 계산하는 알고리즘입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;PageRank의 가정 (underlying assumption)
    &lt;ul&gt;
      &lt;li&gt;참조가 많이 된 페이지는 참조가 적게 된 페이지보다 중요합니다.&lt;/li&gt;
      &lt;li&gt;중요한 페이지가 참조한 페이지는 중요합니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;33-pagerank에-대한-직관&quot;&gt;3.3 PageRank에 대한 직관&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;그림 2에서,
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;웹 페이지 B&lt;/strong&gt;의 rank는 가장 높습니다.
        &lt;ul&gt;
          &lt;li&gt;B가 다른 웹 페이지들로부터 참조가 많이 됐기 때문입니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;웹 페이지 C&lt;/strong&gt;의 rank는 2번째로 높습니다.
        &lt;ul&gt;
          &lt;li&gt;C는 참조가 1번 밖에 안 됐지만, rank가 가장 높은 B가 참조하고 있기 때문에, C의 rank도 높습니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;보라색 페이지&lt;/strong&gt;들은 참조가 없지만, PageRank의 어떤 기법(teleport) 때문에, rank가 0이 아닙니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/PageRanks-Example.svg/1920px-PageRanks-Example.svg.png&quot; alt=&quot;그림 2 (출처: Wikipedia - PageRank)&quot; width=&quot;400px&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;4-simple-pagerank&quot;&gt;4 Simple PageRank&lt;/h1&gt;

&lt;h2 id=&quot;41-투표-vote-관점&quot;&gt;4.1 투표 (vote) 관점&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;PageRank는 투표를 통해 중요한 웹 페이지를 찾습니다.&lt;/li&gt;
  &lt;li&gt;이 때, 웹 페이지 (node)는 투표를 받는 대상이고, 투표는 하이퍼링크 (edge)를 통해 이루어집니다.
    &lt;ul&gt;
      &lt;li&gt;(e.g.) 그림 3에서, “I teach a class on Networks.” 페이지는 하이퍼링크를 통해 “CS224W: Classes are in the Gates building” 페이지에 투표했다고 생각할 수 있습니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_02.png&quot; alt=&quot;그림 3 (출처: CS224W 4. Link Analysis: PageRank)&quot; width=&quot;300px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;다음과 같이 표현을 정리할 수 있습니다.
    &lt;ul&gt;
      &lt;li&gt;웹 페이지 A가 웹 페이지 B를 참조한다&lt;/li&gt;
      &lt;li&gt;== 웹 페이지 A에서 웹 페이지 B로 가는 하이퍼링크가 있다&lt;/li&gt;
      &lt;li&gt;== 웹 페이지 B에는 웹 페이지 A로부터 오는 backlink (in-edge, in-link)가 있다&lt;/li&gt;
      &lt;li&gt;== 웹 페이지 A가 웹 페이지 B를 투표했다&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;== 웹 페이지 A의 작성자가 웹 페이지 B를 신뢰할 수 있다고 판단했다&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;즉, 어떤 페이지에 backlink (in-edge, in-link)가 많을수록, 그 페이지를 신뢰할 수 있다고 말할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;PageRank의 투표 방식은 다음과 같습니다.
    &lt;ol&gt;
      &lt;li&gt;모든 웹 페이지는 투표 점수(rank)를 갖고 있습니다.
        &lt;ul&gt;
          &lt;li&gt;보통, 맨 처음에는 모두 같은 투표 점수를 갖고 있습니다.&lt;/li&gt;
          &lt;li&gt;우리는 중요하고, 신뢰가 가는 페이지가 다른 페이지들보다 투표 점수(rank)가 높기를 바랍니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;웹 페이지는 자신이 갖고 있는 투표 점수를, 투표하려는 웹 페이지에게 똑같이 나누어서 투표합니다.
        &lt;ul&gt;
          &lt;li&gt;== 자신이 갖고 있는 투표 점수를, out-degree로 나누어, 나눠진 점수가 씌여진 종이를, out-edge가 향하는 웹 페이지에게 보냅니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;투표가 끝난 뒤, 각 웹 페이지는 자신이 받은 투표 점수을 모두 더하여, 자신의 새로운 투표 점수를 계산합니다.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.) 투표 점수 계산 방법 (그림 4)
    &lt;ul&gt;
      &lt;li&gt;페이지 $j$는, 자신의 투표 점수 (rank) $r_j$를 out-degree 수로 나눈 $\displaystyle \frac{r_j}{3}$를, out-edge가 가리키는 페이지에게 보냅니다.&lt;/li&gt;
      &lt;li&gt;페이지 $j$의 새로운 투표 점수 (rank)는, in-edge를 통해 받은 투표 점수들의 합이므로, $\displaystyle r_j = \frac{r_i}{3} + \frac{r_k}{4}$ 가 됩니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_03.png&quot; alt=&quot;그림 4 (출처: CS224W 4. Link Analysis: PageRank)&quot; width=&quot;200px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;단순하게 각 페이지들의 backlink 수를 세지 않고, 위와 같은 투표 방식을 도입한 이유는, 악성 웹 페이지들이 서로를 참조하여, backlink 수를 높게 만드는 조작을 하지 못하게 하기 위함입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;각 웹 페이지의 rank의 정의는 다음과 같습니다.
    &lt;ul&gt;
      &lt;li&gt;$d_i$: out-degree&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

\[r_j = \sum_{i \rightarrow j}^{} \frac{r_i}{d_i}\]

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;우리가 구하고 싶은 것이 웹 페이지의 rank인데, rank를 구하기 위해 rank를 사용하는 것이 이상하게 보일 수 있습니다.
    &lt;ul&gt;
      &lt;li&gt;이 부분은 “4.4 Simple PageRank의 계산”에서 다루도록 하겠습니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;42-random-walk-관점&quot;&gt;4.2 random walk 관점&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;random walk를 통해, 웹을 서핑하는 웹 서퍼가 있다고 가정합시다.&lt;/li&gt;
  &lt;li&gt;random walk를 통해, 웹을 서핑하는 웹 서퍼의 행동은 다음과 같습니다.
    &lt;ul&gt;
      &lt;li&gt;웹 서퍼는, 현재 웹 페이지에 있는 여러 하이퍼링크 중 하나를 uniform한 확률로 선택해 이동합니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$p (t)$ 라는 벡터가 있다고 가정합시다.
    &lt;ul&gt;
      &lt;li&gt;$p (t)$의 $i$번째 값 $p_i (t)$은, 웹 서퍼가 $t$ 번째 방문한 웹 페이지가 웹 페이지 $i$일 확률입니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;$p (t)$ 는 웹 페이지에 대한 확률 분포가 됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;$p (t)$로부터 $p (t+1)$을 계산할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

\[p_j (t+1) = \sum_{i \rightarrow j}^{} \bigg ( p_i(t) \times \frac{1}{d_i} \bigg ) = \sum_{i \rightarrow j}^{} \frac{p_i (t)}{d_i}\]

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;웹 서퍼가 이 과정을 무한히 반복하고 나면, 즉 $t$가 무한히 커지면, 확률 분포 $p(t)$는 수렴하게 됩니다.
    &lt;ul&gt;
      &lt;li&gt;다시 말하면,  $p(t) = p(t+1) = p$ 가 성립하게 됩니다.&lt;/li&gt;
      &lt;li&gt;수렴한 확률 분포 $p$는 stationary distribution이라고 부릅니다.&lt;/li&gt;
      &lt;li&gt;이렇게 되면, 식을 다음과 같이 바꿀 수 있습니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

\[p_j (t+1) = \sum_{i \rightarrow j}^{} \frac{p_i (t)}{d_i} \quad\quad \Rightarrow \quad\quad p_j = \sum_{i \rightarrow j}^{} \frac{p_i}{d_i}\]

&lt;h2 id=&quot;43-관점-정리&quot;&gt;4.3 관점 정리&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;투표 관점에서 정의한 rank
    &lt;ul&gt;
      &lt;li&gt;== random walk 관점에서의 stationary distribution&lt;/li&gt;
      &lt;li&gt;(== 논문 수식)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;투표 관점에서 정의한 rank&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;$d_i$: out-degree&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

\[r_j = \sum_{i \rightarrow j}^{} \frac{r_i}{d_i}\]

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;random walk 관점에서 정의한 stationary distribution&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

\[p_j = \sum_{i \rightarrow j}^{} \frac{p_i}{d_i}\]

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;논문 수식&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;$u$: 웹 페이지&lt;/li&gt;
      &lt;li&gt;$B_u$: 페이지 $u$를 가르키는 페이지의 집합&lt;/li&gt;
      &lt;li&gt;$F_u$: 페이지 $u$가 가르키는 페이지의 집합&lt;/li&gt;
      &lt;li&gt;$N_u = |F_u|$: 페이지 $u$가 가르키는 페이지의 수 (== 페이지 $u$에서 나가는 edge 수)&lt;/li&gt;
      &lt;li&gt;$c$: normalization factor (모든 웹 페이지의 총 rank가 일정하도록)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

\[R(u) = c \sum_{v \in B_u}^{} \frac{R(v)}{N_v}\]

&lt;h2 id=&quot;44-simple-pagerank의-계산&quot;&gt;4.4 Simple PageRank의 계산&lt;/h2&gt;

&lt;h3 id=&quot;441-simple-pagerank의-matrix-formulation&quot;&gt;4.4.1 Simple PageRank의 matrix formulation&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;PageRank 식은 다음과 같이 matrix 형태로 나타낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

\[r = M \cdot r\]

&lt;ul&gt;
  &lt;li&gt;$r$ : rank 벡터&lt;/li&gt;
  &lt;li&gt;$M$ : column stochastic adjacency matrix
    &lt;ul&gt;
      &lt;li&gt;$N_u = |F_u|$: 페이지 $u$가 가르키는 페이지의 수 (== 페이지 $u$에서 나가는 edge 수)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

\[M_{u, v} = \begin{cases} \frac{1}{N_u}, &amp;amp; \text{if there is an edge from} \; v \; \text{to} \; u \\ 0, &amp;amp; \text{otherwise} \end{cases}\]

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;예제를 통해서 자세히 알아보도록 하겠습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_04.png&quot; alt=&quot;그림 5 (출처: CS224W 4. Link Analysis: PageRank)&quot; width=&quot;250px&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;각 페이지가 얻는 rank를 연립 방정식으로 표현해보겠습니다.
    &lt;ul&gt;
      &lt;li&gt;$\displaystyle r_a = \frac{1}{2} r_a + \frac{1}{2} r_b$&lt;/li&gt;
      &lt;li&gt;$\displaystyle r_b = \frac{1}{2} r_a + r_c$&lt;/li&gt;
      &lt;li&gt;$\displaystyle r_c = \frac{1}{2} r_b$&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;(1)의 연립 방정식을 matrix 형태로 나타내보겠습니다.&lt;/p&gt;

\[\begin{bmatrix}
 r_a \\
 r_b \\ 
 r_c \\
 \end{bmatrix}
 = 
 \begin{bmatrix}
 \frac{1}{2} &amp;amp; \frac{1}{2} &amp;amp; 0\\
 \frac{1}{2} &amp;amp; 0 &amp;amp; 1\\ 
 0 &amp;amp; \frac{1}{2} &amp;amp; 0 \\
 \end{bmatrix}
 \begin{bmatrix}
 r_a \\
 r_b \\ 
 r_c \\
 \end{bmatrix}\]
  &lt;/li&gt;
  &lt;li&gt;(2)의 matrix 식을 간단하게 $r = Mr$로 나타낼 수 있습니다.
    &lt;ul&gt;
      &lt;li&gt;이 때, $M$은 column stochastic matrix입니다.
        &lt;ul&gt;
          &lt;li&gt;column stochastic matrix는
            &lt;ul&gt;
              &lt;li&gt;matrix의 모든 값들이 음수가 아니여야 합니다.&lt;/li&gt;
              &lt;li&gt;각 column의 합이 1입니다.&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

\[r = 
\begin{bmatrix}
r_a \\
r_b \\ 
r_c \\
\end{bmatrix}
,

\quad

M
= 
\begin{bmatrix}
\frac{1}{2} &amp;amp; \frac{1}{2} &amp;amp; 0\\
\frac{1}{2} &amp;amp; 0 &amp;amp; 1\\ 
0 &amp;amp; \frac{1}{2} &amp;amp; 0 \\
\end{bmatrix}\]

&lt;h3 id=&quot;442-simple-pagerank의-eigenvector-formulation&quot;&gt;4.4.2 Simple PageRank의 eigenvector formulation&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;$r = M \cdot r$ 식을 다시 쓰면,  $M \cdot r = 1 \cdot r$ 이 됩니다.&lt;/li&gt;
  &lt;li&gt;$M \cdot r = 1 \cdot r$ 식을 보면,
    &lt;ul&gt;
      &lt;li&gt;$M$의 eigenvalue가 1이고, eigenvector가 $r$이라고 할 수있습니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;eigenvector $r$을 구하기 위해, power iteration을 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;443-power-iteration&quot;&gt;4.4.3 Power Iteration&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;rank 계산에는 power iteration을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;power iteration은 3단계로 구성됩니다.
    &lt;ol&gt;
      &lt;li&gt;각 웹 페이지 $i$의 rank $r_{i}^{(0)}$를 동일하게 $\displaystyle r_{i}^{(0)} = \frac{1}{\text{웹 페이지의 수}}$로 초기화합니다.&lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;아래 식을 이용하여, 각 웹 페이지의 rank를 갱신합니다.&lt;/p&gt;

\[r_{j}^{(t+1)} = \sum_{i \rightarrow j}^{} \frac{r_i^{(t)}}{d_i}\]
      &lt;/li&gt;
      &lt;li&gt;rank가 수렴하면 ($r^{(t)} \approx r^{(t+1)}$) 종료하고, 아니면 (2)로 돌아갑니다.
        &lt;ul&gt;
          &lt;li&gt;rank가 수렴하면, $r^{(t)} \approx r^{(t+1)}$을 rank 벡터로 사용합니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;45-simple-pagerank의-문제점&quot;&gt;4.5 Simple PageRank의 문제점&lt;/h2&gt;

&lt;h3 id=&quot;451-power-iteration은-수렴을-보장하나요-spider-trap-문제&quot;&gt;4.5.1 power iteration은 수렴을 보장하나요? (Spider trap 문제)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;power iteration은 수렴을 보장하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;spider trap&lt;/strong&gt;은 들어오는 edge는 있지만, 나가는 edge는 없는 &lt;strong&gt;node 집합&lt;/strong&gt;을 말합니다.&lt;/li&gt;
  &lt;li&gt;spider trap에 의해서 power iteration은 수렴하지 않는 문제가 발생합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.) spider trap 문제가 발생하는 경우 (그림 6)
    &lt;ul&gt;
      &lt;li&gt;iteration 1과 iteration 4의 rank는 동일합니다. 따라서, rank가 수렴하지 않고, 무한히 반복됩니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_05.png&quot; alt=&quot;그림 6 (출처: 논문 The PageRank Citation Ranking: Bringing Order to the Web)&quot; width=&quot;400px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;해결 방법은 아래에서 알아보도록 하겠습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;452-합리적인-rank로-수렴하는-것을-보장하나요-dead-end-dangling-link-문제&quot;&gt;4.5.2 “합리적인” rank로 수렴하는 것을 보장하나요? (Dead end, Dangling link 문제)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;power iteration은 “합리적인” rank로의 수렴을 보장하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;dead end&lt;/strong&gt;는 들어오는 edge는 있지만, 나가는 edge는 없는 &lt;strong&gt;node&lt;/strong&gt;를 말합니다.&lt;/li&gt;
  &lt;li&gt;dead end에 의해서 power iteration이 합리적인 rank로 수렴하지 않는 문제가 발생합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.) dead end 문제가 발생하는 경우 (그림 7)
    &lt;ul&gt;
      &lt;li&gt;모든 node의 rank가 모두 0으로 수렴합니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_06.png&quot; alt=&quot;그림 7 (출처: CS224W 4. Link Analysis: PageRank)&quot; width=&quot;350px&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;해결 방법은 밑에서 알아보도록 하겠습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;논문에서는 dead end를 모두 제거한 후에, rank를 계산했습니다.&lt;/li&gt;
  &lt;li&gt;논문의 &lt;strong&gt;2.7 Dangling Links&lt;/strong&gt;을 보면, 다음과 같이 나와있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;dangling links는 다른 페이지의 rank에 직접적인 영향을 미치지 않기 때문에, 모든 PageRank가 계산될 때까지 시스템에서 dangling links를 제거하기만 하면 됩니다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;제거된 dangling links와 같은 페이지에 있는 다른 edge의 normalization은 약간 변하지만, 큰 영향은 없을 것입니다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;5-simple-pagerank&quot;&gt;5 &lt;del&gt;Simple&lt;/del&gt; PageRank&lt;/h1&gt;

&lt;h2 id=&quot;51-spider-trap과-dead-end의-해결-방법&quot;&gt;5.1 Spider trap과 Dead end의 해결 방법&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;spider trap과 dead end 문제를 해결하는 방법은 &lt;strong&gt;teleport (순간 이동, 점프)&lt;/strong&gt; 입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;random walk 관점에서, 웹을 서핑하는 웹 서퍼의 행동을 다음과 같이 수정합니다.
    &lt;ol&gt;
      &lt;li&gt;현재 웹 페이지에 하이퍼링크가 없다면, 랜덤한 웹 페이지로 teleport 합니다.&lt;/li&gt;
      &lt;li&gt;현재 웹 페이지에 하이퍼링크가 있다면,
        &lt;ul&gt;
          &lt;li&gt;$\alpha$의 확률로, 하이퍼링크 중 하나를 uniform한 확률로 선택해 이동합니다.&lt;/li&gt;
          &lt;li&gt;$(1 - \alpha)$의 확률로, 랜덤한 웹 페이지로 teleport 합니다.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;teleport를 하는 경우엔, teleport 할 random한 웹 페이지는 전체 웹 페이지들 중에 하나를 uniform한 확률로 선택합니다.&lt;/li&gt;
  &lt;li&gt;teleport에 의해서, spider trap이나 dead end에 갇히는 일이 없어집니다.&lt;/li&gt;
  &lt;li&gt;$\alpha$를 damping factor라고 부르며, $[0.8,\; 0.9]$ 정도를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;teleport를 도입함으로써, rank의 계산 식은 아래와 같이 바뀌게 됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;simple PageRank의 식&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

\[r_j = \sum_{i \rightarrow j}^{} \frac{r_i}{d_i}\]

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;del&gt;simple&lt;/del&gt; PageRank의 식&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;$N$은 총 웹 페이지 (node)의 수를 의미합니다.&lt;/li&gt;
    &lt;/ul&gt;

\[\displaystyle r_j = \sum_{i \rightarrow j}^{} \bigg( \alpha \frac{r_i}{d_i} \bigg) + (1-\alpha) \frac{1}{N}\]

    &lt;ul&gt;
      &lt;li&gt;식 $\displaystyle \sum_{i \rightarrow j}^{} \bigg( \alpha \frac{r_i}{d_i} \bigg)$ 는 하이퍼링크를 따라 node $j$에 도착할 확률을 의미합니다.&lt;/li&gt;
      &lt;li&gt;식 $\displaystyle (1-\alpha) \frac{1}{N}$ 은 teleport를 통해 node $j$에 도착할 확률을 의미합니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;42-simple-pagerank-계산-예시&quot;&gt;4.2 &lt;del&gt;Simple&lt;/del&gt; PageRank 계산 예시&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;그림 8과 같은 웹 그래프가 있을 때, PageRank를 계산하는 방법에 대해 알아보겠습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_07.png&quot; alt=&quot;그림 8&quot; width=&quot;350px&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;1-adjacency-matrix-a-구하기&quot;&gt;1. adjacency matrix $A$ 구하기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;웹 그래프의 adjacency matrix $A$ 를 구합니다.&lt;/li&gt;
  &lt;li&gt;$A$는 row node에서 column node로 가는 edge가 있으면 1, 없으면 0 입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.)&lt;/li&gt;
&lt;/ul&gt;

\[A = 
\begin{bmatrix}
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 \\
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\
\end{bmatrix}\]

&lt;h3 id=&quot;2-a를-transpose한-matrix-at-구하기&quot;&gt;2. $A$를 transpose한 matrix $A^T$ 구하기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;adjacency matrix $A$를 transpose한 matrix $A^T$ 구합니다.&lt;/li&gt;
  &lt;li&gt;$A^T$는 column node에서 row node로 가는 edge가 있으면 1, 없으면 0 입니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.)&lt;/li&gt;
&lt;/ul&gt;

\[A^T = 
\begin{bmatrix}
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \color{red}{0} \\
1 &amp;amp; 0 &amp;amp; 1 &amp;amp; \color{red}{0} \\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; \color{red}{0} \\
1 &amp;amp; 0 &amp;amp; 0 &amp;amp; \color{red}{0} \\
\end{bmatrix}\]

&lt;h3 id=&quot;3-hyperlink-matrix-h-구하기&quot;&gt;3. hyperlink matrix $H$ 구하기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;adjacency matrix인 $A$를 hyperlink matrix $H$로 변환합니다.&lt;/li&gt;
  &lt;li&gt;$A$의 값들을, column별로, column의 합으로 나눕니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.)&lt;/li&gt;
&lt;/ul&gt;

\[H = 
\begin{bmatrix}
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \color{red}{0} \\
\frac{1}{2} &amp;amp; 0 &amp;amp; 1 &amp;amp; \color{red}{0} \\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; \color{red}{0} \\
\frac{1}{2} &amp;amp; 0 &amp;amp; 0 &amp;amp; \color{red}{0}
\end{bmatrix}\]

&lt;h3 id=&quot;4-column-stochastic-matrix인-m-구하기&quot;&gt;4. column stochastic matrix인 $M$ 구하기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;PageRank의 수렴을 보장하기 위해 column stochastic matrix가 필요합니다.
    &lt;ul&gt;
      &lt;li&gt;따라서, hyperlink matrix $H$를 column stochastic matrix인 $M$으로 만듭니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;column stochastic matrix는
    &lt;ul&gt;
      &lt;li&gt;matrix의 모든 값들이 음수가 아니여야 합니다.&lt;/li&gt;
      &lt;li&gt;각 column의 합이 1입니다.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;column stochastic matrix를 만들어줌으로, dead end 문제가 해결됩니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.)&lt;/li&gt;
&lt;/ul&gt;

\[M = 

\begin{bmatrix}
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \color{red}{\frac{1}{4}} \\
\frac{1}{2} &amp;amp; 0 &amp;amp; 1 &amp;amp; \color{red}{\frac{1}{4}} \\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; \color{red}{\frac{1}{4}} \\
\frac{1}{2} &amp;amp; 0 &amp;amp; 0 &amp;amp; \color{red}{\frac{1}{4}}
\end{bmatrix}\]

&lt;h3 id=&quot;5-google-matrix-g-구하기&quot;&gt;5. Google matrix $G$ 구하기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;column stochastic matrix인 $M$을 이용하여, PageRank를 구하는 Google matrix $G$ 구합니다.&lt;/li&gt;
  &lt;li&gt;spider trap 문제는 랜덤 서퍼 개념을 도입함으로써 해결됩니다.&lt;/li&gt;
  &lt;li&gt;$\alpha$는 보통  $[0.8,\; 0.9]$ 정도를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.)&lt;/li&gt;
&lt;/ul&gt;

\[G = 

\alpha

\begin{bmatrix}
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; {\frac{1}{4}} \\
\frac{1}{2} &amp;amp; 0 &amp;amp; 1 &amp;amp; {\frac{1}{4}} \\
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; {\frac{1}{4}} \\
\frac{1}{2} &amp;amp; 0 &amp;amp; 0 &amp;amp; {\frac{1}{4}}
\end{bmatrix}

+

(1-\alpha)
\begin{bmatrix}
\frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} \\
\frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} \\
\frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} \\
\frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4} &amp;amp; \frac{1}{4}
\end{bmatrix}\]

&lt;ul&gt;
  &lt;li&gt;$\alpha = 0.8$이라고 하면, $G$는 다음과 같습니다.&lt;/li&gt;
&lt;/ul&gt;

\[G = 

\begin{bmatrix}
0.05 &amp;amp; 0.05 &amp;amp; 0.05 &amp;amp; 0.25 \\
0.45 &amp;amp; 0.05 &amp;amp; 0.85 &amp;amp; 0.25 \\
0.05 &amp;amp; 0.85 &amp;amp; 0.05 &amp;amp; 0.25 \\
0.45 &amp;amp; 0.05 &amp;amp; 0.05 &amp;amp; 0.25
\end{bmatrix}\]

&lt;h3 id=&quot;5-rank-벡터-r-구하기&quot;&gt;5. rank 벡터 $r$ 구하기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;rank 벡터와 Google matrix $G$ 를 곱하여, rank를 구합니다.&lt;/li&gt;
  &lt;li&gt;power iteration을 이용하여, 다음 식을 풀어, 최종 rank 벡터를 구합니다.&lt;/li&gt;
&lt;/ul&gt;

\[r = G \cdot r\]

&lt;p&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(e.g.)&lt;/li&gt;
&lt;/ul&gt;

\[r 
\approx 

\begin{bmatrix}
0.07 \\
0.42 \\
0.41 \\
0.10
\end{bmatrix}\]

&lt;hr /&gt;

&lt;h1 id=&quot;6-pagerank의-결과&quot;&gt;6 PageRank의 결과&lt;/h1&gt;

&lt;h2 id=&quot;61-convergence-properties&quot;&gt;6.1 Convergence Properties&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;그림 9
    &lt;ul&gt;
      &lt;li&gt;3억 2200만 개의 edge → 52번의 iteration을 통해 수렴&lt;/li&gt;
      &lt;li&gt;1억 6100만 개의 edge → 45번의 iteration을 통해 수렴&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;PageRank가 매우 큰 데이터에서도 매우 잘 확장될 것임을 시사합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_08.png&quot; alt=&quot;그림 9 (출처: 논문 The PageRank Citation Ranking: Bringing Order to the Web)&quot; width=&quot;450px&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;7-질문&quot;&gt;7 질문&lt;/h1&gt;

&lt;h2 id=&quot;71-구글은-지금도-pagerank를-사용할까&quot;&gt;7.1 구글은 지금도 PageRank를 사용할까?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;PageRank 논문은 1998년에 나왔지만, 구글은 현재도 검색 엔진의 품질 향상을 위해 PageRank를 사용하는 것으로 알려져 있습니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/graph/files/posts/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/fig_09.png&quot; alt=&quot;그림 10 (출처: 구글의 Search Advocate, John의 트위터)&quot; width=&quot;450px&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 25 Mar 2022 13:03:00 +0900</pubDate>
        <link>https://pseudo-lab.github.io/graph/graph/blog/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/</link>
        <guid isPermaLink="true">https://pseudo-lab.github.io/graph/graph/blog/The-PageRank-Citation-Ranking-Bringing-Order-to-the-Web/</guid>
        
        <category>pagerank</category>
        
        
      </item>
    
  </channel>
</rss>
