본문 바로가기

4학년 1학기 수업/머신러닝 및 응용

[머신러닝 및 응용] CH.2 Informed Search and Exploration

1. Informed Search Strategies

큐속의 노드의 순서를 결정하기 위해서 evaluation function을 적용.

- frontier node의 순서는 우선순위 큐로 유지.

evaluation function

1) Greedy Best-first Search

goal에 가장 가까운 노드를 Expand.

uniform-cost search는 informed search가 아니다. / g는goal을 향해 직접 search하지 않음.

예) 경로 탐색 문제

(tree search) 평가

- finite에서 optimal, complete하지 않다. (Infinite loop가 생길수있음.)

iasi에서 fagaras로 가는데 solution을 찾는 경우, iasi - neamt간의 infinite loop가 생김.

- m이 miaximum depth of the search space라면, O(b^m)

- 좋은 heuristic function은 space와 time 복잡도를 줄일 수 있다.

 

Greedy best-first graph search는 finite space에서 complete하다.

 

Greedy Best-first Search와 Uniform-cost search의 차이?

#1 Uniform-cost search

- 위와 같은 방식으로, initial으로부터 path cost가 가장 적은 노드를 택하여 expand. 

- frontier list에 중복되는 state는 path cost를 비교해서 가장 낮은 state를 남긴다.

- 이미 방문한 노드를 explored set에 넣음. (그래프 서치)

 

#2 Greedy Best-first Search

- 위와 같은 방식으로, heuristic function의 결과가 가장 적은 노드를 택하여 expand.

(지금까지 어떻게 왔는지 상관X)

 

2) A* Search

 

greedy best-first search와 uniform-cost search의 결합형태.

 

- A* tree Search

- A* graph Search

-> tree보다 graph가 노드가 적으므로, time이라던지가 적게 걸린다!

 

complete하긴한데, optimal인가?

#1 tree-search version of A*

 

h(n)이 admissible하다면, A*는 optimal을 찾을 수 있다.

(admissible의 뜻은 h(n)의 값이 goal까지의 실제 cost보다 넘지않는 형태.)

 

증명

- admissible하기때문에, h(G2) = 0. (게다가, goal에 도달했으니, 0이어야 한다.)

- f(G2)는 suboptimal이기 때문에, f(G2) > C*가 성립.

- f(n) = g(n) + h(n) <= C* (addimissible하기 때문에, 둘의 합은 optimal보다 작거나 같다.)

-> suboptimal인 G2를 선택하지 않는다. ( h(n)이 admissible하다면, A*는 optimal을 찾을 수 있다.)

 

#2 graph-search version of A*

- h(n)이 consistency해야 한다.

(consistency란, h(n) <= c(n, a, n') + h(n')인 경우.)

증명

- f(n)은 점점 증가하거나 같다.

- expand될수록 f(n)은 갈수록 커질것임.

-> 위 2사항은 h(n)이 consistent하기 때문에.

- n'을 선택하게 된다면, f(n') <= f(n). (f(n)은 점점 증가하거나 같으므로.)

- 따라서, goal node는 optimal이다!

 

평가

- A*는 optimal, complete하다.

- 특정한 C*라는 threshold value를 써서, 이보다 f(n)이 크면 잘라내서, 효율성을 높인다.

(C*가 minimum이 이거보다는 더 낮다.는 필요없는 부분을 줄임.)

 

현실

- 그렇게 줄인다고 해도 여전히 exponential!

- 좋은 heuristic을 사용하면 더 효율적이다.

2. Local Search Algorithms

모든 problem이 path로 표현할 수 있는것은 아님. (goal node가 없는 문제가 있다.)

-> 예) 8-queens problem, TSP, time table

임의의 solution을 결정한다음에, 약간씩 변화를 주면서 푼다.

매번 objective function으로 평가를 하게된다.

- attack하는 queens의 pair갯수가 function이 되고, 이를 줄여가면서 0이 되면 optimal.

 

1) Hill-climbing Search

"안개에서 에베레스트를 올라가는 것과 같다"

-> 전체를 못보고, 눈앞의 정도에서 찾아가는 것.

gradient ascent/descent search라고도 함.

 

Example) 8-queens problem

각 column당 하나씩 queen을 둔다.

Successor function에 의해서 generate되는 56개 중에서 가장 나은 state로.

(서로 어택하는 퀸의 갯수를 줄여가는 방향으로.)

Hill-climbing Search의 문제점?

- Local maximum에 갇힐 우려가 있음.

 

해결 방법

#1 Stochastic hill climbing

올라가는 방향으로 가는데, 제일 가파르다고 거기만 가는게 아니라, 돌아서가는게 global일 확률도 있으니,

그쪽에도 chance를 준다.

-> 가장 좋은 방법 말고도, 덜 좋은 방법까지도 선택!

#2 First-choice (simple) hill climbing

전체에 대해서 판단하는게 아니라, successor를 랜덤하게 해보는것. 

-> 56개중에 하나를 선택을 하고, 그게 현재보다 낫다면 그쪽으로 감.

-> 랜덤하게 찍어서 하니까, 빠름. (해가 빨리 수렴한다고는 볼순없다. best로 가는게 아니기 때문에)

-> evaluate가 빠르다! 

#3 Random-restart hill climbing

hill climbing을 여러번 하는것. 그러고  그중에서 나은것 선택.

 

복잡도

state-space의 shape에 달려있음.

NP-hard problems -> local maxima에 빠질  갯수가 exponential하기때문에.

restart를 사용하면, 어느정도 좋은 local maximam을 찾을수있다.

 

2) Simulated Annealing Search

 

아이디어

Efficiency of valley-desceding + completeness of random walk

"bad" moves를 허락해서, local minima를 피할 수 있도록한다.

 

- First-choice (simple) hill climbing와의 차이가 마지막 줄!

- T는 회를 거듭할수록 커지고, bad move로 가는 확률이 작아진다!

 

bad move를 느리게 할수록, conversion(알고리즘을 끝내는데까지는, 루프를 끝내는데까지는)

오래 걸리겠지만,  실제로 minimum이나 maximum을 찾을 가능성은 높아진다.

 

3) Genetic Algorithms

#1 Chromosome design

#2 Initialization & #3 Fitness evaluation

#4 Selection

#5 Crossover

#6 Mutation

#7 Update Generation

Overview

individual을 여러개를 생성해서 시작.

-> 각각 individual들은 alphabet이나 0과 1의 string으로 구성.

각각 individual은 fitness function에 의해서 rate된다.

-> fitness score가 높을수록 select가 될 확률이 높음.

select된 pair들은 crossover된다.

-> 처음에는 large step으로하다가, 나중에, individual이 similar갈수록 (conversion에 다다를때)

smaller step으로 전환.

그리고, mutation.

 

- 조금만 더가면 global찾는데, mutation이나, crossover가 나올수있으니, 그래서 조금 느림.

-> 가다가, hill-climbing같은 local search 적용하면, 조금더 빠르게 찾을수 있음.