2010/04/29 02:20
크리에이티브 커먼즈 라이선스
Creative Commons License
대량의 슈퍼 초 노가다가 생겼었다는 슬픈....

어쨌든

요새 관심갖는 것들 대표적인 몇가지만

1. 실시간 처리가 가능한 진화연산

- 진화연산을 조금이라도 해본 사람은 알겠지만, 진화연산이라는 작업 자체가 원하는 결과를 얻기위해 엄청난 반복 연산을 요구한다. 덕분에 매 순간순간 환경이 바뀌거나 매우 짧은 순간에 결과를 도출해야 하는 작업에는 사용할 수 가 없다. 그렇기 때문에 진화연산을 연구하는 사람들이 진화연산을 실시간으로 적용할 수 있는 방법이 있지 않을까? 하다가 나온 방법들이 Rapid Convergence 라고 불리는 기법들이다. 
- 여기서의 목표는 말그대로 얼마나 빠르게 사용 가능한 해를 찾아내느냐에 있다. 기존의 기법들에 선택압을 조절하여 무진장 빠르게 해를 찾는 것과는 다르다. 이때의 해는 거의 대부분이 지역적인 최적해이지만, Rapid Convergence 기법들의 목표는 이러한 지역적 최적해중 에서도 그나마 더 나은 것들, 혹은 완전히 전역적 최적값을 찾는것을 목표로 한다.
- 하지만 곰곰히 생각해보면 그것을 평가하는 일 또한 대단히 어렵다. 기존에 존재하는 이러한 반복적인 형태의 알고리즘에서 최적해를 찾아가는 속도를 증가시키는 것과 이것에 대한 차이, 그리고 어떻게 판별하는 것이 올바른 판별법이 될것인가에 대한 것 등등.. 아직은 좀 문제가 많다고 생각할 수 있다.
- 이번에 EvoStar 2010 Conference 에서 로봇에 대해 Rapid Convergence 는 아니지만, 기존에 있던 결과값을 군집으로 재구성하여 사용하는 형태로 실시간 적용하는 알고리즘이 발표되었다고 한다.

2. NEAT(NeuroEvolution of Augmenting Topologies)

