Chapter Content

Calculating...

어… 여러분, 안녕하세요. 음… 오늘은 챕터 7, 그러니까 어… 메타적으로 접근하는 것에 대해 이야기해볼까 해요.

그… '메타'라는 개념, 있잖아요. 쉽게 말해서 자기 자신에 대해 이야기하는 걸 뜻하죠. 가장 흔한 예가 메타데이터, 그러니까 데이터에 대한 데이터 같은 거죠. 데이터의 내용이나 형식, 구조 같은 특징을 설명해주는 거잖아요. 이걸 통해서 우리가 개별 데이터들이 전체적인 구조를 잘 따르고 있는지 확인할 수 있는 거죠.

비슷한 예로 메타분석이라는 것도 있어요. 메타분석은 단순히 하나의 연구 결과만 보는 게 아니라 여러 연구 결과들을 종합해서 좀 더 통계적으로 신뢰성 있는 결론을 내리는 걸 목표로 하거든요.

그… 메타적으로 접근한다는 건, 어… 어떤 그룹의 개별 사례들이 보여줄 수 있는 것보다 더 깊고 보편적인 진실을 배우려고 노력하는 거라고 할 수 있어요. 메타분석의 경우, 각 연구마다 고유한 편향이 있을 수 있고, 그래서 좁은 시각의 진실만을 제공할 수 있잖아요. 그러니까 메타적으로 접근하는 목적은 어떤 시스템의 핵심에 숨겨진, 드러나지 않은 진실을 배우는 데 있는 거죠.

드러나지 않은 구조는 우리가 그걸 설명할 편리한 이름이나 카테고리가 없어요. 하지만 분명히 존재하고, 특정 시스템의 구현은 그 깊은 진실의 한 단면에 불과하죠. 여러 사례들을 종합해야만 그 본질에 가까워질 수 있는 거에요.

중요한 건, 메타적인 접근이 추상화를 만들어내는 유일한 방법이라는 거죠. 사람들이 어떻게 정신적인 추상화를 만드는지 한번 생각해 보세요. 지난 챕터에서 봤듯이, 추상화는 겉보기에 서로 다른 것들 사이에서 유사점을 발견함으로써 만들어지잖아요. 더 깊은 유사성이 발견되면, 정보적으로든 물리적으로든 더 높은 수준의 카테고리를 만들 수 있는 거죠.

이런 작업은 시스템 내부에서는 불가능해요. 내부적인 관점만으로는 시스템을 어떤 카테고리에 넣을 수 없거든요. 외부로 나가서 위에서 바라봐야 시스템 내부 구성 요소들 간의 유사성을 알아차릴 수 있는 거죠. 그래서 추상화를 만들려면 메타적으로 접근해야 하는 거에요. 자기 자신을 돌아보고 서로 다른 것들을 하나로 묶을 수 있는 자기 참조 과정 없이는 추상화를 형성할 수 없어요.

이게 단지 정신적인 추상화에만 적용되는 게 아니에요. 물리적인 추상화 역시 내부 요소들을 하나의 단위로 묶기 위해선 메타 수준의 관찰이 필요해요. 인간은 도구의 물리적 추상화 수준을 높이는 디자인을 할 때, 위에서 유사점을 발견할 수 있어야 했죠. 자동차의 수동 변속기, 그러니까 내부 부품들을 연결하는 더 높은 수준의 물리적 추상화 인터페이스는 인간이 내부 부품들이 어떻게 하나의 목표를 향해 협력할 수 있을지 상상할 수 있었기에 만들어질 수 있었던 거에요. 시스템 내부에서는 이런 전체적인 구조를 볼 수 없고, 오직 외부에서만 볼 수 있죠.

분명히 말하자면, 메타는 단순한 또 다른 수준의 추상화가 아니에요. 많은 사람들이 잘못 생각하는 것처럼요. 추상화는 자기 자신에 대해 이야기하지 않고, 하위 요소들을 포괄하는 상위 수준의 개념으로 존재하죠. 하지만 추상화의 생성은 시스템 외부에서 일어나는 과정이에요. 추상화는 시스템 내부에 있지만, 메타는 시스템 외부에 있는 거죠. 여러 요소들을 묶어서 하나의 그룹으로 만들고 인터페이스를 노출한다면, 이 새로운 수준의 추상화는 시스템 외부로 벗어나야만 형성될 수 있었던 거에요.

물리적 추상화를 만드는 메타적인 접근이 인간 활동으로는 이해가 되지만, 자연이 만들어내는 추상화와는 어떻게 연결될까요? 저는 전에 추상화를 통한 진보는 절대적이라고 주장했었어요. 그러니까 더 어려운 문제를 해결하기 위해 진화하는 시스템은 물리적 추상화 수준을 높여야 한다는 거죠. 그리고 저는 자연이 창발성을 통해서 이를 달성했다고 주장했고요. 창발적인 구조는 정보를 압축해서 자연적으로 어려운 문제를 해결하는 물리적 추상화 수준이거든요. 그런데 자연은 어떻게 메타적으로 접근해서 물리적 추상화를 만들어낼까요?

