분류 전체보기 310

Graph Convolution Network 구현 wtih DGL

Contents Graph Convolution Neural Network(GCN)는 2017년에 처음으로 제안된 모델이다[논문]. 우수한 성능을 보이고 있으며, GNN에 CNN을 접목하기 시작한 계기가 된다. 본 글에서는 이론적인 내용은 자세히 다루지 않고, DGL을 사용해서 GCN을 만들어볼 것이다. GCN에 대한 상세한 내용은 여기를 참고하면 된다. 1. Load Package GCN을 사용하기 위해서는 Pytorch, torch_geometric, Tensorflow, PyG 등 다양한 프레임워크들이 존재하지만 본 글에서는 가장 간단한 DGL을 이용해서 GCN을 구현한다. 구현하기에 앞서 먼저 필요한 패키지들을 호출하자. import numpy as np import dgl from dgl.nn ..

[Algorithm] sort()와 sorted()의 차이점

Contents 파이썬에서 리스트(List)를 정렬할 때 주로 사용하는 함수는 sort()와 sorted()가 있다. 두 개의 함수는 둘 다 정렬을 할 때 사용하지만 조금씩 사용하는 방법의 차이가 있다. 두 함수의 차이점에 대해서 알아보자. sorted sorted()의 경우 정렬할 때 쓰는 함수이며, 숫자 뿐만 아니라 문자까지도 정렬이 가능하다. 그러나, 문자를 정렬할 경우 리스트 구조로 반환이 되기 때문에 join 함수를 사용해서 다시 합쳐주어야 한다. a = [2, 5, 1, 9, 7] sorted(a) # [1, 2, 5, 7, 9] b = 'zbdaf' sorted(b) # ['a', 'b', 'd', 'f', 'z'] ''.join(sorted(b)) # 'abdfz' sort sort 함수는..

Python/Algorithm 2022.08.18

[Algorithm] List, Dictionary의 시간 복잡도

Contents 코딩 테스트를 하다보면 시간 복잡도를 고려하지 않아서 발생하는 시간 초과 문제에 직면할 때가 있다. 코딩 테스트에서는 리스트(List) 구조를 많이 사용하는데, 리스트에 사용할 수 있는 함수 혹은 주요 연산들의 시간 복잡도가 어느 정도인지 알아보자. List 연산 시간 복잡도 설명 $\text{len(a)}$ O(1) 전체 요소의 개수를 리턴한다. $\text{a[i]}$ O(1) index $i$의 요소를 가져온다. $\text{a[i:j]}$ O(k) index $i$부터 $j-1$까지의 길이만큼 $k$개 요소를 가져온다. 객체 $k$개에 대한 조회가 필요하기 때문에 O($k$) $\text{element in a}$ O(n) 요소가 존재하는지 확인하는 경우 순차 탐색을 해야하기 때문..

Python/Algorithm 2022.08.18

[SQL] SQL 기본 문법 Select

Contents 데이터를 분석하기 위해서는 Database에서 데이터를 불러오고 이를 활용하여야 한다. DB를 사용하기 전에는 csv, xlsx 등의 파일에서 바로 불러와서 사용하곤 했으나 현업에서 일을하거나 협업을 하게 되는 경우에는 DB를 사용하는 일이 잦다. DBMS는 MySQL, PostgreSQL, MSSQL 등 다양한 SQL이 존재하지만, 본 글에서는 공통적으로 사용하는 문법을 위주로 다룬다. SELECT 전체 데이터 조회 SELECT 문법은 데이터를 조회할 때 사용하는 SQL 문법이다. 가장 기본적인 것부터 알아보자. SELECT FROM은 아주 기본적인 문법이라고 볼 수 있다. 어떠한 열에서 원하는 값을 가지고 올 때 주로 사용한다. SELECT * FROM `database`.table_..

SQL 2022.08.17

[SQL] SQL의 종류

Contents SQL에는 다양한 도구들이 존재한다. 본 글에서는 각각의 도구들이 어떠한 역할을 하는지, 어떤 것을 하고자 할 때 사용하는 것이 좋은지에 대해서 다룬다. PostgreSQL PostgreSQL은 오픈소스 RDB(Relational Database) 즉, 무료다. 확장 기능도 많이 제공하여 편리하게 사용할 수 있으며, 소규모 데이터 분석, SQL 학습을 목적으로 하는 경우 로컬에서 가볍게 작동하는 PostgreSQL을 사용하는 것을 권장한다. Apache Hive 빅데이터를 다룰 때 PostgreSQL 등의 RDB를 사용하는 경우 일반적으로 저렴한 디스크를 사용하는데, 디스크를 사용하게 되면 데이터를 불러올 때 속도가 현저히 떨어진다. Hive는 HDFS라고 불리는 분산 파일 시스템 위의 ..

