인공지능/강화학습

matlab 강화학습 - walking Robot Problem

이게될까 2024. 5. 8. 01:55
728x90
728x90

https://kr.mathworks.com/videos/reinforcement-learning-part-4-the-walking-robot-problem-1557482052319.html

 

Reinforcement Learning, Part 4: The Walking Robot Problem

This video shows how to use the reinforcement learning workflow to get a bipedal robot to walk, and how we can set up the RL problem to look more like a traditional control problem by adding a reference signal to the design.

kr.mathworks.com

https://kr.mathworks.com/matlabcentral/fileexchange/64227-matlab-and-simulink-robotics-arena-walking-robot

 

MATLAB and Simulink Robotics Arena: Walking Robot

Example files for MATLAB and Simulink Robotics Arena walking robot videos.

kr.mathworks.com

드디어 실습을 진행하네요 ㅎㅎ..

다리만 있는 로봇이 사람처럼 자연스럽게 걷게 만드는 것이 목표이다.

간단한 시스템에도 엄청 복잡한 논리가 들어간다.

우리는 이걸 강화학습 에이전트로 제어한다!

 

보상함수는?

어떻게 만들어야 할까요?

다양한 변수를 생각해서 원하는 행동을 하도록 만들어야 한다.

고려해야할 것이 상당히 많다.

강의에서 지정한 보상함수

 

https://kr.mathworks.com/videos/deep-reinforcement-learning-for-walking-robots--1551449152203.html

 

Deep Reinforcement Learning for Walking Robots

Use MATLAB, Simulink, and Reinforcement Learning Toolbox to train control policies for humanoid robots using deep reinforcement learning.

kr.mathworks.com

실제 진행은 여기서 보여준다네요 ㅠㅠ

2024.05.08 - [인공지능/강화학습] - 딥러닝 강화학습을 통해 워킹 로봇 작동하기 matlab

 

딥러닝 강화학습을 통해 워킹 로봇 작동하기 matlab

https://kr.mathworks.com/videos/deep-reinforcement-learning-for-walking-robots--1551449152203.html Deep Reinforcement Learning for Walking RobotsUse MATLAB, Simulink, and Reinforcement Learning Toolbox to train control policies for humanoid robots using d

yoonschallenge.tistory.com

 

이제 정책 함수를 만들어 봅시다.

비평가와 액터로 만들어지죠 - DDPG 연속적인 행동 공간에서 사용할 수 있는 알고리즘적이고, 결정론적 정책을 추론하기 때문에 학습 속도가 빠르다!

 

여기선 장애물을 감지하기 위한 센서가 아무것도 없기 때문에 지금 장애물을 피할 수 없다.

카메라나 라이다를 통해 장애물 정보를 넘겨줄 수 있다.

관측값이 엄청나게 늘어나서 뉴럴넷도 엄청나게 복잡해진다.

 

이제 강화 학습 워크플로를 이해했으므로 이 비디오에서는 RL이 장착된 에이전트를 사용하여 이족 보행 로봇이 걷게 하는 데 해당 워크플로가 어떻게 사용되는지 보여주고 싶습니다. GitHub에서 찾을 수 있는 MATLAB 및 Simulink Robotics Arena의 걷는 로봇 예제를 사용하겠습니다. 설명란에 링크를 남겨두었습니다. 이 예에는 훈련 매개변수를 조정하고, 에이전트를 훈련하고, 결과를 시각화할 수 있는 환경 모델이 함께 제공됩니다. 이 비디오에서는 이 예제를 수정하여 기존 제어 문제를 설정하는 방법과 더 유사하게 만들고 이 디자인의 몇 가지 한계를 보여 주는 방법도 살펴보겠습니다. 따라서 일반적인 제어 응용 프로그램에 강화 학습을 사용하는 방법을 이해하는 데 도움이 될 것이라고 생각하므로 이 내용을 계속 읽어보시기 바랍니다. 저는 Brian입니다. MATLAB Tech Talk에 오신 것을 환영합니다.

문제에 대한 간략한 개요부터 시작해 보겠습니다. 높은 수준의 목표는 인간이 걷는 것처럼 두 다리로 걷는 로봇을 만드는 것입니다. 디자이너로서 우리의 임무는 로봇의 다리와 몸체를 올바르게 움직이기 위해 취해야 할 조치를 결정하는 것입니다. 우리가 취할 수 있는 조치는 각 관절에 대한 모터 토크 명령입니다. 왼쪽과 오른쪽 발목, 왼쪽과 오른쪽 무릎, 왼쪽과 오른쪽 엉덩이 관절이 있습니다. 따라서 주어진 시간에 보내야 하는 6가지 토크 명령이 있습니다.