딥러닝 모델을 한번 생각해 보세요. 딥러닝이 작동하는 이유는 명시적인 규칙 기반 엔지니어링 때문이 아니라, 복잡한 모델 내부에서 입력값을 출력값으로 성공적으로 변환하는 무언가가 나타나기 때문이에요. 이런 건 블랙박스 접근 방식이라서, 내부에서 나타나는 걸 정확하고 분석적으로 이해할 수는 없죠. 하지만 입력값 변환을 돕는 다양한 수준의 추상화가 나타난다는 건 알고 있어요.

얼굴 인식의 경우, 딥러닝은 점진적으로 더 복잡하고 의미 있는 특징을 추출하기 위해서 점점 더 높은 수준의 추상화를 사용하죠. 시스템은 먼저 이미지에서 모서리, 코너, 텍스처 같은 낮은 수준의 특징을 추출해요. 그런 다음 이 낮은 수준의 특징들을 결합해서 눈, 코, 입 같은 더 복잡한 패턴을 추출하죠. 추상화 수준은 계속 높아져서, 시스템은 이전 수준의 특징들을 결합해서 얼굴 표정이나 자세 같은 전체적인 얼굴 특징을 만들어내요. 결국 추상화는 얼굴의 본질을 포착하게 되는 거죠.

이 모든 게 딥러닝의 자기 참조적인 측면 덕분에 가능한 거에요. AI에서의 자기 참조는 딥러닝 시스템이 네트워크를 통과하면서 얻은 이전 결과들을 사용해서 내부 구성을 업데이트하는 방식에서 비롯되거든요. 모델이 추측을 하고 어느 정도의 오류가 발생하면, 이 오류 정보를 사용해서 다음 추측을 개선하는 거죠. 네트워크는 계속해서 추측하고, 추측 결과가 최종 목표에 얼마나 가까운지에 따라서 구성을 업데이트하는 거에요. 좋은 모델을 만드는 건 모델이 어떻게 작동하는지 속속들이 아는 게 아니라, 자기 참조를 위한 좋은 프레임워크를 구축하는 거에요.

이게 바로 딥러닝이 메타적으로 접근하는 방식인 이유에요. 딥러닝은 피드백 루프를 사용해서 스스로를 돌아보고 상황이 잘 진행되고 있는지 확인하거든요. 메타적으로 접근하는 건 매개변수를 명시적으로 설정하거나 규칙을 사용해서 시스템을 엔지니어링하는 것과는 완전히 달라요. 최종 솔루션에 어떤 규칙이 존재하든, 그건 의도적인 프로그래밍을 통해서가 아니라 자동으로 도달한 거에요. 그래서 자기 참조적인 접근 방식이 근본적으로 다른 거죠. 내부 세부 사항에서 벗어나서 변동, 반복, 선택을 통해 올바른 내부 구조로 수렴하는, 인식론적 겸손함을 보여주는 거에요. 이건 디자인의 반대인 거죠.

AI 모델의 내부 매개변수 값은 자동으로 찾아지기 때문에, 의도적인 엔지니어링은 외부에서만 발생해요. 하이퍼파라미터는 딥러닝 학습 단계를 최대한 잘 설정하기 위해 인간이 내리는 선택이거든요. 이건 완전히 다른 문제인데, 가능한 모든 하이퍼파라미터 값의 가능성 공간 내에서 작동하죠. 이 다음 단계는 외부적인 행동이라는 전제하에 작동해야 해요. 인간은 최적의 하이퍼파라미터 값을 의도적으로 설정하는 방법을 알 수 없거든요. 이걸 찾기 위해서는 인간이 메타적으로 접근해서 다양한 하이퍼파라미터 값을 시도해야 좋은 값을 찾을 수 있는 거죠. 학습률, 배치 크기, 에포크 수, 네트워크 아키텍처 등 다양한 조합을 실험해서 더 나은 결과를 얻을 때까지요. 메타적으로 접근할 때 우리는 학습하는 방법을 배우는 거에요.

AI 버전의 메타적인 접근은 하이퍼파라미터 최적화 (HPO), 메타 학습, 신경망 구조 탐색 (NAS) 같은 방법을 사용하죠. 이런 방법들 간의 차이는 지금 논의에 중요하지 않고, 중요한 건 이 모든 방법들이 문제 공간에서 벗어나서 외부적으로 작동해서 무엇이 효과적인지 찾는다는 거에요.

메타분석이 여러 연구들을 종합해서 하나의 연구가 보여줄 수 있는 것보다 더 깊은 내용을 배우려고 하는 것처럼, AI에서의 메타 학습은 단일 모델이 가질 수 없는 것, 즉 입력값을 출력값으로 변환하는 매우 일반화되고 강력한 숨겨진 구조를 찾으려고 하죠. 다시 말하지만, 이런 노력은 특정한 것을 배우는 것보다 학습하는 방법을 배우는 데 중점을 둬요.

딥러닝 시스템이 제대로 작동하려면 모델 내부에서 추상화를 구현해야 하고, 이 추상화는 시스템 외부로 계속해서 벗어나는 방법을 찾지 않고는 실현될 수 없어요. 이건 단지 딥러닝에만 해당되는 게 아니에요. 우리가 구축하는 모든 복잡한 솔루션에 적용되죠. 메타적으로 접근하는 행위 자체가 입력값을 유연하고 결정론적으로 출력값으로 변환하는 추상화를 만들어내는 거에요. 어려운 문제는 메타적으로 접근하지 않고는 해결할 수 없어요.

