앞선 글에서는 VLA(Vision-Language-Action) 모델의 창발성을 테스트하기 위한 핵심 데이터 표현 언어인 BDDL(Behavior Description Definition Language)을 살펴봤습니다.
이번 글에서는 실제로 Object Set으로부터 BDDL을 자동 생성하는 과정을 다루어 보겠습니다.
[Object Set으로부터 BDDL을 자동 생성하기]
🌏 기존: Object Set → BDDL 직접 생성
✅ 구현 방법
가장 먼저 시도한 것은 Object Set을 그대로 LLM에 입력해 BDDL을 생성하는 방식이었습니다.
입력은 다음과 같이 Python 딕셔너리 형태로 구성되어 있고 주어졌습니다. (유일하게 주어진 것은 object list 뿐입니당)
{
"living_room": ["table", "cup", "remote"],
"kitchen": ["sink", "sponge", "cupboard"],
"bathroom": ["toothbrush", "towel", "soap"]
}
즉, key는 방(room) 이름이고, value는 해당 공간 안의 물체(Object) 목록입니다. 먼저 이 데이터를 기반으로 LLM에게 “이 장면에서 가능한 BDDL을 만들어라”고 요청했습니다.
결과는 그럴듯해 보이지만 실제로는 상당히 비현실적인 행동들이 자주 포함되었습니다.
(:goal
(and
(move table to kitchen)
(place cup on floor)
)
)
“테이블을 옮겨라(move table to kitchen)” 같은 이처럼 로봇팔이 수행할 수 없는 명령이 goal에 들어가곤 했습니다. 실제로 로봇팔은 컵이나 수건처럼 작은 물체만 다룰 수 있는데, LLM은 이런 제약을 이해하지 못한 채 “그럴듯한” 계획을 만들어버린 것입니다. (트랜스포머의 한계,, 흑흑)
이 문제를 막기 위해 프롬프트 단계에서
“로봇팔이 물리적으로 가능한 행동만 포함시켜라. 무거운 가구는 옮기지 마라.” 와 같은 제약 문장을 명시적으로 추가했지만, LLM은 여전히 제대로 지키지 않았습니다.
✅ 문제점: 자연어 이해 없이 형식만 맞추는 생성 방법
이 문제의 핵심은 LLM이 BDDL의 논리 구조만 학습하고, 장면의 실제 제약을 이해하지 못한다는 점이었습니다.
즉, (onfloor table floor) 같은 구문은 만들 수 있지만, ‘테이블은 고정된 가구이므로 옮길 수 없다’는 물리적 상식이 결여되어 있었습니다.
또한 :init 섹션도 비슷한 문제가 있었습니다. 예를 들어 다음과 같이 전혀 자연스럽지 않은 초기 상태가 등장했습니다.
(:init
(ontop towel sink)
(inside cup cupboard)
(floating toothbrush air)
)
이처럼 LLM이 형식은 맞추되, 실제 환경에서는 불가능한 배치를 자주 생성했습니다.
🌏 개선: LLM 2단계 프롬프트 구조로 자연어로 먼저 변환
이 문제를 해결하기 위해 2단계 프롬프트 구조를 도입했습니다.
✅ 1단계 (Object Set → Instruction)
먼저 Object Set을 입력으로 주고, LLM이 로봇팔이 수행 가능한 자연어 명령(instruction)을 생성하도록 했습니다.
예를 들어 LLM에 다음과 같은 입력을 주며 가능한 goal을 instruction 형식으로 달라고 요청합니다.
Objects:
{
"living_room": ["table", "cup"],
"kitchen": ["sink", "detergent"]
}
그러면 이런 대답을 얻을 수 있었습니다.
“Clean the cup using detergent, then place it on the table in the living room.”
이렇게 하면 모델이 방의 맥락과 물체의 조합을 고려해, 비교적 현실적인 태스크를 제안하게 됩니다.
물론 모델 안에 이런 제약이 내재화된 것은 아니기 때문에 여전히 “sink를 들어서 옮기기” 같은 말도 안 되는 문장을 가끔 생성했지만, 그 빈도가 기존 방식대로 곧바로 BDDL을 생성할 때에 비해서는 월등히 줄어들었습니다!!!
또한 BDDL에 비해서 자연어 형태의 instruction은 가독성이 좋기 때문에 제가 빠르게 걸러낼 수도 있었습니다.
✅ 2단계 (Instruction → BDDL)
1단계에서 생성된 자연어 지시문을 다시 LLM에 입력으로 넣어, 이를 BDDL 형식으로 변환하도록 했습니다.
예를 들어 위 명령으로부터 다음과 같은 결과를 얻습니다.
(:init
(onfloor cup floor)
(onfloor detergent floor)
(stained cup)
)
(:goal
(and (not (stained cup))
(ontop cup table))
)
이렇게 자연어 사고 → 논리 구조 변환 단계를 분리하자, 훨씬 현실적이고 논리 일관성 있는 BDDL이 생성되었습니다.
🌏 추가 개선: init 자연스러움 향상
여전히 초기 상태(:init)는 단조로운 경향이 있었습니다. LLM은 매번 “모든 물체는 floor 위에 있다”는 식으로 반복적인 구성을 만들어 냈습니다.
이 문제를 해결하기 위해 BDDL을 생성하기 전, LLM에게 “상황을 간단히 묘사하게 하는” 단계를 추가했습니다.
예를 들어 프롬프트를 이렇게 바꿨습니다.
Describe a realistic starting scene for this instruction:
"Clean the cup using detergent, then place it on the table in the living room."
[LLM Output]
“The cup is on the kitchen counter, the detergent is near the sink, and the living room table is empty.”
이렇게 자연어로 상황을 먼저 상상하게 한 뒤, 그 출력을 기반으로 :init 조건을 구성하니 훨씬 자연스럽고 다양한 초기 상태를 얻을 수 있었습니다.
🌏 다음은?
이 2단계 구조 덕분에 LLM은 BDDL 형식을 잘 따르면서도 로봇이 실제로 수행 가능한 행동만 포함하도록 생성할 수 있었습니다.
그러나 아직 창발성(Emergent Capability) 을 테스트하기에는 어렵습니다.
즉, LLM이 “가능한 행동을 올바르게 기술하는 것”은 가능하지만, 아직 “배운 행동을 조합하거나 변형하는 능력”까지는 도달하지 못했습니다.
다음 포스팅에서는 이 구조를 기반으로, 일부 Object나 Instruction을 변형해 창발적 행동을 실험하는 과정을 다뤄보겠습니다.

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
'AI > VLA' 카테고리의 다른 글
| [AI/VLA] 창발성을 테스트할 수 있는 VLA 오픈소스 데이터셋 구축하기(1) (ft. BDDL, LIBERO) (0) | 2025.10.23 |
|---|