산업용 로봇
이번 유전 프로그래밍(GP) 시리즈에서는 유전 프로그래밍이 무엇인지, 정보를 어떻게 표현하는지, 진화 알고리즘에서 유전 연산자가 어떻게 작동하는지, 심볼릭 회귀를 통한 정렬 프로그램 진화 예제를 다뤘습니다.
여기서는 이 기술이 발전함에 따라 무엇을 달성할 수 있는지 고수준에서 살펴보겠습니다.
이 시리즈 마지막 장을 이해하기 위해 시리즈 첫 부분에서 다룬 XOR 예제를 상기해 봅시다:
GP로 발견한 XOR 문제의 완벽한 해법: (defun program () (AND (OR X1 X2) (NOT (AND X1 X2) ) ) )
이전 문서의 심볼릭 회귀 예제도 되짚어 보겠습니다:
구간 (0 <= x <= pi/2)에서 sin(x)의 다항식 근사 (defun program () (+ (* (* (* X X) X) (* 0.2283 -0.6535)) X) ) 위 프로그램을 단순화하면 다음 동등 방정식 도출: polysin(x) = -.1492 x3 + x 결과:
| x | sin(x) | polysin(x) |
| 0.000 | 0.000 | 0.000 |
| 0.078 | 0.077 | 0.077 |
| 0.156 | 0.155 | 0.155 |
| 0.234 | 0.231 | 0.232 |
| 0.312 | 0.306 | 0.307 |
| 0.390 | 0.380 | 0.381 |
| 0.468 | 0.451 | 0.452 |
| 0.546 | 0.519 | 0.521 |
| 0.624 | 0.584 | 0.587 |
| 0.702 | 0.645 | 0.650 |
| 0.780 | 0.703 | 0.709 |
| 0.858 | 0.756 | 0.763 |
| 0.936 | 0.805 | 0.813 |
| 1.014 | 0.848 | 0.858 |
| 1.092 | 0.887 | 0.897 |
| 1.170 | 0.920 | 0.931 |
| 1.248 | 0.948 | 0.957 |
| 1.326 | 0.970 | 0.978 |
| 1.404 | 0.986 | 0.991 |
| 1.482 | 0.996 | 0.996 |
| 1.560 | 0.999 | 0.993 |
여기서 제시된 XOR과 심볼릭 회귀 예제 모두 평가 시 단일 값을 반환합니다.
이 특성이 제약은 아닙니다. 함수나 터미널이 실행 시 부작용(side effect)을 가질 수 있기 때문입니다. 정렬 프로그램처럼 벡터 내 요소 쌍을 교환하는 잠재적 부작용을 가진 함수가 포함된 경우가 흔합니다. 변수 간 대입이나 로봇 방향 변경 등 유용한 부작용 예도 많습니다.
함수 세트에는 조건부 함수가 포함되어 진화된 프로그램이 의사결정할 수 있게 합니다. 조건부 함수는 인수를 선택적으로 평가합니다. 예를 들어 (if arg1 arg2 arg3)와 같은 아리티(arity) 3의 함수는 첫 번째 인수를 평가해 결과가 참이면 두 번째 인수를, 거짓이면 세 번째 인수를 평가합니다. 반복 구조도 가능하며, 함수가 인수 중 하나를 여러 번 평가할 수 있습니다. 다만 평가 시간이 과도해지지 않게 반복 횟수와 중첩 수준을 제한해야 합니다. 재귀 공식 허용 연구도 일부 있으나 성공은 제한적이었습니다.
GP 시스템 결과는 LISP형 프로그램이지만, GP 시스템 자체가 LISP로 구현될 필요는 없습니다. 많은 시스템이 C나 C++로 구현됩니다. 프로그램 트리의 선형화된 표현을 사용하면 동적 메모리 오버헤드와 비용이 큰 가비지 컬렉션을 피할 수 있습니다. 피트니스 함수의 효율성은 각 세대마다 수많은 호출이 발생하므로 병목이 되기 쉬워 특별한 주의가 필요합니다. 구현 기법을 다룬 훌륭한 논문은 Advances in Genetic Programming에 실려 있습니다(아래 추천 도서 참조).
신경망 등 다른 머신러닝 패러다임과 마찬가지로, 훈련 데이터(GP 테스트 케이스)에 과적합(overfitting)될 가능성이 있습니다. 과적합은 해법이 데이터를 효과적으로 '암기'하여 정교한 룩업 테이블 이상의 역할을 못 할 때 발생합니다. 이를 완화하는 간단한 방법은 파시모니 요소(parsimony factor)를 사용하는 것입니다. 파시모니 요소는 일반적으로 프로그램 트리 노드 수에 곱해지는 작은 비율로, 그 결과가 피트니스 함수에 반영됩니다. 더 작고 범용적인 해법에 보상하는 개념입니다. 또한 적절한 실험 설계 기법을 사용하는 것이 좋습니다. 예를 들어 예측 모델 개발 시 사용 가능한 데이터의 부분집합으로 피트니스 평가를 제한하면, 나머지 데이터로 결과 모델의 예측 성능을 측정할 수 있습니다.
진화 알고리즘과 마찬가지로 GP는 정확한 해법이나 허용 가능한 해법을 찾음을 보장하지 않습니다. 실행마다 결과가 크게 다를 수 있으며, 종종 조기에 국소 최적해로 조기 수렴합니다. 성능은 문제 복잡도, 함수와 터미널 선택으로 특징지어지는 표현, 피트니스 함수 속성에 크게 의존합니다.
유전 프로그래밍은 다음과 같은 분야의 문제에 성공적으로 적용되었습니다.
문제 복잡도에 따라 여러 번 GP 실행이 필요할 수 있으며, 아예 해법을 못 찾을 수도 있습니다. 이상적으로는 문제 복잡도가 증가해도 GP가 '확장(scale up)'되길 바랍니다. 이를 달성할 좋은 방법을 찾는 것은 활발한 연구 영역입니다. 기존 프로그래밍에서 서브루틴을 통해 고수준 표현을 구축하듯, GP에서도 비슷한 접근이 가능합니다. Genetic Programming II에서 Koza는 재사용 가능한 서브루틴을 발견하는 방법과 계층적 모듈러 프로그램이 더 복잡한 문제를 해결할 수 있음을 뒷받침하는 결과를 제시합니다.
GP는 유전 알고리즘의 자기 조직화 특성과 S-표현의 표현력 및 일반성을 결합합니다. 이 접근의 우아함은 문제 명세를 도메인 특화 피트니스 함수와 적절한 함수 및 터미널 세트 제공으로 단순화합니다. 다양한 문제에 적용 가능하며, GP는 연구의 비옥한 토대로 계속 남을 것입니다.
아직 초기 단계지만, 향후 돌파구는 프로그램을 스스로 작성하는 시스템이라는 성배에 한 걸음 더 다가가게 할 것입니다.
산업용 로봇
TIG 용접 공정과 유사하게 플라즈마 아크 용접(PAW)은 금속 부품 접합에 고품질 방법을 제공합니다. PAW 원리 플라즈마 아크 용접은 기본적으로 가스 텅스텐 아크 용접(GMAW 또는 TIG)의 확장입니다. 두 용접 공정 모두 일반적으로 비소모성 텅스텐 전극을 사용해 전력을 용접 토치와 오리피스 가스로 전달합니다. 오리피스 가스는 GMAW 용접 공정과 PAW 용접 공정 차이의 많은 부분을 차지합니다. PAW 토치 설계로 오리피스 가스가 토치 끝 챔버에 축적됩니다. 아크가 오리피스 가스를 약 30,000°F(약 16,650°C)
서브머지드 아크 용접(Submerged Arc Welding, SAW)은 전극에 의해 아크가 형성되는 공정입니다. 아크는 전기적 전하를 이용해 용접 와이어와 공작물을 통과하여 용접을 수행합니다. SAW와 일반 아크 용접의 차이점은 용접 와이어, 아크, 용접 조인트가 플럭스 층으로 덮여 있다는 점입니다. 플럭스는 아크가 용접 대상 소재로 이동할 수 있는 경로를 생성하며, 용융 재료를 보호하여 스패터와 오염을 방지합니다. SAW 장점 서브머지드 아크 용접의 최대 장점은 고온 재료가 작업자에게 튀는 것을 방지한다는 것입니다. 또 다른