자, 그럼 이제 문제 구조에 대해서 이야기해볼까요? 자연의 패턴이 어떻게 문제에 대한 반영으로 나타나는지 말이죠.

문제는 구조를 가지고 있어요. 이 구조는 주어진 문제를 정의하는 추상화 수준에서 비롯되죠. 자연에서 궁극적인 문제는 생존이에요. 생명체는 사고와 시련에 맞서서 자신의 존재를 유지하려고 노력해야 하죠. 하지만 생존은 삶의 모든 문제 중에서 가장 최상위 수준의 문제일 뿐이에요. 생존보다 낮은 수준의 추상화에는 음식, 물, 은신처가 있죠. 더 낮은 수준으로 내려가면, 상위 수준의 문제를 해결하려는 활동들을 발견할 수 있어요. 음식을 얻기 위해서 동물들은 사냥, 채집, 청소, 여과, 방목, 파기, 매복을 하고, 어떤 동물들은 도구를 만들기도 하죠. 물을 찾기 위해서 동물들은 이동하고, 식물을 알아보고, 강우를 이용하고, 다양한 탐색 행동을 하죠. 은신처는 찾거나 만들어요. 굴을 파는 올빼미는 다람쥐 같은 다른 동물이 버린 굴에 집을 짓죠. 굴을 파서 은신처를 만드는 문제에 대해서 더 낮은 수준의 추상화를 계속 정의할 수 있어요. 버려진 다람쥐 굴을 찾을 수 없다면, 굴을 파는 올빼미는 부리와 발톱을 사용해서 스스로 굴을 파는데, 이때 새로운, 더 낮은 수준의 구체적인 문제들이 나타나죠. 올빼미는 모래나 진흙 지역처럼 흙이 충분히 부드러운 곳을 선택해야 하고, 은신처가 안전하도록 수 피트 깊이의 터널을 파는 방법을 찾아야 하죠. 이런 식으로 계속되는 거에요.

삶에 제시되는 모든 문제는 나름의 구조를 가지고 있어요. 일종의 계층 구조라고 할 수 있죠. 이건 마치 매슬로우의 욕구 단계설을 연상시키지만, 여기서 저는 추상화 수준과 자연의 계산과의 관계에 대해서 이야기하고 있는 거에요. 우리는 항상 문제를 중첩된 추상화 수준으로 분해할 수 있고, 낮은 수준은 문제라는 상위 수준의 범주에 포함되죠.

자연의 모든 솔루션은 제시된 문제를 해결하는 물질의 구성이기 때문에, 우리는 자연의 솔루션을 문제 구조의 반영으로 생각할 수 있어요. 단순히 직관적인 의미가 아니라, 특정한 패턴이 형성되는 걸 말하는 거에요. 고사리, 불가사리, 산호초에서 볼 수 있는 패턴은 불가피하게 해결해야 할 문제와 같은 구조를 띠게 되는 거죠. 프랙탈, 나선, 파도, 육각형 패킹, 테셀레이션, 나뭇가지 모양 등 자연에서 볼 수 있는 모든 패턴은 문제 구조의 반영을 보여주고 있어요.

좀 더 문자적으로 말해볼까요? 로마네스코 브로콜리의 중첩된 프랙탈이나 해바라기 머리 부분의 씨앗 나선형 배열을 본다면, 우리는 그 유기체의 환경적인 문제들이 추상화에 따라서 배열되는 방식을 보고 있는 거에요. 환경은 단순히 해바라기에게 생존하라고 요구하는 게 아니라, 더 깊은 수준의 문제가 해결되도록 요구하고, 그래야 궁극적인 높은 수준의 목표인 생존이 실현되는 거죠.

자연에서 우리가 보는 사물은 물질 구성과 문제 구조 간의 중첩 결과에요. 로마네스코 브로콜리의 다양한 수준과 이 유기체가 해결하는 문제의 중첩된 추상화 수준 사이에 선을 긋는다고 상상해보세요. 이건 생명체뿐만 아니라 무기물에도 적용돼요. 소금, 금속, 암석, 강, 산 모두 해결해야 할 문제의 구조에 따라 구성되죠. 이런 의미에서 자연의 솔루션은 환경과 완전히 분리된 게 아니라, 문제와 솔루션 간의 전체적인 중첩의 일부인 거에요.

전에 제가 주장했듯이, 이런 방식으로 문제를 정의하는 건 정신적인 인식을 구체화하는 게 아니에요. 정신적인 구조물을 물리적인 세계에 투영하는 엉뚱한 이론도 아니고요. 만약 환원주의가 타당하다면, 그럴 수도 있겠죠. 하지만 복잡성에서는 그렇지 않아요. 저는 물질이 작은 조각에서 큰 조각으로 이동해서 자연에서 볼 수 있는 패턴을 만들어내는 인과적인 일련의 단계를 제시하는 게 아니라, 자연이 달성하고 있는 불가피한 문제 해결에 대해서 이야기하고 있는 거에요. 그건 정보, 계산, 진화에 대해서 우리가 알고 있는 것과 완전히 일치하죠. 자연의 패턴을 문제 구조의 불가피한 반영으로 보는 건 너무나 합리적이에요.