로봇의 몸체와 다리는 로봇이 작동하는 세계와 함께 환경을 구성합니다. 환경에서 관찰한 내용은 센서의 유형과 위치뿐 아니라 소프트웨어에서 생성된 기타 데이터를 기반으로 합니다. 이 예에서는 31개의 서로 다른 관측치를 사용합니다. 이는 Y 및 Z 몸체 위치, X, Y 및 Z 몸체 속도, 몸체 방향 및 각속도입니다. 또한 6개 관절의 각도와 각도 비율, 그리고 발과 지면 사이의 접촉력도 있습니다. 이것이 감지된 관찰입니다. 또한 이전 시간 단계에서 명령한 6가지 작업을 피드백하고 있으며 이는 소프트웨어의 버퍼에 저장되어 있습니다. 따라서 우리의 제어 시스템은 이러한 31개의 관측치를 수집하고 6개의 모터 토크 값을 지속적으로 계산해야 합니다. 따라서 이 간단한 시스템에도 논리가 얼마나 복잡해야 하는지 알 수 있습니다. 

이전 비디오에서 언급했듯이 제어 이론의 전통적인 도구를 사용하여 로직, 루프, 컨트롤러, 매개변수 및 모든 항목을 설계하려고 하기보다는 이 대규모 기능 전체를 엔드 투 엔드로 대체할 수 있습니다. 강화 학습 에이전트를 사용하여; 하나는 행위자 네트워크를 사용하여 이러한 31가지 관찰을 6가지 행동에 매핑하고 비판 네트워크를 사용하여 행위자를 보다 효율적으로 훈련시키는 것입니다.

우리가 알고 있듯이 훈련 프로세스에는 보상 기능이 필요합니다. 이는 에이전트에게 에이전트의 작업을 통해 학습할 수 있도록 수행 방법을 알려주는 기능입니다. 그리고 걷는 로봇에게 중요한 조건을 생각하면서 보상함수에는 무엇이 있어야 하는지 추론해보고 싶습니다. 어디서부터 시작해야 할지 모르는 경우 보상 기능 구축에 접근하는 방법이 될 수 있습니다. 이제 이 함수를 생성하면서 훈련 결과를 보여드리겠습니다. 따라서 변경 사항이 솔루션에 어떤 영향을 미치는지 확인할 수 있습니다. 그러나 모델을 실행하는 방법은 다루지 않을 것입니다. Sebastian Castro가 이를 수행하는 훌륭한 비디오가 이미 있기 때문입니다. 따라서 이 모든 것을 직접 시도해 보고 싶다면 아래 설명에 있는 링크를 확인하는 것이 좋습니다. 좋아요, 보상에 대해 말씀드리겠습니다.

어디서 시작하나요? 우리는 분명히 로봇의 몸체가 앞으로 움직이기를 원합니다. 그렇지 않으면 그냥 거기 서있을 것입니다. 하지만 거리 대신 전진 속도로 보상할 수 있습니다. 그렇게 되면 로봇이 느리게 걷기보다는 빨리 걷기를 바라는 마음이 생깁니다. 이 보상으로 훈련한 후에는 로봇이 처음에 빠른 속도를 얻기 위해 앞으로 뛰어들다가 넘어져 실제로 아무데도 가지 못하는 것을 볼 수 있습니다. 결국 이 보상으로 어떻게 하면 더 발전할 수 있을지 알아낼 수도 있겠지만, 수렴하는 데 오랜 시간이 걸리고 많은 진전이 이루어지지 않았기 때문에 훈련에 도움이 되도록 무엇을 추가할 수 있을지 생각해 보겠습니다. 앞으로 다이빙하는 것이 매력적이지 않도록 로봇이 넘어지는 것에 대해 처벌을 가할 수 있습니다. 따라서 더 오랜 시간 동안 그대로 유지되거나 시뮬레이션이 종료되기 전에 더 많은 샘플 시간이 경과하면 에이전트는 더 많은 보상을 받아야 합니다. 

