인공지능/강화학습

matlab 강화학습 - 환경과 보상

이게될까 2024. 5. 7. 20:34
728x90
728x90

https://kr.mathworks.com/videos/reinforcement-learning-part-2-understanding-the-environment-and-rewards-1551976590603.html

 

Reinforcement Learning, Part 2: Understanding the Environment and Rewards

In this video, we build on our basic understanding of reinforcement learning by exploring the workflow; What is the environment? How do reward functions incentivize and agent? How are policies are structured?

kr.mathworks.com

 

강화학습 vs 전통적 컨트롤 잘 선택해야 한다.

 

RL workflow

환경이 필요하다. 현실과 시뮬레이션 선택

동기를 부여하는 보상함수가 필요하다.

정책의 매개변수와 논리를 구조화 한 뒤 최적의 정책을 찾는 학습을 진행한다.

 

환경은 에이전트 밖의 모든 것 이다.

에이전트는 환경에 대해 전혀 알 필요가 없당 

 

엔지니어는 물리적 지식을 알기 때문에 사용할 수 있지만 왜 안쓸까? 
탐색할 가치가 없는 공간에 대해 전달해 줄 수 있다.

모델 기반(Model based) RL!
길을 학습을 통해 알 수 있다!

모델 이 없는(Model free)가 대부분이다.

로봇한테 모든 것을 다 경험하면서 학습하기 보다는 시뮬레이션을 통해 하드웨어 손상 없이 학습하는 방법이 더 효율적이다.

1. 샘플이 많이 필요한데 시뮬레이션에서는 실시간보다 더 빠른 학습이 가능하고, 병렬 학습도 가능하다.

2. 좀 더 다양한 상황에서의 학습이 가능하다.

3. Matlab에 이미 존재한다!

 

보상은 언제나 주어질 수 있다. 

 

희박한 보상 시스템 - 한참 후에 보상이 들어온다. 
이러면 초반 학습에 행운이 엄청나게 필요하다. 시간이 엄청 든다는 것이ㅏㄷ.
-> 중간 중간 작은 보상을 넣는다.

보상을 얻을 수 있지만 최적의 액션이 아닐 수 있다. 
-> 세밀한 보정이 필요하다.

정책은 상태를 가져와서 액션을 정한다.

Q Function table
모든 상황을 가지고 오는 것은 불가능에 가깝다.
근사치로 설정할 수 있다.  

심층 신경망을 활용하면 된다!

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

https://www.youtube.com/watch?v=2pWv7GOvuf0

지난 비디오에서 우리는 강화 학습에 대한 높은 수준의 소개를 다뤘고, 문제를 설정한다는 것이 무엇을 의미하는지 완전히 무지한 상태에서 문제에 대한 학습 알고리즘을 실행함으로써 그냥 RL로 뛰어들 수는 없다는 점을 말하면서 끝을 맺었습니다. 바르게. 시작하려면 RL 워크플로와 프로세스의 각 부분이 문제 해결에 어떻게 기여하는지, 그리고 그 과정에서 어떤 결정을 내려야 하는지를 이해해야 합니다. 따라서 이 비디오에서는 강화 학습에 대한 기본적인 이해를 바탕으로 문제 설정이 무엇을 의미하는지 살펴보겠습니다. 저는 Brian입니다. MATLAB Tech Talk에 오신 것을 환영합니다.

이제 저는 제어하려는 시스템을 이해하는 것이 첫 번째 단계라고 말한 것을 알고 있습니다. 왜냐하면 전통적인 제어 접근 방식이 더 낫다면 강화 학습을 선택하고 싶지 않기 때문입니다. 하지만 RL 워크플로우를 잘 이해하고 있다면 선택하기가 더 쉽다고 생각합니다. 따라서 지금은 강화 학습을 사용하기로 이미 결정했다고 가정하고, 이 좋은 기반을 구축한 후 향후 비디오에서 강화 학습을 사용하지 않을 경우를 다루겠습니다.