이 모든 건 정보적 추상화와 물리적 추상화 간의 연결을 증명하는 거에요. 문제의 구조는 우리에게 정보적 추상화 버전을 제시하죠. 우리의 마음이 세상을 정의하고 삶을 헤쳐나가기 위해 활용하는 그런 추상화요. 자연에서 우리가 보는 물리적 구조는 그런 추상화의 물리적 버전을 제시하죠. 자연이 암석, 강, 산, 불가사리, 올빼미, 비버를 만들어내기 위해서는 환경을 구성하는 정보적 추상화와 겹치는 물리적 추상화 수준을 구현해야 하는 거에요.

자, 이제 좀 더 나아가서 자연이 어떻게 더 높은 수준에 도달할 수 있는지 이야기해볼까요?

자연은 인간이 고안할 수 있는 어떤 것보다 훨씬 더 강력한 계산 엔진이에요. 우리의 AI 시스템에도 자기 참조 및 추상화 측면이 있지만, 자연은 이걸 극단적으로 끌어올리죠. 자연의 메타적인 접근 방식을 고려하기 전에, AI 기술로 이걸 시도했던 걸 다시 한번 생각해 보세요. 이미 말했듯이, 우리는 내부 매개변수를 의도적으로 설정할 수 없기 때문에, 학습 관련 값을 설정해서 외부에서 작동하죠. 학습률, 배치 크기, 에포크 수, 레이어 수, 레이어당 뉴런 수 등을 선택하죠. 이런 값들은 모델 내부의 어떤 것도 직접적으로 지시하지 않고, 학습에 사용되는 프로세스를 구조화하는 데 도움이 될 뿐이에요. 이런 값들을 메타적으로 접근하는 첫 번째 수준이라고 생각할 수 있는데, 그건 시스템 내부에서 벗어나서 존재하기 때문이죠. 최적의 값을 얻으면 가능한 최상의 추상화를 만들어낼 수 있을 거에요.

하지만 이런 값들은 무엇이 되어야 할까요? 그건 또 다른 문제, 메타 문제죠. 여기서 우리는 개별 모델의 최적 매개변수를 아는 데 관심이 있는 게 아니라, 어떤 모델의 최적 매개변수를 학습하는 방법에 더 관심이 있죠. 앞서 언급했듯이, 이 메타 문제는 하이퍼파라미터 최적화 (HPO), 메타 학습, 신경망 구조 탐색 (NAS) 같은 기술을 사용해서 접근해요. 이 중에서 하나만 "메타 학습"이라는 이름을 사용하지만, 이 모든 건 가능한 최고의 외부 값을 찾는 메타 문제를 해결하려고 시도하는 거에요 (합리적인 시간 내에요).

한 가지 접근 방식은 여러 개의 다른 모델을 결합해서 메타 학습기라고 하는 더 나은 단일 모델을 학습하고 배포하는 거에요. 개별 모델은 일반화된 지능을 보여주기에는 너무 좁지만, 여러 모델은 더 강력한 숨겨진 내용을 학습할 수 있다는 아이디어죠. 하지만 그룹에 결합할 수 있는 모델의 수는 한계가 있어요. 각 모델은 일련의 실험과 검증을 거쳐서 데이터를 개별적으로 학습해야 하거든요. 하지만 메타 학습이라는 더 높은 수준의 문제도 어떤 모델 조합이 가장 효과적인지 알아보기 위해서 실험과 검증을 거쳐야 하죠. 이 더 높은 수준의 문제에는 결정해야 할 자체적인 매개변수 값 세트가 있어요. 하지만 거기서 멈출 필요가 있을까요? 다양한 메타 학습 프레임워크를 새로운 조합으로 결합할 수도 있고, 그렇게 하면 자체적인 외부 매개변수 세트가 생겨서 다시 실험하고 검증해야 하죠.

사물을 점점 더 큰 그룹으로 결합하는 것과 관련된 가능성 공간은 천문학적인 크기로 폭발적으로 증가해요. 이건 복잡한 사물을 엔지니어링하기 위해 메타적으로 접근하는 것의 실현 가능성에 의문을 제기하죠. 디자인의 근본적인 한계를 인정하더라도, 디자인만이 구축 노력을 실현 가능하게 만들 수 있는 유일한 기회가 아닐까요? 물론, 무엇이 효과적인지 알아보기 위해 엄청난 수준의 시행착오를 받아들이고 싶을 수도 있지만, 너무 많은 실험을 실행하려면 계산적인 요구가 너무 많아서 결국 이 접근 방식은 불가능해 보이죠.

하지만 디자인은 가능성의 극단적인 조합 폭발을 뚫고 나갈 수 없어요. 이 책 전체에서 논의했듯이, 디자인은 복잡한 사물에 관해서는 근본적으로 잘못된 전제에 기반하고 있거든요. 디자인은 정답이 될 수 없어요. 하지만 언뜻 보기에는 메타 수준에서 작동하는 것이 내부적으로 문제를 해결하는 데 필요한 계산적인 요구를 완화할 수 없는 것처럼 보일 수 있어요. 시스템 외부로 벗어난다고 해서 낮은 수준의 문제가 해결될 필요가 없는 건 아니니까요. 이건 우려를 불러일으키죠. 메타적으로 접근하는 것이 어떻게 사물을 구축하는 방법이 될 수 있을까요?