이것이 어떻게 이루어지는지 살펴보겠습니다. 처음에는 약간의 홉이 있다가 결국 다시 넘어집니다. 아마도 이 에이전트를 더 오래 훈련시켰다면 개구리처럼 세상을 뛰어다니는 로봇을 가질 수 있었을 것입니다. 멋지긴 하지만 그건 제가 원하는 것이 아닙니다. 로봇이 앞으로 움직이고 넘어지지 않는 것만으로는 충분하지 않습니다. 우리는 뛰거나 웅크리고 걷는 대신 걷는 듯한 모습을 원합니다. 따라서 이 문제를 해결하려면 몸을 서있는 높이에 최대한 가깝게 유지한 에이전트에게 보상을 주어야 합니다. 

이 보상 기능을 확인해 보겠습니다. 좋습니다. 보기는 좋아졌지만 해결책이 실제로는 자연스러워 보이지 않습니다. 가끔씩 멈춰서 다리를 앞뒤로 흔들고, 대부분의 경우 오른쪽 다리를 좀비처럼 끌고 왼쪽 다리에 모든 작동을 가합니다. 그리고 액추에이터 마모나 이 로봇을 작동하는 데 필요한 에너지의 양을 고려한다면 이는 이상적이지 않습니다. 우리는 양쪽 다리가 동일한 작업을 수행하고 떨림이 심한 액추에이터를 과도하게 사용하지 않기를 바랍니다. 따라서 이 문제를 해결하기 위해 액추에이터 노력을 최소화한 에이전트에 보상을 제공할 수 있습니다. 이렇게 하면 추가적인 불안감이 줄어들고 각 다리에 부하가 분배되도록 노력의 균형이 유지됩니다.

훈련된 에이전트를 확인해 보겠습니다. 좋아요, 이제 가까워지고 있어요. 꽤 괜찮아 보이는군요. 이제 마지막 문제가 하나 남았습니다. 우리는 로봇이 직선으로 계속 움직이고 여기서 하는 것처럼 오른쪽이나 왼쪽으로 방향을 바꾸지 않기를 원하므로 x축에 가깝게 유지하는 것에 대해 보상해야 합니다.

이것은 약 3500번의 시뮬레이션이 필요한 최종 보상이자 교육입니다. 따라서 모델에서 이를 설정하고 다중 코어나 GPU가 있는 컴퓨터 또는 컴퓨터 클러스터에서 시뮬레이션을 실행하면 몇 시간의 교육 후에 솔루션을 얻을 수 있습니다. 우리는 인간과 같은 방식으로 직선으로 걷는 로봇을 갖게 될 것입니다. 

보상 함수를 설정한 후 정책으로 넘어가겠습니다. 나는 이미 정책이 행위자 신경망이고 동시에 비판 신경망이라고 밝혔습니다. 그리고 이러한 각 네트워크에는 각각 수백 개의 뉴런으로 구성된 숨겨진 레이어가 여러 개 있으므로 여기에는 많은 계산이 필요합니다. 뉴런이 충분하지 않으면 네트워크는 이 비선형 환경에 대해 31개의 관찰을 6개의 동작에 매핑하는 데 필요한 고차원 함수를 결코 모방할 수 없습니다. 반면에 뉴런이 너무 많으면 과도한 논리를 훈련하는 데 더 많은 시간을 소비하게 됩니다. 또한 기능적 복잡성 측면에서 네트워크 아키텍처가 정말 중요합니다. 여기에는 레이어 수, 연결 방식, 각 레이어의 뉴런 수 등이 있습니다. 따라서 훈련을 가능하고 효율적으로 만드는 최적의 지점을 찾으려면 약간의 경험과 지식이 필요합니다.

다행스럽게도 우리가 알고 있듯이 네트워크에 있는 수십만 개의 가중치와 편향을 수동으로 해결할 필요가 없습니다. 우리는 훈련 알고리즘이 우리를 위해 그렇게 하도록 했습니다. 이 예에서는 DDPG(Deep Deterministic Policy Gradient)라는 행위자/비평가 훈련 알고리즘을 사용하고 있습니다. 그 이유는 이 알고리즘이 모터에 적용할 수 있는 연속 토크 범위와 마찬가지로 연속 동작 공간이 있는 환경에서 학습할 수 있기 때문입니다. 또한 결정론적 정책을 추정하기 때문에 확률론적 정책을 학습하는 것보다 학습 속도가 훨씬 빠릅니다.

