- 다양한 주제에 대해 자유롭게 글을 작성하는 게시판입니다.
Date 15/09/10 23:27:44
Name   Top
Subject   얇고 넓은 지식을 위한 글 - 유전알고리즘
얇고 많은 지식(박학다식, 薄學多識) 한 보탬 하는 것이 목적으로 어디 가서 비전공자도 "나 그거 알아!"라는 말을 하실 수 있도록 쓰도록 하겠습니다.
의사소통에 큰 어려움을 겪고 있는 흔한 대한민국 공돌이니, 혹시나 설명이 이상하고 이해가 어렵다면 댓글이나 쪽지로 얘기해주시면 다듬도록 하겠습니다!

더불어 저 자신도 공부하면서 쓰는 부분도 있으므로 잘못된 개념이 쓰여있을 수도 있습니다.
전공자, 잘 알고 계신 분들께선 잘못된 개념이 있다면 바로잡아 주시기 바랍니다!

----------
서론

이번 글은 유전알고리즘에 대해 설명해보려 합니다.
먼저 최적화가 무엇인지 설명하고 유전알고리즘이 왜 사용되는지에 대하여 얘기해보겠습니다.
그리고서 유전알고리즘의 기본개념들을 설명합니다.
마지막으로 간단한 예제를 통해 어떻게 굴러가는지 보여드리겠습니다.

덧붙여서 참고문헌을 간략하게 소개하겠습니다.
[1] 문병로, "쉽게 배우는 유전 알고리즘 : 진화적 접근법", 한빛 미디어, 2008
[2] 진강규, "유전 알고리즘과 그 응용 Genetic Algorithms and Their Applications", 교우사, 2000
참고문헌 [1] : 제가 개념적으로 많은 도움을 얻었던 책이었습니다. 이 책을 보면서 제가 이 알고리즘이 어째서 돌아가는지 깨달음을 얻었던 그림을 나름대로 재구성하여 중간에 집어넣어 봤습니다.
참고문헌 [2] : 제 주력 사용언어가 MATLAB인데, MATLAB으로 된 전체 유전알고리즘 코드가 있어서 눈으로 보면서 타이핑하며 어떻게 코드가 돌아가나 생각해 볼 수 있게 해주었던 책입니다.


1. 최적화란 무엇인가?

최고로 좋은 것을 만드는 과정을 최적화라고 합니다.
몇 개 중에 제일 좋은 것 고르는 것도 최적화라고 칭하는 경우가 있으나, 좀 더 수학(과학)적인 방법으로 구하는 것을 최적화라 하겠습니다.
최적화 방법은 두 가지가 있는데, 민감도 쓰는 방법과 쓰지 않는 방법이 있습니다.
민감도란 내가 결정할 수 있는게(설계변수) 얼마나 목적에 민감하게 영향을 주는지 수학적으로 구한 것입니다.
조금 더 전문적으로 얘기하면, 목적함수를 설계변수들로 편미분한것을 뜻합니다.
민감도를 쓰는 방법은 설계변수들을 좋아지는 방향으로 조금씩 바꿔나가 더이상 좋아질 수 없을 때까지 나아가는 방식입니다.
예를 들어 산속에서 가장 높은 곳으로 가고 싶다면 높이가 최대가 하게 하는 최적화 문제이며 위도와 경도가 설계변수가 됩니다.
높이는 위도와 경도에 따라 바뀌고 민감도는 경사도가 됩니다. 민감도가 가장 큰, 경사도가 가장 높은 방향으로 걸어나가, 정상에 도달하면 됩니다.
그런데, 이 산맥에서 가장 높은 봉우리를 찾아왔다면? 지금 서 있는 봉우리가 진짜 최고로 높은 곳일까요? 봉우리에 섰다는 건 그 근처에서 가장 높은 곳, 정상에 섰기 때문에, 민감도가 0이 되게 되어 움직일 수 없습니다.
낮에 산에 간다면 물론 어디가 가장 높은 데인지 주변을 둘러보면 알 수 있을 것입니다. 그러나 실제 최적화 문제는 깜깜한 밤에, 오직 휴대폰의 가속도계와 gps 고도계만을 믿고 탐사해 나가는 것과 같습니다. 깜깜한 밤에, 모든 부분의 높이를 알고 그중에 가장 높은 곳을 찾아가야 한다고 생각해보세요. 탐색하고자 하는 공간 안에 모든 목적함수 값의 크기비교를 한다는 것은 거의 불가능에 가깝습니다.
따라서 민감도를 이용하는 경우, 봉우리가 많은 문제-이런 문제를 볼록도(convexity)가 떨어지는 경우 라고 합니다-에서 전체영역에서 최적해를 구하는데 어려움이 있습니다.
살다 보면 민감도를 못 구하는 경우도 많고 convexity 가 떨어지는 경우도 많습니다.
그래서 민감도 안 쓰는 방법이 종종 사용되는데 그 방법 중 하나가 유전알고리즘입니다.

