ACT, Architecture of Action Chunking with Transformers
ACT란, imitation learning 알고리즘으로 fine grain하게 로봇을 조종하기 위한 알고리즘이다. 집에 로봇을 조립한 기념으로 읽어봤다. 처음 접하는 분야라 뭐부터 읽어야할지 모르겠어서 추천을 받아왔다. 최근까지도 가장 많이 쓰이는 방식이라고한다.
single step을 predict하는 대신에 chunks of action을 예측한다는게 핵심 아이디어이다.
Conditional Variational Autoenncoder , CVAE를 transformer로 만든 구조이다.
현재 joint state를 cvae의 인코더가 받아서 style vector z를 만든다.
컵을 올려라 라는 명령에, 사람들마다 컵을 쥐는 방식도 다른고, 올리는 방식도 다르니까, 이런 variability를 capture 하기 위함인거 같다.
test tiime에는 앞서 만들어진 style vector z랑 ㅇinput image, joint position 등이 들어가서 action chunk를 예측한다. inference time 때 style vector z는 zero mean으로 들어간다.
구조를 좀더 자세히 보자

그림이 헷갈리게 되어있지만 왼쪽 transforemer 인코더랑 오른쪽 transformer encoder 는 다른애이다.
왼쪽이 전체 아키텍쳐에서 Encoder 역할을 하고, 오른쪽 전체가 Decoder 역할을 한다. Inference때는 저 오른쪽 부분만 쓰인다.
CVAE처럼 작동하는데, 움직임을 하나의 z (style)로 정의하고, 이 움직임에 따라 어떻게 핸들링해야할지를 예측하는거다.
Encoder 에 들어가는게, joints, 즉 현재 state, 팔 하나당 7자유도씩 있으니까 14 자유도 가 들어가고, action sequence는 각 joint 에 달려있는 모터에 들어가는 제어 input이다. 즉 action sequence가 Ground truth 인거다. 그래서 inference 할떄는 Ground Truth 가 없으니까 이 인코더는 training할때만 쓰이고, inference할때는 안쓰인다.
오른쪽 transformer 가 만들어내는건 action sequence로, 액션에 대한 인풋값들의 time series 값들이다. 그래서 학습할떄는 오른쪽 action sequence(predicted)랑, 가장 왼쪽에 있는 action sequence(gt) 값과의 reconstruction loss와, Z의 kl divergnece를 줄이는 방향으로 학습이 된다.

이떄, transformer decoder 에서 나온 action sequence는 청크의 개수에 따라서 나오게 되는데, 각 프레임별로 각각 청크의 개수만큼이 predict 되어 누적이 될것이다. 이걸 temporal 하게 ensemble해서 평균을 내면 부드러운 로봇 액션을 구현할수있다고 한다. 이때 , weight exponentially를 해서 최근 껀 더 참고를 많이하게 average가 된다.
빨래개기를 가르쳐주고 싶었는데,, 아무래도 팔 한마리를 더 입양해야할거 같다, 이런 조그만한 팔 가지고는 쓰레기 줍기, 악수하기 이외에 할수있는게 없다..
