본문 바로가기
Deep Learning

Abstraction & Reasoning in AI systems : (5) Program synthesis + Deep learning

by 햇농nongnong 2021. 1. 30.

NeurIPS 에서의 < Abstraction & Reasoning in AI systems : Modern perspectives > 강연을 보고 그 중에서도 Francois Chollet 의 "why abstraction is the key, and what we're still missing" 에 대해 정리해보겠다.

(해당 강연은 https://slideslive.com/38935790/abstraction-reasoning-in-ai-systems-modern-perspectives 이 링크에서 확인할 수 있다.)

 

<5> how we can leverage a hybrid approach to reinforce the strength of each method, but also compensating for their respective weaknesses - the road ahead: bridging both worlds.

(각각의 방법의 강점을 강화하면서 각각 약점을 보완하기 위해 어떻게 혼합 방법을 활용해야 하는지 : 두 세계를 연결하여 )

 

 

** Program synthesis + Deep learning 

아까 말했다시피 모든 intelligence 두가지 형태의 abstraction 의 조합으로 이루어져 있다. 한가지 형태만을 가지고는 뭔가를 잘 이룰 수 없고 abstraction 의 진정한 잠재력을 달성하기 위해서는 두 개의 abstraction 형태를 합쳐야 할 것이다.

 

그리고 이것은 human intelligence 가 잘하는 것이다. 인간의 지능은 인지와 직관명료한 추론과 결합하는데 정말 뛰어나다. 따라서 우리는 value-centric abstraction program-centric abstraction 을 합쳐서 이와 같이 special 하게 할 것이다.

 

** 어디서 딥러닝을 사용할 수 있을까

 

딥러닝을 하기 위해서는 두개가 필요하다고 했다.

바로 ( 매니폴드 가설이 적용가능한 보간성의 문제  많은 데이터 가 필요하다.

 

위의 그림에서도 space of tasks 를 처리하기 위해 보간성의 문제, 매니폴드 가설이 적용가능한 semi-continuous structure 많은 데이터가 필요하다그 이후 추상적인 서브루틴 재사용을 활용하고 프로그램 검색 공간에 대한 직관을 제공하기 위해 딥러닝을 사용하면 된다.

 

또 위의 그림에서 각각의 task 세개는 보간성의 문제가 해결이 안된 discrete tasks 이기 때문에 discrete search 를 통해 해결가능하다.

마지막 perception (space of objects) 보간이 가능하고 lots of data 가 있으니 딥러닝을 사용할 수 있다.

 

예를 들어 간단한 ARC 문제의 경우, 이 것은 interpolative 도 아니고 3개의 예시정도만 가지고 있기 때문에 딥러닝을 사용할 수 없었다.

 

하지만 이제 규모를 한단계 낮추고 ARC 테스크가 구축될 때의 Core Knowledge priors (위 그림에서의 space of objects)를 살펴보면,

각각 본질적으로 보간성이며 데이터를 통해 학습될 수 있었다. (core knowledge 를 통해 세계를 discrete objects 로 분해하는 인지 계층의 역할을 하는 레벨)

 

그리고 만약 다시 한걸음 올라가서 모든 ARC 테스크들의 공간(위 그림에서 space of tasks)을 본다면 다시 한번 semi continuous dimensions(연속적인 차원) 을 볼 수 있을 것이다. 그래서 tasks 공간에 걸쳐 어느정도 보간을 활용할 수 있을 것이다.

또한 이 때 딥러닝을 사용하여 작업 공간의 구조와 가능한 솔루션 프로그램의 공간 구조에 대한 직관을 만들 수 있다.

 

 

위에서 딥러닝을 통해 직관을 만들 수 있다고 했는데, 인간의 reasoning(판단,추리,사고) 종종 높은 수준의 직관에 의해 이루어진다.

이것은 프로그램 합성의 근본적인 문제(프로그램 크기에 따라 기하급수적으로 증가하는 복잡성)를 해결하는 열쇠이다.

 

따라서 이 딥러닝(직관)프로그램 합성을 합치면 참 좋을 것 같다.

 

 

** 딥러닝과 program synthesis 합치기

 

그래서 여기 딥러닝의 강점프로그램 합성의 강점결합하는 두 가지 흥미로운 연구 분야가 있다.

 

휴리스틱(스스로 발견하게하는 체험적인)의 공간경사 하강을 할 수 있는 보간성의 매니폴드라고 가정하고,

딥러닝을 두가지 방법으로 사용할 수 있다고 말한다.

 

1) 딥러닝을 합성 프로그램의 일부로 사용 : 딥러닝을 DSL 의 구성요소로 통합

 

- 딥러닝을 situationdiscrete building blocks (프로그램 합성 엔진에 공급할 수 있도록)으로 분해하는 인지 계층으로 사용할 수 있다. 또한 딥러닝을 DSL 의 구성요소로 통합할 수 있다.

(위의 그림 왼쪽 아래처럼 딥러닝 자체를 합성 프로그램 안에 넣어서 forward, backward 하게끔)

 

2) 딥러닝을 사용하여 프로그램 검색 안내 : 하드 코딩된 heuristic 을 사용하는 대신에 이산형 검색을 알리고 효율성을 향상시키기

 