2. 유전알고리즘이란?

자연의 진화 과정에 영감을 받은 알고리즘으로 "여러 유전자들 중 좋은 놈들이 오래 살아남아 자신의 속성을 퍼뜨리는 것" 을 이용합니다.
다음과 같은 기본 순서를 따르며 다양한 변종이 존재합니다.
0) 설계변수를 적절히 잘 표현하는 표현법을 적용하여 적당한 수의 초기 유전자 풀을 만든다.
1) 어느 놈이 좋은 놈인지 평가한다.
2) 좋은 놈들을 적절히 잘 뽑는다.
3) 좋은 놈들의 성질을 적절히 잘 짬뽕시켜 다음 유전자를 만든다.
4) 1)로 간다 그만하고 싶을 때 까지 반복!
이게 되도록 만들면 유전알고리즘입니다.
0,1,2,3 모두 많은 방법이 있으나 제가 이 방법 자체를 연구한 것도 아니고 사용만 했던 입장이며, 목적은 "아는 체 할 수 있다!" 이므로 가볍게만 얘기하고 지나가겠습니다.

다음 예제를 통해 단순 유전알고리즘(Simple Genetic Algorithm)이 어떻게 적용되는지 보여드리겠습니다. 
목적함수를 다음과 같이 설정하겠습니다.
"1a+2b+4c+8d 최대화"
이때 (a,b,c,d)를 유전자로 하고, 각 알파벳은 0 또는 1이 될 수 있습니다.
예를 들어 (1,0,0,1) 이라고 하면,
1*1+2*0+4*0+8*1 = 9
이렇게 되 는거죠.

자 그럼 a,b,c,d 가 각각 1일때 나올 수 있는 목적함수의 값을 볼까요?




평균이 가장 높은 것은 d가 1일 때 입니다.
따라서 목적함수가 더 큰 것들을 고른다면 d가 1인 녀석들이 더 잘 골라져서, 전체적으로 목적함수 값이 증가하는 것이죠.

*번외
이런 식으로 특정한 부분 패턴들을 "스키마" 라고 하고, 이런 스키마 중 '좋은 스키마를 어떻게 잘 보존해서 다음 세대에 물려줄 수 있는가?' 가 유전알고리즘 자체를 연구하시는 분들 주제인 것 같습니다. 하지만 사용만 하는 입장이라 넘겼습니다 -_- 깊게 보고 싶으시면 책보세요 책. 참고문헌 보시면 됩니다.
최첨단 학문이면 논문을 봐야 하나 유전알고리즘 기본 부분은 책보셔도 무방합니다.

이제 그럼 어떻게 골라야 하는지 생각해 봅시다!
목적함수가 큰 것들을 조금 더 많이 고르고 싶습니다. 작은 것은 조금 더 빨리 도태되게 하고 싶어요.
그러면 어떻게 하면 될까요?
큰 것들이 더 크게 영향을 주도록, 작은 것은 더 작게 영향을 주도록 "적합도" 라는 것을 하나 더 둡시다.
예를 들어서 적합도는 목적함수^2 으로 해볼까요?
그러면 0~15 였던 목적함수가 0~255 라는 훨씬 더 큰 범위로 바뀌게 됩니다.
이런 식으로 보통 적합도를 두어 처리하는데, 적합도를 설정하는 건 알아서, 잘! 선택하시면 됩니다 -_-
단 여기서 주의해야 할 건 빠른 것이 좋다고, 적합도 낮은 애들을 바로바로 버리면, 적합도는 낮지만, 최적점의 스키마를 가지고 있는 것들이 버려져 정말 최적점을 찾지 못할 가능성이 있으니 너무 버리지 말고 적당히 버려야 합니다. 예를 들어 d가 1인 것만 챙기고 나머지는 버린다고 하다가는 잘못하면 a가 0인 것만 골라 진짜 최고의 값인 15에 도달하지 못할 수도 있습니다.

앞서 정의한 적합도를 바탕으로, 다음을 한번 볼까요?
"유전자 - 목적함수 - 적합도" 순으로 4개만 무작위로 적어보겠습니다.
(1,1,0,1) - 11 - 121
(0,1,0,1) - 5 - 25
(0,0,0,1) - 1 - 1
(1,0,0,0) - 8 - 64
자 이제 여기서 적당히 다음 세대에 후손을 남길! 2개를 뽑으면 됩니다. 룰렛휠, 토너먼트 등등 이 있는데 여기도 [2) 좋은 놈들을 적절히 잘 뽑는다] 가 되도록 알아서 잘! 선택하시면 됩니다.
예를 들어 룰렛휠 방법을 설명해보겠습니다.
모든 적합도를 다 더한 전체 적합도 합으로, 각각의 적합도를 나누면 각각이 얼마나 적합한 놈인지 비율이 딱 나옵니다. 위 예에서 전체 적합도 합은 211이므로, 비율까지 추가하면 다음과 같습니다.
(1,1,0,1) - 11 - 121 - 121/211=0.573
(0,1,0,1) -  5 -  25 -  25/211=0.118
(0,0,0,1) -  1 -   1 -   1/211=0.047
(1,0,0,0) -  8 -  64 -  64/211=0.303
이러면 각각 선택될 확률이 57.3%, 11.8%, 4.7%, 30.3%라는 얘기입니다.
다트판에 각각 비율로 표시해주시고 다트 던져서 맞춘 유전자 하나 챙기시면 됩니다 흐흐

