새소식

논문 리뷰

A Lifelong Learning Approach to Mobile Robot Navigation

  • -
Bo Liu, Xuesu Xiao, Peter Stone

https://arxiv.org/abs/2007.14486

 

A Lifelong Learning Approach to Mobile Robot Navigation

This paper presents a self-improving lifelong learning framework for a mobile robot navigating in different environments. Classical static navigation methods require environment-specific in-situ system adjustment, e.g. from human experts, or may repeat the

arxiv.org

2021 R-AL

신뢰의 랄논문: 코드도 공개되어있다

https://github.com/Cranial-XIX/LifelongLearningforNavigation?tab=readme-ov-file

 

GitHub - Cranial-XIX/LifelongLearningforNavigation

Contribute to Cranial-XIX/LifelongLearningforNavigation development by creating an account on GitHub.

github.com

 

Abstract

본 논문은 서로 다른 환경에서 이동하는 모바일 로봇을 위한 Self-improving lifelong leraning framework를 소개한다. 전통적인 정적 내비게이션 방법은 환경별로 전문가의 현장 시스템 조정이 필요하거나, 같은 환경에서 얼마나 많이 이동했는지와 관계없이 같은 실수를 반복할 수 있다. 경험을 통해 개선될 수 있는 잠재력이 있는 Learning 기반 내비게이션은 충분한 메모리와 빠른 연산과 같은 훈련 자원에 대한 접근에 크게 의존하며, 특히 다른 환경에 직면할 때 이전에 학습한 능력을 잊어버리기가 쉽다. 
이 연구에서 우리는 내비게이션을 위한 Lifelong Learning for Navigation(LLfN)을 제안하는데, 이는 
1) 순수하게 로봇 자신의 경험을 기반으로 모바일 로봇의 내비게이션 행동을 개선하고
2) 새로운 환경에서 학습한 후에도 이전 환경에서의 내비게이션 능력을 유지한다. 
LLfN은 제한된 메모리와 연산 예산을 가진 물리적 로봇에 탑재되어서 구현되고 테스트되었다. 

 

Introduction

전통적인 모바일 로봇들은 센서 보정이나 매개변수 조정과 같은 기본 내비게이션 시스템의 현장 조정(in-situ adjustment)을 통해 다양한 내비게이션 환경에 적응하도록 설계되었다. 하지만 전문가의 지식 없이는 조정되지 않은 시스템이 동일한 환경에서 여러 번 이동했음에도 불구하고 같은 실수(ex. 같은 병목 구간에 갇힘)를 반복할 수 있다. 

최근 모바일 로봇 내비게이션에 기계학습을 사용한 성공은 동일한 환경에서 로봇의 과거 경험을 통해 내비게이션 성능을 향상시킬 수 있는 잠재력을 보여준다. 하지만 다른 내비게이션 환경에 직면했을 때, 학습 방법들은 보지 못한 시나리오에 잘 일반화되지 못한다. 새로운 환경에서 내비게이션을 다시 학습해야 하고, 더 중요한 것은 학습된 시스템이 catastrophic forgetting에 취약해서 이전 환경에서 학습한 내용을 잊어버리게 된다는 것이다. 

본 논문에서는 LLfN 프레임워크를 제안한다. 
여기서 로봇은 고전적인 내비게이션 알고리즘으로 초기화되어서 기본적인 내비게이션 능력을 가진 상태로 시작하지만, 로봇은 자신이 한 행동 중에서 좋지 않았던 선택들을 파악하고 이를 바탕으로 학습을 진행한다. 
새로운 내비게이션 환경에 직면했을 때, 내비게이션 정책은 이전 환경에서의 내비게이션 방법을 잊지 않으면서 새로운 환경에 적응하는 것을 학습할 수 있다. 

본 논문의 주요 contribution은 다음과 같다. 
- 기본 내비게이션 시스템을 토대로 하되, 경험이 쌓일수록 성능이 자동으로 개선되는 자가 학습 전략 개발
- 로봇이 새로운 환경을 학습할 때도 기존에 익혔던 환경에서의 이동 능력을 유지할 수 있는 Lifelong learning system
- 이 모든 기능을 제한된 메모리와 연산 능력을 가진 실제 로봇에 구현

 

Related Work

A. Classical Navigation

