안녕하세요, 코딩하는 물리학자입니다.

저번 글에서 Meta-heuristic Algorithm이 무엇인지에 관하여 알아보았으니 본 게시글부터 어떤 Algorithm들이 있는지에 대해 살펴보고자 합니다.


특히 이번 글에서는 많이 알려진 Meta-heuristic Algorithm 중 하나인 Simulated Annealing(SA)에 대해 알아보겠습니다.


Local Search?

 Simulated Annealing은 Local search 방법 중 하나입니다. Local search 방법은 다음과 같은 특징을 가지고 있습니다.

  • Single solution으로부터 시작한다.

  • 현재 solution 주변 neighbour를 조사하여, 만일 현재보다 낫다면 그 neighbour로 state를 옮긴다.

즉, 주변을 조사해서 더 조건에 부합하는 state로 계속 옮겨가며 적합한 state를 찾는 방법이 바로 Local Search 입니다. 이때 주의해야할 점이, "neighbour를 어떻게, 어디까지로 정할 것인가?" 입니다. 만일 neighbour의 범위를 너무 넓게 잡게 될 경우, step size가 너무 커서 꼼꼼한 search가 힘고, 그렇다고 너무 좁게 잡으면 step size가 너무 작아 수렴이 느릴 수 있고 자칫 Local Minma에 빠질 우려가 있으므로 적절한 범위로 neighbour를 정의하는 것이 중요합니다.  

대표적인 Local search를 이용한 Algorithm으로 Hill climbing, Tabu Search 그리고 Simulated Annealing 등이 있습니다. 이들 모두 Meta-heuristic algorithm에 속하므로, 이후 포스팅을 통해 이들을 소개해드리겠습니다.

Simulated Annealing?

Simulated Annealing이 무엇인지, 대체 어떻게 나온 Algorithm인지 이해하기 위해 Annealing이 뭔지에 대한 느낌을 잡아봅시다.


- Simulated Annealing...?


SA에 대해 구글에 검색해보면 이에 대한 번역으로 '담금질 기법'이란 용어가 함께 나오는 것을 볼 수 있습니다. 잉? 갑자기 웬 담금질? 바로 이 Simulated Annealing이 금속의 냉각에서 아이디어를 얻어 만들어진 Algorithm이기 때문입니다. '담금질'이란, 고온의 금속을 냉각시켜 굳히는 과정을 말하는데요. 높은 온도의 금속이 식으며 단단해지는 이 과정에서 원자들은 자신의 Energy가 더 작아지는 State를 찾아가게 됩니다.


- 온도가 내려감에 따라 더 낮은 Energy state를 찾아 움직인다.


위의 그림은 이 과정을 꽤 잘 나타내주고 있습니다. 위의 세부그림(공이 그려진 작은 그림들)의 세로축은 Energy (Objective function), 가로축은 variable이고 작은 공들은 particle들이라고 생각해봅시다. 시간이 지나며 온도가 낮아짐에 따라 particle들은 낮은 Energy를 갖는 state를 찾아 움직이고, 시간이 충분히 지나면 Local Minima에 안착하게 됩니다.


즉, SA는 고온의 금속이 식으며 Energy를 최소화하는 것과 같이, 주어진 Objective Function을 최소화하는 state를 구할 수 있지 않을까? 하는 아이디어에서 나온 Algorithm입니다. 이와 비슷한 방법으로 Metropolis-Hastings Algorithm이 있는데 이는 추후 Bayesian Inference 항목에서 기회가 된다면 소개해드리겠습니다.


Pseudo Code

자, Simulated Annealing이 '담금질'의 원리를 이용하여 더 낮은 objective function 값을 얻겠다는 것은 알겠는데, 어떻게 이를 적용하겠다는 것일까요? 아래의 Pseudo Code와 함께 알아보겠습니다.


- (좌) Simulated Annealing (우) Acceptance ratio


※ 덤 !