아무튼 이렇게 부모로서 자신의 형질을 남길 수 있는 유전자 2개를 뽑아주고, 적절히 잘! 섞어주시면 됩니다.
예를들어 (1,1,0,1),(1,0,0,0) 이 뽑혔다고 합시다.
저는 두개 씩 띠어다 붙일 겁니다.
(1,1,0,1) -> (1,1,0,0)
(1,0,0,0) -> (1,0,0,1)
이렇게 말이죠. 꼭 반인 곳에서 할 필요 없고 다시 한번 말하지만, 적절히 잘! 섞어주시면 됩니다.
이렇게 해서 새로운 세대가 만들어지고, 반복하시면 됩니다.

2. 실전! 나도 할 수 있다!

적절하지못한 개드립과 함께 아주아주 간단한 예제를 보여드리겠습니다.

0) 설계변수를 적절히 잘 표현하는 표현법을 적용하여 적당한 수의 초기 유전자 풀을 만든다.

설계 변수 잘 표현하는 거 정말 중요합니다. 문제에 맞춰서 적당히 잘 써주세요 (..)
4개짜리를 만들어 보겠습니다.
랜덤함수 적당히 돌리세요. 여기선 위의 예제를 사용하겠습니다.
(1,1,0,1)
(0,1,0,1)
(0,0,0,1)
(1,0,0,0)

1) 어느 놈이 좋은 놈인지 평가한다.

유전자 - 목적함수 - 적합도
(1,1,0,1) - 11 - 121
(0,1,0,1) - 5 - 25
(0,0,0,1) - 1 - 1
(1,0,0,0) - 8 - 64

2) 좋은 놈들을 적절히 잘 뽑는다.

(1,1,0,1) - 11 - 121 - 121/211=0.573
(0,1,0,1) - 5 - 25 - 25/211=0.118
(0,0,0,1) - 1 - 1 - 1/211=0.047
(1,0,0,0) - 8 - 64 - 64/211=0.303

-> 낮은 것부터 차례로 쌓아 누적 확률 표시

(0,0,0,1) - 1 - 1 - 1/211=0.047              0.047
(0,1,0,1) - 5 - 25 - 25/211=0.118          0.165
(1,0,0,0) - 8 - 64 - 64/211=0.303          0.468
(1,1,0,1) - 11 - 121 - 121/211=0.573    1

나와라 랜덤숫자! 얍! : 0.123
0.047 < 0.123 < 0.165
(0,1,0,1) 선택
나와라 랜덤숫자! 얍! : 0.293
0.165 < 0.293 < 0.468
(1,0,0,0) 선택

축 (0,1,0,1) (1,0,0,0) 한 쌍 탄생!
축하합니다.

반복반복
축 (1,1,0,1) (1,0,0,0) 한 쌍 탄생!
축하합니다.

3) 좋은놈들의 성질을 적절히 잘 짬뽕시켜 다음 유전자를 만든다.

축 (0,1,0,1) (1,0,0,0) 두 분 쌍둥이 출산!
(0,1,0,0), (1,0,0,1) 두 분 반씩 닮았네요 ^^
축 (1,1,0,1) (1,0,0,0) 두 분 쌍둥이 출산!
(1,1,0,0), (1,1,0,1) 왼쪽 분 많이 닮았네요 ^^
굵은 글씨와 원래 글씨로 각각 부모 세대에서 뭘 물려받았는지 표시했습니다.

4) 1)로 간다 그만하고 싶을 때 까지 반복!
(0,1,0,0)
(1,0,0,1)
(1,1,0,0)
(1,1,0,1) 네 분 사회진출 시간입니다. 1)로 가세요. 제가 마음에 들 때까지 ^^

3. 마치며 쓰는 여러 뱀다리들

9/1에 쓰겠다고 거창한 가입인사 올렸었는데 인제야 올립니다. 글 쓰는 것이 너무 어렵네요. ㅠㅠ 계실지 모르겠지만 기다리셨던 분들께 사과의 말씀 드립니다.
그나저나 적절히 잘 설명이 된 건지 모르겠습니다.
이해가 가지 않는 부분들은 댓글이나 쪽지 남겨주시면 최대한 노력해서 답변드리겠습니다!
제가 설명을 못 해서 이해가 안 가는 거니까, 부끄러워하지 마시고 어느 부분이 이해가 안 가는지 얘기해주세요!