좋습니다. 이제 RL 워크플로우로 뛰어들어 보겠습니다. 에이전트가 학습할 수 있는 환경이 필요하므로 환경 내에 무엇이 있어야 하는지, 그것이 시뮬레이션인지 실제 물리적 설정인지 선택해야 합니다. 그런 다음 에이전트가 궁극적으로 수행하기를 원하는 것이 무엇인지 생각하고 에이전트가 그렇게 하도록 동기를 부여하는 보상 기능을 만들어야 합니다. 정책을 표현하는 방법, 즉 에이전트의 의사 결정 부분을 구성하는 매개 변수와 논리를 어떻게 구성할지 선택해야 합니다. 이 설정이 완료되면 훈련 알고리즘을 선택하고 최적의 정책을 찾는 작업을 시작합니다. 마지막으로 정책을 현장의 에이전트에 배포하고 결과를 확인하여 활용해야 합니다. 이 워크플로를 관점에 맞게 이해하기 위해 역진자의 균형을 맞추고 로봇이 걷게 하는 두 가지 예의 맥락에서 각 단계를 생각해 보겠습니다. 그럼 시작해 보겠습니다.

환경은 에이전트 외부에 존재하는 모든 것입니다. 실제로 말하면 에이전트가 작업을 보내는 곳이며 보상과 관찰을 생성하는 곳입니다.

나는 이 개념이 처음에는 약간 혼란스럽다고 생각합니다. 특히 제어 배경에서 비롯된 것입니다. 왜냐하면 우리는 환경을 컨트롤러와 플랜트 외부의 모든 것으로 생각하는 경향이 있기 때문입니다. 제어하려는 시스템에 영향을 미치는 도로 결함, 돌풍 및 기타 교란과 같은 것입니다. 그러나 강화 학습에서 환경은 컨트롤러 외부의 모든 것입니다. 따라서 여기에는 식물 역학도 포함됩니다. 걷는 로봇의 경우 대부분의 로봇은 환경의 일부입니다. 에이전트는 학습을 통해 작업을 생성하고 정책을 업데이트하는 소프트웨어일 뿐입니다. 말하자면 로봇의 두뇌이다.

이러한 구별이 중요한 이유는 강화 학습을 사용하면 에이전트가 환경에 대해 전혀 알 필요가 없기 때문입니다. 이를 모델 없는 RL이라고 하며, 기본적으로 RL이 장착된 에이전트를 어떤 시스템에나 배치할 수 있고 관찰, 작업 및 충분한 내부 상태에 대한 정책 액세스 권한을 부여했다고 가정할 때 에이전트가 학습할 수 있기 때문에 강력합니다. 스스로 가장 많은 보상을 모으는 방법. 이는 에이전트가 처음에는 걷는 로봇에 대해 아무것도 알 필요가 없음을 의미합니다. 예를 들어 관절이 어떻게 움직이는지, 액추에이터가 얼마나 강한지, 부속물의 길이를 알지 못한 채 보상을 수집하는 방법을 알아낼 수 있습니다.

하지만 엔지니어로서 우리는 일반적으로 환경에 대해 어느 정도 알고 있는데 왜 물리학에 대한 모든 지식을 버리고 에이전트를 전혀 돕지 않는 걸까요? 이건 미친 것 같아! 바로 이것이 모델 기반 RL이 도움이 될 수 있는 부분입니다.

환경에 대한 이해가 없으면 에이전트는 가치 함수를 채우기 위해 상태 공간의 모든 영역을 탐색해야 합니다. 즉, 학습 프로세스 중에 보상이 낮은 영역을 탐색하는 데 시간을 할애해야 한다는 의미입니다. 그러나 디자이너로서 우리는 탐색할 가치가 없는 상태 공간의 일부 부분을 종종 알고 있으므로 환경 모델이나 환경의 일부를 제공함으로써 에이전트에게 이 지식을 제공합니다. 예를 들어 목적지까지의 가장 빠른 경로를 결정하려는 에이전트를 생각해 보세요. 이 시점에서 오른쪽으로 가야 할까요, 왼쪽으로 가야 할까요? 모델이 없으면 에이전트는 최선의 조치가 무엇인지 파악하기 위해 전체 지도를 탐색해야 합니다. 모델을 사용하면 에이전트는 물리적으로 조치를 취하지 않고도 정신적으로 올바른 방향으로 나아갈 수 있습니다. 그런 다음 오른쪽으로 가면 막다른 골목이 발생하고 에이전트가 왼쪽으로 갈 것임을 알 수 있습니다. 이러한 방식으로 모델은 불량으로 알려진 영역을 피하고 나머지 영역을 탐색하고 학습함으로써 학습 프로세스를 보완할 수 있습니다.

