안녕하세요. 이번 리뷰는 저번 리뷰에 이어 prompting에 관한 논문입니다. 학계의 평판은 좀 애매하다고 들어왔던 IEEE Access 에 개재된 논문이지만 그래도 무려 MS가 참여한 논문이고, 나름 인용수도 350회 쯤 되더군요. prompting의 활용 연구에 익숙해지길 바라셨던 태주님의 의도 또한 약간 섞여서 한 달 전쯤 추천받아 관심있게 읽긴 했었는데, 리뷰를 이제서야 해보게 되었습니다. 왜 굳이 IEEE Access였어야 했나를 생각해보면 아무래도 해당 분야 발전이 근래에 상당히 가속화되고 있기도 할 뿐더러, 다른 탑 컨퍼에 제출될 정도의 매우 거창하다고 할 만한 contribution이 있었던 것은 아니었기 때문인 것으로 추측합니다. 그래도 MS의 자본과 연구환경을 토대로 prompt 활용 로보틱스 연구 중 code 및 action generation을 real-world에서도 적극적으로 실험하고 시도했던 연구로써는 의미가 있는 논문이라고 생각합니다. 이런 적용과 실험도 있더라 하는 정도로 가볍게 보기 좋았던 것 같습니다. 그럼 리뷰 시작하겠습니다.
<1. Introduction>
우리가 평소에 사람과 사람 간에 대화를 하듯이, 인간은 로봇에게도 무언가를 말로 표현하고 설명하고 싶을 것입니다. 만약 집집마다 가정보조로봇이 있다면 “내 점심을 데워줘” 라고 말했을 때 로봇이 스스로 생각해서 전자레인지를 찾게 만드는 건 일일이 설명하며 표현하는 것보단 사람에게 대화하듯 자연스럽게 느껴져야 할 것 입니다. 언어는 우리의 어떤 의도를 표현하는 가장 직관적인 방법이긴 하지만, 사실 우리는 여전히 로봇을 제어하기 위해 전문가가 개발한 handcraft 코드에 크게 의존합니다. 본 논문은 microsoft가 ChatGPT를 활용하여 이를 어떻게 human-robot 간의 자연스러운 interaction을 가능하게 할 수 있는가에 대한 연구라고 볼 수 있겠습니다.
[ChatGPT]
그렇다면 ChatGPT는 뭐냐. 다들 아시지만, 간단히 설명하자면, 텍스트와 human interaction 들의 방대한 corpus 에서 학습된 LLM으로, 다양한 프롬프트와 질문에 대해 일관되고 문법적으로 자연스러운 응답을 생성할 수 있는 대화형 자연어 생성 모델입니다.
본 논문의 연구에서는, 목표를 다음과 같이 생각했습니다. 이러한 챗지피티가 텍스트를 넘어 생각하고, 물리적인 세계에 대해서도 추론하여 로보틱스 work에서 도움이 될 수 있는지에 대한 것을 말이죠. 특히 복잡한 프로그래밍 언어나 로봇 시스템에 대한 세부 정보를 배울 필요 없이, 사람들이 보다 자연스럽고 쉽게 로봇과 상호작용할 수 있는 방법을 추구했다고 합니다. 그래서 해당 목표의 핵심은 ChatGPT에 물리 법칙, Operating 환경의 Context, 로봇의 물리적 행동이 real-world의 상태를 어떻게 변화시키는 지를 모두 고려해서 특정 문제를 해결하는 방법을 가르치는 것이었습니다.
ChatGPT는 단순한 prompt만으로 스스로도 상당히 다양하고 많은 것을 만들어 낼 수 있지만, 여전히 여러 Task에 있어서 사람의 개입이 상당 부분 필요합니다. 그래서 본 논문은, LLM을 로봇 작업을 해결하는 데 사용할 수 있는 일련의 design principle을 설명합니다. 여기에는 특수 프롬프트 구조, high level API, 텍스트를 통한 인간 피드백이 포함되지만 이에 국한되지는 않는다고 합니다. 해당 연구가 로봇 시스템을 개발하는 방식의 변화를 가져오는 그저 시작일 뿐이라고 언급하며, 훗날의 연구자들이 이 흥미로운 분야에 뛰어들도록 영감을 주고자 한다고 합니다.
[Challenges in robotics today, and how ChatGPT can help]
현재 어떠한 로봇 태스크의 파이프라인은 작업의 요구 사항을 시스템 코드로 변환해야 하는 personal한 기술이 필요합니다. specialized한 엔지니어나 technical user 즉 로봇 제어 등에 빠삭한 그 분야의 전문가가 필요한 셈이죠. 그래서 로봇 동작의 일련의 과정인 loop에 해당 엔지니어들이 항상 깊게 개입(engineer in the loop)되어 있어야 하므로 로봇의 동작을 수정하고 개선하기 위해선 매번 새로운 코드와 specifications을 작성해야 합니다. 이렇게 되면 전반적으로 프로세스가 느려지게 되고(왜냐면 user가 low level 코드까지 다 작성해야 되기 때문에), 비용이 많이 들며(specialized 한 엔지니어 고용), 비효율적이게 됩니다.(모든 게 완벽히 작동하려면 여러 번의 interaction으로 점차 개선하는 과정이 필요)
그런데 ChatGPT가 세상에 나오고, 이는 새로운 로봇 분야의 패러다임을 열게 되었습니다. potentially non-technical한 한 user가 있다고 했을 때 사용자가 단순히 loop에 얹혀 사용만 하는 상황에서(user on the loop), 로봇의 성능을 모니터링하는 동안 그는 LLM에 대한 high level의 feedback을 제공할 수 있게 됩니다. 즉 ChatGPT는 일련의 design principle을 따르면 로봇 시나리오에 대한 코드를 생성할 수 있게 user를 도와주게 되는 것입니다. Fine-tuning 없이도 LLM의 지식을 활용하여 다양한 작업에 대한 로봇 form factor를 제어하게 됩니다. 저자들이 제안하는 연구에서는 ChatGPT가 로봇 퍼즐을 푸는 여러 가지 예외 조작, 공중 및 내비게이션 도메인에서 복잡한 로봇 배치를 보여줍니다.
<2. Robotics with ChatGPT>
[Robotics with ChatGPT: design principles]
저자들은 LLM을 prompting하는 것은 매우 empirical한 science라고 언급하며, 시행착오를 통해서 로보틱스 태스크에 대해 prompting을 하는 방법론과 design principle을 설계했다고 합니다.
저자들이 제안하는 로봇 API를 활용한 ChatGPT 기반 로봇 제어 방법은 다음과 같습니다.
- 로봇의 high-level API 또는 함수 라이브러리를 정의합니다. 이 라이브러리는 특정 로봇으로 맞춰질 수 있으며, 로봇의 제어 스택 또는 인식 라이브러리의 기존 low-level 구현에 매핑되어야 합니다. ChatGPT가 API의 동작을 논리적으로 이해할 수 있도록, high-level API의 이름은 설명적(descriptive)한 이름이어야 합니다.
- ChatGPT를 위한 텍스트 프롬프트를 작성합니다. 이 프롬프트는 작업 목표를 설명하면서 사용 가능한 high-level 라이브러리의 함수들을 명시합니다.
- 프롬프트에는 작업 제약 사항이나 ChatGPT가 답변을 형성하는 방법(특정 코딩 언어, 보조 구문 요소 사용 등)에 대한 정보도 포함될 수 있습니다.
- 사용자는 ChatGPT의 코드 출력을 직접 검사하거나 시뮬레이터를 사용하여 평가합니다.
- 필요 시, 사용자는 자연어로 ChatGPT에게 답변의 품질과 안전성에 대한 피드백을 제공합니다.
- 사용자가 솔루션에 만족하면, 최종 코드를 로봇에 배포할 수 있습니다.
이하는 프롬프트 설계와 API 라이브러리 구축 방법을 설명합니다.
[A. 규제와 요구 (Construction and Description of the Robotics API Library) ]
우선 robotics 분야는 이미 다양한 라이브러리와 API들이 개발되어 왔습니다. 이들은 로봇의 기본적인 기능을 수행하는 데 사용되겠죠. 특히 객체 탐지, 매핑, 모션 플래닝, 제어, 그리핑과 같은 기능들은 각각이 특정 태스크에 맞게 정교하게 계획되어있을 것입니다. 그런데 ChatGPT를 robotics 태스크에 적용하기 위해서는, LLM이 이러한 라이브러리와 API를 활용하여 작업을 실행할 수 있도록 high-level 함수 라이브러리를 정의하는 것이 중요합니다. 이러한 high-level 함수는 실제의 구현과 연결되어, ChatGPT가 사용자로부터 자연어 명령(prompt)을 받아 이를 로봇이 실행할 수 있는 논리적인 high-level 함수 호출로 변환할 수 있도록 도와줘야 합니다.
여기서 핵심은 high-level 함수 라이브러리에 대한 각 API의 이름(함수명)은 이름만 봐도 의도를 알 만할 정도로 명확해야하고, 전반적인 함수 동작을 설명할 수 있어야합니다. 예를 들어, detect_object(object_name)이라는 함수는 내부적으로 OpenCV 함수나 컴퓨터 비전 모델로 짜여져있을 것이고, move_to(x, y, z)라는 함수는 모션 플래닝과 장애물 회피 파이프라인을 호출하여 드론 등의 로봇을 특정 좌표로 이동시키는 역할을 해야할 것입니다. 이와 같은 high-level 함수들의 모음은 프롬프트에 명시되어(작업에 앞서 미리 prompt를 던져놓는 것 같습니다.) ChatGPT가 작업을 논리적인 행동 순서로 연결하여 실행할 수 있도록 합니다.
더구나 필요하다면 입력과 출력이 명확한 서브 컴포넌트로 분해하는 것도 가능하다고 합니다. 이를 통해 ChatGPT는 더 복잡한 시나리오에서 새로운 high-level의 개념이나 low-level 코드를 생성하여 문제를 해결할 수 있는 유연성과 견고함을 가지게 됩니다.
[B. 주변 환경 설명 (Clear Description of the Task Details in the Prompt) ]
다음은 로봇 공학 작업을 성공적으로 수행하기 위해서는 프롬프트에서 작업의 세부 사항을 명확하게 설명하는 것이 중요함을 언급합니다. 해당 설명에는 로봇의 API 외에도 여러 요소가 포함될 수 있겠습니다. 우선, 작업의 ‘제약 조건’과 ‘요구 사항’을 명확히 명시해야 합니다. 예를 들어, 물체를 이동시키는 작업이 포함된다면, 물체의 무게, 크기, 형태와 같은 디테일한 사항을 잘 포함하여 prompting해야 합니다. 이런 정보는 ChatGPT가 작업을 수행하는 데 있어 더 정확한 응답을 생성하는 데 도움이 되겠죠?(너무도 당연한 얘기)
두번째로 작업이 수행되는 ‘환경’에 대한 설명도 필요합니다. 예를 들어, 로봇이 미로를 탐색해야 하는 작업이 주어졌다면, 미로의 크기와 형태, 피해야 할 장애물 또는 위험 요소를 설명해야 합니다. 또한, 로봇 시스템의 현재 상태를 설명하는 것도 중요합니다. 예를 들어, 물체를 집는 작업을 수행해야 한다면, 로봇과 물체의 현재 위치와 방향을 설명해야 합니다.
마지막으로, 작업의 ‘목표’와 ‘목적’을 명확히 제시해야 합니다. 예를 들어, 퍼즐을 조립하는 작업이라면, 조립해야 할 조각의 수와 원하는 완료 시간을 명시는 것이 있겠죠. 이런 정보들로 하여금 ChatGPT가 더 정확하고 효율적인 해결책을 제시할 수 있도록 하거나 유사한 작업의 해결 예시를 들어 모델로 하여금 해결 전략을 유도할 수도 있겠지만, 주의해야 할 점은 prompt가 지나치게 bias되지 않도록 최대한 다양한 예시(few-shot)를 제공하고, 과하게 규정적인 prompt는 피해야한다고 합니다. 사실 다 당연해보이는 얘기입니다.
[C. 현재 상태 설명 (Special Arguments to Bias the Answer’s Structure) ]
이번엔 프롬프트 설계 시, 모델의 출력이 특정 패턴을 따르도록 강제하기 위한 다양한 방법을 제시합니다. 예를 들어, 사용자가 ChatGPT의 출력을 자동으로 parsing하여 실시간 실행을 위한 다른 스크립트의 일부로 사용할 수 있도록 하고 싶다면, 특정 언어(Python, C++ 등)로도 코드를 생성하도록 직접 요청할 수 있겠습니다. 이렇게 하면 보통 자유 형식의 텍스트와 코드 블록이 뒤따르게 됩니다. 이런 방식으로 ChatGPT가 사용자가 원하는 특정 프로그래밍 언어로도 코드 출력을 생성할 수 있도록 유도할 수 있습니다.
또한, 조금 더 구조화된 응답이 필요한 경우에는 XML 태그를 사용하여 출력을 자동으로 파싱할 수 있도록 할 수 있다고 합니다. 예를 들어, XML 태그를 사용하여 ChatGPT의 출력에서 코드만 따로 추출하거나 특정 형식의 데이터만 따로 파싱할 수 있습니다. 이렇게 하면 ChatGPT가 생성하는 응답이 보다 구조화된 형태를 가지게 될 것이며, 사용자가 이를 파싱하고 활용하는 데 있어 보다 더 큰 유연성이 생길 것이라고 합니다.
마지막으로, 코드나 자유 형식의 텍스트가 아닌 목록 형식의 응답이 필요할 때도 있습니다. 예를 들어, 사용자가 프롬프트의 마지막 줄에 모델의 출력을 특정 형식으로 제한하기만 하면 되죠. 특정 작업을 수행하기 위해 필요한 단계나 목록을 구조화된 형식으로 출력하게 됩니다. 이러한 다양한 방법들을 사용하여 ChatGPT의 응답 구조를 조정함으로써, 필요한 출력 형태를 효과적으로 얻을 수 있다고 합니다.
<3. ChatGPT Abilities for Solving Robotics Problems>
자 그럼 원론적인 내용은 여기까지 하고, 그래서 정확히 ChatGPT를 어떻게 쓰고, 어떻게 동작시킬 것인지가 이제 주요 관점입니다.
[A. Zero-shot task planning]
Zero-shot task planning에서는 사전 학습이나 예제 코드 없이도 ChatGPT가 로봇 공학 작업을 수행할 수 있는 능력을 평가합니다. Zero-shot 방식은 prompt access와 함수 라이브러리의 묘사만을 바탕으로 작업을 수행하는 방법이라고 볼 수 있겠습니다. 즉 다시 말하면 실제 code는 아예 주지 않아도 prompt와 라이브러리 묘사로 모델이 적절한 action code를 생성하는 것이죠. 본 논문에서 드론을 활용한 예시가 있었습니다. 저자들은 ChatGPT에게 드론을 제어할 function에 대한 access 권한을 주었고, 그건 non-technical한 user와 로봇간의 극도로 직관적인 language-based interface로써 입증되었습니다. ChatGPT는 user가 조금 모호한 지시를 내렸을 때 명확하게 질문을 다시 하기도 하고, 선반을 전체적으로 살펴보기 위한 드론의 지그재그 패턴 이동 같은 복잡한 코드 구조도 잘 만들어냈습니다.(이건 FOV를 좀 더 넓게 멀리서 보게끔 working해서 더 빨리 object를 찾는 시나리오라면 더 좋았을 것 같습니다.) 심지어는 드론보고 반사되는 물체를 찾고 셀카를 찍으라 하니까, 거울이라고 명시하지 않았는데 거울을 찾아 이동하고(..!) 드론이 이를 바라보는 코드를 짜내고 그대로 제어가 되었습니다. 아래 동영상을 통해 볼 수 있습니다.
또한 ChatGPT를 Microsoft AirSim simulator를 이용해 simulated industrial inspection scenario 환경에서도 사용해보았는데, 모델이 효과적으로 user의 high-level 의도와 기하학적 단서를 통해 드론을 정확히 제어하기 위해 파싱을 잘 하고 있었습니다. 아래 동영상을 통해 살펴볼 수 있습니다. 그런데 AirSim 실험이 뭔가 real-world 실험 영상보다 조금 더 아쉬운 퀄리티를 가진 것 같은 것 기분탓이겠죠?
정리하면 이런 사례는 ChatGPT가 특정 도메인에 특화된 학습 없이도, 기본적인 논리와 기하학적 추론을 통해 복잡한 로봇 작업을 수행할 수 있음을 보여준다고 합니다. 이외에도 ChatGPT는 코드 생성뿐만 아니라, SVG 코드 생성(벡터 이미지 생성)을 통해 어떤 대상의 예상 위치를 시각적으로 표현하는 등 보다 포괄적인 작업을 수행할 수 있었습니다(예, 농구공의 몇 초 뒤 위치를 예측). 이러한 능력은 ChatGPT가 단순한 텍스트 기반 확률 모델을 넘어, 내재적인 세계 모델을 통해 작업을 이해하고 수행할 수 있다는 가능성을 시사한다고 합니다.
[B. User on the Loop: Interactive Conversations for complex tasks]
User on the Loop 섹션에서는 복잡한 작업을 수행할 때 사용자와의 상호작용이 ChatGPT의 성능을 어떻게 향상시킬 수 있는지 설명합니다. 이번엔 로봇 manipulation 시나리오에 대해 ChapGPT를 적용해보았는데, 이 때 사용자가 주기적으로 피드백을 제공하는 대화형 피드백 방식을 사용했다고 합니다. 이걸 통해 모델이 더 복잡한 high-level 함수(GPT가 스스로 코딩한 함수) 속으로 기존에 제공된 API들을 조합하고 구성해내는 방법을 가르칠 수 있었다고 합니다. 커리큘럼 기반 전략을 사용해서 모델은 블록을 쌓는 것처럼 어떤 operations을 수행하기 위해 배웠던 skill들을 논리적으로 결합할 수 있었습니다.
게다가 모델은 나무블록으로 microsoft 로고를 만드는 작업을 맡았을 때, textual 하고 physical한 도메인을 연결하는 흥미로운 결과를 보여줬습니다. 내부 지식 기반에서(사전지식으로부터) 로고를 불러올 수 있었을 뿐 아니라, 로고를 ‘그릴’ 수 있었고(SVG 코드로), 위에서 배운 기술을 사용하여 어떤 기존의 로봇 동작이 물리적 형태를 구성해 낼 수 있는지 알아낼 수 있었습니다. 색상 블록을 올바르게 배치하는 과정에서 로고의 색상과 배열을 기억하면서도 이를 물리적인 로봇 팔의 동작으로 자연스럽게 변환하는 과정을 보인 것이죠. 아래 영상을 통해 볼 수 있습니다. 물론 동영상을 보면 살짝 느껴지는 게 영상을 배속돌린 것 같은 느낌이 나긴 합니다. 이제 막 태동하는 분야이기에 아직은 빠른 동작을 기대하긴 어려운 거겠죠?
다음으로는 ChatGPT에 드론이 장애물에 충돌하지 않고 어떤 공간의 목표에 도달할 수 있는 알고리즘을 작성하도록 했습니다. 저자들은 이 드론이 앞을 향한 거리 센서를 가지고 있다고 모델에 말했고, ChatGPT는 알고리즘의 핵심 구성 요소 대부분을 바로 코딩했습니다. 이 작업에도 역시 사람과의 대화형 피드백이 필요했고, ChatGPT가 언어 피드백만을 사용하여 localized된 코드를 개선할 수 있는 능력을 엿볼 수 있었다고합니다. 아래 동영상을 통해 확인할 수 있습니다.
User : 초기 셋팅 Prompt(매우 김)
GPT : ~~~
User : After you take a step, you need to face the goal again.
GPT : 어어 그래 드론의 현재 포지션과 목표 포지션 사이의 차이를 기반으로 yaw 앵글을 계속 계산하고 수정하겠다. 코드짜줌.
User : 야야 기존의 ‘get_yaw()’라는 함수 정의해놨잖아. 왜 새로 코드 짜서 step vector 계산할 떄 현재 yaw angle 안 써. 다시 ㄱ
대략 이런 형식으로 대화형 피드백 prompting이 진행되었습니다. 사실 근데 제가 보기엔, 드론이 목표 지점을 이동 step마다 계속 바라보려는 제어 때문에, 최적의 경로로 가지는 않고, 불필요한 회전과 이동이 좀 많긴 했어서 결국 feedback하는 사용자가 드론의 제어와 CV적인 관점에 대해 깊은 이해를 가지고 피드백을 fancy하게 줘야 더 효율적인 액션 제어 코드를 생성할 수 있을 것으로 예상됩니다.
[C. Perception-Action Loops]
Perception-Action Loops는 ChatGPT가 로봇의 감각과 행동을 연계하여 작업을 수행하는 능력을 평가하는 섹션입니다.
사람도 무엇인가를 행동하기 전에 어떤 세상을 지각하고 그 다음 행동하려고 합니다. 로봇이라고 다르지 않을까요. 로봇 또한 그렇게 하는 것이 모든 로봇 시스템의 기본입니다. 따라서 저자들은 ChatGPT가 이 인식-행동의 순리적인 개념을 이해하는 지 테스트하고 user가 지정한 객체를 찾을 때까지 환경을 탐색하게끔 요청했습니다. 그들은 모델에 object detection 및 object distance API같은 기능에 대한 access 권한을 부여했고, 생성된 코드가 인식-행동 loop를 성공적으로 구현하는지 확인했습니다. 이 때 AirSim simulator에서 실험이 진행됐고, RGBD 카메라를 센서로 장착했다는 가정이 들어갑니다.
실험적인 특성에 의해, ChatGPT가 센서 피드백을 받아 로봇이 어디로 가야 할지 실시간으로 결정할 수 있는 것인지 평가해보기 위해 추가 실험을 진행했다고 합니다.(ChatGPT가 이러한 결정을 내리는 코드 loop를 생성하는 것과 대조적으로). 흥미롭게도 각 단계에서 카메라 이미지의 텍스트 설명을 채팅에 입력할 수 있다는 것을 확인했고, 모델은 로봇이 특정 물체에 도달할 때까지 로봇을 제어하는 방법을 알아낼 수 있었습니다.
첫 예시로 ChatGPT가 로봇의 감지 기능(예: 카메라 이미지, 물체 탐지(YOLOv8 사용))을 활용하여 환경을 이해하고, 그에 따른 행동을 생성하는 과정을 보자면 예를 들어, 드론이 공중에서 장애물을 피하면서 목표 지점으로 이동하는 작업에서, ChatGPT는 드론의 카메라 및 센서 데이터를 사용하여 장애물을 감지하고 회피하는 알고리즘을 생성했습니다. 이 과정에서 ChatGPT는 사용자의 피드백을 바탕으로 코드의 일부를 수정하여 보다 정교한 회피 동작을 구현할 수 있었습니다. 사용자가 “Find out where I can warm up my lunch.” 라고 prompting을 던지자, 모델이 high-level 라이브러리를 활용하여 search_for_object_and_move_to_it(‘‘microwave’’) 라는 코드를 생성하였고, 특히 microwave를 스스로 제안해내고, 이를 찾으러 가는 모습을 볼 수 있었습니다. 아래 동영상을 통해서 확인할 수 있습니다.
또한, ChatGPT의 대화 시스템을 사용하여 피드백을 통한 폐루프 제어(perception-action loop)를 구현하는 실험도 수행되었습니다. 이 실험에서는 사용자가 환경에 대한 설명을 텍스트 형식으로 제공하고, ChatGPT는 이를 바탕으로 적절한 동작을 출력하는 방식으로 진행되었습니다. 이러한 방식은 ChatGPT의 응답 시간이 1-2초 정도로 느리다는 한계가 있지만, LLM의 추론 속도가 개선된다면 유망한 연구 방향이 될 수 있음을 보여줍니다. 아래 그림과 위 동영상을 통해 확인할 수 있습니다.
[D. Reasoning and Common-sense Robotics tasks]
Reasoning and Common-sense Robotics Tasks 는 ChatGPT가 로봇 공학 작업에서 논리적 추론과 상식적 판단을 어떻게 수행하는지를 평가합니다. 예를 들어, ChatGPT는 로봇 팔이 물체를 집어 특정 위치에 놓는 작업에서, 작업의 각 단계를 논리적으로 연결하여 코드를 생성하고, 이를 실제 로봇 팔에 적용하는 능력을 보여줍니다. 이러한 논리성은 ChatGPT가 더 복잡한 작업을 수행할 수 있는 토대가 되는데, 사용자가 명시적으로 개념을 정의하거나 규칙을 설정하지 않더라도, 로봇 공학의 기본 개념을 이해하고 이를 활용할 수 있게 되는 것입니다. 카메라 기하학이나 제어 이론과 같은 개념들에 대해서도 로봇의 동작을 계획하고 실행할 수 있습니다. 이는 ChatGPT가 단순한 텍스트 생성 도구가 아니라, 로봇 공학에서 일반화 가능한 솔루션을 제공할 수 있는 강력한 도구임을 시사합니다. 다음 그림이 카메라 기하학과 컴퓨터비전 개념을 이해한 상황이라고 볼 수 있겠습니다.
[E. Usage of ChatGPT API in Real-Time]
Usage of ChatGPT API in Real-Time 는 ChatGPT를 실시간적으로 활용하는 방법을 다룹니다. 이전의 예제들이 주로 사전 생성된 코드를 바탕으로 작업을 수행했다면, 이 섹션에서는 ChatGPT가 실시간으로 코드를 생성하고 이를 바로 실행하는 시나리오를 설명합니다. 예를 들어, AirSim 시뮬레이터에서 드론이 특정 목표 지점으로 이동하거나 산업용 터빈을 검사하는 작업에서, ChatGPT는 실시간으로 코드를 생성하여 드론을 제어합니다. 이 또한 AirSim 실험 영상이 있는데 사실 여기서 말하는 실시간은 중간에 x8배속으로 돌리는 구간이 있어서 그닥 신뢰성이 있지는 않습니다.
실험에서는 OpenAI의 ChatCompletion API를 사용하여 ChatGPT와 실시간으로 상호작용하며, 생성된 코드를 Python 커널에서 즉시 실행하는 방식이 사용되었습니다. 드론이 응답을 기다리는 동안은 호버링하도록 설정하여, 생성된 코드가 에러없이 안정되게 실행될 수 있도록 하였다고 합니다. 그러나 실시간 애플리케이션에서 모델의 지연 시간이 높아 고속 작업에는 적합하지 않았다고 합니다.(여기서 이실직고를 해버립니다;) 이러한 한계를 조금 극복하려면 ChatGPT가 high-level의 작업 계획을 제공하는 것은 유지하고, low-level 제어는 로봇 자체에서 수행하도록 하면서도 생성된 코드의 안정과 보완등의 유지보수가 자연스럽게 이루어지는 개선이 필요할 것으로 추측합니다.
<4. PromptCraft, A Collaborative Tool for LLM + Robotics research>
자 마지막으로 저자들은 프롬프트 엔지니어링의 중요성을 언급하며 자신들이 정리한 깃허브 오픈 소스를 홍보합니다. PromptCraft 깃허브입니다. 로봇공학 과제를 위한 ChatGPT와 같은 LLM의 성공에는 좋은 프롬프트 엔지니어링이 필수적입니다. 그런데 안타깝게도 프롬프트는 꽤나 경험적인 결과물들이며, 이 분야의 연구자와 애호가(?)를 도울 수 있는 좋은(사실 나쁠 수도 있음) 사례가 있는 포괄적이고 접근 가능한 리소스가 부족합니다. 이러한 격차를 해소하기 위해 누구나 다양한 로봇 범주에 대한 프롬프트 전략의 예를 공유할 수 있도록 저자들은 본 연구에서 사용된 모든 프롬프트와 대화를 공개했고 특히 연구원들이 누구나 시작해볼 수 있게, ChatGPT와 AirSim을 통합한 인터페이스를 가진 환경도 제공한다고 합니다. 위의 영상에서도 볼 수 있었죠.
<5. Conclusion>
본 논문은 ChatGPT를 robotics에 활용하기 위한 실험적인 몇몇 프레임워크를 제안하고, 이를 통해 실생활에서도 적용한 모습을 보입니다. 특히 로봇 제어를 위한 API 라이브러리를 설계하고 구현하는 과정에서 ChatGPT의 잠재성을 자꾸 강조하며 이를 통해 코드 생성, 문제 해결, 사용자 상호작용을 통해 로봇 작업을 성공적으로 수행할 수 있음을 언급합니다. 본 연구가 로봇 공학에 LLM을 활용한 응용 가능성만을 보였다고 자신들을 낮추면서도, 앞으로의 연구 방향으로는 LLM의 실시간 로봇 제어 적용과, 개방형 open perception-action loop말고 Closed loop 제어 시스템에서도 어떻게 구현할 수 있을지와, GPT를 통해 생성된 코드의 안정성과 정확성, 유지보수 등을 염두하고 있습니다.
음.. 본 논문은 정리해서 한 마디로 말하면, ChatGPT를 robotics에 접목한 프롬프트 엔지니어링 기법의 어떤 디자인과 이를 적용하는 파이프라인까지 제시하고 이를 실제로 적용해보았다는 점에서 의의가 있으나, 이것의 성과는 다소 정성적인 실험 위주로 소개하여 아쉽기도 하고, 그런 와중에 여러 task에서의 코드 레벨과 prompt level의 예시는 또 잘 설명하고 있는 조금은 독특한 논문이라고 볼 수 있겠습니다. 이상 리뷰마치겠습니다.
안녕하세요 재찬님,
드론이 목표 지점으로 이동할 때 불필요한 회전과 이동이 많아 사용자가 드론의 제어와 CV적인 관점에 대해 깊은 이해를 가지고 피드백을 했을 때 더 효율적인 제어가 가능하다고 하셨는데, cv 적인 관점이 가미되면 어떤 방향의 피드백을 할 수 있을지 궁금합니다!!
안녕하세요 영규님, 리뷰 읽어주셔서 감사합니다.
흠 제 개인적인 의견이 담긴 워딩이긴 했으나, 좀 더 얘기해보겠습니다.
일단 본 논문의 목표는 코딩이나 제어를 모르는 일반인들도 GPT와의 대화형 상호작용을 통해 robot 태스크에 대한 어떤 목표를 달성할 수 있겠다! 가 되겠습니다. 그래서 이를 위해 미리 사전 정의된 여러 high-level function library만 전문가 수준의 coding을 통해 사전 prompt를 추가 prompting과 함께 GPT에 넘겨주면 GPT가 이를 활용해서 code generation이 가능하게 되고, 이를 GPT의 dialogue 방식의 이점을 활용해 사용자와 상호작용하는 피드백을 통해 특정 태스크의 목표에 점차 근접해지게 될 수 있다가 핵심이 되겠습니다.
그런데 제가 예시를 들었듯이,
GPT : 어어 그래 드론의 현재 포지션과 목표 포지션 사이의 차이를 기반으로 yaw 앵글을 계속 계산하고 수정하겠다. 코드짜줌.
User : 야야 기존의 ‘get_yaw()’라는 함수 정의해놨잖아. 왜 새로 코드 짜서 step vector 계산할 떄 현재 yaw angle 안 써. 다시 ㄱ
라고 했을 때 사용자가 저 get_yaw()라는 함수에 대한 이해와, step vector의 계산에 대한 이해, yaw angle에 대한 이해가 수반되어야지 사실 피드백이 가능한 거잖아요? 일반인이 그냥 뭉뚱그려서 GPT에게 표현하면 잘 못 알아먹을 수도 있으니까요. 그런 관점에서 만약 추가적으로 CV적인 관점에서 장애물에 대한 detection을 더 섬세하게 작동하도록 활용하게끔 GPT에게 추가 명령을 전달하든지 하는 방식으로 fancy한 제어가 가능해질 것 같다는 생각이었습니다.
결론은 뭔가 GPT를 활용한 high-level 상호작용이 가능하여 이를 robot이나 드론에 실제 적용해보는 파이프라인을 보여주었다는 점에서 의의는 있지만, 아직 가정이 많이 들어간 연구인 것 같다는 제 개인적 의견으로 받아들여주시면 될 것 같습니다.
오호 논문 리뷰 진행하셨네요 ㅋㅋㅋ
아주 간단한 질문만 드리고 가겠습니다!
Q1. 앞에서 재찬님이 말씀해주신대로 저는 로보틱스를 위한 프롬프트 엔지니어링 태스크에 익숙해지길 바라고 있었습니다. 그럼 해당 논문에서 활용한 프롬프트 엔지니어링 기법은 무엇인가요?
Q2. 리뷰에서 ChatGPT의 채팅과 영상과 텍스트 간의 연결이 가능하다고 하셨습니다. Depth와 Detection의 출력물들은 GPT에 활용되는 일반적인 인풋 (영상, 텍스트)과 다른 양상을 띕니다. 이러한 값들을 처리하기 위해 어떠한 노력을 했는지 알 수 있을까요?
안녕하세요 태주님, 리뷰 읽어주셔서 감사합니다.
1.
사실 논문에서는 CoT나 PoT CoC 등과 같이 명확히 무슨 기법이다! 라고 citation을 걸지는 않았는데, 논문 뒷부분의 추가 부록에서의 prompt 예시를 살펴보면 대부분, GPT의 역할 명시, 상황 제시, 목표 제시, Question의 형태 명시, Reasoning의 형태와 근거 명시, 사용자 사전 정의된 high level library API 활용 코드 정의 등의 과정으로 이루어져 있었습니다.
좀 정리하자면 본 논문에서는 실험적으로 정의한 prompt를 사용한 것 같았고, 자유형태의 자연어 dialogue로 대부분의 prompt를 짜고 code prompting, XML tags, closed-loop reasoning, high-level function library 사전 정의 방식 등을 추가 활용한 code generation 등을 사용한 것으로 보입니다.
2.
위에서 언급했듯이 high-level function library를 미리 사전 정의하여 미리 prompt로 넘겨줌으로써 gpt는 이 high-level API만 잘 활용해서 코드를 조합하기만 하면 되었었습니다. 예를 들어 depth같은 데이터 형태를 다루기 위해 이를 전처리하는 라이브러리 함수를 미리 정의해놓는다면 GPT는 이 함수를 가져다 활용하는 것이죠. 그러면서 대화형 모델의 장점답게 사용자 피드백과 closed loop를 통해서 GPT가 code generation을 통해 만든 결과값이나 출력값에 대해 반복적인 상호작용을 통해 점차 태스크의 목표에 도달하게 되는 방식을 가집니다.