1) 담금질을 한다고 금속의 원자들이 최소의 Energy를 갖는 State(Global Minimum)로 가는 것은 아닙니다. 온도를 매우 서서히 조심스럽게 낮추며 최대한 낮은 Local Minimum에 도달하도록 해야 합니다. 드라마나 소설에서 보면 좋은 무기를 만들기 위해 대장장이들이 담금질을 여러번 하는 것을 볼 수 있을텐데, Local Minimum에 빠진 금속 원자들을 움직여 최대한 Global Minimum에 이르게 하기 위함입니다.


2) 최근 논문에 따르면, 대부분 우리가 생각하는 Local Minimum은 사실 Saddle Point라고 합니다. high dimension의 상황에서 사실 Local Minimum은 매우매우 드문 상황이기 때문. Saddle Point인데 빠져나오는 속도가 너무 느려서 Local Point라 착각하는 것이라고.... (뭐 사실 나오는 속도가 너무 느리면 사실 그거나 그거나 싶긴 하다만;)


논문 : Y.N.Dauphin et al, Identifying and attacking the saddle point problem in high-dimensional non-convex optimization, NIPS 2014

주소 : http://papers.nips.cc/paper/5486-identifying-and-attacking-the-saddle-point-problem-in-high-dimensional-non-convex-optimization

논문에 대한 설명 : https://darkpgmr.tistory.com/148 (개인적으로 자주 참고하는 blog입니다.)







'Computer Science > Metaheuristic Algorithm' 카테고리의 다른 글

[0] Meta-heuristic Algorithm이란?  (3) 2019.01.23
블로그 이미지

코딩하는 물리학자

,

안녕하세요, 코딩하는 물리학자입니다.

본 chapter에서는 다양한 Meta-heuristic Algorithm을 소개하고 어떻게 이용하는지 등을 정리해 보고자 합니다. Meta-heuristic Algorithm은 현재 Software Engineering(SE) 분야에서 꽤 많이 응용되고 있으며, 제 생각에는 SE외의 다양한 분야에도 적용이 가능하지 않을까 생각됩니다.(물리 분야에도 이용해보고 싶은데, 아직 어떻게 이용해야 할지는 잘 모르겠네요ㅜㅜ)


그럼 Meta-heuristic Algorithm을 알아보기 전, Exact Algorithm과 Heuristic Algorithm에 대해 간단히 알아보도록 합시다.


Exact Algorithm vs Heuristic Algorithm

Exact Algorithm이란, 문제의 optimal solution을 항상 구해주는 algorithm을 뜻합니다. 예를 들어, 주어진 숫자들을 sorting하는 문제를 해결하는 Exact Algorithm으로 Selection, Insertion, Quick Sort 등이 있지요. 물론 Computation time은 모두 다르지만, 어떠한 숫자들 집합에 대해서도 이들을 sorting해주므로 이들 모두 Exact Algorithm이라 할 수 있습니다.


반면 Heuristic Algorithm은 optimal solution이 아닌, 이에 충분히 가까운 good solution을 얻는 algorithm입니다. "잉? 그럼 optimal solution을 얻는것도 아닌 것을 왜 쓰냐? 그냥 exact algorithm을 쓰면 되는거 아니냐?" 하실 수 있습니다. 이해를 돕기 위해, 다음 문제를 생각해보지요.


만약 여러분이 일정 영역, 가령 여러분 집 근처에 있는 '포켓스탑'을 최소의 노력으로 돌아다니고 싶다 가정해보도록 합시다.

 

-'포켓몬 고'의 포켓스탑. 근처로 가서 클릭하면 몬스터볼이나 상처약 등 여러 아이템을 제공해준다.


위 문제를 Exact Algorithm으로 푼다면, n개의 '포켓스탑'으로 만들 수 있는 모든 조합에서 걸리는 거리를 구하고 이들에서 가장 작은 경우의 수를 고르면 되겠지요.

하지만, 눈치 빠르신 분들은 아시겠지만, 이 Algorithm의 Computation Time은 모든 조합을 생각해야하므로 O(n!) 이 됩니다. 즉, n이 만일 50개만 되어도 3x10^64이나 되는 엄청난 경우의 수가 된다는 겁니다. 이쯤되면 이거 계산할 시간에 이미 '포켓스탑' 몇 십 번은 돌았겠지요.