전통적인 내비게이션 시스템은 다양한 환경에 적응할 수 있도록 설계되었지만, 일반적으로 미리 지정된 고정된 하이퍼파라미터로 작동하는 정적 시스템이어서 경험을 통한 개선이나 특정 환경에 대한 적응 능력이 부족하다. 이런 문제를 해결하기 위해 현재는 전문가의 직관, 경험, 시행착오를 필요로 하는 파라미터 튜닝을 사용한다. 전문가 지식에 대한 의존도를 줄이기 위해 Xiao 등은 원격 조종 시연을 통한 행동 복제(Behavior Cloning)로 파라미터를 조정하여 주어진 환경(context)에서의 내비게이션을 개선하는 방법을 제안했다. 대부분의 경우 튜닝은 직접 조정이나 내비게이션 시연 형태로 인간의 지식을 필요로 한다. 게다가 한 번 튜닝되면 정적 내비게이션 시스템은 더 많은 경험으로 추가 개선하거나 새로운 환경에 적응하는 능력이 부족하다. 반면 제안된 내비게이션을 위한 LLfN 시스템은 인간의 지식을 필요로 하지 않으며 새로운 환경에 직면했을 때 더 많은 내비게이션 경험으로 동적으로 개선될 수 있다. 

B. Learning-based Navigation

데이터 기반 기계학습 기술도 내비게이션 문제에 널리 적용되어 왔다. 학습 접근법은 주로 전문가를 모방하거나 (Imitation Learning)이나 강화학습을 통해 시행착오로 학습한다. 이런 학습 방법들은 특정 환경에서 내비게이션 경험이 늘어남에 따라 성능 향상을 가능하게 하지만, 실제 내비게이션에서 흔한 것처럼 에이전트가 순차적으로 여러 환경에 놓이게 되면 잘 일반화되지 않고 과거 지식을 쉽게 잊어버릴 수 있다. 반면 LLfN은 망각을 방지하고 일반화를 높이는 방법을 명시적으로 고려한다. 

C. Lifelong / Continual Supervised Learning

평생 또는 지속학습은 지속적인 방식으로 학습하는 문제를 연구한다. 최근에 신경망을 이용한 Continual Learning에서는 주로 세 가지 접근법이 있다. 

1) 학습된 가중치가 기존 가중치에서 너무 많이 벗어나지 않도록 정규화를 사용
2) Joint optimization을 위해 이전 데이터를 복구하는 생성 모델 훈련
3) 더 많은 Task learning을 위한 Dynamic network 채택

이 중 첫 번째 접근법은 고정된 용량의 네트워크에 적용되며, 생성 모델을 훈련하거나 동적 네트워크 아키텍쳐를 채택하는 것 보다 훨씬 계산 효율적이다. 이런 계산 효율성은 자원이 제한된 모바일 로봇 플랫폼에서의 온보드 학습에 필수적이다. 특히 몇 가지 과거 데이터 포인트를 저장할 수 있을 때 Gradient Episodic Memory(GEM)가 매우 효율적이로 강력할 수 있다. 이런 방법들은 모두 Continual Image Classification 문제에서 성공적이었지만, 전문가의 Supervise Label이 사전에 제공되지 않은 로봇공학 같은 응용 분야에서 Continual Learning 연구는 여전히 많은 개선의 여지가 있다. 
Lifelong learning이 Transfer learning과 유사하는 점을 주목할 필요가 있따. 하지만 이전 지식이 현재 작업에 어떻게 도움이 될 수 있는지에 초점을 맞춘 Transfer learning의 순방향 전이와는 달리, LLfN은 현재 작업 학습이 이전 작업의 성능을 어떻게 유지하거나 개선할 수 있는지(역방향 전이)도 고려한다. 

 

Background

A. Problem Setup and Notation

Lifelong navigation의 high-level 목표는 일련의 m개 환경 {Ei}(i=1부터 m까지)에서 내비게이션하는 방법을 학습하는 것이다. 각 환경에서 로봇은 하나의 고정된 시작점에서 다른 고정된 목표점까지 이동하는 것을 목표로 한다. 우리는 고정된 전역 계획기(ex. 다익스트라, A* 또는 D*)가 시작점과 목표점을 연결하는 경로를 생성하고, 내비게이션하는 동안 로봇이 이 전역 경로를 따르면서 자신의 운동역학적 제약을 준수하고 장애물을 피하는 움직임 명령을 생성해야 한다고 가정한다. 

에이전트가 Ek로 진행할 때마다 이전 환경 {E}(i=1부터 k-1까지)에 더 이상 접근할 수 없다. Ek 환경 내에서 에이전트는 각 시간 단계 t마다 상태 st ∈ S에 기반하여 매개변수 θ로 정의된 정책 πθ를 통해 움직임 명령 at ∈ A를 계산한다. at를 실행한 후 에이전트는 st+1로 진행하고 이 과정이 계속된다. 학습 단계에서 에이전트는 제한된 온보드 메모리 크기 n을 가지게 되며, 즉 최대 n쌍의 (st, at)만 언제든지 저장할 수 있다. 에이전트가 모든 m개의 환경을 경험한 후에는 동일한 m개 환경에서 내비게이션 성능이 평가된다.