모델 기반 RL은 매우 강력하지만 현재 모델 없는 RL이 그렇게 인기가 있는 이유는 사람들이 픽셀 관찰을 통해 자동차나 로봇을 제어하는 ​​등 모델 개발이 어려운 문제를 해결하는 데 이를 사용하기를 원하기 때문입니다. 또한 모델 없는 RL이 더 일반적인 경우이므로 이 시리즈의 나머지 부분에서는 이에 초점을 맞출 것입니다.

좋습니다. 에이전트가 환경과 상호작용하여 학습한다는 것을 알고 있으므로 에이전트가 실제로 환경과 상호작용할 수 있는 방법이 있다는 것은 의미가 있습니다. 이는 물리적 환경일 수도 있고 시뮬레이션일 수도 있습니다. 예를 들어 역진자의 경우 에이전트가 물리적 진자 설정으로 실행하여 균형을 맞추는 방법을 배우도록 할 수 있습니다. 하드웨어가 자체적으로나 다른 하드웨어를 손상시키는 것은 어렵기 때문에 이는 좋은 해결책이 될 수 있습니다. 그러나 걷는 로봇의 경우 이는 그다지 좋은 생각이 아닐 수도 있습니다. 상상할 수 있듯이 에이전트가 로봇과 세계를 자신이 전혀 모르는 블랙박스처럼 다룬다면 걷는 방법은 물론 다리를 움직이는 방법도 배우기도 전에 넘어지고 몸부림치는 일을 많이 하게 될 것입니다. 이로 인해 하드웨어가 손상될 수 있을 뿐만 아니라 매번 로봇을 들어 올려야 하므로 시간이 매우 많이 소모됩니다. 이상적이지 않습니다.

따라서 매력적인 대안은 환경의 충실도가 높은 모델 내에서 에이전트를 교육하고 학습 경험을 시뮬레이션하는 것입니다. 그리고 이렇게 하면 많은 이점이 있습니다.

첫 번째는 표본 비효율성이라는 아이디어에서 비롯됩니다. 학습은 과정이며 많은 샘플이 필요합니다. 즉, 수백만 또는 수천만에 달하는 많은 시행착오, 오류 및 수정이 필요합니다. 따라서 시뮬레이션을 사용하면 학습 프로세스를 실시간보다 빠르게 실행할 수 있으며 많은 시뮬레이션을 스핀업하여 모두 병렬로 실행할 수도 있습니다. 

환경 모델을 통해 할 수 있는 또 다른 이점은 실제 세계에서 테스트하기 어려운 조건을 시뮬레이션하는 것입니다. 예를 들어, 걷는 로봇을 사용하면 얼음과 같이 마찰이 적은 표면 위를 걷는 것을 시뮬레이션할 수 있으며, 이는 로봇이 모든 표면에서 직립 상태를 유지하는 데 도움이 됩니다.

시뮬레이션이 필요하다는 점의 좋은 점은 제어 문제의 경우 일반적으로 전통적인 제어 설계에서 필요하기 때문에 시스템과 환경에 대한 좋은 모델이 이미 있다는 것입니다. MATLAB 또는 Simulink에 이미 구축된 모델이 있는 경우 기존 컨트롤러를 RL 에이전트로 교체하고 환경에 보상 기능을 추가하고 학습 프로세스를 시작할 수 있습니다. 

