분류 전체보기
ML4CO 3 - Learning Combinatorial Optimization Algorithms over Graphs
ML4CO 3 - Learning Combinatorial Optimization Algorithms over Graphs
2022.08.07https://arxiv.org/pdf/1704.01665.pdf 요약 Graph 데이터를 사용하는 조합최적화 문제는 비슷한 문제 형태를 갖지만 문제가 조금만 달라져도 다른 알고리즘을 적용해야 했습니다. 본 논문에서는 Graph 데이터를 사용하는 조합최적화 문제의 구조를 일반화하여 다양한 문제 세팅에서 알고리즘의 큰 조정 없이 적용할 수 있는 S2V-DQN 알고리즘을 제안했습니다. 배경지식 조합최적화 (Combinatorial Optimization) Maximum vertex cover, Maximum cut, TSP 강화학습 (Reinforcement Learning) 배경 [조합 최적화 문제](https://dice.tistory.com/41)는 이산적인 탐색 공간에서의 최적의 해를 찾는 문제입니다..
ML4CO 2 - Neural Combinatorial Optimization with RL
ML4CO 2 - Neural Combinatorial Optimization with RL
2022.07.24https://arxiv.org/abs/1611.09940 요약 TSP 문제는 Node가 많아질 경우 Optimal Solution을 구하기 어려워 지도학습에 활용할 데이터셋을 구하기 어려움 이를 해결하기 위해 TSP문제를 강화학습으로 해결하는 모델 제안 배경지식 다음의 내용을 알고 있으면 글을 이해하기 편합니다. 조합 최적화 (Combinatorial Optimization) TSP 강화학습 (Reinforcement Learning) Pointer Network 배경 조합 최적화 문제란 이산적(Discrete)이거나 이산적으로 환원(Reduction) 가능한 탐색 공간에서 최적의 해를 찾는 문제입니다. 대표적인 문제로는 Traveling Salesman Problem (TSP), Knapsack Pr..
ML4CO 1 - Pointer Network
ML4CO 1 - Pointer Network
2022.06.26요약 Pointer Network는 입력차원에 따른 출력 차원이 조절되는 모델 제안 작은 크기의 Convex Hull, Delaunary Triangulation, TSP 문제에서 출력 차원이 고정된 모델보다 더 좋은 성능을 보임 학습 데이터보다 더 긴 길이의 input에서도 동작 배경 지식 다음의 내용을 알고 있으면 글을 이해하기 편합니다. 조합최적화 (Combinatorial Optimization) TSP RNN, seq-to-seq Attention 배경 조합최적화 문제는 주어진 아이템의 최적 순서를 찾는 문제입니다. 대표적으로 외판원순환문제(TSP), 최소신장트리(MST), 배낭문제 (Knapsack Problem) 등이 조합최적화 문제에 속합니다. 조합최적화는 산업에서 생산 물류 최적화, 운송..
글또 7기 다짐글
글또 7기 다짐글
2022.05.15공부를 하다보면 알게 된 것을 정리해야 할 필요성을 느낀다. 나만의 방식대로 정리하고 싶은 욕구도 있고, 내가 알고 싶은 지식이 여기 저기 분산되어 있어 한 곳에 정리하고 싶은 생각도 있다. 이러한 필요성에 따라 한 두번 글을 쓰다가도 '지금 하고 있는 일이 바쁘서', '이번엔 쓸 내용이 없어서', '이미 잘 정리한 글이 많아서', '글쓰기 어려워서' 와 같이 변명거리가 많이 생긴다. 이러한 변명거리와 무관하게 그냥 글을 쓰기 위해서 글또를 지원했다. 글또는 '글쓰는 또라이가 세상을 바꾼다'의 약자로 개발 직군들이 모여서 작성한 글을 공유하는 글쓰기 커뮤니티이다. 글또에 참여하면 약 6개월 간 글을 올리고 다른 개발자들과 올린 글에 대한 피드백을 주고 받는 활동을 하게 된다. 글또 7기 목표 나는 글또에..
Python assignment expression
Python assignment expression
2022.01.18python 3.8 버전 부터 추가된 assignment expression 에 대한 다음 문서를 정리했다. https://www.python.org/dev/peps/pep-0572 제안된 이유 기존 개발자들은 실제 코드를 작성할 때 line 수를 줄이기 위해 성능을 포기하고 sub-expression을 반복해서 사용하는 경우가 있다. Examples # Original match = re.match(data) group = match.group(1) if match else None # Repeated sub-expression but one-line code group = re.match(data).group(1) if re.match(data) else None # Less efficient but..
Python Profiler를 사용한 병목지점 찾기
Python Profiler를 사용한 병목지점 찾기
2022.01.18현재 강화학습을 사용한 업무를 진행하고 있다. 하지만 강화학습 환경이 느리다. 훈련속도를 가속화하기 위해 다양한 python profiler를 적용하여 병목 지점을 찾아내었다. 먼저 다양한 종류의 python profiler가 있었다. 가장 기본이 되는 profile과 cProfile이 있었다. profile은 매우 느리고, cProfile은 빠르지만 function단위로 profiling을 하고, 결과를 binary로 저장해 한번더 풀어야하는 귀찮음이 있었다. 다음으로 사용한 것은 line-profiler이다. line-profiler는 적당한 속도로 프로파일링이되고, line단위로 좀 더 자세한 통계정보를 알려준다. 하지만 line-profiler는 어느 method에서 프로파일링을 할 것인지 지정해..
PR113 - How Powerful are Graph Neural Networks?
PR113 - How Powerful are Graph Neural Networks?
2021.08.09논문: How Powerful are Graph Neural Networks? ICLR-2019 코드: https://github.com/weihua916/powerful-gnns Motivation & Introduction GNN의 representation power에 대한 연구가 부족하다. GNN의 representation power는 Aggregation function이 결정하는데, GCN의 Mean Pooling이나 GraphSage의 Max pooling은 다른 노드를 구별하는 능력이 부족하다. Methodology Aggregation function이 injective할 때 neighbor node 들이 다르면, embedding 결과도 다르다. 이를 토대로 sum aggregatio..
Tqdm과 멀티프로세싱
Tqdm과 멀티프로세싱
2021.07.26파이썬 코드에서 샘플링 부분이 성능이 나오지 않아 멀티프로세싱을 사용해 이를 해결하고자 했다. 처음에는 다음과 같이 코드를 작성했다. from multiprocessing as mp if n_workers = =1: samples = list(map(sampler.sample, densities)) else: with mp.Pool(n_workers) as pool: samples = pool.map(sampler.sample, densities) 파이썬의 multiprocessing 라이브러리에서 Pool을 사용할 때 worker의 개수가 하나일때도 process를 생성해 pool을 사용하지 않은 경우보다 성능저하가 있었다. 무시해도 될 수준이지만 이 부분을 분기문을 통해 처리했다. 하지만 위와 같이 ..
리눅스와 도커 - Cgroups
리눅스와 도커 - Cgroups
2021.06.20배경 도커와 같은 컨테이너 기술은 namespace와 Cgroup 이라는 리눅스 커널의 기능을 사용한다. namespace는 프로세스를 격리하는 기술이다. 이번에는 Cgroup에 대해서 알아보았다. 요약 Cgroups는 하나 혹은 복수개의 프로세스의 시스템 자원의 사용을 격리하는 기술이다. 컨테이너 기술은 namespace와 프로세스를 격리하고, 해당 프로세스가 사용할 수 있는 자원은 Cgroup으로 격리하는 방식으로 동작한다. 즉, 프로세스들이 각각 다른 머신을 운영하는 것과 같이 사용할 수 있다. Cgroups (Control Groups) 리눅스 매뉴얼 페이지에서 Cgroups의 정의를 다음과 같이 하고 있다. Control groups, usually referred to as cgroups, a..
리눅스와 도커 - namespace
리눅스와 도커 - namespace
2021.06.13배경 도커 문서에서 도커가 사용하는 기술에 대해 다음과 같이 이야기한다. Docker uses a technology called namespaces to provide the isolated workspace called the container. When you run a container, Docker creates a set of namespaces for that container. These namespaces provide a layer of isolation. Each aspect of a container runs in a separate namespace and its access is limited to that namespace. 즉, namespace라는 기술을 사용해 자원을 격리..