빔 탐색
컴퓨터 과학에서 빔 탐색(beam search)은 제한된 세트에서 가장 유망한 노드를 확장하여 그래프를 탐색하는 휴리스틱 탐색 알고리즘이다. 빔 탐색은 최상 우선 탐색을 수정하여 메모리 요구 사항을 줄인다. 최상 우선 탐색은 어떤 휴리스틱에 따라 모든 부분 해(상태)를 정렬하는 그래프 탐색이다. 그러나 빔 탐색에서는 미리 정해진 수의 최상의 부분 해만 후보로 유지된다.[1] 따라서 탐욕 알고리즘이다.
상세
빔 탐색은 너비 우선 탐색을 사용하여 탐색 트리를 구축한다. 트리의 각 수준에서 현재 수준의 상태에 대한 모든 후속 항목을 생성하고 휴리스틱 비용의 오름차순으로 정렬한다.[2] 그러나 각 수준에서 미리 정해진 수인 개의 최상의 상태(빔 너비라고 함)만 저장한다. 이 상태들만 다음으로 확장된다. 빔 너비가 클수록 가지치기되는 상태가 적어진다. 무한한 빔 너비에서는 어떤 상태도 가지치기되지 않으며 빔 탐색은 최상 우선 탐색과 동일하다.[3] 반대로 빔 너비가 1인 경우는 힐 클라이밍 알고리즘에 해당한다.[3] 빔 너비는 탐색을 수행하는 데 필요한 메모리를 제한한다. 목표 상태가 가지치기될 수 있으므로 빔 탐색은 완전성(알고리즘이 해가 존재할 경우 해를 가지고 종료한다는 보장)을 희생한다. 빔 탐색은 최적(즉, 최상의 해를 찾는다는 보장이 없음)이 아니다.
사용
빔 탐색은 전체 탐색 트리를 저장할 메모리가 부족한 대규모 시스템에서 추적 가능성을 유지하기 위해 가장 자주 사용된다.[4] 예를 들어, 많은 기계 번역 시스템에서 사용되었다.[5] (현재는 주로 신경망 기계 번역 기반 방법, 특히 대규모 언어 모델을 사용한다.) 최상의 번역을 선택하기 위해 각 부분이 처리되고 단어를 번역하는 여러 가지 다른 방법이 나타난다. 문장 구조에 따라 상위 최상의 번역만 유지되고 나머지는 버려진다. 그런 다음 번역기는 주어진 기준에 따라 번역을 평가하여 목표를 가장 잘 유지하는 번역을 선택한다.
역사
하피 음성 인식 시스템(1976년 박사 학위 논문에서 소개됨[6])은 빔 탐색으로 알려지게 될 것의 첫 번째 사용이었다.[7] 이 절차는 원래 "탐색의 궤적 모델"이라고 불렸지만, "빔 탐색"이라는 용어는 이미 1977년에 사용되었다.[8]
변형
빔 탐색은 깊이 우선 탐색과 결합하여 완전해졌으며, 그 결과 빔 스택 탐색[9] 및 깊이 우선 빔 탐색,[4] 그리고 제한된 불일치 탐색[4]과 결합하여 제한된 불일치 역추적을 사용하는 빔 탐색(BULB)이 탄생했다.[4] 결과적인 탐색 알고리즘은 빔 탐색처럼 좋지만 최적이 아닐 가능성이 있는 해를 빠르게 찾은 다음 역추적하고 최적 해로 수렴할 때까지 개선된 해를 계속 찾는 언제나 알고리즘이다.
지역 탐색의 맥락에서 지역 빔 탐색은 무작위로 생성된 개의 상태를 선택한 다음, 탐색 트리의 각 수준에서 목표에 도달할 때까지 현재 상태의 모든 가능한 후속 상태 중에서 항상 개의 새로운 상태를 고려하는 특정 알고리즘을 의미한다.[10][11]
지역 빔 탐색은 종종 지역 최댓값에서 끝나기 때문에 일반적인 해결책은 상태의 휴리스틱 평가에 따라 확률적으로 다음 개의 상태를 무작위로 선택하는 것이다. 이러한 종류의 탐색을 확률적 빔 탐색이라고 한다.[12]
다른 변형으로는 유연 빔 탐색(flexible beam search)과 복구 빔 탐색(recovery beam search)이 있다.[11]
각주
- ↑ “beam search”. 《Free On-line Dictionary of Computing》. 2024년 3월 27일에 확인함.
- ↑ “BRITISH MUSEUM SEARCH”. 《bradley.bradley.edu》. 2016년 4월 11일에 확인함.
- ↑ 가 나 Norvig, Peter (1992). 《Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP》. Morgan Kaufmann. 196쪽. ISBN 9781558601918.
- ↑ 가 나 다 라 Furcy, D.; Koenig, S. (2005). 〈Limited discrepancy beam search〉. 《Proceedings of the 19th international joint conference on Artificial intelligence》. Morgan Kaufmann. 125–131쪽.
- ↑ Tillmann, C.; Ney, H. (2003). 《Word reordering and a dynamic programming beam search algorithm for statistical machine translation》. 《Computational Linguistics》 29. 97–133쪽. doi:10.1162/089120103321337458. S2CID 7829066.
- ↑ Lowerre, Bruce T. (1976). 《The Harpy Speech Recognition System》 (PDF) (PhD). Carnegie Mellon University.
- ↑ Ow, Peng Si; Morton, Thomas E. (1988). 《Filtered beam search in scheduling†》 (영어). 《International Journal of Production Research》 26. 35–62쪽. doi:10.1080/00207548808947840. ISSN 0020-7543.
- ↑ Defense Technical Information Center (1977년 8월 1일). 《DTIC ADA049288: Speech Understanding Systems. Summary of Results of the Five-Year Research Effort at Carnegie-Mellon University》 (영어). 6쪽.
- ↑ Zhou, Rong; Hansen, Eric (2005). 〈Beam-Stack Search: Integrating Backtracking with Beam Search〉. 《ICAPS》. 90–98쪽. 2021년 4월 20일에 원본 문서에서 보존된 문서. 2011년 4월 9일에 확인함.
- ↑ Svetlana Lazebnik. “Local search algorithms” (PDF). University of North Carolina at Chapel Hill, Department of Computer Science. 15쪽. 2011년 7월 5일에 원본 문서 (PDF)에서 보존된 문서.
- ↑ 가 나 Pushpak Bhattacharyya. “Beam Search”. Indian Institute of Technology Bombay, Department of Computer Science and Engineering (CSE). 39–40쪽. 2018년 11월 21일에 원본 문서에서 보존된 문서.
- ↑ James Parker (2017년 9월 28일). “Local Search” (PDF). University of Minnesota. 17쪽. 2017년 10월 13일에 원본 문서 (PDF)에서 보존된 문서. 2018년 11월 21일에 확인함.
- CS1 - 영어 인용 (en)
- 잘못된 파일 링크가 포함된 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 검색 알고리즘