언제나 그렇듯이, 자연이 답을 가지고 있어요. 자연은 전체 생태계를 만드는 데 매우 높은 수준의 메타에 도달할 수 있거든요. 분류학적 분류 시스템을 사용한다면, 자연은 유기체를 모아서 종을 형성하고, 종을 모아서 속을 형성하고, 속을 모아서 과를 형성하고, 과를 모아서 목을 형성하고, 목을 모아서 강을 형성하고, 강을 모아서 문을 형성하고, 문을 모아서 계를 형성하고, 계를 모아서 역을 형성한다고 말할 수 있어요. 이 모든 건 주어진 문제를 해결하기 위해 협력하는 다양한 수준의 물리적 추상화 (살아있는 유기체의 그룹) 이죠. 이 모든 건 자연의 자기 참조 및 추상화 생성 메커니즘에 의해서 자동으로 만들어지는 거에요.

자연은 인간의 엔지니어링보다 훨씬 더 효과적으로 메타적으로 접근할 수 있어요. 자연이 휘두르는 계산량은 엄청나죠. 자연은 주어진 수준에서 계속해서 벗어나서 다음 수준을 만드는 데 효과적인 매개변수를 찾고 있거든요.

물론, 자연의 계산 자원은 인간이 사용할 수 있는 것과 비교해서 거의 무한대에 가까워요. 자연은 그룹 내에서 동시에 작동하는 수십억 개의 프로세서 덕분에 극단적인 버전의 분산 병렬 처리를 가지고 있죠. 자연 시스템의 각 요소 (예: 세포, 뉴런) 는 간단한 계산만 수행하지만, 집단적인 행동은 환상적으로 복잡한 기능을 해결하죠. 자연은 인간의 혁신보다 훨씬 더 긴 시간 척도로 작동하기도 하고요. 진화는 자연 선택을 통해서 솔루션을 만드는 데 수백만 년이 걸리죠. 자연은 대규모 변동, 반복, 선택을 매우 병렬적인 방식으로 사용해서 엄청나게 큰 가능성 공간을 탐색할 수 있어요.

에너지 효율성 측면에서도 큰 차이가 있는데, 생물학적 시스템은 인간이 만드는 어떤 것보다 에너지 효율성이 훨씬 뛰어나죠. 인간의 뇌는 약 20와트의 전력만 소비하는 반면, 최신 슈퍼컴퓨터와 딥러닝 시스템은 몇 배 더 많은 에너지를 소비하죠. 20와트만 소비하는데도 AI에 비해서 시각, 운동 제어, 추론에 얼마나 효과적인지 한번 생각해 보세요. 생물학적 효율성은 완전히 다른 범주에 속하죠.

생물학은 또한 물리적 세계와 깊이 통합되어 있어요. 모든 추상화 수준은 환경과 직접적으로 소통하면서 작동하죠. 입력값을 출력값으로 변환하는 계산은 시스템 자체 내의 물리적 프로세스로 발생하고, 행동의 대리 모델로 발생하는 게 아니에요. 따라서 자연이 인간보다 훨씬 더 효과적으로 메타적으로 접근할 수 있다는 건 놀라운 일이 아니죠. 자연은 병렬 처리, 시간, 에너지 효율성, 깊은 물리적 통합을 이용해서 주어진 시스템의 여러 수준에서 벗어나서 중첩된 창발적 추상화를 만들 수 있는 거에요.

그렇다면 인간은 자연이 가진 계산 자원에 훨씬 못 미치는 상태에서 어떻게 자연처럼 작동할 수 있을까요? 자연이 문제를 해결하는 것처럼 진정으로 복잡한 객체를 어떻게 만들 수 있을까요?

한 가지 분명한 답은 자연을 있는 그대로 해킹하는 거죠. 예를 들어서 합성 생물학은 바이러스나 박테리아 같은 유기체의 유전 물질을 엔지니어링해서 바람직한 특징을 갖도록 하려고 하죠. 이건 생물 정화, 의약품의 생물 생산, 바이오 연료 같은 분야에서 이루어져 왔고, 박테리아를 변경해서 컴퓨팅을 위한 간단한 논리 연산을 수행하거나 작은 기계 내부에서 생물학적 액추에이터 역할을 하도록 하는 데에도 사용되었죠. 합성 생물학은 이미 진화된 특징을 활용하기 때문에 창발성을 엔지니어링할 필요가 없죠.

여기서 핵심적인 문제는 오용이에요. 자연의 기존 솔루션을 해킹하는 데 어느 정도 성공할 수 있겠지만, 현실은 자연이 진화하는 방식에는 이유가 있다는 거죠. 그 이유는 단순한 환원주의적 용어로 정의할 수 없어요. 우리가 말할 수 있는 건 자연의 솔루션은 생존했기 때문에 존재한다는 것뿐이에요. 자연적인 객체의 구성은 우리가 결코 알 수 없는 방식으로 다양한 문제를 해결하는 환상적으로 복잡한 객체죠. 자연적인 솔루션의 일부를 하이재킹하려고 시도하면 좁은 이점을 얻을 수 있겠지만, 복잡성 하에서 디자인하는 것과 같은 모든 문제가 따를 거에요. 장기적으로 솔루션의 효과를 떨어뜨릴 가능성이 높은 예상치 못한 부작용을 낳을 수밖에 없죠.