- 딥러닝을 프로그램 합성을 위한 가이드로 사용할 수 있다. 이렇게 하면 프로그램 검색을 안내할 수 있는 직관적인 프로그램 스케치가 제공되고 각 노드에서 고려해야 할 분기 결정의 공간이 줄어든다.

 

그리고 이것은 사람들이 프로그램을 만드는 방식과 꽤 비슷하다. 엔지니어들은 프로그램 합성 엔진이 작동하는 방식을 프로그램 하지 않는다. 엔지니어들은 실제로 많은 직관적인 패턴 매칭에 의존하고 소수의 discrete cases 에 대해서만 명시적으로 추론한다.

 

- 그리고 미래에는 딥러닝과 프로그램 검색을 결합하는 혼합 시스템을 지향할거라고 생각한다. 대부분 프로그램 검색이겠지만 딥러닝 driven 일 것이다.

 

 

** 미래의 AI 와 딥러닝에 대한 장기적인 비전

 

미래의 AI 와 딥러닝에 대한 장기적인 비전을 살펴보자.

이것은 오늘날의 소프트웨어 엔지니어가 소프트웨어를 작성할 때의 workflow 와 매우 비슷하다.

AI 미래를 보고싶다면 지금 엔지니어들이 어떻게 하는지 살펴보면 되는데, 엔지니어들은 그들이 현재 하고 있는 것과는 다른 작업에 의해 개발된 추상적인 프로그램들을 끊임없이 조작하고 이 유형의 abstraction AI 의 목표이다.

 

AI는 많은 다른 문제들에 걸쳐 공유될 기존의 추상적 원시 요소 라이브러리 (위 그림에서 global library of abstract subroutines) 에서 새로운 프로그램을 만드는 과정을 따라 진화할 것이다.

 

예를 들어 ARC 작업과 같은 일련의 작업 (그림 맨 오른쪽의 task) 이 있다면,

각 작업들은 작업별 솔루션을 구성할 수 있는 “프로그램 합성 엔진” 갖게 된다.

그리고 이 엔진은 나중에 딥러닝 인지 모듈을 포함할 것이다.

 

예를 들어 ARC 작업의 입력 그리드에서 객체를 분해하거나 알고리즘 모듈을 분해하는 task-specific solution program (작업별 솔루션 프로그램)이 프로그램 합성 엔진에 의해 조립된다.

그리고 이 과정은 기본적으로 discrete search process 이고, 그것도 딥러닝에 의해 heavily guided 될 discrete search process 이다.

 