- NEAT 는 신경망을 진화적인 기법으로 구축하는 것으로서, 기존의 신경망과 달리 학습데이터가 없어도 된다. 진화적인 기법이기 때문에 적합도 함수를 정의하면 그만이고, 여기서 학습 데이터가 없어도 된다는 것은 기존의 신경망을 진화시키는 기법들이 학습 데이터와의 오차를 통해 Weight 를 조절하는 방법을 취하고 있지만, NEAT 는 적합도 함수를 전혀 다른 형태로 정의해도 신경망을 구축할 수 있다는 것이다.
- 이건 상당히 큰 발전이라 할 수 있는데, 신경망이 갖고 있는 적응적인 특성은 다른 알고리즘과 차별화 되지만 학습 데이터를 구축하기 까다롭다는 문제가 있었다. 그리고 이런것들이 있다 하더라도 구조나 파라미터를 전부 최적화 한다는 것이 상당히 피곤한 일이 었는데, 이걸 진화적인 기법으로 자동으로 튜닝하여 발전한다는 것이다. 하지만 역시 진화적인 기법의 가장 큰 단점이 이 안에도 내포되어 있는데, 지역적 최적점에 도달할 확률도 그만큼 높다는 것이다. 그래서 기존의 신경망을 학습시키는 방법과 적절히 조화를 시키면 상당히 좋은 결과가 나온다. (실험해보니 오우 만세 lol

3. GPGPU(General Purpose on Graphics Processor Units, 틀렸을수도... -_-)

- 이건 뭐 워낙 유명해서 딱히 설명할 필요도 없다.
- 다루는 알고리즘들이 대부분 반복적인 연산을 취하다보니 GPU 를 적용하면 속도가 참말로 아름답게 빨라진다. 몇가지 테스트한 코드가 있긴 한데, 최적화도 덜되고 좀 부끄러워서 공개를 못하고 있다. 언젠가는 뭐 공개할 거 같지만;;; 어쨌든! 효과는 진짜 아름다움.

4. 진화연산을 위한 진화연산

- 최고로 관심있는 분야. 진짜 Best of Best
- 3년전부터 생각하던건데, 그땐 실력이 모자라 이걸 어떻게하면 좋을까 라는 막연한 생각 뿐이었지만 스페인에서 이미 시도한 바가 있다. (3년전에 시도 했으면 거의 동시에 결과가 나왔을텐데... )
- 하지만 그들이 한 것도 단점이 있고, 내가 하려는 바와는 약간 다르기 때문에 도전해볼만 하다라고 생각한다.

5. Central Pattern Generator

- CPG 가 갖는 의미는 상당하다. CPG 모델 자체에 Feedback이 나타나있진 않지만, 단순히 보행에 관련된 보행 신호 발생기로서의 CPG 의 의미는 다른 그 어떤 수학적 모델보다 아름답지 않을까? 기존에 많이 사용되는 제어기법이나 I.K. 를 계산하여 자취를 따라가는 방식들이 갖는 의미와는 또 다른 의미를 갖는다.
- 결국 휴머노이드가 진짜 인간과 같은 보행을 해야한다고 생각하면 인간이 걷는 방식과 동일한 방식으로 걸어야 될 것 같은데, 인간이 CPG 를 이용해서 보행을 하니 CPG야 말로 보행 알고리즘에 대한 가장 기본적인 시작이 되어야하지 않을까 싶다.
- 그러나 역시 해외에서도 시도하고 있지만, 아직까지 올바른 모델을 만들어내기 어려운 부분이 인간이 갖고 있는 보행에 대한 특성을 어떻게 수식적으로 반영하는가 이다. 그중에서도 특히 영상정보를 보행에 반영하는 부분은 거의 이루어지지 않고 있다고 봐도 된다. 물론 영상 정보에서 이동해야할 경로를 얻어내고 이를 수정하는 것은 많이 이루어지고 있지만, 영상 정보 자체가 2차원의 정보이기 때문에 이것만 가지고 보행에 대한 불균일성을 모두 해결하지는 못한다.
- CPG 자체에 대한 관심도 높지만, 개인적으로는 CPG 라는 기법 자체에 어떠한 형태의 기법을 도입해야 인간이 갖는 영상정보의 반영형태가 이루어질지... 이것이 가장 큰 관심사이다.

정말 몇달간 포스팅 자체를 생각하지 못할만큼 뭔가 이상한 정신세계의 트러블이 있었다.
뭐가 그리 바쁜건 아닌데... 딱히 바쁘지 않은것도 아니고...
아니다.. 바쁜가? -_-;;;;

어쨌든.
세상엔 참 신기한게 많다는 이상한 결론.
저작자 표시 비영리 동일 조건 변경 허락
Posted by SHHyun
2010/01/05 02:05
크리에이티브 커먼즈 라이선스
Creative Commons License

어쩌면 대단히 중요한 일

처음 목표는 GA 의 연산과정중 Evaluation 만을 CUDA 로 수정하여 속도를 가속화시키는 것

그러나

이를 실제 코드로 구현하여 수행해 보았더니 생각보다 빠른 속도가 안나온다

그 이유인즉 CPU -> GPU 간 Memory Copy 연산 및 GPU 상의 Memory Allocation 때문인데, 다른 여러 논문에서 GPU 로 GA 를 수행할 때 속도가 증가되었다고 했던 것들을 검토해 보았더니 전부 GPU 상에서 모든 유전 연산을 수행하고 있었다.

분명 단일 연산만을 놓고 보았을 때는 GPU 상에서 Evaluation 을 한번 처리한 것이 가장 빠르지만, 유전 연산을 CPU 상에서 하게되면, 결국 Memory 할당과 복사를 반복하게 되어 속도가 느려지는 것이다. Evaluation 연산을 하기 위해서는 반드시 GPU 상의 메모리에 CPU 의 현재 상태를 복사해야 하니까 결국 이것때문에 반복적인 메모리 복사가 수행될 수 밖에 없는 것.

그렇다면 결론은 GPU 상에서 모든 연산을 처리하는 것인가?

뭐 중요한 요소중에 하나는 내 GPU 가 Geforce G105M 256M 이기 때문에 큰 메모리 할당도 어려울 뿐아니라, Stream Processor 수도 부족해서 제 속도 나오긴 어려울 수 밖에 없다는 건데...

동일한 실험 조건
static const int POPSIZE = 5000;
static const int MAXGENS = 100;
static const int ITERATION = 200;
static const int NVARS = 10;

GPU 상의 실험 결과(Geforce G105M 256MB)
Durations : 14118.000000 ms

CPU 상의 실험 결과(Intel Core2Duo P8600@2.4Ghz, 4 GB ram)
Durations : 10998 ms

다음엔 Geforce GTX270 876MB 에서 테스트 해볼 예정.
과연 어느정도 시점에서 Evaluation 작업만을 수행할 때 GPU 사용 작업이 속도가 대폭 상승할 수 있을 것인가?

저작자 표시 비영리 동일 조건 변경 허락
Posted by SHHyun
2009/02/16 00:42
크리에이티브 커먼즈 라이선스
Creative Commons License
1. 개요

병렬처리 시스템은 최근에 가장 주목 받고 있는 컴퓨팅 성능 향상 기술 중에 하나입니다. 물론 과거에도 병렬처리 시스템이 주목 받아 왔지만, 그 당시에는 CPU 의 업그레이드 만으로도 50%, 100% 이상의 성능향상을 이룰 수 있었기에 지금보다는 적은 관심을 보였었습니다. 그러나 현재의 CPU 가 가진 한계에 거의 다다름에 따라, 성능 개선의 기법으로 병렬처리 기법들이 주목을 받고 있습니다. 즉, 하드웨어적 한계를 소프트웨어 적인 기법으로서 넘어서려고 한다고 표현할 수 있겠습니다.

이 병럴처리 시스템은 크게 내부, 외부의 두 가지 요소로서 존재한다고 볼 수 있겠습니다. 내부 요소로서는 CPU 의 멀티 코어화, GPU 의 발전 등을 들 수 있겠고, 외부적으로는 대규모 네트워크로 구성된 컴퓨팅 환경을 제공하는 것이 되겠습니다. 대표적으로는 근래에 각광을 받고 있는 클라우드 컴퓨팅이 있겠습니다.

진화연산은 기존의 알고리즘 들에 비해 엄청난 반복작업이 필요하며, 거대한 리소스를 갖출수록 더 좋은 효과를 가질 수 있는 특징이 있습니다. 이 거대한 리소스에 대한 것은 반박의 여지가 충분히 존재하며, 각 문제에 따른 특화된 알고리즘의 적용으로 이를 개선할 수 있습니다만, 그렇다고 해도 아주 오랜시간에 걸쳐 반복작업이 이루어져야 그에 따른 최적값을 기대해 볼 수 있다는 것은 부정할 수 없는 사실입니다.


2. 진화 연산에 적용된 병렬처리기법
2.1 다수의 CPU 사용

초창기 유전프로그래밍(이하 GP)의 창시자라고 언급되는 John. R. Koza 의 경우에는 천 대의 컴퓨터를 하나의 클러스터로 활용해 GP를 수행하였으며, 이를 통해 과거에 발표되었던 특허들을 그대로 GP의 결과물로서 만들어내는 결과를 보여주었습니다.[1] (첫 페이지의 팔짱을 끼고 있는 그의 모습 뒤로 펼쳐진 것들이 수많은 컴퓨터의 클러스터입니다.)

그러나 일반적인 연구자들이 이러한 리소스를 활용할만한 능력을 갖추기는 어려웠기 때문에 사실상 대규모 클러스터링을 활용한 연구는 Koza 의 이후로 거의 나타나지 않고 있었습니다. 소수의 연구자들에 의해 소규모의 분산 처리 시스템[2]이나 여러 개의 CPU 를 사용한 연구[3]는 이루어지고 있었습니다. ([3] 논문은 가상의 병렬 처리 머신을 통해 데이터를 주고받는 것에 대한 논문입니다만, 저 논문의 결과물로서 lil-gp 의 병렬화된 형태를 언급하는 데 이것은 다중의 CPU 를 사용하는 병렬 처리 기법이 사용되어 있습니다.)


2.2 GPU

시간이 흐른 뒤, nVidia 에서 GPU 가 나오게 되었습니다. 이것은 벡터 연산에 특화되어 있고, CPU 에 비해 압도적인 처리성능을 보여주기에 수 많은 알고리즘이 이를 해당 알고리즘에 적용시키기 시작하였습니다. 물론 진화연산에서도 절대 예외일 수는 없었습니다.

대표적인 논문으로 몇가지를 언급하자면, 우선은 진화 연산을 타겟으로 삼은 것은 아니지만, GPGPU(General-Purpose computation on Graphics Processing Units) 의 개념을 활용해 알고리즘에 적용하는 것이 좋겠다고 제안한 논문이 있습니다. [4] 그리고 실제 GPU 를 사용해서 GP를 수행하고, 이에대한 성능 비교를 수행한 논문이 발표되게 되었습니다. [5,6,7]

일반적으로 생각하기에 GPU 를 통해 병렬적으로 개체의 해석을 수행하게 되면 CPU 만을 사용하는 현 GP 에 비해서 엄청난 속도 향상을 기대 하지만, 실제로는 모든 문제에 대해서 그렇지는 않았다는 내용이 [6] 논문에서 나타나고 있습니다. 그러나 위의 논문에서 사용된 컴퓨터의 사양은 T2400 (1.83 Ghz), 1.5GB ram, GeForce 7300 GO with 512 RAM 으로서, 노트북 컴퓨터라고 보시면 됩니다. 즉, 일반적으로 사용하는 GPU 에 비해서는 그다지 좋은 성능을 보여주는 것은 아니었던 것입니다.

그리고 [7] 논문에서는 GPU 에 최적화된 GP 연산 기법을 소개하고, SIMD 처리 형태에 알맞은 데이터 처리 방식을 사용하여 더 좋은 효율을 보여준다는 것을 나타내고 있습니다. 또한, 이 논문에서 더 주목해 볼 수 있는 것은 Geforce 8800 GTX 라는 고사양의 GPU를 사용했다는 것과 이를 통해 CPU 의 오버헤드가 0.1%에 근접한다는 내용, 그리고 기존에 해결하는데 매우 오랜 시간이 걸렸던 거대한 형태의 Regression 문제를 해결했다는 것에 있습니다. 1024 x 1024 x 1000 의 크기의 문제를 200번 수행하는데 6시간 46분 17초가 걸렸다는 건, 기존에 우리가 처리할 엄두도 못 내던 거대한 크기의 문제들을 GPU 를 사용하여 처리한다면 더 큰 효율과 빠른 결과를 얻을 수 있다는 것을 의미합니다.

[8] 논문에 이르러서는 Xbox360 이라는 이 종의 하드웨어를 통해 GP를 수행하게 됩니다. 컴퓨터의 GPU 를 통한 결과와 Xbox 360 의 GPU 를 통한 결과를 서로 비교하는 내용이 있는데, 특이할 만한 점은 C# 과 XNA Framework 를 통해 구현된 동일한 프로그램(GP)을 Xbox360 과 PC 에서 변환 없이 수행할 수 있었다는 것, 그리고 결국 성능은 PC 가 더 좋았다는 것이 되겠습니다.


2.3 기타 웹이나 네트워크 기반의 진화연산 기법

이렇듯 GPU 의 등장과 함께 진화 알고리즘은 매우 빠른 병렬처리 알고리즘을 통한 복잡한 문제의 해결, 그리고 GPU 에 걸맞는 형태의 알고리즘의 변화 등이 이루어져 왔습니다. 그러나 사실 GPU 를 통한 GP 의 발전은 아직은 한계가 있습니다. 가장 큰 한계점이라면 단순 Regression 문제나 디지털 논리회로를 벗어나는 문제에 대해서는 아직 그 위에서 해석할 방법이 없다는 것 입니다. 즉, 단순한 문제지만 거대한 데이터 셋을 갖는 문제에 대해서는 그 효율을 극대화 하여 이용할 수 있지만, 복잡한 시뮬레이션의 경우에는 아직 GPU 에서 그것을 수행하기에는 많은 무리가 따르게 됩니다.

GPU 의 진화 연산보다는 살짝 앞선 시기에 웹을 통한 진화 연산의 수행기법들에 대한 연구가 이루어 졌습니다. [9] 논문의 경우에는 웹을 통해 사람이 어떠한 평가를 내리고, 이를 서버에서 모아서 진화연산을 수행하는 형태에 대한 연구기법에 대해 논하고 있습니다. 이는 기계로 평가를 내리기 어려운 적합도 함수, 즉 좋은 음악이나 색의 조합 등 인간의 주관이 개입되어야 하는 문제에 대해서도 진화연산의 수행이 가능하다는 것을 보여준 사례가 되겠습니다.

2007년에 발표된 [10] 논문의 경우에는 XML 과 Ajax 를 통해 웹브라우저로 데이터를 서로 주고받고, 적합도 함수를 평가하며 해결하는 시스템을 구축하였습니다. 이 논문에서 아쉬운 점은 비교할만한 대상이 없었기 때문에, 해당 기법이 기존의 기법에 비해 어느 정도 효율성을 갖는지가 나타나지 않았고, 매우 빠른 연산을 보여주었다는 시간만을 언급하고 있다는 것이었습니다.

그리고 ECJ Framework[11] 에서는 TCP/IP 상의 Asynchronous Island Model 을 지원함에 따라 기존의 진화 연산 문제를 대규모 네트워크를 통한 처리 형태를 쉽게 사용해 볼 수 있습니다. 이미 모든 구현이 이루어져 있기 때문에 약간의 파라미터 수정만 거치면 바로 네트워크를 통한 진화연산 기법의 연구가 가능하다는 장점이 있습니다. 관심 있으신 분은 한번쯤 해보시면 좋을 것 같습니다.


3. 정리

이보다도 이른 시기에 네트워크를 통한 데이터 교환을 통해 진화 연산의 병렬화의 효율에 대해 논하는 것들이 많이 있었지만, 사실상 GPU 와 같이 핵심 테마로서 자리를 잡을 만큼의 파급력을 갖출 수 없었습니다. 이는 어쩌면 진화 연산 자체를 병렬처리로 수행한다는 것은 하나의 연구테마로 갖추기가 어려운 것이었을 수도 있고, 기존의 방법들에 비해 획기적인 성능을 보여주는 사례가 없었기 때문일 수도 있습니다. 혹은 고도의 시뮬레이터를 통한 시뮬레이션을 필요로 하는 그런 문제가 정의되지 않았기 때문일 수도 있습니다.

진화연산에서는 알고리즘 자체가 적은 수행 횟수를 통해 더 개선된 성능을 보여주는 것은 여전히 중요한 테마입니다. 단위 시간에 대해 더 효율적인 공간의 탐색을 할 수 있다면, 성능 개선을 위한 가장 훌륭한 접근이 될 수 있겠습니다. 거기에 같은 단위 시간에 대해 두 배 아니 열 배 이상의 수행이 가능하다면 더 좋은 성능을 보여주기 위한 가장 좋은 해결책이 아닐까 생각이 듭니다. 물론 이렇게 말하게 되면, 병렬처리 자체는 기존의 알고리즘의 개선을 위한 접근 방법들에 비해서는 중요도가 떨어져 보이는 것이 사실입니다. 그러나 이전에는 접근해 볼 수 없었던 100만개~1억개 이상의 개체의 진화나 이로 인해 나타나는 현상들은 기존의 알고리즘으로 접근하는 방식들과는 다를 것이라 생각되기 때문에, 진화 연산 자체의 병렬처리 시스템은 기존의 방식들과는 별도로 매우 중요한 테마가 되지 않을까 생각합니다.


4. 참고문헌

[1] John. R. Koza – http://www.genetic-programming.com/johnkoza.html

[2] F. S. Chong and W. B. Langdon. Java based distributed genetic programming on the internet. In W. Banzhaf, et al., editors, Proceedings of the Genetic and Evolutionary Computation Conference, volume 2, page 1229, Orlando, Florida, USA, 13-17 July 1999. Morgan Kaufmann. ISBN 1-55860-611-4.

[3] F. Fernandez, J. M. Sanchez, M. Tomassini, and J. A. Gomez. A parallel genetic programming tool based on PVM. In J. Dongarra, et al., editors, Recent Advances in Parallel Virtual Machine and Message Passing Interface, Proceedings of the 6th European PVM/MPI Users' Group Meeting, volume 1697 of Lecture Notes in Computer Science, pages 241-248, Barcelona, Spain, September 1999. Springer-Verlag.

[4] J. D. Owens, D. Luebke, N. Govindaraju, M. Harris, J. Kruger, A. E. Lefohn, and T. J. Purcell. A survey of general-purpose computation on graphics hardware. Computer Graphics Forum, 26(1):80-113, March 2007.

[5] D. M. Chitty. A data parallel approach to genetic programming using programmable graphics hardware. In D. Thierens, et al., editors, GECCO '07: Proceedings of the 9th annual conference on Genetic and evolutionary computation, volume 2, pages 1566-1573, London, 7-11 July 2007. ACM Press.

[6] S. Harding and W. Banzhaf. Fast genetic programming on GPUs. In M. Ebner, et al., editors, Proceedings of the 10th European Conference on Genetic Programming, volume 4445 of Lecture Notes in Computer Science, pages 90-101, Valencia, Spain, 11 - 13 April 2007. Springer.

[7] W. B. Langdon and W. Banzhaf. A SIMD interpreter for genetic programming on GPU graphics cards. In EuroGP, LNCS, Naples, 26-28 March 2008. Springer.

[8] G. Wilson, W. Banzhaf, Linear Genetic Programming GPGPU on Microsoft’s Xbox 360, in Proceedings of 2008 IEEE World Congress on Computational Intelligence, Hong Kong, 2008.

[9] W. B. Langdon. Pfeiffer - A distributed open-ended evolutionary system. In B. Edmonds, et al., editors, AISB'05: Proceedings of the Joint Symposium on Socially Inspired Computing (METAS 2005), pages 7-13, University of Hertfordshire, Hatfield, UK, 12-15 April 2005a.

[10] J. Klein and L. Spector. Unwitting distributed genetic programming via asynchronous javascript and XML. In D. Thierens, et al., editors, GECCO '07: Proceedings of the 9th annual conference on Genetic and evolutionary computation, volume 2, pages 1628-1635, London, 7-11 July 2007.

[11] ECJ - http://cs.gmu.edu/~eclab/projects/ecj/

Posted by SHHyun
2007/10/30 13:14
크리에이티브 커먼즈 라이선스
Creative Commons License
쿨럭쿨럭...

이런거 처음 나가보는데

은근 긴장이 많이 되는걸요;;

내일도 시험이 있고 모레도 시험이 있는데... ㅠㅠ

아아 어쨌든 열심히 해야겠네요 ㅋㅋ

진화연산(정보문화관 E217) 파트에서 마지막 시간
11:40 ~ 11:55 퍼지 추론 기반의 유전알고리즘 선택 연산자 --112
  
이게 제 발표시간 입니다. 15분인데 과연 잘 할수 있을지 모르겠네요 ^^

혹, 이번학회때 다른데에서 발표하시는 분 있으시면 리플이나 메일좀 주세요.

아하하;;
Posted by SHHyun