유전알고리즘을 사용해본 소감은, 손으로 찾는 게 나은 문제도 충분히 있다는 겁니다 (..)
목적함수 구하는데 약 12초가 걸리는 문제였는데, 보통 유전알고리즘 돌린 예들을 보면 목적함수 계산만 만 번 정도는 아주 우습게 사용합니다. 대충 한 달만 풀로! 컴퓨터 한 대를 희생하면 돼요 하하하하하하하하... 물리적으로 어느 정도 유추할 수 있는 문제다 보니, 유전알고리즘 돌리는 시간보다 손으로 계속 돌려 찾는 쪽이 낫더군요 -_- 이틀 parametric sweep 하니깐 대충 나오던데...
손으로 구하면 논문거리가 아니니 억지로라도 유전알고리즘을 써야하는 타당한 이유 창작 및 그에 따른 구현 덕에 연구가 대충 5개월쯤 딜레이 된 것 같습니다. 교수님 못난 제자 용서하시옵서소.

하스스톤으로 유전알고리즘 짠 학생은 칭찬해주는걸로... 엑셀로 했다니 매우 믿음이 갑니다. 엑셀로 한걸 본적이 없거든요 (..) cc+cv 가 아니란건 직접 짰단얘기니까요. 고등학생때 주어진 길 바깥의 이런거 찾아서 한다는건 대단한겁니다. 원래 그때 쓸려고 했는데, 이제 완성하는군요.

글 다쓰고 그림넣고 정렬까지 다한상태에서 맞춤법 검사기 돌렸다가 잠시 굳었습니다. 이거 쓰기전엔 돌렸는데, 다시 돌릴 엄두가 안나네요. 패스

다음주제는... 생각나면 그때 써보겠습니다. 언제가 될지 모르겠네요... 하하.......



