"언덕 오르기 검색"의 두 판 사이의 차이
soohyun903 (토론 | 기여) (새 문서: '''언덕 오르기 검색'''은 수치 분석에서 지역 검색 패밀리에 속하는 수학적 최적화 기술을 말하며, 깊이 우선 탐색기법(DFS, Depth - first search...) |
soohyun903 (토론 | 기여) |
||
2번째 줄: | 2번째 줄: | ||
==개념== | ==개념== | ||
− | 언덕 오르기 검색은 검색 알고리즘으로, 평가함수(evaluation function or objective function)를 사용하여 평가함수 값을 증가(감소)시키는 방향으로 나가는 탐색 전략이다. 깊이우선탐색기법(DFS)에 평가함수를 활용한 형태로, 최단 경로의 대한 보장이 없고, 국부최대가 존재할 수 있다. 전체 탐색 공간에 대하여 다른 곳에 더 좋은 경로가 있음에도 한 곳에서만 최대인 곳을 찾는 극대값이다. 이는 과정 회복이 불가능하며 만약 선택한 가지에서 점수가 모두 동점일 경우에는 선택할 경로가 없고, 랜덤 선택을 해야한다.<ref>메정, 〈[https://it-hhhj2.tistory.com/30 탐색 - 경험적기법(언덕등반기법, 최고우선탐색, 빔탐색, A알고리즘, A*알고리즘)]〉, 《티스토리》, 2020-03-27</ref> 현재 노드에서 확장 가능한 이웃 노드들 중에서 휴리스틱에 의한 평가 값이 가장 좋은 것 하나만을 선택해서 확장해 가는 탐색 방법으로, 지역 탐색(local search), 휴리스틱 탐색(heuristic search), 그리디 알고리즘(greedy algorithm)이라고도 한다. 여러 개의 확장 중인 노드들을 관리하지 않고, 현재 확장 중인 노드만을 | + | 언덕 오르기 검색은 검색 알고리즘으로, 평가함수(evaluation function or objective function)를 사용하여 평가함수 값을 증가(감소)시키는 방향으로 나가는 탐색 전략이다. 깊이우선탐색기법(DFS)에 평가함수를 활용한 형태로, 최단 경로의 대한 보장이 없고, 국부최대가 존재할 수 있다. 전체 탐색 공간에 대하여 다른 곳에 더 좋은 경로가 있음에도 한 곳에서만 최대인 곳을 찾는 극대값이다. 이는 과정 회복이 불가능하며 만약 선택한 가지에서 점수가 모두 동점일 경우에는 선택할 경로가 없고, 랜덤 선택을 해야한다.<ref>메정, 〈[https://it-hhhj2.tistory.com/30 탐색 - 경험적기법(언덕등반기법, 최고우선탐색, 빔탐색, A알고리즘, A*알고리즘)]〉, 《티스토리》, 2020-03-27</ref> 현재 노드에서 확장 가능한 이웃 노드들 중에서 휴리스틱에 의한 평가 값이 가장 좋은 것 하나만을 선택해서 확장해 가는 탐색 방법으로, 지역 탐색(local search), 휴리스틱 탐색(heuristic search), 그리디 알고리즘(greedy algorithm)이라고도 한다. 여러 개의 확장 중인 노드들을 관리하지 않고, 현재 확장 중인 노드만을 관리하며, 출발위치·상태에 따라 최적이 아닌 낮은 정상, 국소 최적해(local optimal solution)에 빠질 가능성이 있다.<ref>박준화 JunHwa Park, 〈[https://everyyy.tistory.com/79 인공지능- 탐색과 최적화 - 정보이용 탐색]〉, 《티스토리》, 2019-10-05</ref> 언덕 오르기 검색 기법은 고도 / 값이 증가하는 방향으로 지속적으로 이동하여 산의 정상 또는 문제에 대한 최상의 솔루션을 찾는 지역 검색 알고리즘이다. 더 높은 값을 가진 이웃이 없는 피크 값에 도달하면 종료된다. 언덕 오르기 검색 알고리즘은 수학 문제를 최적화 하는데 사용되는 기술로, 널리 논의된 예 중 하나는 영업 사원이 이동하는 거리를 최소화해야하는 여행사 문제이다. 욕심 많은 지역 검색이라고도 불리며, 그 주변을 넘어서는 안 되고, 바로 좋은 이웃 지역만 본다. 언덕 오르기 알고리즘의 노드에는 상태와 가치 두 가지 구성 요소가 있으며, 언덕 오르기 검색 기법은 주로 우수한 휴리스틱을 사용할 수 있을 때 사용된다. 이 알고리즘에서는 단일 현재 상태만 유지하므로 검색 트리나 그래프를 유지 관리하고 처리할 필요가 없다.<ref name=자바포인트>Java T Point 공식 홈페이지 - https://www.javatpoint.com/hill-climbing-algorithm-in-ai</ref> 언덕 오르기 검색의 원리는 단순히 루프를 실행하고 값이 증가하는 방향 즉 오르막 방향으로만 지속적으로 이동한다. 루프가 피크에 도달하고 더 높은 값을 가진 이웃이 없으면 루프가 종료된다. 언덕 등반의 변형인 확률적 언덕 오르기 검색은 오르막길에서 무작위로 선택한다. 선택의 가능성은 오르막길의 가파른 정도에 따라 달라질 수 있다. 확률론적 언덕 오르기는 실제로 많은 경우에 더 잘 수행할 수 있다. 언덕 오르기 검색 알고리즘을 사용하면 최대값뿐만아니라 최소값도 찾을 수 있다.<ref> 〈[https://qastack.kr/ai/4000/when-to-choose-stochastic-hill-climbing-over-steepest-hill-climbing Steepest Hill Climbing에서 Stochastic Hill Climbing을 언제 선택해야합니까? ]〉, 《QAStack》</ref> |
==종류== | ==종류== | ||
===쉬운 언덕 오르기 검색=== | ===쉬운 언덕 오르기 검색=== | ||
− | 쉬운 언덕 오르기 검색(Simple Hill Climbing)은 탐색 시 현재 노드를 자식 노드와 비교하여 목적 상태와 가장 가까운 노드를 선택할 때, 가장 먼저 찾은 노드를 선택하는 검색 기법이다.<ref name=빨간당무></ref> | + | * ''' 알고리즘''' |
+ | # 초기 상태를 평가하고 목표 상태인 경우 성공을 리턴하고 중지한다. | ||
+ | # 루프 솔루션을 찾거나 신청할 새 운영자가 없을 때까지 루프한다. | ||
+ | # 운영자를 선택하고 현재 상태에 적용한다. | ||
+ | # 새로운 상태를 확인한다. (목표 상태인 경우 성공을 리턴하고 종료한다. / 그렇지 않으면 현재 상태보다 낫다면 새 상태를 현재 상태로 지정한다. / 그렇지 않으면 현재 상태보다 나쁘지 않으면 2단계로 돌아간다.) | ||
+ | # 종료한다. | ||
+ | |||
+ | |||
+ | 쉬운 언덕 오르기 검색(Simple Hill Climbing)은 탐색 시 현재 노드를 자식 노드와 비교하여 목적 상태와 가장 가까운 노드를 선택할 때, 가장 먼저 찾은 노드를 선택하는 검색 기법이다.<ref name=빨간당무></ref> 언덕 오르기 검색 기법을 구현하는 가장 간단한 방법으로, 한 번에 인접 노드 상태만 평가하고 현재 비용을 최적화하여 현재 상태로 설정하는 첫 번째 노드 상태를 선택한다. 그것은 후속 상태인지 확인하고, 현재 상태보다 더 좋으면 다른 상태로 이동한다. 이 쉬운 언덕 오르기 검색기법은 시간 소모가 적으며, 최적의 솔루션이 아니고, 솔루션이 보장되지 않는다.<ref name=자바포인트></ref> | ||
===가파른 언덕 오르기 검색=== | ===가파른 언덕 오르기 검색=== | ||
12번째 줄: | 20번째 줄: | ||
===확률적 언덕 오르기 검색=== | ===확률적 언덕 오르기 검색=== | ||
− | 확률적 언덕 오르기 검색(Stochastic Hill Climbing)은 모든 이웃에서 더 나은 지역에서 무작위로 더 좋은 지역을 선택하는 검색 방법으로, 선택 가능성은 일반적으로 가파른 정도에 따라 달라진다. 일반적으로 가장 가파른 상승보다 느리게 수렴하지만 일부 지역에서는 더 나은 솔루션을 찾는다.<ref name=스택오버플로우></ref> 확률적인 언덕 오르기 검색에서 항상 먼저 선택되는 것은 아니다. 예를 들어, 특정 지역에서 여러 번 방문·생성된 이웃이나 솔루션을 통해 더 나은 이웃·솔루션을 찾은 경우 현재 상태와 새로운 더 나은 솔루션 간의 확률에 따라 임의로 선택할 수 있다.<ref name=확률대최초>Gusti Ahmad Fanshuri Alfarisy, 〈[https://stackoverrun.com/ko/q/12784171 ''What is the difference between Stochastic Hill Climbing and First Choice Hill Climbing?'']〉, 《stackoverrun》, 2018-07-30</ref> | + | 확률적 언덕 오르기 검색(Stochastic Hill Climbing)은 모든 이웃에서 더 나은 지역에서 무작위로 더 좋은 지역을 선택하는 검색 방법으로, 선택 가능성은 일반적으로 가파른 정도에 따라 달라진다. 일반적으로 가장 가파른 상승보다 느리게 수렴하지만 일부 지역에서는 더 나은 솔루션을 찾는다.<ref name=스택오버플로우>Md. Abu Nafee Ibna Zahid, 〈[https://stackoverflow.com/questions/38825027/stochastic-hill-climbing-vs-first-choice-hill-climbing-algorithms ''Stochastic hill climbing vs first-choice hill climbing algorithms'']〉, 《stackoverflow》, 2018-03-04</ref> 확률적인 언덕 오르기 검색에서 항상 먼저 선택되는 것은 아니다. 예를 들어, 특정 지역에서 여러 번 방문·생성된 이웃이나 솔루션을 통해 더 나은 이웃·솔루션을 찾은 경우 현재 상태와 새로운 더 나은 솔루션 간의 확률에 따라 임의로 선택할 수 있다.<ref name=확률대최초>Gusti Ahmad Fanshuri Alfarisy, 〈[https://stackoverrun.com/ko/q/12784171 ''What is the difference between Stochastic Hill Climbing and First Choice Hill Climbing?'']〉, 《stackoverrun》, 2018-07-30</ref> |
===최초 선택 언덕 오르기 검색=== | ===최초 선택 언덕 오르기 검색=== | ||
22번째 줄: | 30번째 줄: | ||
* '''능선 문제'''(ridge) : 날카로운 능선 상에 위치하고 있을 때 정해진 동·서·남·북 어느 방향으로 이동하더라도 고도가 낮아져서 정상으로 오판하게 되는 문제이다. 이동방향의 해상도와 관련된 문제로, 지역 최대치가 연이어 잇는 상황에 해당한다. 이에 검사 방향을 늘리거나 연산자들을 조합하여 적용한 결과를 사용해야하는 방안이 있다.<ref name=빨간당무></ref> | * '''능선 문제'''(ridge) : 날카로운 능선 상에 위치하고 있을 때 정해진 동·서·남·북 어느 방향으로 이동하더라도 고도가 낮아져서 정상으로 오판하게 되는 문제이다. 이동방향의 해상도와 관련된 문제로, 지역 최대치가 연이어 잇는 상황에 해당한다. 이에 검사 방향을 늘리거나 연산자들을 조합하여 적용한 결과를 사용해야하는 방안이 있다.<ref name=빨간당무></ref> | ||
− | * '''고원(대지) 문제'''(plateau;shoulder) : 산 중턱에 존재하는데 모두 동일해서 판단할 수 없는 평평한 영역에 도달햇을 경우 어느 방향으로 이동해도 현재 상황을 개선할 수 없다. 이에 동일 연산자를 반복 적용한 결과를 토대로 진행 방향을 결정해야하는 방안을 세운다.<ref name=빨간당무></ref> | + | * '''고원(대지) 문제'''(plateau; shoulder) : 산 중턱에 존재하는데 모두 동일해서 판단할 수 없는 평평한 영역에 도달햇을 경우 어느 방향으로 이동해도 현재 상황을 개선할 수 없다. 이에 동일 연산자를 반복 적용한 결과를 토대로 진행 방향을 결정해야하는 방안을 세운다.<ref name=빨간당무></ref> |
==특징== | ==특징== | ||
+ | * ''' 변형 생성 및 테스트 ''' : 언덕 오르기 검색 기법은 생성 및 테스트 방법의 변형이다. 생성 및 테스트 방법은 피드백을 생성하여 검색 공간에서 이동할 방향을 결정하는 데 도움이 된다.<ref name=자바포인트></ref> | ||
+ | |||
+ | * ''' 욕심 접근 ''' : 언덕 오르기 검색 기법은 비용을 최적화 하는 방향으로 움직인다.<ref name=자바포인트></ref> | ||
+ | * ''' 역 추적 없음 ''' : 이전 상태를 기억하지 않기 때문에 검색 공간을 역추적하지 않는다.<ref name=자바포인트></ref> | ||
{{각주}} | {{각주}} |
2020년 7월 28일 (화) 17:18 판
언덕 오르기 검색은 수치 분석에서 지역 검색 패밀리에 속하는 수학적 최적화 기술을 말하며, 깊이 우선 탐색기법(DFS, Depth - first search)을 기초로 하여 휴리스틱을 적용한 탐색기법이다. 현재 상태와 자식 노드와의 거리 혹은 비용에 따라 정렬한 후 각 단계의 선택이 이전 단계의 상태보다 나은지를 평가하는 것이다.[1]
목차
개념
언덕 오르기 검색은 검색 알고리즘으로, 평가함수(evaluation function or objective function)를 사용하여 평가함수 값을 증가(감소)시키는 방향으로 나가는 탐색 전략이다. 깊이우선탐색기법(DFS)에 평가함수를 활용한 형태로, 최단 경로의 대한 보장이 없고, 국부최대가 존재할 수 있다. 전체 탐색 공간에 대하여 다른 곳에 더 좋은 경로가 있음에도 한 곳에서만 최대인 곳을 찾는 극대값이다. 이는 과정 회복이 불가능하며 만약 선택한 가지에서 점수가 모두 동점일 경우에는 선택할 경로가 없고, 랜덤 선택을 해야한다.[2] 현재 노드에서 확장 가능한 이웃 노드들 중에서 휴리스틱에 의한 평가 값이 가장 좋은 것 하나만을 선택해서 확장해 가는 탐색 방법으로, 지역 탐색(local search), 휴리스틱 탐색(heuristic search), 그리디 알고리즘(greedy algorithm)이라고도 한다. 여러 개의 확장 중인 노드들을 관리하지 않고, 현재 확장 중인 노드만을 관리하며, 출발위치·상태에 따라 최적이 아닌 낮은 정상, 국소 최적해(local optimal solution)에 빠질 가능성이 있다.[3] 언덕 오르기 검색 기법은 고도 / 값이 증가하는 방향으로 지속적으로 이동하여 산의 정상 또는 문제에 대한 최상의 솔루션을 찾는 지역 검색 알고리즘이다. 더 높은 값을 가진 이웃이 없는 피크 값에 도달하면 종료된다. 언덕 오르기 검색 알고리즘은 수학 문제를 최적화 하는데 사용되는 기술로, 널리 논의된 예 중 하나는 영업 사원이 이동하는 거리를 최소화해야하는 여행사 문제이다. 욕심 많은 지역 검색이라고도 불리며, 그 주변을 넘어서는 안 되고, 바로 좋은 이웃 지역만 본다. 언덕 오르기 알고리즘의 노드에는 상태와 가치 두 가지 구성 요소가 있으며, 언덕 오르기 검색 기법은 주로 우수한 휴리스틱을 사용할 수 있을 때 사용된다. 이 알고리즘에서는 단일 현재 상태만 유지하므로 검색 트리나 그래프를 유지 관리하고 처리할 필요가 없다.[4] 언덕 오르기 검색의 원리는 단순히 루프를 실행하고 값이 증가하는 방향 즉 오르막 방향으로만 지속적으로 이동한다. 루프가 피크에 도달하고 더 높은 값을 가진 이웃이 없으면 루프가 종료된다. 언덕 등반의 변형인 확률적 언덕 오르기 검색은 오르막길에서 무작위로 선택한다. 선택의 가능성은 오르막길의 가파른 정도에 따라 달라질 수 있다. 확률론적 언덕 오르기는 실제로 많은 경우에 더 잘 수행할 수 있다. 언덕 오르기 검색 알고리즘을 사용하면 최대값뿐만아니라 최소값도 찾을 수 있다.[5]
종류
쉬운 언덕 오르기 검색
- 알고리즘
- 초기 상태를 평가하고 목표 상태인 경우 성공을 리턴하고 중지한다.
- 루프 솔루션을 찾거나 신청할 새 운영자가 없을 때까지 루프한다.
- 운영자를 선택하고 현재 상태에 적용한다.
- 새로운 상태를 확인한다. (목표 상태인 경우 성공을 리턴하고 종료한다. / 그렇지 않으면 현재 상태보다 낫다면 새 상태를 현재 상태로 지정한다. / 그렇지 않으면 현재 상태보다 나쁘지 않으면 2단계로 돌아간다.)
- 종료한다.
쉬운 언덕 오르기 검색(Simple Hill Climbing)은 탐색 시 현재 노드를 자식 노드와 비교하여 목적 상태와 가장 가까운 노드를 선택할 때, 가장 먼저 찾은 노드를 선택하는 검색 기법이다.[1] 언덕 오르기 검색 기법을 구현하는 가장 간단한 방법으로, 한 번에 인접 노드 상태만 평가하고 현재 비용을 최적화하여 현재 상태로 설정하는 첫 번째 노드 상태를 선택한다. 그것은 후속 상태인지 확인하고, 현재 상태보다 더 좋으면 다른 상태로 이동한다. 이 쉬운 언덕 오르기 검색기법은 시간 소모가 적으며, 최적의 솔루션이 아니고, 솔루션이 보장되지 않는다.[4]
가파른 언덕 오르기 검색
가파른 언덕 오르기 검색(Steepest Hill Climbing)은 모든 자식 노드를 평가한 값을 비교해서 최선의 경로를 찾는 검색 기법이다.[1]
확률적 언덕 오르기 검색
확률적 언덕 오르기 검색(Stochastic Hill Climbing)은 모든 이웃에서 더 나은 지역에서 무작위로 더 좋은 지역을 선택하는 검색 방법으로, 선택 가능성은 일반적으로 가파른 정도에 따라 달라진다. 일반적으로 가장 가파른 상승보다 느리게 수렴하지만 일부 지역에서는 더 나은 솔루션을 찾는다.[6] 확률적인 언덕 오르기 검색에서 항상 먼저 선택되는 것은 아니다. 예를 들어, 특정 지역에서 여러 번 방문·생성된 이웃이나 솔루션을 통해 더 나은 이웃·솔루션을 찾은 경우 현재 상태와 새로운 더 나은 솔루션 간의 확률에 따라 임의로 선택할 수 있다.[7]
최초 선택 언덕 오르기 검색
최초 선택 언덕 오르기 검색(First-Choice Hill Climbing)은 방문했던 이웃이거나 계산된 것이 아닌, 처음에 발견한 더 나은 상태를 선택한다. 즉, 최초 선택 언덕 오르기 검색은 무작위로 생성된 이웃에서 첫 번째로 더 나은 지역을 선택한다. 현재 상태보다 나은 후자가 생성될 때까지 후임자를 무작위로 생성하여 확률적 언덕 오르기 검색을 구현하는 것이다. 만약 현재 지역에 많은 이웃 즉, 후자가 있다면 최초 언덕 오르기 검색이 좋은 전략이 될 것이다.[6] 첫 번째 선택의 언덕 오르기 검색에서 더 나은 상태의 첫 번째 발견을 선택하는데, 예를 들면, 현재 상태가 검색 공간에서 10,000 개의 이웃을 갖는 경우나 현 상태가 여러번 또는 처음 방문한 후 더 좋은 이웃 상태를 찾은 후 즉시 선택한다.[7] 최초 선택 언덕 오르기 검색은 현재 상태에 많은 이웃이 있는 경우 좋은 전략이 된다.[8]
문제
- 지역 최대치(극대값) 문제 (local maxima) : 정상 주변에 정상 보다 낮은 봉우리들이 있을 때, 그 주변 봉우리에 오를 경우 극 곳이 정상인 것으로 판단할 수 있다. 이의 방안은 백트랙킹을 통해 다른 가능한 경로를 탐색하며 이에는 가파른 언덕 오르기검색이 제안된다.[1]
- 능선 문제(ridge) : 날카로운 능선 상에 위치하고 있을 때 정해진 동·서·남·북 어느 방향으로 이동하더라도 고도가 낮아져서 정상으로 오판하게 되는 문제이다. 이동방향의 해상도와 관련된 문제로, 지역 최대치가 연이어 잇는 상황에 해당한다. 이에 검사 방향을 늘리거나 연산자들을 조합하여 적용한 결과를 사용해야하는 방안이 있다.[1]
- 고원(대지) 문제(plateau; shoulder) : 산 중턱에 존재하는데 모두 동일해서 판단할 수 없는 평평한 영역에 도달햇을 경우 어느 방향으로 이동해도 현재 상황을 개선할 수 없다. 이에 동일 연산자를 반복 적용한 결과를 토대로 진행 방향을 결정해야하는 방안을 세운다.[1]
특징
- 변형 생성 및 테스트 : 언덕 오르기 검색 기법은 생성 및 테스트 방법의 변형이다. 생성 및 테스트 방법은 피드백을 생성하여 검색 공간에서 이동할 방향을 결정하는 데 도움이 된다.[4]
- 욕심 접근 : 언덕 오르기 검색 기법은 비용을 최적화 하는 방향으로 움직인다.[4]
- 역 추적 없음 : 이전 상태를 기억하지 않기 때문에 검색 공간을 역추적하지 않는다.[4]
각주
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 빨간당무, 〈Simple hill climbing, Steepest hill climbing (쉬운 언덕 등반과 가파른 언덕 등반)〉, 《티스토리》, 2017-04-15
- ↑ 메정, 〈탐색 - 경험적기법(언덕등반기법, 최고우선탐색, 빔탐색, A알고리즘, A*알고리즘)〉, 《티스토리》, 2020-03-27
- ↑ 박준화 JunHwa Park, 〈인공지능- 탐색과 최적화 - 정보이용 탐색〉, 《티스토리》, 2019-10-05
- ↑ 4.0 4.1 4.2 4.3 4.4 Java T Point 공식 홈페이지 - https://www.javatpoint.com/hill-climbing-algorithm-in-ai
- ↑ 〈Steepest Hill Climbing에서 Stochastic Hill Climbing을 언제 선택해야합니까? 〉, 《QAStack》
- ↑ 6.0 6.1 Md. Abu Nafee Ibna Zahid, 〈Stochastic hill climbing vs first-choice hill climbing algorithms〉, 《stackoverflow》, 2018-03-04
- ↑ 7.0 7.1 Gusti Ahmad Fanshuri Alfarisy, 〈What is the difference between Stochastic Hill Climbing and First Choice Hill Climbing?〉, 《stackoverrun》, 2018-07-30
- ↑ user5492770, 〈Stochastic hill climbing vs first-choice hill climbing algorithms〉, 《stackoverrun》, 2016-08-08
참고 자료
- user5492770, 〈Stochastic hill climbing vs first-choice hill climbing algorithms〉, 《stackoverrun》, 2016-08-08
- 빨간당무, 〈Simple hill climbing, Steepest hill climbing (쉬운 언덕 등반과 가파른 언덕 등반)〉, 《티스토리》, 2017-04-15
- Md. Abu Nafee Ibna Zahid, 〈Stochastic hill climbing vs first-choice hill climbing algorithms〉, 《stackoverflow》, 2018-03-04
- Gusti Ahmad Fanshuri Alfarisy, 〈What is the difference between Stochastic Hill Climbing and First Choice Hill Climbing?〉, 《stackoverrun》, 2018-07-30
- 메정, 〈탐색 - 경험적기법(언덕등반기법, 최고우선탐색, 빔탐색, A알고리즘, A*알고리즘)〉, 《티스토리》, 2020-03-27
- 〈Steepest Hill Climbing에서 Stochastic Hill Climbing을 언제 선택해야합니까? 〉, 《QAStack》
같이 보기
|