이 책에서 주장했듯이, 우리는 자연을 다른 문제를 해결하기 위해서 용도 변경하는 게 아니라, 창발성을 직접 엔지니어링해야 해요. 우리의 창조물은 고유한 복잡성을 확립하고, 우리가 배치하는 환경을 기반으로 고유한 창발적 구조와 행동에 도달해야 하는 거죠. 자연적인 솔루션이 효과적으로 작동하도록 하는 볼 수 없는 깊은 내부 종속성이 있어요. 이런 내부 구조는 자동적인 자기 참조를 통해서 구축된 물리적 추상화로 구체화되어야 하는 거죠.

창발성을 직접 엔지니어링하려면 자연에서 볼 수 있는 병렬 처리, 에너지 효율성, 깊은 물리적 통합을 극대화해야 해요. 디자인 하에서는 이게 불가능하죠. 디자인은 우리가 특정하고 자세한 결정을 내리도록 강요하고, 그런 결정은 필요한 병렬 처리, 에너지 효율성, 깊은 물리적 통합의 매우 제한적이고 부자연스러운 버전이 되죠.

AI 연구자나 엔지니어가 시스템이 어떻게 기능하고, 작동하고, 환경과 상호 작용해야 하는지에 대한 명시적인 결정을 내려서 의도적으로 시스템을 만들고 싶어하는 걸 한번 생각해 보세요. 그들은 학습 및 평가를 위한 관련 데이터 소스를 식별하고 수집하려고 하죠. 그들은 특정 계산 요구 사항에 따라서 알고리즘을 선택하고 디자인하려고 하고요. 그들은 레이어, 활성화 함수, 연결, 최적화 기술에 대한 결정을 디자인 원칙, 모범 사례, 수학 이론에 기반해서 내리면서 신경망 아키텍처를 디자인하는 걸 목표로 하죠.

하지만 사실 딥러닝 발전의 가장 큰 진전은 구체적인 디자인 선택에서 비롯된 게 아니라, 문제에 더 많은 데이터와 계산 능력을 투입한 데서 비롯되었어요. 사실 특정한 아키텍처는 현재 패러다임에서 제시하는 것보다 훨씬 덜 중요하죠. 특정한 구조가 중요하지 않다는 게 아니라, 연구 논문에서 제시하는 것처럼 의도적인 추론과 디자인에서 비롯되는 게 아니라는 거에요. 결국 효과가 있는 구조는 대부분 더 많은 데이터와 더 많은 계산 능력의 부산물일 뿐이죠.

이건 복잡한 사물을 구축할 때 예상해야 하는 것과 정확히 일치해요. AI 연구는 대부분의 AI 연구자들이 이해하지 못하는 이유로 효과적인 거에요. 많은 사람들에게 이상하게 들릴 수도 있겠지만, 우리는 이런 패턴을 자주 보죠. 사람들은 자신의 디자인 선택이 발전에 책임이 있다고 믿기 쉽지만, 사실 복잡성 하에서 발전은 디자인보다 무작위성과 우연에 훨씬 더 많은 관련이 있거든요. 이건 사실 엄밀한 진술이고, 복잡한 시스템이 진화하는 방식의 부인할 수 없는 속성과 완전히 일치하는 거에요.

복잡성 하에서의 디자인은 훌륭한 솔루션의 생성을 방해하는 것으로 제대로 이해될 수 있어요. 디자인 선택은 복잡한 시스템에서 자연스러운 복잡성과 불투명한 종속성을 빼앗아 버리죠. 그건 효과가 있는 것을 구체화하기 위해서 발생해야 하는 조각들 간의 내부 통신을 방해하고요. 디자인은 또한 솔루션에 강제로 주입되는 경직성 때문에 방대한 가능성 공간을 탐색하는 능력을 제한하기도 하죠.

물론, AI 시스템의 디자인은 전통적인 엔지니어링의 디자인과는 달라요. AI는 시스템 외부로 벗어나서 사물이 수렴하도록 하는 것의 가장 좋은 예거든요. 하지만 우리의 메타 수준은 솔루션의 내부 구조에 너무 가까워요. 자연이 분류학적 분류 하에서 도메인까지 도달하는 반면, 우리는 여전히 개별 유기체 바로 바깥에서 작동하고 있죠. 우리가 원하는 게 좁게 정의된 것을 예측하는 기본적인 모델이라면, 괜찮을 수도 있겠죠. 하지만 일반적인 지능과 비슷한 것을 달성하려는 탐구에서는 작동할 수 없어요. 의도하는 솔루션이 정교하고 강력할수록 더 진정한 복잡성을 만들어내야 하죠.

필요한 병렬 처리, 에너지 효율성, 깊은 물리적 통합을 달성하려면 우리가 찾고 있는 솔루션보다 훨씬 더 높은 수준에서 작동해야 해요. 뇌를 만들고 싶다면, 뇌를 설계하려고 해서는 안 되죠. 인간의 지능을 개개인의 머릿속에서 일어나는 일로 정의하는 게 편리해 보일 수도 있지만, 우리는 깊이 연결된 사회적인 종이잖아요. 단일 생물학적 신경망을 훨씬 능가하는 집계 수준 없이는 지능이 존재할 수 없어요. 최고의 유기체를 만들기 위해서 메타는 유기체보다 훨씬 더 높이 도달해야 하죠. 디자인은 우리를 유기체에 너무 가깝게 묶어두거든요.