2


    새의선물
    GA는 computation power가 너무 많이 필요한 경우가 많더라고요. 일단 유전자 풀을 충분히 가지고 있어야 하고, 그것들이 어느 정도 diversity를 유지하도록 한 상태에서 최적상태를 찾아야 하는데... 이거 하는데 계산도 많이 들어가고 또 메모리 사용도 많고... 몇 몇 분야에서 확실히 도움이 되는것 같기는 한데, 생각만큼 그리 효용성이 높은거 같지는 않더라고요. 그냥 메트로폴리스 몬테 카를로로 확 돌려버리는게...
    몬테카를로 직접 써본적은 없지만 얘도 무지막지하게 돌리는거 아닌가요? 이거로 원주율 구하는 방법보고 기겁했었는데...

    체고는 Sensitivity analysis 다 하고 (Gradient 구하고) optimization 하는거죠.. 흐흐... 못해서 문제일뿐...
    새의선물
    몬테 카를로도 무지막지하게 돌리기는 하죠. 그래도 속도나 효과면에서 GA보다는 오히려 더 나은 경우도 많은것처럼 보이더라고요. 예전에 계산에 관심이 좀 있어서 이리저리 찾아봤는데...
    제 의지는 아니지만 조만간 하게될 것 같으니 (..) 해본다면 비교 소감 얘기해드리겠습니다.
    새의선물
    네... 기다리고 있겠습니다.
    레지엔
    방사능 관련책 보다가 머리 식히러 들어왔는데 유전학 테러가 요기잉네(..)

    친구가 이쪽 전공인데 예전에 유전 알고리즘 모형 짤 때 혼자 생각하면 머리 아프다는 핑계로 저희 집에 쳐들어와서 강제 자문당한 적이 있는데... 역시 DNA는 디지털입니다?(..) 그 때 했던게 oncogene vs tumor suppressor gene 알고리즘인데 지금 생각해보니 이걸 실물 모델로 만들어냈으면 엄청 좋은데 내는건데(..) 아무튼 뭐 제 전공이 아니라서 다행이다... 뭐 그런 생각이 들었습니다. 글 잘 봤습니다.
    음... 뭔 알고리즘일지 생각만해도 암이 몰려올거같으니 저는 생각하기를 그만두겠습니다. 뭔가 재미있어 보이긴하는데, 학파(?)가 민감도가 없는 최적화는 최적화가 아니다! 하는 쪽이라요 -_-
    잘보셨다니 감사합니다!
    레지엔
    저도 이런 쪽은 꽝이라 잘 이해가 안되지만 아마도 쓰지 않았을까라고 생각하고 있습니다. 암발현을 최종 점수로 놓고 각 gene의 코딩에 점수부여를 해서 맞춰가는 뭐 그런 걸 하던데 그 부분은 도대체 이해할 수가 없어서 그냥 각각의 gene이랑 oncoprotein의 설명만 해주고 말았음(..) 저도 전공상 이학, 공학, 약학 전공자랑 같이 프로젝트하는 경우가 종종 있는데 같은 주제를 다뤄도 어프로치가 완전히 다르니까 서로 깜깜이가 되더라고요(..) 그래서 생각을 포기하고 전문영역은 서로에게 위임하는 걸로 쇼부보고 살고 있습니다(..)
    협업하면 같은 전공일지라도 어프로치가 서로 달라 시너지가 [아주 가끔] 나는데 보통 같은일을 몇명이서 같이하고있는 모습(특히 프로그램 짤때 -- 너의 스타일 이해안가 내가 다시 짰어...)을 요즘 쫌 자주봐서 ... 흐흐... 전문영역 나눠서 위임하는게 좋아 보입니다.
    Azurespace
    사실 별별 논문들이 다 나오긴 할 겁니다. 예전에 본 것들 중에 하나는 염색체에 수명 태그를 달아서, 늙으면 죽어서 장례식장에 묻히는(...) GA를 본 적도 있어요.

    유전자 풀이 Elitism 때문에 지나치게 균일화되는 것을 막아보겠다는 발상인데, 제가 딱 보자마자 든 생각은 \"저래봐야 대신해서 새로 추가될 염색체 Fitness가 열등해서 사라져 버릴텐데 의미가 있나\" 였습니다(...) 당시 학부생이었던 제가 한 생각이니 아마 학회에서 발표할 때는 분명히 까였지 않을까 싶은데...

    이런 생물학에서 모티브를 빌려온 ... 더 보기
    사실 별별 논문들이 다 나오긴 할 겁니다. 예전에 본 것들 중에 하나는 염색체에 수명 태그를 달아서, 늙으면 죽어서 장례식장에 묻히는(...) GA를 본 적도 있어요.

    유전자 풀이 Elitism 때문에 지나치게 균일화되는 것을 막아보겠다는 발상인데, 제가 딱 보자마자 든 생각은 \"저래봐야 대신해서 새로 추가될 염색체 Fitness가 열등해서 사라져 버릴텐데 의미가 있나\" 였습니다(...) 당시 학부생이었던 제가 한 생각이니 아마 학회에서 발표할 때는 분명히 까였지 않을까 싶은데...

    이런 생물학에서 모티브를 빌려온 알고리즘들이 특이한게 뭐냐면, 현실에서 일어나는 현상을 반영해서 더 현실적이고 복잡한 모델을 만드는 건 생각보다 어렵지 않은데, 그렇게 할 경우에 성능이 좋아지는가 하면 그렇지 않을 때가 많습니다(...) 참 신기한 일이지요. 그래서 만들어도 실제로 좋은 데 낼 수 있을지 없을지는 실험을 해 봐야 압니다? 음음.
    Azurespace
    일반적인 전체 탐색 알고리즘은 한 번에 하나의 선택을 추가해가면서 탐색을 하는데, 유전 알고리즘의 경우 한 번에 여러 개를 선택해가면서 탐색하는 것과 동등합니다....만 이론은 그런데 솔직히 그 자체로 별로 좋은 성능을 내기는 힘듭니다. 적당한 지역 최적화 알고리즘하고 결합해서 사용할 때에 좋지요.

    GA는 좋은 해를 짧은 시간에 구해야 하는 경우에는 그다지 적합하다고 보기는 힘들고, 다른 최적화 알고리즘에게 \"아마 이 시작점에서 해보면 괜찮은 지역해를 찾을만할걸?\" 하고 알려주는 역할이라고 보면 됩니다. 실제로 뭔가 실용적... 더 보기
    일반적인 전체 탐색 알고리즘은 한 번에 하나의 선택을 추가해가면서 탐색을 하는데, 유전 알고리즘의 경우 한 번에 여러 개를 선택해가면서 탐색하는 것과 동등합니다....만 이론은 그런데 솔직히 그 자체로 별로 좋은 성능을 내기는 힘듭니다. 적당한 지역 최적화 알고리즘하고 결합해서 사용할 때에 좋지요.

    GA는 좋은 해를 짧은 시간에 구해야 하는 경우에는 그다지 적합하다고 보기는 힘들고, 다른 최적화 알고리즘에게 \"아마 이 시작점에서 해보면 괜찮은 지역해를 찾을만할걸?\" 하고 알려주는 역할이라고 보면 됩니다. 실제로 뭔가 실용적으로 쓸만한 걸 하려면 순수 GA만으로는 어려움이 있어요.


    예전에 신경망 자체를 Backpropagation으로 학습하기가 힘들었던 시절에 GA를 사용해서 최적화하기도 했습니다. 문병로 교수님도 이쪽 연구를 많이 하셨죠. 지금 옵투스투자자문 차려서 잘 나가고 계신데, 그 연구실 논문들을 보면 아무래도 GA로 학습시킨 엘만 신경망으로 주식 동향을 예측하지 싶습니다. 근데 요즘 딥 러닝에서 사용하는 SGD로 학습한 신경망에 비해서는 어느 쪽이 비교우위에 있는지는 모르겠네요.
    GA는 좋은 해를 짧은 시간에 구해야 하는 경우에는 그다지 적합하다고 보기는 힘들고, 다른 최적화 알고리즘에게 \"아마 이 시작점에서 해보면 괜찮은 지역해를 찾을만할걸?\" 하고 알려주는 역할이라고 보면 됩니다.
    -> 이거 중요한거 같네요. 진짜 새로운 방법론 제시 하는 분들 보면, 이 방법은 초기 영향 안받는다! 라고 열심히 증거자료들을 보이시는데, 다른 문제에 적용하면 안그런 경우가 많다보니, 결국 어플리케이션에 적용하려면 초기치 잡는게 정말정말 중요하더군요 -_-

    ANN 쪽은 현재 관심[만] 있는상태이고 대학원 강좌가 이번학기에 열려 지식을 쌓아갈 듯 하니, 나중에 심도깊은 이야기를... 할 수 있겠죠...? 흐흐...
    대학원때 제 전문분야 였습니다?
    이녀석의 장점은 잘 모르는 분야라도 일단 적용해 볼 수 있다.
    제가 겪은 바로 가장 큰 단점은 컴퓨팅 파워 시간 등등 여러가지가 있겠지만 연구자 또는 개발자로써 제일 난감한게 결정해 줘야할게 너무 많다는 거에요.
    저기 나와 있는 \'잘 표현하고\', \'적절히 뽑고\', \'적당히 섞고\' 이런 말들이 글쓴님이 설명을 쉽게 하려고 쓰신것이 아닙니다.
    실제로 알고리즘이 저렇습니다? 즉 표현 평가 뽑기 섞기 심지어는 언제까지 돌릴지 등을 다 어떻게 할지 결정해야되요. 각 펑션별로 또 적용할 분... 더 보기
    대학원때 제 전문분야 였습니다?
    이녀석의 장점은 잘 모르는 분야라도 일단 적용해 볼 수 있다.
    제가 겪은 바로 가장 큰 단점은 컴퓨팅 파워 시간 등등 여러가지가 있겠지만 연구자 또는 개발자로써 제일 난감한게 결정해 줘야할게 너무 많다는 거에요.
    저기 나와 있는 \'잘 표현하고\', \'적절히 뽑고\', \'적당히 섞고\' 이런 말들이 글쓴님이 설명을 쉽게 하려고 쓰신것이 아닙니다.
    실제로 알고리즘이 저렇습니다? 즉 표현 평가 뽑기 섞기 심지어는 언제까지 돌릴지 등을 다 어떻게 할지 결정해야되요. 각 펑션별로 또 적용할 분야별로 방식도 다양하고 뭐가 딱 좋다도 없습니다. 그러다 보니 알고리즘을 만들어도 파라메타가 너무 많고 그 파라메타는 또 어떻게 정하나요?
    제가 학부때 하도 답답해서 유전자 알고리즘의 가장 좋은 파라메타를 찾는 유전자 알고리즘을 구현했었습니다. 이거 무슨 뫼비우스의 띠도 아니고...
    게다가 평가 함수가 하나면 다행인데 여러개일 수도 있습니다? MOGA 녀석인데...
    여튼 제 대학원 생활을 피폐하게 만든 녀석을 보니 감회가 새롭네요.
    요즘 회사에서 일하다 회의하면서 타부서나 업체에서 이건 슈퍼컴퓨터를 써서 유전자 알고리즘을 써서 결정했고 이런게 나오면 아 쓸데없는 짓을 시간과 자원을 들여가며 했구나 라고 생각합니다. 크크
    잘 모르는 분야라도 일단 적용해 볼수 있고, 왜 원하는 결과가 안나왔나 하는 자신을 볼 수 있었습니다.
    여자친구를 데려와라 같은 물리적으로 안될 문제를 풀어보라고 던져주니 못프는데, 알고리즘이 문제인가 고민했던 지난날이 떠오르네요.

    그리고 다른 최적화 솔버들도 생각보다 정해야하는 파라미터들이 많아서 매우 성가십니다 -_- 될때까지 적절히 잘! trial and error!

    다목적 최적화 한다고 NSGA-II 하는데 쥭는줄 알았습니다. MATLAB code 가 있어서 망정이지 base 부터 짰으면, 지금 연구가 제 석사학위 논문 전체 주제가될뻔...
    제가 바로 그 NSGA-II 를 쌩으로 다 짰습니다? 그것도 Matlab으로...
    석사 졸논 주제가 그걸로 어떤분야의 다양한 스펙트럼을 커버하는 Feature Selection을 하는 거였죠...
    그때가 아마 저도 제 컴퓨터도 가장 고생한 시기가 아닌가 싶습니다.ㅠㅠ
    다양한 스펙트럼이면 레이저 쪽인가요? 학교에 새로 오신 교수님이 레이저 가공쪽이신데 spectrum 때문에 SVM 쓰셨다는 말을 들은 기억이...

    쌩으로 다짜신건 존경합니다. 논문은 도저히 이해가 안가서 코드보고 돌아가는 모습을 보면서 어떻게 동작하는지 이해했는데... @_@ 제약 조건 추가하는데 엄청 고통스러웠습니다.
    스펙트럼 용어에 혼동이 있었나 봅니다. 저는 음악관련이었어요. 저때 한참 추천시스템 관련해서 유행이었거든요.
    한마디로 정서 날씨 시간 등에 따라서 음악을 추천하는데 어떤 Feature 들을 보면 되는지 연구하는 거였습니다.
    뭐 연구는 개뿔 그냥 이것저것 알고리즘 적용해 보는 거였죠. 만만한게 GA다 보니 흐흐
    그래도 GA는 나름 직관적인 편이라 구현 할만합니다?
    적어도 뉴럴넷이나 SVM같이 수학적 수식들 덕지덕지 있는 것은 논문해석 자체가 안되서 크크
    어떤선배는 그런게 더 쉽다곤 하더군요. 공식그대로 구현하면 되지 않냐고, 생각자체가 다른사람들이 있는 것 같습니다. 크
    아... 음성인식쪽이셨군요. 음악이니까 쪼끔 범주가 다른가요? 그러면 소리인식으로..

    공식그대로 구현하면 되지 않냐고... 음... 그게 쉽다면......... 허허... 허허허허....
    생각자체가 다른사람들이 있는 것 같습니다.(2)
    darwin4078
    좋은 글 감사합니다.
    좋게 봐주셔서 감사합니다 (__) 깊고 넓은글로 보인다면 앞으로 방향좀 수정해야할 것 같네요 ㅠㅠ...
    그리고 역시 여기도, 함부로 잘난척하면 안되는 무서운곳으로... 위에분들 무서워요 ㅠㅠ
    darwin4078
    저 위엣분들은 무서운 분들이고, 저는 그냥 병신이므로 무서워하지 마시고 편하게 글 쓰세요.
    \'병\'의 신 이신가요?! 안아프지만 아파보이는 병 어디 없나요 -_- 있으면 추천좀...

    아는척 이라기보단 잘난척이 더 정확한 표현이였네요. 수정하겠습니다.
    무서운 것과 별개로 제가 아는 것을 여러사람들과 얘기하며 좀더 다듬을 수 있는 좋은 곳이란 것을 다시 확인했으니, 더 적극적으로 쓰도록 하겠습니다!
    눈부심
    혹시 올리신 표현 저도 써먹어도 되나요.
    구밀복검
    스포츠에 이런 걸 적용해봐야...
    음? 스포츠에 어느부분 얘기하시는 건가요 +_+ 적용할 부분 얘기해 주시면 연구주제로 한번... 흐흐
    구밀복검
    스포츠의 클럽팀을 각각 하나의 개체로 간주한다면, 스포츠 리그 자체가 일종의 유전 알고리즘인 셈이니까요. 이런 알고리즘이 진행되는 와중에 전술 혁신과 선수 간의 우승열패가 발생하고, 이렇게 남겨진 승자의 전술과 선수 운용 패턴, 트레이닝 등은 유사 스키마로서 주변과 후대에 전파되어 재생산되죠. 그리고 리그 사이클이 빠르고 경기 수가 많은 종목일수록 빠르게 도태와 자연선택이 일어나고요. 스포츠 종목의 가장 큰 아쉬움이라면 아무리 빨라봐야 컴퓨터 계산에 비해 한참 늦은 터라 최적화가 이뤄지는 속도가 엄청나게 느리다는 것일 테고요. 해서 과거에 발생했던 스포츠 경기들의 승리 구성 요소를 분할하고 계량화하여 어떤 식으로 유전 알고리즘이 작동되었는지 역추적하고 이것을 미래 예측에 적용하는 식의 발상도 생각해봄직 하지 않나 합니다.
    아. FM 생각나는 얘기네요. FM 같은경우 하스스톤 사례처럼 적용해서 돌려볼 수 있을것 같은데 굉장하신 분들이 시도해보지 않을까 합니다.
    실제 리그에 적용해서 하는건... 가능할 것 같기도 하고 아닌것 같기도 하고... 유전알고리즘의 장점이 적용하기 쉽다. 이지만 제대로 원하는 해를 얻는건 별개더라구요
    무한루프
    한참 연구하던 주제를 여기서 보니 반갑군요. 크크.
    시뮬레이션을 통해서 해의 평가가 이루어지는 다목적 최적화쪽을 연구하다보니 최적해 찾는데 많이 썼었습니다.
    이게 같은 해를 시뮬레이션 돌리더라도 그때 그때 평가값이 달라져서(노이즈라고 하죠) 진짜 평가값을 알려면 얼마나 평가해야되나 뭐 이런 문제들이 있었죠.
    진화 알고리즘이 파라미터가 많은건 단점이기도 한데 파라미터마다 다 설계 의도가 있다보니 이걸 잘 반영해서 조정해서 탐색하면 해를 꽤 잘 찾아주게 만들 수 있더라구요.
    병렬화해서 돌리기 좋은것도 장점이구요.
    어려울 수 있는 내용인데 쉽게 잘 쓰셨네요. 글 잘 보고 갑니다.
    주말이 디아에 정복당해서 이제서야 봤습니다 -_- 칭찬 감사합니다! 헤헤

    [이걸 잘 반영해서 조정해서 탐색하면 해를 꽤 잘 찾아주게 만들 수 있더라구요] 이부분이 장점이자 단점으로 느껴졌던게, \"잘 반영해서 조절한다는 것이 그냥 직감적으로 전역탐색하는 것에 비해 가지는 장점이 무엇인가?\" 에 대해서 할 말이 없더군요... 일주일 돌려놓고 찾은 해나, 제가 잘 반영해서 이틀동안 찾아간 해나 같은 수준이라 연구에 대한 회의가 많이 들었습니다... 흑흑

    그나저나, 유전알고리즘 하신 분들이 왜이렇게 많은거죠?!!
    무한루프
    크크크. 맞습니다. 잘 조정하는게 어렵죠. 문제에 따라서 워낙 좋은 값이라는게 달라지다 보니 흐흐.

    제가 하던 연구도 평가 값을 얻어내는데 좀 시간이 걸리는 편이라서 탐색을 빠르게 하기 위해서 여러 가지 방법을 썼었습니다.
    초기 유전자 풀을 만들때 잘 알려져 있는 적당히 좋은 해들을 섞어서 만든다던가, 부모가 죽지 않고 살아남아서 자식과 경쟁하게 한다던가, 실제로 평가해보기 전에 과거에 평가했었던 비슷한 해들의 평가값을 보고 대충 평가 값을 추정해 본 다음에 영 아닐거 같은 녀석은 평가를 안한다던가 뭐 암튼 시도해볼수 있는 아이디어는 굉장히 많더라구요.
    그런데 정말 그냥 도구로 쓰기에는 그렇게 친절한 알고리즘은 아닌거 같습니다. 크크크.
    목록
    번호 제목 이름 날짜 조회 추천
    1434 과학/기술콩고 사람의 로켓 무한도전 - 트로포스피어 시리즈 로켓 7 April_fool 15/11/03 10530 0
    1354 과학/기술지구의 온난화와 빙하기 4 모모스 15/10/27 18901 8
    1322 과학/기술설사병 이야기 12 모모스 15/10/23 12082 3
    1297 과학/기술쓰레기 유전자 ( Noncoding DNA ) 와 유전자 감식 22 모모스 15/10/20 14101 9
    1285 과학/기술우주팽창, 건포도빵, 풍선 12 눈부심 15/10/18 13800 0
    1259 과학/기술X 염색체 - 인간의 기본형은 여성? 13 모모스 15/10/15 15534 2
    1252 과학/기술각인 - 애들은 엄마, 아빠 누구 머리를 닮나? 11 모모스 15/10/14 24728 6
    1245 과학/기술일본원숭이랑 침팬지랑 BBC 다큐 #5 2 눈부심 15/10/13 10751 0
    1229 과학/기술새는? BBC 다큐 #4 12 눈부심 15/10/11 7816 1
    1228 과학/기술하마랑 물고기랑 BBC다큐 #3 7 눈부심 15/10/11 11816 1
    1225 과학/기술고래는? BBC다큐 #2 4 눈부심 15/10/11 8619 0
    1220 과학/기술하마랑 새랑 BBC 다큐#1 4 눈부심 15/10/10 7716 0
    1215 과학/기술불멸의 세포 15 모모스 15/10/09 12058 9
    1212 과학/기술쌩쥐우주비행사 톰 6 눈부심 15/10/09 7412 2
    1209 과학/기술코끼리는 왜 암에 잘 안 걸릴까 18 눈부심 15/10/09 11101 0
    1180 과학/기술중국의 푸른 쑥에서 찾아낸 말라리아 치료제 [청호소青蒿素] 12 삼공파일 15/10/06 12825 2
    1175 과학/기술기생충에 대한 또다른 인간의 방어법 IgE 8 모모스 15/10/05 11316 0
    1147 과학/기술섹스의 진화 10 모모스 15/10/01 15264 0
    1112 과학/기술파인만이 이야기하는 광합성작용 4 눈부심 15/09/28 7409 1
    1097 과학/기술외계로부터의 생명 전달 12 모모스 15/09/25 11028 1
    1088 과학/기술너무 어려운 질문 32 눈부심 15/09/24 9145 0
    1036 과학/기술지구는 둥글지 않다? 22 darwin4078 15/09/19 17631 0
    1024 과학/기술유전자조작식물 (GMO) 4 모모스 15/09/18 15899 0
    986 과학/기술줄초상 난 카자흐스탄의 사이가산양들 10 눈부심 15/09/14 7500 0
    966 과학/기술얇고 넓은 지식을 위한 글 - 유전알고리즘 30 Top 15/09/10 11244 2
    목록

    + : 최근 2시간내에 달린 댓글
    + : 최근 4시간내에 달린 댓글

    댓글
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기