Research 9

GIL. python

파이썬으로 고성능의? 아니 병렬화된 어떤 코드를 개발할 때, 항상 걸림돌이 되는 요소가 GIL(Global Interpreter Lock) 이다. ML 관련된 다양한 일들을 하면서, 파이썬이 상당히 각광받고 있는 것도 사실이지만, 반대로 이걸로 서비스를 개발하려고하면, 당면할 수 밖에 없는 문제가 바로 GIL 이다. 어? 근데 파이썬도 스레드를 지원하잖아요? 라고 묻는다면, 그 스레드가 여러개가 동시에 동작하더라도, 결국엔 하나의 스레드만 파이썬 오브젝트에 접근할 수 밖에 없기 때문에, 사실상 Single-threaded 프로그램과 다를 바 없으며, 그래서 원한만큼 효율을 높이는 데에는 한계가 있음을 알 수 있다. 이러한 특징으로 파이썬에서는 병렬화된 프로그래밍을 한다고 하면, 프로세스를 늘리는 형태로 ..

serving, pytorch.

꽤나 오랜만에 글을 쓰는 것 같은데, 참 오랫동안 ML 관련된 일을 하고 있다. 개인적으로는 backend, bigdata 관련 개발자이기도 하고, ML 을 오랫동안 하고 있다는 것 때문에 최근에 많이 요구하는 일들 중 하나가 serving 이다. serving 이 뭔데? 라고 물으신다면, scikit-learn/tensorflow/pytorch/mxnet 등등.. 다양한 ML 로 만들어진 Model을 서비스로 제공하는 방법을 말한다. 사실 scikit-learn 같은 경우엔 별 문제가 없다. scikit-learn 은 좀 헤비하다고 해도, 가벼운 수준이라 flask 같은 걸로 api 만들고, call 하면 그만이고, GPU 자원을 사용하는 것들도 없거나, 적어서 flask 만을 사용해도 별 무리가 없다..

kalman filter, extended kalman filter, unscented kalman filter...

kalman filter는 대부분 잘 알고 있고, 대단히 많은 내용들이 알려져 있기 때문에 핵심이 되는 내용 몇 가지 내용만 기록해두려 한다. wiki 나 다른 자료들을 보면, kalman filter가 prediction과 update라는 두 개의 흐름 구조를 갖고 있는 것을 쉽게 알 수 있다. 대체 prediction 과 update 는 어떤 원리를 기본으로 두고 하게 되는 것인가? 1. gaussian kalman filter 의 update 는 bayes rule 을 기본으로 product 의 성질을 갖고 있다. 또한, prediction 은 convolution 연산에 해당(사실상 덧셈)하며, total probability 을 계산한다. 사실 이렇게 말로 써놓으면 뭔 말인가 싶은데, 그림으로 ..

Research/Robotics 2018.04.22

hdf5 cmake in ubuntu

쉬운건데, 이상하게 매번 걸리적거리고 피곤하게 처리하는 내용이라 정리해놓는다. 1. 아래 홈페이지에서 Preconditions에 Windows/Unix 링크 다운https://support.hdfgroup.org/HDF5/release/cmakebuild.html 2. 어딘가에 압축 풀어놓기.. or 설치 3. HDF5-1.10.1-Linux.sh 실행 여기까진 뭐 그냥 쉽게 잘 간다. 마무리로 .bashrc 든 윈도우 환경이든HDF5_DIR=뭔가설치된 폴더/cmake 지정example) export HDF5_DIR=/usr/local/HDF_Group/HDF5/1.10.1/share/cmake 위에 HDF5_DIR 지정해주면, cmake 에서 hdf5 에 대한 내용들을 인식하여 처리할 수 있다.

Many-objective problem

최근에 Multi- 혹은 Many-objective 에 대한 연구를 진행하고 있다. 회사에서 필요한 부분도 있지만, 오랫동안 개인적으로 연구해오던 테마이기도 하기 때문에, 꽤 많은 자료를 다시 살펴보고 연구를 진행하고 있다. 만약, 목적함수의 개수가 하나라고 가정하자. 이 경우에는 최소 혹은 최대라는 하나의 값으로 수렴해나갈 수 있다. 그러나 Trade-off 관계에 있는 2개의 목적함수를 사용할 경우에 한쪽이 상승할 경우, 필연적으로 다른 한쪽은 낮아질 수 밖에 없다. 만약 3개 이상의 목적함수가 각각이 상보적인 관계일 경우, 값의 방향성을 어떻게 잡아가야 하는 지는 더욱 모호해질 수 밖에 없다. 이러한 문제들에 대한 보편적 접근 방식은 Weight 를 적용하여 목적함수에 대한 가중을 두어 수렴시키는 ..

