Automatically Defined Functions(ADFs)?


J. R. Koza 의 94년에 발간된 Genetic Programming II 에 보면 나오는 용어입니다. 말 그대로 풀이하면 자동적으로 정의된 함수들 쯤 될꺼 같습니다. 그 책의 내용에 따르면 이 기법을 사용하게 되면 트리 안에서 어떤 강제적인 흐름을 가지는 구조물을 위치시키게 되고, 이 구조물은 트리 안에서 반복적으로 사용될 수 있게 된다고 하고 있습니다.


GP 는 터미널 노드와 함수 노드를 사용하여 일정한 흐름의 프로그램을 만들어내죠. 이 ADFs 라는 녀석은 그 일정한 흐름의 프로그램들의 한 부분을 ADFs 라는 하나의 구조물안에 가두어서 반복적으로 사용할 수 있는 효과를 가지게 됩니다. 한마디로 어떤 구조가 반복적으로 사용되어 해결하기 좋은 문제일 경우에는 이를 사용할 경우에 톡톡한 효과를 볼 수 있다는 뭐 그런 말입니다.


GP 를 처음 접할 때 ADFs 라는 용어를 듣고, 그 녀석을 접하는 순간, 어떤 문제든 다 갖다 붙이고 싶은 욕구가 마구마구 싹텄었던 기억이 나는군요. 근데 사실 이녀석은 생각보다 널리 쓰기가 어려운 녀석입니다. 특정 몇몇 문제가 아니라면, 사용하는 자체가 오히려 전체적인 구조를 변화하지 못하게 만드는 주요 요인중에 하나가 됩니다.


예를들면, 어떤 회귀문제(어떤 특정 주어진 몇개의 점을 모두 지나가는 함수를 만드는 그런종류의 문제들)에 ADFs 를 사용한다고 생각해 봅시다. 우리가 일반적으로 생각하는 수식들에서 특정 구조가 지속적으로 반복되는 수식이 과연 얼마나 있을까요? ADFs 는 이런 문제의 경우에는 해당 문제를 오히려 특정 구조가 반복되게 만들 수도 있기 때문에 가급적 피하는것이 좋을 수 있습니다.


그러나 회로를 설계하는 문제를 생각해보면 달라집니다. 만약에 어떤 회로에 특정 필터를 사용하는 부분이 반복적으로 나타나야 한다면? ADFs 가 이 필터의 구조를 가지고 있다면, 지속적으로 특정 필터를 사용하는 그런 효과를 낼 수 있겠지요? 하지만 역시 이것도 현실적으로 잘 생각해보시면, 사람이 ADFs 가 아닌 DFs 로 정의해 놓지 않는한 과연 이것을 필터로 인식하고 지속적으로 사용할 것인가는 쉽게 결론이 나오지 않는 문제가 됩니다. 그러나 엄청난 컴퓨팅파워를 갖추고 있다면, 말도 안되는 군집크기와 진화 세대의 반복을 통해 아마도 좋은 결과를 얻어낼 수도 있지 않을지 생각해봅니다.


또한, 네트워크의 다중입출력 관계에 대한 어떤 구조설계를 한다고 할 경우에도 ADFs 를 사용할 수 있습니다. 기본적으로 GP 는 하나의 출력을 가집니다. 루트노드가 곧 출력이 되는 것이지요. 그리고 노드에 대한 다중상속구조를 지원하지 않습니다. 이런 것을 토대로 볼 때, 이를 해결하는 가장 쉬운 방법은 다중의 트리를 사용하고 모든 트리들은 같은 ADFs 를 공유하는 것 입니다. 이렇게 하면 만약 루트 노드 바로 아래에 ADFs 가 위치한다면 서로 특정 같은 구조의 노드들을 가지게 되는 것이므로 다중상속구조를 살짝이나마 가질 수 있는 것이지요.


ADFs 라는 것은 이렇듯 GP 에서 해결해야할 문제에 특화된 어떤 하나의 기술요소입니다. 문제에 따라서 문제 자체를 좀 더 용이하게 해결해 줄 수 있는 방법입니다. 그러나 역시 모든 기술요소가 그렇듯 장점만을 가지고 있는 것은 아니기에 조심스럽게 지금의 문제가 이 기술을 적용하기가 적합한지 아닌지에 대해 잘 고려해봐야할 필요가 있습니다.

+ Recent posts