Heuristic Algorithm은 이러한 문제에서 짧은 시간에 optimal solution에 '가까운' good solution을 제공해줍니다. 예를 들어, random하게 순서를 배열한 두 경로를 비교하여 그 중 짧은 경로를 남기는 식으로 algorithm을 작성하였다면, 1000번의 iteration 후에는 이중 가장 짧은 경로를 남겼을 겁니다. 이 경로는 최적의 경로는 아닐 수 있지만, 짧은 시간에 '그나마' 좋은 경로가 될 수 있습니다.

위 문제는 TSP(Travelling Salesman Problem)을 조금 바꾼 예제인데, TSP는 Heuristic Algorithm을 적용하는 대표적인 문제입니다. 이후 게시글에서 몇가지 Meta-heuristic Algorithm을 소개하며 TSP에 어떻게 적용이 되는지도 밝혀보겠습니다.


그럼 Meta-heuristic Algorithm은?

이전에 알아본 Exact Algorithm과 Heuristic Algorithm은 모두 problem-dependent, 특정 문제의 solution을 구하기 위한 algorithm이라 볼 수 있습니다. 즉, 숫자들을 sorting하거나 '포켓스탑'의 순서를 정하는 문제 등의 특정 문제를 풀기 위한 Algorithm이라는 것이지요.


- Meta-heuristic이 heuristic이 되는 과정.


Meta-heuristic Algorithm은 Heuristic Algorithm과 같이 good solution을 구하는 Algorithm이지만 problem-independent하다는 차이점이 있습니다. 즉, 특정 문제에 종속되지 않고 다양한 문제에 적용이 가능한 Frame work가 되는 Algorithm이라는 것이지요. 대표적으로 Simulated Annealing, Genetic Algorithm, Particle Swarm Optimization, Ant Colony Optimization 등이 있습니다.

이렇게만 말하면 사실 뭐가 다른지 잘 감이 안오실 겁니다.(저도 그랬으니까요ㄷㄷ) 때문에 이 또한 예제를 살펴봅시다.

Divide and Conquer Algorithm에 대해서는 많이들 들어보셨을 겁니다. 간단히 설명하자면, 해결하고자 하는 문제를 작은 문제들로 나누어 해결하는 방법입니다. 이는 다양한 문제에 적용이 가능한데, 대표적으로 sorting에 적용한 Quick sort, Merge sort 등이 바로 이를 이용한 Algorithm이지요. 조금 더 쉬운 예제로는 자연과학 분야와 공학 분야가 있겠습니다. 자연과학 분야에서 기본 원리를 발견하고, 공학 분야에서 이를 응용하여 여러 문제들을 해결하는 것처럼 말이지요.

Meta-heuristic Algorithm도 이와 마찬가지입니다. 대표적으로 많이 사용되는 Genetic Algorithm은 sorting이나 TSP, NRP 등 많은 문제적용이 가능하므로 Meta-heuristic Algorithm이지만 TSP에 적용하는 과정에서 문제에 맞게 몇 가지 규칙을 정하게 되면 Heuristic algorithm이 되는 것입니다.


아래는 Search Based Software Engineering(SBSE) 분야의 여러 논문들이 정리되어 있는 link입니다. 다양한 Meta-heuristic Algorithm이 적용된 사례들을 볼 수 있으니 관심이 있으신 분은 찾아보시면 좋을 듯 합니다.

http://crestweb.cs.ucl.ac.uk/resources/sbse_repository/repository.htm


추가로, Meta는 그리스어로 '사이에', '넘어서' 라는 뜻을 지니는데 Meta-data는 'Data를 위한 Data'가 되고 Metaphor는 phor가 '나르다' 혹은 '전달하다'라는 뜻으로, '전달을 위한 전달'. 즉, '은유'가 되겠지요. 때문에 Meta-heuristic Algorithm은 Heuristic Algorithm을 위한 Algorithm이라는 뜻이 아닐까 생각합니다.


다음 글부터는 그럼 여러 Meta-heuristic Algorithm에 대해 살펴보겠습니다. 