디자인에 따라서 우리가 구축하고 있는 것에 너무 가까이 머무르면, 시행착오가 불가능해져요. 우리가 실험 중에 혼합하고 일치시키려고 하는 것들이 너무 정의되어 있기 때문이죠. 하지만 최고 수준의, 가장 일반적인 문제 설명만 사용해서 표면에 초점을 맞추면, 내부 구조는 스스로 알아서 해결해야 하죠. 그게 바로 복잡성이 작동하는 방식이거든요.

문제가 어려울수록, 그 가능성 공간은 더 크고 복잡해지고, 그 공간을 탐색해야 하죠. 4장에서 봤듯이, 문제의 난이도가 높아질수록 문제 해결은 더 부드러워져야 하고, 탐색 방법에 대해서 덜 분석적이어야 하죠.

휴리스틱과 패턴 인식을 많은 검색을 하지 않고도 거대한 가능성 공간에서 사물을 찾을 수 있도록 해주는 도구로 생각할 수 있어요. 하지만 이건 복잡한 상황이 방출하는 최고 수준의 신호에 적용할 때만 작동하죠. 디자인은 검색을 지나치게 명시적인 용어로 정의하도록 강요하거든요. 디자인은 자연이 이미 우리에게 제공하는 것을 활용하지 못하죠. 디자인은 우리가 그 의미를 할당하는 낮은 수준의 구성 요소에 대해서 시행착오를 시도하도록 만들거든요. 사물이 어떻게 상호 작용하는지 아는 건 우리의 몫이 아니고, 더 많은 시스템이 스트레스 요인에서 살아남도록 강요하면 필요한 상호 작용이 발생할 거라는 것만 알면 되죠. 메타적인 노력을 더 높이 끌어올리는 건 자연이 자연스럽게 해결되도록 하는 거에요.

그렇다면 계산적인 한계에 부딪히지 않으면서 어떻게 최고 수준의 메타에서 작동할 수 있을까요? 답은 1) 문제 설명을 가능한 한 일반적으로 유지하고 (표면에서 작동), 2) 구체적인 내용을 디자인하는 대신에 매우 유연한 내부 구조를 만드는 거에요.

문제 해결을 표면에서 유지하는 건 우리가 벗어날 수 있는 가장 높은 수준의 목표를 유지하는 것으로 가능해요. AI에서의 예는 문제를 현실적이고 유용한 대화를 할 수 있는 개체를 구축하는 것으로 정의하는 거죠. 그게 전부인 거에요. 오늘날의 패러다임은 문제를 목적, 대상 청중, 대화 범위, 의도, 맥락, 모호성 처리, 어조 및 성격으로 분해해서 훨씬 더 깊이 들어가라고 말하죠. 하지만 이런 문제의 해체는 환원주의적이에요. 우리는 그런 세부 사항을 알 수 없고, 전체 솔루션이 문제의 최상위 정의를 해결해야 한다는 것만 알 수 있죠. 문제를 세부 사항으로 분해하면 복잡성 하에서 열등한 엔지니어링을 만들 수밖에 없어요.

두 번째 요점은 구체적인 내용을 디자인하지 않고 매우 유연한 내부 구조를 만드는 거에요. 신경망에서 사용되는 활성화 함수를 한번 생각해 보세요. 활성화 함수는 모델에 비선형성을 도입하는 역할을 하죠. 시그모이드, 하이퍼볼릭 탄젠트, ReLU, Leaky ReLU, PReLU, ELU, SELU, 소프트맥스, 스위시, 가우시안 등 다양한 선택지가 있고, 각각 고유한 특성, 장점, 단점이 있죠. 이런 가능성을 신경망에서 변경할 수 있는 다른 모든 변수와 혼합하고 일치시키려고 시도하는 건 루빅스 큐브에서 큐브 조각 하나를 옮겼다가 이전의 움직임을 엉망으로 만드는 것과 비슷하죠. 너무 많은 선택지가 있어서 시행착오가 불가능해지죠.

하지만 활성화 함수를 고립된 것으로 디자인하려고 하는 대신에, 덜 정의되고 더 유연한 것을 만든다고 상상해보세요. 현재 우리가 가진 가장 가까운 접근 방식은 학습 가능한 활성화 함수라고 불리는 거죠. 이런 함수는 학습 과정에서 조정되는 매개변수를 포함해서 함수가 동적으로 모양을 변경할 수 있도록 해주죠. 이런 접근 방식이 효과가 있는지 없는지는 중요한 게 아니에요. 핵심은 유연성을 디자인하려고 시도하는 게 아니라, 전체의 일부로서 구성을 변경하는 것을 구현하는 거에요. 환원주의적인 의미에서 덜 정의될수록 더 좋죠. 미토콘드리아가 세포 밖에서는 정의를 잃는 것처럼, 활성화 함수는 네트워크 외부에서는 적절하게 정의할 수 없는 역할을 가지고 있거든요. 그건 그룹 내에서 존재함이 중요한 전체적인 솔루션의 일부인 거죠. 활성화 함수가 어떻게 보여야 하는지는 우리가 알 바가 아니에요. 우리가 최고 수준의 목표에만 관심을 기울이는 동안 그 구조와 기능이 스스로 자연스럽게 나타나야 하죠.