이 모든 것이 상당히 복잡하고 추상적으로 들리는 것을 알고 있지만, 이 점이 나에게 멋진 점은 복잡성의 대부분이 정책 교육에 있다는 것입니다. 완전히 훈련된 에이전트가 있으면 행위자 네트워크를 대상 하드웨어에 배포하기만 하면 됩니다. 행위자는 관찰을 행동에 매핑하는 기능이라는 것을 기억하십시오. 무엇을 할지 결정하는 것이 바로 정책입니다. 비평가와 학습 알고리즘은 배우의 매개변수를 결정하는 데 도움을 주기 위해 존재합니다.

좋아요, 이 시점에서 여러분이 가질 수 있는 질문이 있습니다. 물론, RL을 사용하여 로봇이 직선으로 걷도록 할 수 있습니다. 그런데 이 정책은 이것 하나만 할 수 있지 않을까요? 예를 들어 이 정책을 배포하고 로봇을 켜면 즉시 영원히 똑바로 걷기 시작합니다. 그렇다면 로봇이 걷고 싶은 곳으로 걷도록 명령을 보낼 수 있는 정책을 어떻게 배울 수 있을까요?

그럼 그것에 대해 생각해 봅시다. 현재 이것이 우리 시스템의 모습입니다. 관찰과 보상을 생성하는 환경이 있고, 행동을 생성하는 에이전트가 있습니다. 우리가 이 시스템에 외부 명령을 주입할 방법이 없으며 에이전트가 명령을 가지고 있더라도 이에 응답할 방법이 없습니다. 따라서 에이전트 외부에서 참조 신호를 수신하고 오류 항을 계산하는 추가 로직을 작성해야 합니다. 오류는 환경에서 얻을 수 있는 현재 X 위치와 참조 값 간의 차이입니다. 이는 일반적인 피드백 제어 시스템에서 발생하는 것과 동일한 오류 계산입니다.

이제 X 방향으로 더 높은 속도에 대해 에이전트에게 보상하는 대신 낮은 오류에 대해 보상할 수 있습니다. 이는 로봇이 명령된 x 참조 값을 향해 걷고 유지하도록 장려해야 합니다.

관찰을 위해 에이전트가 그에 따라 정책을 개발할 수 있도록 오류 조건을 볼 수 있는 방법을 제공해야 합니다. 에이전트가 오류 변화율 및 기타 더 높은 파생 항목에 액세스하는 데 도움이 될 수 있으므로 마지막 5개 샘플 시간의 오류를 입력하겠습니다. 이를 통해 정책은 필요한 경우 파생상품을 생성할 수 있습니다. 결국 정책은 오류가 양수인 경우 지정된 속도로 앞으로 이동하고 음수인 경우 뒤로 이동하는 것입니다.

이제 에이전트에 대한 관측치가 36개이므로 추가 입력을 처리하기 위해 행위자 네트워크를 조정해야 합니다. 이러한 변경 방법에 대한 지침이 필요한 경우 설명에 있는 Sebastian의 비디오를 다시 확인하세요. 

Simulink의 기본 모델을 새로운 오차항으로 업데이트하고 이를 관찰 블록과 보상 블록에 입력했습니다. 그리고 저는 이 특정 프로필을 사용하여 수천 개의 에피소드를 통해 이 에이전트를 훈련시켰으므로 이를 따라가는 데 정말 능숙할 것입니다. 그러나 훈련된 정책이 비슷한 속도와 가속도를 갖는 다른 프로필도 따를 수 있을 만큼 강력할 것이라는 희망이 있습니다. 그럼 한 번 시도해 보겠습니다. 앞으로 걷다가 잠시 멈췄다가 뒤로 걷도록 하겠습니다. 

뒤로 걸어갈 때는 좀 우스꽝스러워 보이지만 전반적으로 꽤 좋은 노력입니다. 약간의 보상 조정과 훈련에 조금 더 시간을 투자하면 여기서 꽤 좋은 결과를 얻을 수 있을 것입니다.

따라서 이러한 방식으로 RL 에이전트를 사용하여 제어 시스템의 일부를 대체하는 방법을 확인할 수 있습니다. 단일 동작을 학습하는 기능 대신 높은 수준의 참조 신호를 추출하고 에이전트가 오류를 해결하도록 하여 명령을 보내는 기능을 유지할 수 있습니다. 