예를 들어 검색공간의 크기를 줄이기 위해 미리 잠재적인 프로그램에 대한 직관적인 흐릿한 스케치를 제공하는 것이다. 또한 연산자 레벨의 local search 를 할 때는 미리 branching decisions(분기 결정)에 대한 직관을 제공한다는 측면도 있다.

 

이런식으로 discrete search process 이지만 검색 공간의 크기를 줄이기 위해 스케치를 제공한다던지 직관을 제공한다던지 “딥러닝”에 의해 이 discrete search process 가 안내된다는 것이다.

 

그리고 제공한 스케치(프로그램 스케치 또는 실제 프로그램)실제 주어진 specification 과 일치할 가능성에 대한 직관이 얼마나 맞았는지 partial program scoring 을 한다.

인간도 추론할 때 먼저 직관과 인지에 의해 추론하고 이것이 영향이 많이 미치는데 이 과정과 위의 딥러닝에 의한 discrete search process 는 매우 비슷하다.

 

 

이 프로그램 합성 엔진은 현재 작업에 대한 솔루션 프로그램(그림에서 오른쪽의 task 박스들) 생성하는 것이 아니다.

 

이것은 또한 검색의 부산물로 재사용 가능한 빌딩 블록(reusuable subroutines)을 생성한다.

이러한 구성 요소 중 일부는 가치 중심적 추상화를 통해 생성될 딥러닝 모듈이 될 것이며, 많은 데이터를 오프라인에서 학습할 것이다. 또 구성요소 중 일부는 주어진 프로그램이나 다른 프로그램들 사이에서 graph isomorphism 을 발견함으로서 program-centric abstraction 을 통해 얻어질 알고리즘 모듈일 것이다.

 

그리고 이 모든 빌딩 블록들은 계속해서 증가하는 DSL 을 형성할 것이고, 이것은 합성 엔진의 input 으로 사용된다.

따라서 미래에 우리는 딥러닝과 프로그램 검색을 결합하는 평생학습 혼합 시스템으로 나아가게 될 것이다.

 

 

** 딥러닝이 모든 것을 할 수 있다? 

 

그래서 딥러닝이 다양한 솔루션들에 관여할 것이라고 말할 수 있다.

딥러닝이 모든 것을 한다고는 할 수 없지만 거의 모든 AI 시스템에 어떤 형식으로라도 관여할 것이다.

(위에서 프로그램의 많은 과정에 딥러닝이 포함된 것처럼)

 

 

** 결론

결론적으로, generalization 은 AI 의 발전을 위해 매우 중요하다.

그리고 추상화일반화를 만드는 방법이다. 추상화에는 value-centric program-centric 이라는 두가지 핵심 유형이 있고, 각 유형은 analogy-making 에 의해 만들어진다. abstraction analogy 사이에는 근본적인 관계가 있는데, 바로 analogy abstraction 의 엔진이라는 것이다.

 

딥러닝의 일반화의 기원은 “보간” 이다. 그래서 value-centric abstraction 이나 geometric analogy-making 에는 적합하지만, program-centric abstraction 에는 적합하지 않다. 따라서 계획 및 추론이 필요한 문제, 작은 샘플 사이즈의 문제, ARC 문제와 같은 문제들을 해결할 수 없다.

 

이러한 문제들에 대한 해결책은 바로 “discrete program search (이산적인 프로그램 검색)” 이다. 하지만 여기서의 문제는 combinatorial explosion 인데, 미래의 하이브리드 시스템딥러닝을 사용하여 프로그램 검색을 안내함으로써combinatorial explosion 을 해결할 수 있을 것이다. 이것은 인간이 추론할 때 지각과 직관에 의해 크게 유도되는 방식과 매우 유사하다. (지각과 직관 = 딥러닝, 인간의 추론 = 프로그램 검색)

 

 

 

 

(출처 : 해당 글의 이미지들은 NeurIPS 의 < Abstraction & Reasoning in AI systems : Modern perspectives > 강연 발표자료에서 가져왔다. )

댓글