여기서 어려운 점 중 하나는 모델링할 환경의 양, 즉 무엇을 포함하고 무엇을 생략할지 파악하는 것입니다. 그러나 이는 컨트롤러 설계를 위해 플랜트를 모델링할 때 갖는 질문과 동일하므로 시스템에 대한 동일한 직관을 사용하여 RL 환경 모델을 구축할 수 있습니다.

한 가지 접근 방식은 간단한 모델에서 학습을 시작하고, 학습에 성공할 수 있는 하이퍼 매개변수의 올바른 조합을 찾은 다음 나중에 모델에 더 많은 복잡성을 추가하는 것입니다. 하이퍼 매개변수는 학습 속도, 샘플 시간 등을 설정하는 훈련 알고리즘을 켤 수 있는 손잡이입니다. 이에 대해서는 향후 비디오에서 더 자세히 다루겠습니다.

좋습니다. 환경이 설정되면 다음 단계는 에이전트가 수행하기를 원하는 것과 원하는 작업을 수행한 데 대해 에이전트가 어떻게 보상할 것인지 생각하는 것입니다. 이는 성능 대 노력을 고려하는 LQR의 비용 함수와 유사합니다.

그러나 비용 함수가 2차인 LQR과 달리 RL에서는 보상 함수를 만드는 데 실제로 제한이 없습니다. 희박한 보상을 받을 수도 있고, 매 단계마다 보상을 받을 수도 있고, 오랜 시간이 지난 후 에피소드가 끝날 때만 제공되는 보상을 받을 수도 있습니다. 비선형 함수로 계산하거나 수천 개의 매개변수를 사용하여 계산할 수 있습니다. 실제로 이는 에이전트를 효과적으로 교육하는 데 무엇이 필요한지에 전적으로 달려 있습니다.

거꾸로 된 진자를 똑바로 세우고 싶습니까? 그런 다음 수직 각도가 작아짐에 따라 에이전트에게 더 많은 보상을 제공할 수도 있습니다. 컨트롤러의 노력을 고려하고 싶으십니까? 그런 다음 액추에이터 사용이 증가함에 따라 보상을 뺍니다. 로봇이 바닥을 가로질러 걷도록 장려하고 싶으십니까? 그런 다음 에이전트가 멀리 있는 상태에 도달하면 보상을 제공합니다.

즉, 보상 기능을 만드는 것은 쉽습니다. 그것은 당신이 생각할 수 있는 어떤 기능이라도 될 수 있습니다. 반면에 좋은 보상 기능을 만드는 것은 정말 정말 어렵습니다. 안타깝게도 에이전트가 실제로 원하는 솔루션에 수렴하도록 보장하기 위해 보상을 만드는 간단한 방법은 없습니다. 그리고 내 생각에는 크게 두 가지 이유가 있다고 생각합니다.

첫째, 인센티브를 부여하려는 목표는 긴 일련의 작업 후에 나타나는 경우가 많습니다. 이것이 희소 보상 시스템입니다. 따라서 에이전트는 그 과정에서 어떤 보상도 받지 못한 채 오랜 시간 동안 헤매게 됩니다. 이는 로봇이 10m를 성공적으로 걸은 후에만 보상을 주는 보행 로봇의 경우입니다. 에이전트가 희박한 보상을 생성하는 작업 시퀀스를 무작위로 우연히 발견할 가능성은 거의 없습니다. 로봇이 땅바닥에서 퍼덕거리는 것이 아니라 똑바로 서서 걷는 상태를 유지하기 위해 모든 올바른 모터 명령을 생성하는 데 필요한 행운을 상상해 보십시오!

가능하지만 무작위 탐색에 의존하는 것은 비실용적일 정도로 매우 느립니다.