감사합니다.

'Computer Science > Metaheuristic Algorithm' 카테고리의 다른 글

[1] Simulated Annealing  (0) 2019.01.27
블로그 이미지

코딩하는 물리학자

,

안녕하세요, 코딩하는 물리학자입니다.

  이번 글에서는 대부분의 일반물리학 책의 제 1단원이 되는 '측정'SI unit에 대해 다뤄보고자 합니다. 물리학 뿐만 아닌 화학이나 생물 등 모든 과학은 이 '측정'에 바탕을 두고 있으며, 측정으로 인한 이론의 증명 혹은 측정으로 인한 현상의 관찰이 없다면 그 어떤 석학의 이론도 단지 '가설'에 불과한 것이 됩니다. 때문에 '측정'이란 과학자에게는 필수불가결한, 그리고 매우x100 험난한 과정입니다.

측정?

- 사과가 먹고 싶어요....ㅜㅜ


  그렇다면 '측정'이란 무엇일까요? '측정'이란, 일정한 기준을 통해 대상을 수치화하는 작업을 말합니다. 우리는 일상에서 수많은 측정을 하며 살아가고 있습니다. 이 글을 읽고 있는 지금이 몇시인가요? 당신이 이를 위해 시계를 보았다면, 시간을 '측정'한 것이 됩니다. 오늘 몇 끼를 드셨나요? 이 역시 '측정'입니다. 일상에서 얼마나 많은 측정을 하고 계신지 대강 감이 오시나요?

  저에게 사과가 한 봉지 있다고 해봅시다.(위의 그림 참고) 이 사과 한 봉지를 2명의 친구들에게 나누어준다고 가정할 때, 어떻게 나누어주는 것이 좋을까요? 음... 먼저 사과의 개수로 나누는 방법이 있겠군요. 그럼 이를 위해 사과 1개란 무엇인지 기준을 정하고(이는 일상적으로 우리가 쓰는 '개수' 단위라 생각합시다.) 한 봉지 안에 몇 개의 사과가 있는지를 파악하면 되겠지요. 이렇게 '측정'된 사과의 개수가 10개라면, 저의 두 친구들은 5개씩 사과를 나눌 수 있을겁니다. 그럼 여기서 질문! 이것이 과연 '합당'한가요? 그렇지 않을 수 있겠지요. 예를 들어 위의 그림에서 큰 사과 4개를 한 명이 다 가져갔다면? 다른 친구는 불평을 할 수 있습니다. 때문에 다른 방법을 찾아야겠어요. 두번째로, 무게를 측정하는 방법이 있겠습니다. 이때, 두명이 똑같은 무게를 가져가야 하니 '양팔저울'이라는 측정도구를 통해 두 사람에게 같은 무게 만큼의 사과를 나눌 수 있겠습니다. 이 방법은 '합당'한가요?

  앞에서 간단히 본 이 과정이 바로 '측정'의 과정입니다. 즉, 우리는 측정을 할 때 절대적인(ex. 개수) 혹은 상대적인(ex. 양팔저울로 측정한 무게) 양을 통해 측정을 합니다. 어떠한 방법이 더 좋은 측정인지는 실험의 목적과 대상에 따라 다릅니다. 예를 들어, "그 봉지 안에 사과가 몇개야?"라는 질문에 "니가 가진 것보다는 많아."라는 상대적인 측정을 한다면 질문에 맞지 않겠지요.

  그럼 절대적인 양은 어떻게 측정하는 것일까요? 앞에서 본 예시에서 우리는 '개수'라는 기준을 두고 측정을 하였습니다. 즉, 사과 1개의 기준을 정하고 이를 통해 전체 사과 개수가 10개라는 것을 알 수 있었지요. 때문에 이 기준이 되는 양이 매우 중요해지는데, 만일 기준이 바뀐다면 측정되는 양 자체도 변할 수 있기 때문입니다. 이 기준의 불변성(invariance)을 위해 많은 과학자들이 노력하였고, 최근 2018년에 드디어 SI unit이 재정의됨으로써 이 불변성을 얻을 수 있게 되었습니다. 이는 아래에서 더 자세히 이야기하겠습니다.