B. Gradient Episodic Memory

Continual Learning의 핵심 과제는 Catastrophic Forgetting이다. 즉, 에이전트가 새로운 환경에 적응하면서 이전에 학습한 내용을 잊어버리는 현상이다. 이 현상은 특히 신경망과 같은 특징이 풍부한 매개변수 모델이 기본 학습 모듈로 사용할 때 두드러진다
Catastrophic Forgetting을 해결하기 위해 우리는 LLfN에서 GEM을 사용한다. 상위 수준에서 보면 GEM은 각 업데이트가 이전 작업들의 손실을 증가시키지 않도록 함으로써 망각을 방지한다. GEM에서는 새로운 경험이 이전 작업들의 성능을 향상시킬 수 있도록 허용한다는 점도 주목할 만 하다. 

구체적으로, 에이전트가 이미 Ek-1까지의 환경을 경험했고 학습된 정책이 πθk-1이라고 가정해보자. GEM은 에이전트가 각 이전 환경 Ei에 대해 몇 가지 예시 데이터 포인트 Mi를 저장하는 작은 메모리 버퍼 B = {Mi}(i<k)를 유지한다고 가정한다. GEM은 그런 다음 다음과 같은 목적 함수를 최적화한다. 


여기서 l(π,X)는 데이터 X에서 π의 성능을 평가하는 손실 함수이다. 

+덧)

이 수식은 두 부분으로 나눠서 이해할 수 있다. 

  • min l(πθ, Ek)
    • 현재 환경 (Ek)에서의 손실을 최소화하려는 목표
  • s.t. l(πθ, M) ≤ l(πθk-1, M), ∀M ∈ B
    • s.t : subject to (~라는 조건 하에)
    • 이전 환경들의 데이터 (M)에 대해, 새로운 정책(πθ)의 손실이 이전 정책(πθk-1)의 손실보다 커지면 안 된다는 제약 조건
    • "새로운 것을 배우되, 예전에 배운 것들을 잊지 말자"
예를 들어, 주어진 상태 s에서 label a를 예측하는 regression task에서는

이다. 위의 최적화를 효율적으로 해결하기 위해 GEM은 

1) 새로운 θ가 θk-1에서 초기화되고
2) 각 최적화 단계에서 이전 작업들의 손실이 증가하지 않는 한 제약 조건이 만족된다는 것
을 관찰한다. 최적화 단계가 작다고 가정하면, 현재 작업과 이전 작업의 기울기 간의 내적을 계산해서 새로운 업데이트가 이전 작업의 손실을 증가시키는지 판단할 수 있다. 예를 들어 내적이 음수인 경우에만 이전 작업의 손실이 증가할 것이다. 그러면 최적화 문제는 (2)로 작성할 수 있다. 


실제로 방정식 (2)를 해결하기 위해 GEM은 modified gradient를 사용한 Stochastic gradient descent를 사용한다. 

+덧)

  • 두 벡터의 내적이 양수이면 두 벡터가 대체로 비슷한 방향을 하고 있다는 것이고, 두 벡터의 내적이 음수이면 두 벡터가 대체로 반대 방향을 가리키고 있다. 
  • 현재 작업의 기울기 : 현재 작업의 성능을 향상시키기 위해서 가야 할 방향
  • 이전 작업의 기울기 : 이전 작업의 성능을 향상시키기 위해서 가야 할 방향
  • 내적이 음수인 경우 : 현재 작업의 기울기와 이전 작업의 기울기가 반대 방향을 가리킴
    • 즉, 현재 작업의 성능을 높이는 방향이 이전 작업의 성능을 떨어뜨리는 방향과 같다

따라서 내적이 양수를 유지하면서 stochastic gradient descent를 수행해야 한다는 의미이다. 

 

Lifelong Learning for Navigation


직관적으로 보면 catastrophic forgetting은 새로운 것을 학습할 때 기존 지식을 덮어쓰게 되는 딜레마로 인해 발생한다.실제 내비게이션 상황에서는 에이전트가 매 순간 새로운 것을 학습해야 할 필요성이 크지 않다.에이전드는 전통적인 방식으로도 대부분의 장소에서 쉽게 이동할 수 있으며,특정 시나리오 (예. 그림 1의 빨간색 경로 구간)에서만 내비게이션에 어려움을 겪는다. 
따라서 우리는 LLfN을 이런 어려운 상황들을 처리하기 위해 전통적인 계획기 π0를 보조하는 보조 계획기 πθ를 학습하는 프레임워크로 본다. 게다가 πθ를 업데이트할 때는 이전에 학습한 행동들에 미치는 영향을 최소화해야 한다. 