SQL 2022.08.17

[NLP] BERT의 종류

Contents BERT는 Transformer의 Encoder 부분을 사용한 모델이다. 현재까지도 BERT의 파생 모델이 많이 제안되고 있으며, 우수한 모델로써 인정받고 있다. BERT에는 가장 기본적인 BERT와 RoBERTa, ALBERT 등 다양한 파생 모델이 존재하는데, 각각의 모델들이 어떠한 차이점을 가지고 있는지 간략하게 알아보자. BERT BERT는 2018년 구글에서 기계 번역을 위해 제안한 모델이며 "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding"에서 처음 발표하였다. 이는 Supervised Learning 뿐만 아니라 Self-Supervised Learning이 가능하다고 언급하고 있..

[CS224W] Message Passing and Node Classification

Contents 이번 글은 CS224W의 Lecture 5.1 에 대한 내용을 다루고 있다. 해당 챕터에서는 Message Passing과 Node Classification에 대한 내용을 포함하고 있다. 일반적으로 Semi-Supervised Learning을 할 때 사용하며, 일부 노드의 label에 대한 정보가 주어졌을 때, 모든 노드에 label을 부여하는 방법에 대해서 다룬다. Massage Passing은 Node Classification을 하는 방법 중 하나이며, 그 중 Relational Classification, Iterative Classification, Belief Propagation에 대해서 알아보자. Node Classification Node Classification은 ..

Graph Neural Networks for Social Recommendation (WWW'19)

Contents Graph Neural Networks for Social Recommendation (WWW'19)는 소셜 네트워크에서 추천시스템을 적용한 논문이며, 당시 SoTA 성능에 도달한 GraphRec이다. 현재까지도 사용되는 기법이기도 하고, 이를 기반으로 한 많은 Application 연구도 진행되고 있다. Abstract 최근 몇 년 동안 Graph Neural Networks (GNNs)은 node information와 위상적인(topological) 구조를 자연스럽게 통합하고 그래프 데이터에서 모델을 학습하는 성능이 우수한 것이 검증되었다. 소셜 네트워크에서는 user-user 혹은 user-item graph 구조를 가지고 있기 때문에 소셜 네트워크에 GNN을 적용할 경우 우수한 ..

Graph Attention Networks (ICLR'18)

Contents Attention이라는 개념은 자연어처리(Natural Language Processing; NLP)를 공부하는 사람이라면 한 번쯤은 들어봤을 개념이다. RNN에서 장기 의존성 문제로 인해 LSTM, GRU 등의 모델이 제안 되었으나, 이 역시도 장기 의존성 문제를 완벽히 해결할 수 있진 않았다. 이를 해결하기 위해 나온 개념이 Attention 개념이다. Attention의 기본 아이디어는 입력 받은 데이터를 매 step 마다 참고하여 중요한 혹은 관련이 있다고 판단되는 정보에 치중되어 결과값을 산출하는 방식이다. 본 논문은 이러한 매커니즘을 그래프에 적용한 Graph Attention Networks (GAT)를 제안하였다. Introductions 이미지나 기계 번역, 감성 분석 등..

Simplifying Graph Convolutional Networks (PMLR'19)

Contents Abstract GCN과 GCN을 변형한 다양한 모델들은 상당한 주목을 받아왔으며, 사실상(de facto) Graph Representation을 학습할 때 가장 좋다고 알려진 방법이다. GCN은 CNN을 기반으로 진행되는데, 이 방식은 불필요한 복잡성과 중복된 계산이 요구된다. 따라서, 본 논문에서는 비선형성을 제거하고, Layer 사이의 Weight Matrix를 축소함으로써 GCN이 가지고 있는 과도한 복잡성을 줄였다. 복잡도는 줄였지만 많은 다운스트림 태스크에서 정확도에 부정적인 영향을 주지 않는다는 것을 검증하였다. 또한, 더 큰 데이터셋으로 확장이 가능하고 해석 가능성이 높아지며, FastGCN에 비해 속도는 최대 2배 가량 향상되었다. Introduction Simplify..

반응형