AI VIDEO BRIEFING
기호 회귀(Symbolic Regression)로 함수 진화시키기: 표현식 트리와 돌연변이·접붙이기
함수를 재귀적 '트리'로 표현해 무작위 생성·돌연변이·접붙이기로 진화시키는 기호 회귀를 정리한다. 고차원 파라메트릭 곡면을 만들고, NEAT 같은 신경진화와 비교한 장단점까지 짚는다.

핵심 메시지
쉽게 이해하기
제작자는 고차원 공간에서 진화한 '수학적 생물'들을 보여 준다. 이들은 여러 번의 인공 선택(마음에 드는 것을 고르고 나머지를 버리는)으로 다듬은 함수가 만들어 낸 패턴이다. 함수는 입력을 받아 출력을 내는 기계로, 2차원 좌표 U·V를 받아 3차원 좌표 XYZ와 색상값 RGB를 내는 파라메트릭 곡면이다. 여기에 시간 변수 T를 더하면 형상이 시간에 따라 변하고, 입력을 더 늘리면 고차원 물체를 시간 위에 펼쳐 보는 셈이 된다.
제작자가 원한 것은 난수 생성기가 아니라 '함수 정의 자체'를 무작위로 만들어 내는 버튼이었다. 연산과 문법이 절차적으로 생성되는 함수 생성기를 구현하려다, 이미 존재하는 기계학습 기법인 기호 회귀를 다시 발명하게 된다. 핵심 아이디어는 함수를 재귀적 트리로 보는 것이다. 가장 바깥 표현식이 뿌리 노드이고, 하위 노드가 없는 안쪽 표현식이 잎 노드이며 잎은 항상 변수 노드다.
sin, cos처럼 입력이 하나인 단항 연산자만 쓰면 트리는 한 줄기로만 자란다. 가지를 여러 개로 나누려면 add·multiply·divide·subtract처럼 입력이 둘인 이항 연산자가 필요하다. 제작자는 덧셈·곱셈·나눗셈·min/max·절댓값·선형·삼각함수·tanh·시그모이드·가우시안·거듭제곱은 물론 삼각파나 모듈로 같은 연산까지 노드로 갖춘 연산자 집합을 만들었다. 일부 노드는 선형 노드의 기울기·편향처럼 생성 시 무작위로 정해지는 상수 파라미터를 품는다. 트리를 평가할 때는 하위 노드를 재귀적으로 계산하는데, 함수 호출 중첩은 느리므로 트리 전체를 하나의 원시 수식으로 변환해 어떤 언어에서도 빠르게 실행되게 한다.
함수를 진화시키려면 기존 트리를 변형할 방법이 필요하다. 잎을 새 노드로 감싸 키우거나, 선형 노드의 상수 같은 파라미터에 작은 난수를 더하거나, 기존 노드를 통째로 다른 노드로 교체할 수 있다. 교체는 단항을 이항으로 바꾸는 경우처럼 하위 트리를 잃을 수 있어 파괴적이다. 제작자가 '접붙이기(grafting)'라 부르는 기법은 다른 트리의 가지를 복사해 새 노드로 심는 것으로, 서로 다른 트리 사이의 유전적 교차를 가능하게 한다. 출력이 여러 개면 트리도 여러 그루가 필요해 변수들을 공유하는 '과수원'을 키우게 된다.
이렇게 만든 웹 장난감은 Biomorphs와 PicBreeder에서 영감을 받았다. 아홉 개의 동적 곡면 중 마음에 드는 하나를 고르면 그것의 돌연변이 변형 여덟 개가 생성되고, 이를 반복해 형상을 다듬는다. PicBreeder 논문에서 가져온 요령으로, 중심까지의 유클리드 거리 D를 추가 입력으로 넣어 더 대칭적인 패턴을 얻는다. 다만 제작자는 자신의 기호 회귀 구현이 그리 뛰어나지 않다고 솔직히 인정한다. 표현식이 사람이 읽기 좋다는 통념과 달리 트리는 제한을 두지 않으면 끝없이 자라고, 여러 트리가 기능을 공유하지 못해 고차원 출력에 약하다. 이 점에서 신경망 구조 자체를 진화시키는 NEAT 같은 신경진화 기법이 더 낫지만, 수식은 언어 간 이식성이 뛰어나다는 장점이 있다.
주요 인사이트
- 함수를 '함수들의 트리'로 보면 무작위 생성·돌연변이·교차라는 진화 연산을 그대로 적용할 수 있다.
- 단항 연산자는 트리를 한 줄기로, 이항 연산자는 여러 갈래로 자라게 해 복잡한 함수를 만든다.
- 트리를 하나의 원시 수식으로 컴파일하면 재귀 호출의 느림을 피하고 어떤 언어에서도 빠르게 실행된다.
- '접붙이기'는 서로 다른 트리의 가지를 복사·이식해 유전적 교차 효과를 낸다.
- 기호 회귀는 이식성은 좋지만, 트리가 무한정 자라고 기능 공유가 어려워 고차원 출력에서는 NEAT류 신경진화에 밀린다.
자주 묻는 질문
여기서 함수를 '트리'로 표현한다는 게 무슨 뜻인가요?
함수를 작은 함수들이 중첩된 재귀적 구조로 봅니다. 가장 바깥 표현식이 뿌리 노드, 하위 노드가 없는 안쪽 변수가 잎 노드이며, 단항·이항 연산자 노드를 끼워 넣어 트리를 키웁니다.
돌연변이와 '접붙이기(grafting)'는 어떻게 다른가요?
돌연변이는 노드를 키우거나 파라미터를 바꾸거나 노드를 교체하는 것으로, 교체는 하위 트리를 잃을 수 있습니다. 접붙이기는 다른 트리의 가지를 통째로 복사해 심어, 서로 다른 트리 사이의 유전적 교차를 일으킵니다.
기호 회귀의 한계는 무엇인가요?
표현식이 사람이 읽기 좋다는 통념과 달리 트리는 제한이 없으면 끝없이 자라고, 여러 출력 트리가 기능을 공유하지 못해 고차원 출력에 약합니다. 그래서 신경망 구조를 진화시키는 NEAT 같은 기법에 밀리지만, 언어 간 이식성은 뛰어납니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