이 목표를 달성하기 위해서는 에이전트가 먼저 이런 '어려운' 시나리오들을 식별할 수 있어야 한다. 즉, 에이전트가 최적이 아닌 움직임 명령을 생성하는 특정 상태 s가 어떤 것인지 식별할 수 있어야 한다. 

또한 우리는 전문가의 시연에 대한 접근을 가정하지 않기 때문에, 에이전트는 s 주변에서 어려움을 극복할 때까지 계속 움직임 명령을 샘플링해야 한다. 
s 주변의 궤적을 관찰함으로써 에이전트는 좋은 행동, 즉 상태-행동 쌍 (s',a')를 식별할 수 있어야 하며, 이는 어려운 지점 s 주변을 극복할 수 있는 에이전트의 확률을 증가시킬 것이다. 

다음은 우리가 사용하는 LLfN 프레임워크의 주요 구성 요소이다. 

  • 초기 샘플링 기반 내비게이션 계획기 π₀와 학습 가능한 매개변수화된 계획기 πθ
  • 상태 s에서 행동 a가 얼마나 좋은지 평가하는 점수 함수 D: S × A → R (D(s,a)가 클수록 a가 해당 상태에서 더 나은 행동임을 나타냄)
  • 과거 T단계 궤적을 저장하는 스트리밍 메모리 버퍼 Bstream, 즉 Bstream = {sj,aj}j=t-T+1
  • 환경 Mk: {Mi}i<k에서 예시적인 훈련 데이터(자체 생성된 가치 있는 훈련 데이터)를 저장하는 환경별 메모리 B (n은 메모리 budget). 따라서 B는 집합들의 집합임: B = {Mi}i<k
  • 주어진 부최적 행동(suboptimal behavior) (s,a) ∈ Bstream에 대해, (s',a') ∈ Bstream에서 예시적인 훈련 데이터를 찾는 알고리즘 Ael. 이때 (s',a')로부터의 학습이 s에서의 내비게이션 성능을 향상시킴
  • Mi와 B가 주어졌을 때 πθ를 업데이트하고 이전 환경에서의 성능을 유지하는 지속학습 알고리즘 Acl

알고리즘 1에서는 기록 메모리 버퍼 B와 스트리밍 메모리 버퍼 Bstream이 라인 2에서 빈 상태로 초기화되고, πθ는 무작위 정책으로 초기화된다. k번째 환경(라인 3)에 진입할 때, 성능은 D를 통해 평가된다.  

이 알고리즘의 주요 구성 요소는 다음과 같다. 

기본 구성 요소

  • π₀: 기본 내비게이션 계획기 (기존의 전통적인 방식)
  • πθ: 학습 가능한 새로운 계획기 (개선되는 부분)
  • D: 행동의 품질을 평가하는 점수 시스템
  • Bstream: 최근 행동들을 기록하는 임시 메모리
  • B: 중요한 학습 경험을 저장하는 장기 메모리

메모리 시스템의 작동 방식

  • 단기 메모리(Bstream):
    • 최근 T단계 동안의 로봇 움직임을 기록
    • 마치 "방금 내가 무엇을 했지?"를 기억하는 것과 같음
  • 장기 메모리(B):
    • 각 환경에서 배운 중요한 경험들을 저장
    • 마치 "이 상황에서는 이렇게 하는 게 좋았다"를 기억하는 것과 같음

학습 프로세스

  • Suboptimal 행동 식별:
    • 로봇이 어려움을 겪는 상황을 인식
    • 예: 특정 장애물 앞에서 자주 멈추는 경우
  • 개선 방법 찾기:
    • 비슷한 상황에서 성공했던 경험을 참조
    • 그 경험을 바탕으로 현재 상황을 개선
  • 지식 보존:
    • 새로운 것을 배우면서도 이전에 배운 것을 유지

 

Code

그래서 GEM이 코드에서 어떻게 구현되어 있는지 살펴보면 다음과 같다. 

# agent.py

class Agent(nn.Module):
    """
    using gradient episodic memory
    """
    def __init__(self,
                 dim_input,
                 cuda=True,
                 mem_budget=1000):
        super(Agent, self).__init__()
        self.task = -1
        self.memories = {} # per task replay
        self.n_mem = mem_budget
        self.tqdm = True

        self.net = Model(dim_input)
        self.cuda = cuda
        if cuda:
            self.net.cuda()
        self.create_optimizer()
  • mem_budget : 메모리 버짓 (기본값 1000)
  • memories : 태스크별 리플레이 메모리를 저장하는 딕셔너리

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.