또한 에이전트에서 낮은 수준의 기능을 제거할 수도 있습니다. 예를 들어, 6개의 관절 각각에 대한 낮은 수준의 토크를 수행하는 대신 에이전트는 발을 지면에 놓을 위치를 학습할 수 있습니다. 따라서 작업은 신체 좌표계의 특정 위치에 왼발을 배치하는 것입니다. 이 동작은 조인트 모터를 구동하는 하위 수준의 기존 제어 시스템에 대한 참조 명령이 될 수 있습니다. 아시다시피 시스템 역학에 대한 지식을 바탕으로 토크 명령을 피드포워드하고 일부 신호를 피드백하여 성능과 안정성을 보장할 수 있습니다. 

이는 쉬운 문제를 해결하기 위해 특정 도메인 지식을 사용할 수 있고 설계에 대한 통찰력과 제어력을 제공하며 어려운 문제에 대한 강화 학습을 예약할 수 있기 때문에 유익합니다. 

지금까지 우리의 최종 걷기 솔루션에 대해 주목해야 할 점은 실제로는 자체 상태에만 강력하다는 것입니다. 아시다시피, 넘어지지 않고 돌아다닐 수 있다는 것은 좋은 일이지만, 완벽하게 평평하고 특징 없는 평원에서만 가능합니다. 로봇 외부 세계의 어떤 부분도 고려하지 않았기 때문에 실제로는 상당히 취약한 디자인입니다. 예를 들어, 로봇의 길에 장애물 하나를 놓으면 어떤 일이 일어나는지 봅시다. 

뭐, 예상대로 됐어요. 여기서 문제는 에이전트에게 로봇 자체의 움직임 외에 환경 상태를 인식할 수 있는 방법을 제공하지 않았다는 것입니다. 장애물을 감지할 수 있는 것은 아무것도 없으므로 장애물을 피하기 위해 할 수 있는 일도 없습니다.

하지만 여기에 문제가 있습니다. 신경망 기반 에이전트의 장점은 풍부한 센서라고 부르는 것을 처리할 수 있다는 것입니다. 이는 LiDAR 및 가시 카메라와 같은 것으로, 각도와 같은 단일 측정값을 생성하지 않고 수천 개의 거리 또는 다양한 빛 강도의 픽셀을 나타내는 숫자 배열을 반환합니다. 따라서 우리는 로봇에 가시 카메라와 LiDAR 센서를 설치하고 추가 관찰로 수천 가지의 새로운 값을 에이전트에 제공할 수 있었습니다. 관측치가 36개에서 수천 개로 증가함에 따라 이 함수의 복잡성이 어떻게 증가해야 하는지 상상할 수 있습니다. 

단순하고 완전히 연결된 네트워크는 이상적이지 않다는 것을 알 수 있으므로 컨벌루션 네트워크와 같은 연결을 최소화하거나 순환 네트워크와 같은 메모리를 추가하는 특수 논리를 통합하는 추가 레이어를 추가할 수 있습니다. 이는 대규모 이미지 데이터와 보다 역동적인 환경을 처리하는 데 더 적합한 네트워크 계층입니다. 그러나 로봇이 이러한 장애물을 피하도록 하기 위해 보상 기능을 변경할 필요는 없습니다. 에이전트는 경로에서 벗어나 더 낮은 보상을 받으면 로봇이 넘어지지 않고 계속 걸을 수 있으므로 전체적으로 더 많은 보상을 얻을 수 있다는 것을 학습할 수 있습니다.

저는 이 비디오에서 강화 학습과 관련된 몇 가지 문제를 다루었고 전통적인 제어 설계의 이점과 강화 학습을 결합하여 문제를 수정할 수 있는 방법을 보여주었습니다. 다음 비디오에서는 이에 대해 좀 더 확장하여 강화 학습의 다른 단점과 이를 완화하기 위해 무엇을 할 수 있는지에 대해 이야기할 것입니다.

따라서 이 내용과 향후 Tech Talk 비디오를 놓치고 싶지 않다면 이 채널을 구독하는 것을 잊지 마세요. 또한 내 채널인 Control System Lectures를 확인하고 싶으시다면 거기에서 더 많은 제어 주제도 다루고 있습니다. 시청해 주셔서 감사드리며, 다음에 뵙겠습니다.

728x90