이러한 희박한 보상 문제는 보상을 형성하여 에이전트를 올바른 경로로 유도하는 더 작은 중간 보상을 제공함으로써 개선될 수 있습니다. 그러나 보상 형성에는 그 자체로 일련의 문제가 있으며 이것이 보상 기능을 만드는 것이 어려운 두 번째 이유입니다. 최적화 알고리즘에 지름길을 주면 그대로 됩니다! 그리고 보상 기능 내에 단축키가 숨겨져 있으며, 이를 형성하기 시작하면 더욱 그렇습니다. 이로 인해 에이전트가 보상 기능을 고려할 때 최적이지만 이상적이지는 않은 솔루션에 수렴하게 됩니다.

생각하기 쉬운 예는 로봇의 몸체가 현재 지점에서 1미터 이동한 경우 중간 보상을 제공하는 것입니다. 최적의 해결책은 1미터를 걷는 것이 아니라 오히려 보상을 향해 부적절하게 떨어지는 것일 수도 있습니다. 학습 알고리즘에서는 걷기와 넘어짐 모두 동일한 보상을 제공하지만 분명히 디자이너에게는 한 가지 결과가 다른 결과보다 선호됩니다.

보상 기능을 쉽게 만드는 것이 강화 학습에서 가장 어려운 작업 중 하나일 수 있기 때문에 보상 기능을 쉽게 만드는 것을 원하지 않습니다. 그러나 이 일반적인 개요를 통해 최소한 주의해야 할 사항 중 일부를 이해하고 보상 기능을 만드는 것이 조금 덜 고통스러울 수 있는 더 나은 위치에 있을 수 있기를 바랍니다.

좋아요, 이제 보상을 제공하는 환경이 준비되었으므로 에이전트 자체에 대한 작업을 시작할 준비가 되었습니다. 에이전트는 정책과 학습 알고리즘으로 구성되며 이 두 가지는 밀접하게 얽혀 있습니다. 많은 학습 알고리즘에는 특정 정책 구조가 필요하며 알고리즘 선택은 환경의 특성에 따라 달라집니다. 이 내용은 다음 비디오에서 다루겠지만, 이 비디오를 끝내기 전에 주제를 소개하고 정책 내의 매개변수와 논리가 어떻게 표현될 수 있는지 생각해 보고 싶습니다.

정책은 상태 관찰을 받아들이고 작업을 출력하는 함수이므로 실제로 해당 입력 및 출력 관계가 있는 모든 함수가 작동할 수 있습니다. 그런 식으로 생각하면 간단한 표를 사용하여 정책을 나타낼 수 있습니다.

테이블은 여러분이 기대하는 바로 그것입니다. 이는 입력을 조회 주소로 사용하고 해당 값을 출력하는 숫자 배열입니다. 예를 들어, Q-함수는 상태와 동작을 값에 매핑하는 테이블입니다. 따라서 상태 S가 주어지면 정책은 해당 상태에서 가능한 모든 작업의 ​​값을 찾아 가장 높은 값을 가진 작업을 선택하는 것입니다. 그리고 Q-함수를 사용하여 에이전트를 훈련하는 것은 시간이 지남에 따라 각 상태에 대한 모든 동작과 해당 값을 개발하는 것으로 구성됩니다.

이러한 유형의 표현은 작업 값 쌍의 수가 너무 커지거나 무한해지면 무너집니다. 이른바 차원의 저주다. 거꾸로 된 진자를 상상해보십시오. 진자의 상태는 -pi에서 pi까지의 각도일 수 있으며, 취할 수 있는 조치는 음수 한계에서 양수 한계까지의 모터 토크일 수 있습니다. 그 모든 것을 테이블에 담는 것은 불가능합니다. 이제 우리는 연속함수로 상태-행동 공간의 연속적 성격을 표현할 수 있습니다. 그러나 올바른 매개변수를 학습할 수 있는 이 함수를 설정하려면 함수의 구조를 미리 알아야 하며, 이는 자유도가 높은 시스템이나 비선형 시스템에서는 어려울 수 있습니다.

따라서 대신 범용 함수 근사기로 정책을 표현하는 것이 합리적입니다. 미리 구조를 설정하지 않고도 연속적인 상태 동작 공간을 처리할 수 있는 것입니다. 그리고 우리는 심층 신경망을 통해 이를 얻습니다.

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

728x90