최고의 활성화 함수, 네트워크 아키텍처, 데이터 전처리 파이프라인, 손실 함수, 최적화 알고리즘 등을 얻는 건 그걸 디자인하는 게 아니에요. 우리가 해결하려고 하는 문제의 최상위 수준에만 집중해서 스스로 구체화되도록 놔두는 거죠. 유연한 내부 구조를 유지해서 가능한 한 높게 메타에 도달해야 해요.

많은 과학자와 엔지니어들이 그런 정밀성이 부족한 상태에서 발전이 가장 잘 정의될 거라고 생각하면 불편해하죠. 하지만 그게 바로 복잡성이 작동하는 방식이에요. 고도로 유연하고 불분명하게 정의된 구조에 더 많은 데이터와 계산 능력을 투입하는 것이 가능한 최고의 구조가 나타나는 방식인 거죠. 자연이 구축하는 방식에서 더 이상 볼 필요도 없이 그게 진실이라는 걸 알 수 있어요. 제대로 한다면, 그게 복잡성 시대에 구축하는 게 의미하는 바가 될 거에요.

자, 이제 우리가 추구하는 것, 메타 구조에 대해서 이야기해볼까요?

똑같은 모양의 눈송이는 없어요. 사실 이건 세부적인 의미에서만 사실이죠. 개별 눈송이를 확대해보면 독특한 결정화로 표시된 진정으로 독특한 패턴을 볼 수 있을 거에요. 사람의 지문처럼, 가까이서 보는 세부적인 구조는 그 특정 눈송이에게만 속하죠. 하지만 충분히 확대해서 전체 눈송이를 보면 친숙한 것을 볼 수 있어요. 모든 눈송이는 공통적인 패턴을 공유하기 때문에 "눈송이" 라고 불릴 수 있죠. 이 공유된 패턴은 우리가 명시적으로 정의할 수 있는 것이 아니에요. 일곱 명의 다른 아티스트에게 눈송이의 본질을 그리라고 요청한다면, 그들의 그림은 비슷해 보이겠지만 완전히 동일하지는 않을 거에요. 우리는 모두 눈송이가 어떻게 생겼는지 이해하고 있지만, 그 이해는 정확한 정의에서 오는 게 아니에요. 그건 우리가 직관적으로 알고 있는 숨겨진 구조죠.

눈송이의 본질처럼, 어떤 것의 본질은 우리가 배울 때 추구하는 것이죠. 눈송이를 안다는 건 눈송이의 한 가지 사례를 아는 게 아니라, 많은 사례를 관찰하고 마음속에 정의되지 않은 추상화를 만드는 거에요. 배운다는 건 현상의 수많은 사례가 따르지만 결코 명시적으로 나타나지 않는 깊숙이 숨겨진 템플릿을 이해하는 거죠.

그게 바로 어떤 것의 본질을 설명하는 단어가 없는 이유에요. 피아노 연주, 골프 스윙, 양자 역학 이론 개발 방법을 배우는 사람은 수많은 경험에서 숨겨진 공유 패턴을 활용하는 거에요. 그걸 조각으로 분해해서 다른 사람에게 직접 가르칠 수 있는 게 아니죠. 그래서 진정한 기술은 설명할 수 있는 것보다는 감각처럼 느껴지는 거죠. 정확하게 설명할 수 있다면, 그건 진짜 기술이 아니거나 당신이 그걸 잘하지 못하는 거에요.

그게 바로 경험이 진정한 기술을 달성할 수 있는 유일한 방법인 이유이기도 하죠. 같은 것을 계속해서 봐야 하는 게 아니라, 같은 숨겨진 것의 다양한 사례를 계속해서 경험해야 하는 거에요. 그래야만 모든 것이 변할 때 지속되는 불변의 진실을 인식할 수 있는 거죠. 피아노 연주자는 피아노 연주가 무엇을 의미하는지 각인시키기 위해서 다양한 노래를 연주해야 (또는 작곡해야) 하죠. 골퍼는 좋은 스윙을 이해하기 위해서 약간씩 다른 수많은 스윙을 해야 하고요.

진정한 학습은 어떤 것의 한 버전을 깊이 파고드는 게 아니라, 그 다양한 측면에 자신을 노출함으로써 이루어지죠. 우리가 추구하는 건 말로 표현되지 않은, 직관적이고 숨겨진 구조인 거에요. 그건 마음에 살아남지만 이름이 없는 거죠.

눈송이의 일반적인 모양은 예측할 수 있지만, 다음 눈송이가 어떻게 생겼는지는 예측할 수 없어요. 그게 바로 자연에서 세부 사항이 중요하지 않은 이유에요. 적어도 우리가 보통 배우는 의미에서는요. 세부 사항은 단지 다음 수준의 추상화를 위해서 변동하는 데 있을 뿐이에요. 다중 실현 가능성에 따라서 같은 것을 달성하는 방법은 항상 많을 거에요. 세부 사항을 보는 건 상위 수준을 제공하는 컬렉션의 일시적인 구현 하나를 보는 것일 뿐이에요.

이건 눈송이를 실제로 설명하는 유일한 방법은 메타적인 의미로 이야기하는 것임을 의미하죠. 모든 눈송이

Go Back Print Chapter