SI unit?

             

- 이전 SI (Old SI)와 2019년부터 쓰일 새로운 SI 단위(New SI). 총 4개의 base unit이 바뀌었다. 


  자, 그럼 온갖 고통을 인내하며 겨우겨우 이 '측정'을 끝냈다고 합시다. 이때, 내 측정 결과를 다른 사람에게 알려주기 위해서는 어떻게 해야 할까요? 예를 들어, 제가 한국인 친구에게 "나 오늘 100프랑을 벌었어!"라고 말했다고 합시다. 그럼 제 친구는 말하겠죠, "그게 얼만데?" 이와 같이 만약 과학에 쓰이는 단위가 나라마다 다르다면, 우리는 실험 데이터를 볼때마다 매번 이런 번거로움을 겪어야 할겁니다. 이런 과정을 줄이고자 나온 것이 바로 SI unit입니다. 

  SI unit이란 프랑스어 "Le Système International d'Unités"의 약자로, 국제 단위계를 뜻합니다. 위에서 든 예시처럼 "그래서 그게 얼만데?"를 방지하고자 전세계 과학자들이 모여 국제협약을 통해 기준을 만든 것이지요. SI unit은 총 7개의 base unit과 22개의 derived unit으로 이루어져 있는데, derived unit은 말 그대로 7개의 base unit으로부터 유도된 단위입니다. 우리가 익히 들어본 N, Hz, Pa 등이 모두 derived unit입니다. base unit은 모든 unit들의 기본이 되는 unit들로 s(시간), kg(질량), mol(입자 수), cd(광도), K(온도), A(전류), 그리고 m(길이)가 있습니다.

 앞서 '측정'에서 알아보았듯이, 이러한 기준들에는 반드시 '불변성'이 필요합니다. SI unit의 derived unit은 base unit으로부터 나왔으니, 7개의 base unit이 만일 불변한다면 SI unit은 불변하는 기준으로 생각할 수 있을 것입니다. 하지만 이 기준의 정립은 결코 쉽지 않았습니다. 간단한 예시로, 미터(m)의 경우만 해도 1960년까지는 백금-이리듐 합금을 이용하여 1m를 정의하였으니까요. 즉, 딱 이 정도 길이를 1m라고 하자! 하는 겁니다. 금속이 온도나 습도에 따라 그 길이가 달라진다는 것을 생각해볼 때, 다소 불안정한 정의임은 틀림없지요. 


  

- (좌) 국제 미터 원기 (1889~1960) (우) 국제 질량 원기 (1901~2018)


  과학과 측정 기술이 발전함에 따라 많은 기준들은 불변하게 되었지만, 2018년까지 문제가 되었던 기준이 있었으니 바로 kg입니다. m의 경우 빛의 속도와 s 기준을 통해 정의를 할 수 있었던 반면, kg은 여전히 국제 질량 원기를 두고 있었기 때문이지요. 그래서 2018년 11월 16일 제26차 국제도량형총회(CGPM)에서 그 기준을 마침내 플랑크 상수(h)를 통해 재정의함으로써 불변성을 얻게 됩니다. 그리고 이와 더불어, K은 Boltzmann constant로, A는 electron charge, 그리고 mol은 Avogadro number로 재정의되어 모든 base unit들이 불변하게 되었지요.

  그럼 이러한 재정의가 과연 실생활에 영향이 있느냐? 당연히 SI unit을 재정의하였다고 해서 지금 제 몸무게가 갑자기 1kg이 줄거나 키가 5cm 커지는 일은 일어나지 않습니다. 하지만 기준의 불변성을 확보함으로써 기준의 흔들림으로 생기는 측정의 오차는(매우매우 작겠지만) 앞으로 없어질 것입니다. 그리고 무엇보다, 우리는 이제 우주의 모든 것을 절대적인 양으로 표현할 수 있게 된 것이지요. 우주를 표현하는 7개의 단위, 멋지지 않나요? 




블로그 이미지

코딩하는 물리학자

,