전체 글127 MinCutPool: 코드 분석 (MinCutPool: Understanding the Code) 이론편1은 여기, 이론편2는 여기에서 확인하실 수 있습니다. 이번 게시물에서는 MinCutPool의 code를 예시 데이터와 함께 분석해보겠습니다. 제가 사용한 데이터는 마이크로 모빌리티의 이동패턴 데이터인데, 실제 영업에서 사용된 데이터이므로 자세한 공개가 어려워 데이터 차원의 변화를 위주로 설명드리겠습니다. 전체 코드를 보기 전에 제가 정의한 x(feature matrix), adj(adjacecny matrix,), s(cluster assignment matrix)의 차원은 각각 다음과 같습니다. print(x.shape) # torch.Size([1, 500, 2]) print(adj.shape) # torch.Size([1, 500, 500]) print(s.shape) # torch.Size.. 2022. 2. 12. MinCutPool: 이론편2 (MinCutPool: Understanding the Theory 2) 이론편1은 여기에서 확인하실 수 있습니다. 지난 1편에서 local minima에 빠지기 쉬운 cut loss를 보안하기 위해 orthogonality loss가 있다는 이야기까지 했습니다. Cut loss가 빠질 수 있는 local minima에는 두 가지가 있었는데, 첫 번째는 모든 node가 모든 cluster에 같은 정도로 속하는 것, 두 번째는 모든 node가 한 cluster에만 속하는 경우였습니다. Orthogonality loss는 이 문제를 해결하기 위해 cluster assignment가 orthogonal 하도록(모든 node가 모든 cluster에 같은 정도로 속하는 경우 해결), 그리고 cluster의 size가 비슷하도록(모든 node가 한 cluster에만 속하는 경우 해결) .. 2022. 2. 12. MinCutPool: 이론편1 (MinCutPool: Understanding the Theory 1) MinCutPool은 복잡한 그래프에서 주요한 node를 추출하고자 한 여러 시도들 중 하나입니다. 일반적으로 node 추출은 graph를 matrix로 표현한 뒤 고유값 분해를 통해 핵심 node를 결정하는 spectral clustering(SC) 방법을 활용합니다. 하지만 고유값 분해 과정의 계산 복잡도가 높아 ($O(N^3)$) scalability issue가 있습니다. 최근 gradient descent 알고리즘을 활용하여 복잡도를 $O(N^2)$이나 $O(N)$까지 줄이는 연구가 있었습니다(Han & Filippone, 2017). 인공신경망을 이용한 연구도 진행되어 Autoencoder를 활용해 Laplacian matrix(Degree matrix - Adjacency matrix)의 i.. 2022. 2. 12. 백준 1107 리모컨 문제 : 수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다. 리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다. +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다. 채널 0에서 -를 누른 경우에는 채널이 변하지 않고, 채널은 무한대 만큼 있다. 수빈이가 지금 이동하려고 하는 채널은 N이다. 어떤 버튼이 고장났는지 주어졌을 때, 채널 N으로 이동하기 위해서 버튼을 최소 몇 번 눌러야하는지 구하는 프로그램을 작성하시오. 수빈이가 지금 보고 있는 채널은 100번이다. 입력 : 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버.. 2022. 1. 25. 백준 1065 한수 문제 : 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 입력 : 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 출력 : 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. 풀이 : num = int(input()) hansu = 0 for n in range(1, num+1) : if n 2022. 1. 25. Einsum 입문하기 (Introduction to Einsum) 오늘은 pytorch 코드를 작성하다보면 종종 마주치는 einsum에 대해 간략히 소개해보려합니다. Einsum은 아인슈타인 표기법(Einstein summation convention)을 이용하여 연산을 수행하는 함수입니다. Pytorch외에 numpy와 tensorflow 코드에서도 유사한 방법으로 사용되어서 알아두면 다른 프레임워크를 사용하실 때에도 두고두고 도움이 됩니다. 우리는 반복적인 연산을 $\Sigma$ 표기법을 이용하여 간략히 나타냅니다. Einsum 표기법은 $\Sigma$를 이용한 연산 표기와 같은 형태를 갖습니다. 다만 $\Sigma$ 기호를 생략한다는 차이가 있습니다. Einsum은 다양한 종류의 연산에 대해 동일한 형태로 표현할 수 있다는 장점이 있습니다. 마치 우리가 $\Sig.. 2022. 1. 25. 이전 1 ··· 17 18 19 20 21 22 다음