진화 연산의 한계

진화 연산은 여러면에서 매력적입니다. 공간에 대한 분포를 잘 모르고, 문제정의만 하면 왠만큼 해를 구할 수 있다는 것이야 말로 엄청난 매력이라 할 수 있죠. 복잡한 수학이 들어가 있지도 않고, 알고리즘만 이해할 수 있으면 누구나 쉽게 구현하고 접근할 수 있습니다. 이런 장점으로 많은 사랑을 받아왔죠. 그러나 이 부분이 진화 연산의 장점이면서 동시에 한계입니다. Evolutionary Strategies 나 기타 Covariance Matrix Adaptation 기법 등이 나왔지만, 여긴 수학의 영역에 약간의 진화연산의 Mutation 의 기법이 들어갔다고 보는게 맞을 것 같습니다. 또는 Mutation 이라는 것이 확률적이라 표현하는 확률의 기법이 들어갔다고도 볼 수 있겠네요. 거의 Random 에 가..

Research/Others.. 2017.04.24

tensorflow + anaconda2 + cuda 설치(노트북 사용)

예전에 tensorflow 를 처음 사용할 때, 리눅스 설치때문에 엄청나게 고생했었던 기억이 있다. 특히나 CUDA를 사용하는 부분에서, 노트북(GT 650M 사용)이 개발환경이다보니 일반적인 설치파일을 그냥 다운받는 것으로는 문제가 있어 많은 시간이 소모되었었는데, 얼마 전에 Ubuntu 16.04 버전으로 버전업하고, 그때의 과정을 되풀이 했는데, 너무나 쉽게 되었다. 1. Ubuntu 16.04 버전 설치 2. 그래픽카드 드라이버 설치 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get install nvidia-370 설치 이후 재부팅하여, nvidia-settings 로 정상 설치 확인 3. CUDA 설치 sudo apt-get inst..

Research/Others.. 2016.10.06

신경회로망...

예전에 처음 신경회로망을 배우고, 알고리즘으로 학습을 모사할 수 있다는 것에 대해서 상당한 매력을 느꼈었는데, 잘 정제되어 있는 학습데이터가 없이는 결과가 좋지 않았기에 그 이후로 크게 관심을 두고 있지는 않았었다. 한동안 그러다가 비전과 관련한 분야에 대해 공부하면서, 특징점을 추출하기 위한 부분을 신경망을 활용하여 드라마틱한 성능의 향상을 보여주는 것을 보고 다시 관심을 가지게 되었었다. 신경망에 대해 다시 관심을 갖기 시작했던 때에는 호기심에 한창 CUDA로 GA에서 실수최적화 기법을 사용하는 알고리즘들을 병렬화시키는 부분에 대한 개발하고 있었다. 그래서 처음에는 당연히 가중치 계산에 대해서 예전보다 더 큰 규모의 신경망을 보다 빠르게 학습시키는 것에 대해서만 생각하고 있었다. CUDA 를 처음 활..

Research/Others.. 2016.09.23

마스터 알고리즘

이책의 저자인 페드로 도밍고스는 기호주의자(Inverse Deduction), 연결주의자(Back-propgation), 진화주의자(Genetic Programming), 베이즈주의자(Bayesian Inference), 유추주의자(Support Vector Machine)로 머신러닝의 다섯 종족을 구분해두었다. 머신러닝의 기본서 같은 책이라 추천받아 봤는데, 세상에나... 난 진화연산을 머신러닝의 한 분파로 분류해줄 줄은 몰랐다. 진화연산을 공부하면서 항상 고민되던 부분이 어떻게하면, 진화의 부분을 학습과 같이 수행할 수 있도록 하는가에 대한 것이었다. 예를 들면 역전파 알고리즘은 항상 결과의 피드백으로 가중치의 값을 변경해나아가는데, 이 과정을 하나의 목표를 향한 학습이라 볼 수 있다. 그런데, 진화..

Research/Others.. 2016.09.19