My Blog

나만의 커스텀 강화학습 환경 설계(상태)


상태에 대한 정의

강화학습에서 상태는 에이전트가 환경에서 현재 위치하거나 처해 있는 상황을 나타내는 변수나 변수들의 집합입니다. 상태는 에이전트가 현재 어떤 행동을 선택할지 결정하는 데 필요한 모든 정보를 포함합니다. S는 환경의 특정 시점에서 에이전트가 인식할 수 있는 모든 정보를 포함하는 벡터입니다. 특징: 상태는 에이전트의 관찰(Observation)과 동일한 의미로 사용되기도 하지만, POMDP(부분 관찰 가능한 마르코프 결정 프로세스)에서는 상태와 관찰이 다를 수 있습니다. 강화학습에서 상태를 어떻게 정의하느냐는 에이전트의 학습 성능에 큰 영향을 미칩니다. 적절하게 정의된 상태는 에이전트가 환경을 더 잘 이해하고, 최적의 행동을 선택하는 데 도움이 됩니다. 정확한 상태 정의: 정확하고 관련성 있는 상태 정의는 에이전트가 환경의 중요한 특징을 인식하고, 효과적인 학습을 할 수 있게 합니다. 상태 공간의 크기: 상태 공간(State Space)은 모든 가능한 상태들의 집합을 의미합니다. 상태 공간이 너무 크면 학습이 어려워질 수 있으며, 너무 작으면 중요한 정보를 놓칠 수 있습니다. 일관성: 상태 정의는 일관성이 있어야 하며, 같은 상황에서는 항상 같은 상태를 반환해야 합니다. 알고리즘이 문제를 해결할 수 있으려면 강화학습 환경이 알고리즘에 충분한 정보를 제공하는 것이 필수적인데, 이것이 바로 상태가 수행하는 중요한 역할 중 하나입니다. 상태를 설계하기 위해서는 다음 사항이 중요합니다. 1. 세상이 제공하는 정보가 상태 표현에 포함된 정도(완결성) 2. 상태 표현의 효과 및 상태표현에 요구되는 계산량(복잡성) 3. 상태 표현의 정보손실 정도(정보손실) 아래에서 이 부분을 상세하게 다루도록 하겠습니다. 상태 S에 대한 기본 강화학습으로 나만의 커스텀 환경을 만들기 위해서는 가장먼저 이미 만들어진 다른 강화학습 환경을 탐색 및 탐구, 분석해 보는것이 가장 중요합니다. 그래서 자기만의 구현하고자 하는 환경에 대한 아이디어를 얻을 수 있고, 구현방법의 다양화를 할수 있으며, 어떤 환경에 어떤 식으로 표현했는지를 알게 됩니다. 이는 자신만의 강화학습 커스텀 환경을 구성하는데 필수적인 지식이라 생각되고, 이러한 과정을 지나오게 되면 자신만이 풀고자 하는 현실적인 문제를 환경으로 만들수 있게 되고, 또한 그것이 강화학습 알고리즘을 해결 가능한 문제인지, 자동화가 가능한 부분인지를 알게 되리라 생각됩니다. 상태는 환경을 묘사하는 정보로, 관측가능량 즉, observable 측정가능한 양의 집합이라고 부르기도 합니다. 환경은 강화학습 문제를 컴퓨터 시뮬레이션 이상을 표현한 것으로 실제 세상의 시스템을 포함합니다. 보통 우리는 눈과 귀, 피부와 같은 감각기관의 지각능력을 활용해 보고 듣고 만지는 것을 느끼는 것으로 이것이 우리가 측정할 수 있는 원시 정보입니다. 도구를 사용해서는 간접적으로 감지할 수 있는 자기장, 적외선, 초음파, 중력파 등을 감지할 수도 있습니다. 이 예제들이 모두 상태 s라고 표현합니다. 생물학적이든 역학적이든 모두 다양한 인식도구를 통해 측정된 환경에 대한 정보로서 여기서 말하는 상태라고 할수 있고, 이는 동일한 환경이라도 맥락과 측정대상에 따라 다양한 정보를 생성할 수 있고 인간의 지각에 따라 정보가 변할수도 있습니다. 이러한 상태는 일상의 모든것에 있어서 정보처리 시스템을 통해 설계를 하는것이 강화학습에서 말하는 상태에 해당합니다. 컴퓨터 스크린에 표시되는 게임의 그래픽과 스피커를 통해 나오는 소리, 로봇의 시뮬레이션, 관절 각도, 속도, 토크 등 이러한 환경의 상태에서 강화학습 커스텀 환경을 개발하고자 하는 개발자는 관련있다고 생각하는 밀접한 관련이 있는 정보에만 초점을 맞추어야 하고, 그러기 위해서는 상태를 단순화할 수 있습니다. 단순화한 환경 상태에서는 마찰, 저항, 열적 팽창 등 물리적 법칙이 간과되기도 하는데, 구체적으로 설계를 하기 시작하면 이러한 물리적, 과학적 법칙도 무시할수 없고 이를 각 환경의 상태에서 구현해야 합니다. 이러한 상태는 행동과 보상과 구별해야 하고, 행동을 취하거나 보상을 얻지 못할때도 상태는 환경에 대한 정보를 주게 되어 있고, 행동은 환경이 아닌 엔티티 즉 에이전트에 의해 환경에 가해지는 효과로 볼수 있고, 보상은 환경에 가해진 행동이 유발하는 상태의 전이에 의해 주어지는 일종의 움직이는 동적 메타정보라 할수 있습니다. 강화학습 커스텀 환경 설계자는 임의의 적절한 데이터 구조로 상태를 나타낼수 있어야 합니다. 스칼라, 벡터, 제네릭 텐서 같은 데이터 구조를 사용할 수 있고, 숫자로 되어있지 않은 데이터는 언제든 숫자로 인코딩하여야지만 강화학습 네트워크에 입력으로 넣을 수 있게 됩니다. 자연어에서 단어나 글자는 단어 임베딩을 이용하고, 정보를 정수 리스트에 일대일 대응을 시킬수도 있고, 상태는 이산적인 값을 가질수도 있고 연속적인 값을 가질수도 있습니다. 혹은 이 둘을 함께 가질수도 있을 것입니다. 예를들어 전기포트는 전원이 켜져 있다는 이산적인 행동의 결과로 현재 연속적인 온도의 변화 상태를 제공할 수도 있습니다. 이러한 알고리즘을 위해 필요한 데이터 변환과 학습 방법을 생각해 내는 건 설계자에게 달린 문제입니다. 상태 s는 상태공간 S의 원소이고 상태공간은 환경의 상태가 가질수 있는 모든값을 빠짐없이 정의하게 되고, 상태는 2개 이상의 원소(차원)을 가질수 있으며, 각 원소는 이산적일수도 연속적일수도 있습니다. 하지만 하나의 데이터 유형을 갖는 텐서를 이용해 상태를 표현하는것이 편리합니다. numpy나 파이토치, 텐서플로 같은 대부분 프레임워크나 라이브러리가 텐서를 주로 다루기 때문입니다. 상태는 다양한 랭크와 모양을 갖게되는데, 스칼라는 rank-0텐서로 주로 한가지 숫자를 표현하고, 벡터는 rank-1 텐서로 [위치, 속도, 각도, 각속도] 등과 같이 표현할 수 있고, 행렬은 rank-2 텐서로 그레이스케일 픽셀을 표현하고, 텐서인 데이터 큐브 rank-3텐서는 RGB컬러 픽셀을 표현할수 있습니다. 상태는 텐서의 조합으로 시각영역으로 RGB 이미지를 제공할수 있고, 관절의 각도를 별도의 벡터로 제공할 수도 있습니다. 각 다른 모양의 텐서를 입력으로 사용하려면 신경망 아키텍쳐도 달라야 하므로, 이런 경우에는 독립적 텐서들이 하위 상태로서 서로 결합하여 전체 상태를 형성하는 것으로 생각하면 됩니다. 실제 세계를 강화학습 커스텀 환경으로 설계하기 위한 순서를 알아보겠습니다. 먼저 실 세계에서 데이터를 수치화하여 만듭니다. 원시상태의 이미지, 센서, 각종 데이터의 수치화된 데이터를 더 단순하게 할수 있다면 그렇게 시도해 보며 최대한 단순하면서 실세계를 잘 표현하는 형태로 단순화합니다. 이처럼 단순화된 데이터를 환경 안에서 강화학습 네트워크로 학습이 가능한 설계된 상태로 만들어 놓습니다. 이 과정에서 데이터의 전처리를 하게되고, 이렇게 설계된 상태는 실세계를 잘 담고있는 압축된 표현이라고 할수도 있습니다. 압축된 표현에서 설계에 중요한 정보만을 담은 데이터들을 벡터로 표현해서 최종 전처리 작업을 완료하게 됩니다. 이러한 전처리작업은 강화학습의 에이전트가 어느 부분에 집중해야 할 것인지, 어떠한 액션을 해야 가장 효율적인 결과를 낼수 있을지에 대한 것과 연결되므로 매우 중요한 단계입니다. 원시 데이터를 전처리 등으로 설계된 상태를 만들지 않게되면 에이전트는 중복이 많고 배경 노이즈도 많은 복잡한 상태를 학습하는데 어려움이 있기에 이를 빅데이터의 데이터 랭글링 과정이나 피쳐 익스트랙션 과정과 같이 원시정보로부터 유용한 신호 특징을 추출하는 노력을 해야 합니다. 설계된 상태는 원시 데이터를 에이전트가 더 잘 문제를 풀수 있도록 더 간단한 상태를 만들어주는 것이고, 복잡한 상태는 에이전트의 학습을 어렵게 만들게 됩니다. 문제의 실질적 복잡성은 상태를 얼마나 잘 설계하느냐에 따라 상태공간의 복잡성 문제를 해결하고 강화학습 환경으로 해결할 수도 있고 그렇지 않을수도 있습니다. 현대사회에서 사람은 무언가를 측정하는데 매우 익숙해져 있고, 그러한 척도들도 잘 정리되어 있으므로, 환경을 잘 설계하면 연구와 적용을 빠르게 진행할 수 있습니다. 극단적으로 말해서 강화학습으로 어떤 방식이든 문제해결을 위해서는 상태설계를 반드시 할줄 알아야 함에도 현재까지 상태 설계를 위한 체계적이고 종합적인 가드이라인이 거의 없습니다. 즉 상태설계를 하지 못하면 새로운 환경이나 문제를 풀수 없게 됩니다. 강화학습 환경에서 상태를 설계할 때는 여러 가지 요소를 고려해야 합니다. 아래는 상태 설계를 위한 주요 방법들입니다. 환경에서 중요한 특징들을 선택하여 상태를 구성하는 것이 중요합니다. 모든 변수를 상태로 사용하면 과적합의 위험이 있으며, 불필요한 계산 비용이 발생할 수 있습니다. 도메인 지식 활용: 문제 도메인에 대한 지식을 활용하여 중요한 특징을 선택합니다. 예를 들어, 자율 주행 자동차에서는 위치, 속도, 주변 차량의 위치 등이 중요한 특징이 될 수 있습니다. 특징 선택 알고리즘: 자동화된 특징 선택 알고리즘(예: PCA, LASSO)을 사용하여 중요한 특징을 선택할 수도 있습니다. 상태 변수의 범위는 일정하게 유지되어야 하며, 필요에 따라 정규화(Normalization)할 수 있습니다. 범위 설정: 각 상태 변수의 값이 합리적인 범위 내에 있도록 설정합니다. 이는 학습 알고리즘의 안정성을 높입니다. 정규화: 모든 상태 변수를 동일한 범위로 정규화하여 학습 속도를 높이고, 알고리즘의 성능을 향상시킬 수 있습니다. 일반적으로 [0, 1] 또는 [-1, 1] 범위로 정규화합니다. 상태는 연속적(Continuous)일 수도 있고, 이산적(Discrete)일 수도 있습니다. 환경에 따라 적절한 상태 유형을 선택해야 합니다. 연속적 상태: 상태가 연속적인 값을 가지는 경우, 이를 처리하기 위해 함수 근사(Function Approximation) 기법을 사용할 수 있습니다. 예를 들어, DQN(Deep Q-Network)에서는 신경망을 사용하여 연속적인 상태 공간을 처리합니다. 이산적 상태: 상태가 이산적인 값을 가지는 경우, 이를 처리하기 위해 표 기반(Tabular) 접근법을 사용할 수 있습니다. 예를 들어, 그리드 월드(Grid World) 환경에서는 상태를 이산적인 격자로 정의할 수 있습니다. 상태를 적절하게 표현하는 것은 강화학습의 성능에 큰 영향을 미칩니다. 다양한 상태 표현 기술을 사용하여 상태를 효과적으로 나타낼 수 있습니다. 원-핫 인코딩은 이산적인 상태를 표현하는 데 유용한 방법입니다. 각 상태를 고유한 벡터로 나타내며, 벡터의 모든 요소가 0이고 하나의 요소만 1인 형태를 가집니다. 장점: 단순하고 명확한 상태 표현 방법입니다. 단점: 상태 공간이 커지면 벡터의 길이가 길어져 메모리 사용량이 증가합니다. 임베딩은 고차원 상태를 저차원 벡터로 변환하는 기술로, 주로 딥러닝에서 사용됩니다. 임베딩 기법은 상태 간의 유사성을 반영하는 벡터 표현을 제공합니다. 장점: 고차원 상태를 효율적으로 표현하고, 상태 간의 관계를 반영할 수 있습니다. 단점: 임베딩을 학습하는 데 시간이 걸리며, 복잡한 모델링이 필요할 수 있습니다. 이미지와 같은 고차원 데이터를 상태로 사용하는 경우, 합성곱 신경망(CNN)을 사용하여 상태를 표현할 수 있습니다. CNN은 이미지의 공간적 구조를 효과적으로 학습할 수 있습니다. 장점: 이미지 데이터의 특징을 잘 추출할 수 있습니다. 단점: CNN 모델은 계산 비용이 높으며, 많은 데이터가 필요합니다. 시간적 연속성이 있는 데이터를 상태로 사용하는 경우, 순환 신경망(RNN)을 사용할 수 있습니다. RNN은 이전 상태 정보를 유지하면서 현재 상태를 처리할 수 있습니다. 장점: 시간적 의존성을 효과적으로 학습할 수 있습니다. 단점: 장기 의존성을 학습하는 데 어려움이 있을 수 있으며, LSTM(Long Short-Term Memory)이나 GRU(Gated Recurrent Unit)와 같은 확장 모델이 필요할 수 있습니다. 강화학습에서 상태와 관련된 고급 주제들은 에이전트의 성능을 더욱 향상시킬 수 있습니다. 아래는 몇 가지 중요한 고급 주제들입니다. 부분 관찰 가능 환경(POMDP)에서는 에이전트가 환경의 전체 상태를 직접 관찰할 수 없습니다. 이러한 경우, 에이전트는 신념 상태(Belief State)를 사용하여 현재 상태에 대한 확률 분포를 유지합니다. 신념 상태: 신념 상태는 현재 상태에 대한 확률 분포를 나타내며, 과거의 모든 관찰과 행동을 바탕으로 갱신됩니다. POMDP 해결 방법: POMDP를 해결하기 위해 필터링 알고리즘(예: 칼만 필터, 입자 필터)을 사용할 수 있습니다. 상태 간소화(State Abstraction)라는 건, 상태 공간이 매우 큰 경우, 상태 간소화를 통해 상태 공간을 줄일 수 있습니다. 상태 간소화는 비슷한 상태를 그룹화하여 단순화된 상태를 생성합니다. 집합화: 유사한 상태를 하나의 집합으로 그룹화하여 간소화된 상태를 만듭니다. 효과: 상태 간소화는 학습 속도를 높이고, 메모리 사용량을 줄일 수 있습니다. 계층적 강화학습(Hierarchical Reinforcement Learning)은 고차원 상태 공간을 효율적으로 처리하기 위한 방법 중 하나입니다. 계층적 강화학습에서는 여러 레벨의 정책을 정의하여 복잡한 문제를 더 작은 하위 문제로 분할합니다. 하위 정책(Sub-Policy): 각 하위 문제에 대한 정책을 학습하여 전체 문제를 해결합니다. 상위 정책(Meta-Policy): 하위 정책을 조정하고, 전체 목표를 달성하기 위한 상위 정책을 학습합니다.

세상이 제공하는 정보가 상태 표현에 포함된 정도(완결성)

설계자가 풀고자 하는 문제의 원시 상태 데이터가 문제에 대한 충분한 정보를 갖고 있는지 살펴봐야 합니다. 이처럼 원시상태 설계할때 고려할 점은 다음과 같습니다. 데이터 유형이 이산적인지, 연속적인지, 데이터의 밀도가 높아질것인지 낮아질 것인지 등 데이터 형식을 보아야 합니다. 그리고 상태공간의 규모가 어떠한지를 봐야 하는데 적은 양의 계산으로 상태를 얻을 수 있는지를 봐야 합니다. 그리고 문제해결을 위해 얼마나 많은 데이터가 필요한지에 대한 고려도 해야 합니다. 강화학습에 사용할 데이터가 얼마정도가 필요한지 그 데이터들을 실제로 생성하거나 얻을 수 있는 데이터인지가 중요합니다.

상태 표현의 효과 및 상태표현에 요구되는 계산량(복잡성)

강화학습으로 학습시킬 때 계산이 복잡한지를 고려해야 하는데, 계산이 쉬운지와 특징 표현이 효과적인지를 살펴봐야 합니다. 시도해볼만한 원시정보를 압축해도 특징 표현에 있어서 손실이 없는지를 고려해야 하고 이러한 원시상태와 설계된 상태의 차이점을 명확히 알고 있어야 합니다. 에이전트의 학습을 위해 원시 상태 데이터를 계산이 덜 복잡하고 정보손실없이 효율적으로 설계된 상태를 만들기 위한 특성 공학적 측면에서는 이를 설계하는 사람의 지식에 의존하게 됩니다. 설계자의 지식과 경험을 이용해 융숑하다고 생각되는 정보를 선택하기 때문에 불가피하게 인간의 사전지식을 더 많이 부호화하게 되어 있고, 이런 상태에서 학습하는 에이전트는 실제로 아무런 사전지식없이 학습하는 것은 아닌 상황이 됩니다. 하지만 문제를 해결하는 것이 주된 목적이라면 이러한 점은 걱정되지 않으나 특성 공학 자체가 인간의 관점에 더 많이 의존하여 형성된 맥락 속에서 설계된 상태를 도출하게 됩니다. 반드시 그러한 것은 아니나 인간의 편견을 포함할 가능성이 있게 됩니다. 원시상태로부터 효과적인 상태를 설계하는데 있어 절대적인 규칙이나 메뉴얼이 있는 것은 아니지만, 배경지식과 맥락을 상태에 반영할수 있도록 문제를 이해하는데 시간을 들이는 것은 언제나 도움이 되고 실제적인 적용에 있어 특히 가치가 높습니다. 상태 설계는 근본적으로 정보를 손실을 최소화하며 압축하고 노이즈를 제거하여 강화학습 에이전트가 더 잘 학습할수 있도록 하는 선행과정입니다. 그렇기에 표준적인 방법은 그 무엇이라도 탐구해볼 가치가 충분합니다. 설계된 상태를 위해서는 물리학적 지식이 필요할 수도 있습니다. 카트풀에서 물체의 속도를 모르면 물체가 어디로 이동하는지 예상할 수 없고, 중력이 오로지 한 방향으로만 작용하고 이러한 사실이 각도와 각의 변하는 속도에 반영되는 부분, 변화하는 공의 위치와 가격의 오르내림, 로봇 팔의 움직임 등에 사용됩니다. 에이전트는 스스로 행동이 변화시킬 수 있는 것에만 관심을 가지고 그러한 정보들만 받아들이도록 해야 합니다. 핵심 아이디어는 목적 달성에 유용하면서도 변화하는 유의미한 정보를 상태에 포함시켜야 한다는 것입니다. 반대로 어떤 특성은 에이전트가 제어하지 못하고 그 특성이 목적 달성에도 기여함이 없다면 과감히 제외시킬수도 있습니다. 대부분의 변화는 공간이 아닌 시간 속에서 일어나므로 단일 프레임에서 나오는 정보는 시가에 따른 변화를 전혀 나타낼수 없는 점을 기억해야 합니다. 그래서 환경에서 미지수 x가 시간에 따라 변하기를 기대한다면 미분 상태를 포함시켜야 할수도 있습니다. 그리고 에이전트의 목표나 임무, 행동에 의해 나온 결과인 다음 상태에 인과관계가 분명해야 하고 이를 구성하는 모든 요소가 포함되어야 합니다. 또한 주식 거래에서 기술적 분석을 위해 규모와 이동평균 같은 수치를 살펴보는 것이 보편적 지혜인데, 가공되지 않은 주식 거래가격 데이터를 이용해 스스로 정보를 만들어내는 것보다 이미 잘 구축된 데이터를 사용하는게 더 도움이 되고 이처럼 이미 있는 것을 다시 만드느라 시간을 허비해서는 안됩니다. 그리고 설계자가 해결하고자 하는 문제를 다루고 있는 환경의 데이터 유형과 문제와 유사한 영역에서 기술을 빌려오는 것도 일반적으로 도움이 되고, 환경을 설계함에 있어 DNN, CNN, RNN, 트랜스포머 등의 기술을 두루 다루고 이 기술들을 활용하는데 자연스러워야 할것입니다. 이는 결국 강화학습의 목적과 같게 설계자도 에이전트의 목적 달성을 위해 사용가능한 기술을 활용하는 것에 해당하는 것이고 이러한 취지는 강화학습의 목적에도 맞기 때문입니다. 좀더 폭넓은 영역의 기술을 적극적으로 활용해야 하겠습니다.

상태 표현의 정보손실 정도(정보손실)

상태 설계하면서 정보를 압축할 때 일부 정보는 손실될 수 있는데, 손실되는 정보가 없다면 손실없는 압축이라 불립니다. 원시 데이터 상태에서 상태를 설계하는 과정에서 흔히 발생할 수 있는 위험으로 중요한 정보가 손실될 가능성에 대해 알아보도록 하겠습니다. 정보의 손실을 최소화하면서 단순하게 환경과 상태를 설계하는게 설계자의 가장 큰 의무입니다. 먼저 이미지 RGB데이터를 그레이스케일로 압축한 이후 해상도 측면에서 정보손실이 많은지, 에이전트가 이를 잘 받아들이고 인식하는지 등을 검토해 보아야 합니다. 그레이 스케일에서도 에이전트가 설계자가 중요하게 생각하는 특성을 잘 파악하는지를 살펴 보아야 합니다. 그러나 완전 무결한 그레이 스케일링 기법은 존재하기 않기때문에 전처리된 이미지를 항상 눈으로도 확인해야 할것입니다. 또한 연속적 정보 데이터를 이산화할때, 즉 유한개의 이산적인 값의 집합으로 매핑할때 정보손실이 발생하기도 하는데 중요한 정보에 포커스를 맞춰 중요한 정보는 손실되지 않게, 덜 중요한 정보는 특성에서 제외시키는 등의 이산화 작업이 중요합니다. 해시충돌의 사례도 있는데, 용량이 큰 데이터를 작은 용량의 데이터로 압축하면서 데이터를 구성하는 모든 요소를 분명하게 나타내기 어려울때 발생하게 됩니다. 해시충돌을 요약하자면 큰 집합을 작은 공간에 매핑할때, 구별되어야 할 요소가 다른것과 합쳐지지 않았는지 확인해야 합니다. 메타정보 손실도 있는데, 어떤 정보는 우리가 다루는 데이터에 대한 더 높은 수준의 지식을 제공하고 이것이 정보에 대한 정보로 메타정보라고 합니다. 메타정보 손실은 공간에서만 발생하는게 아닌 시간 차원에서도 발생합니다. 카트풀의 어느 한 장면만 보아서는 막대가 넘어지는 중인지, 세워지는 중인지 감지못하듯, 정보가 시간에 따라 어떻게 스스로 변하는지에 대한 연속적 프레임도 필요하게 됩니다. 이러한 프레임은 훈련을 위한 프레임 속도를 정할때 프레임 변화를 정상적으로 감지할 수 있어야 하고 이를 실시간에서 적용하려면 계산 효율등을 따져보고 일부 프레임 건너뛰기로 연속적 변화를 누적시키고 이를 샘플링하는 방법이 있습니다. 이렇게 함으로써 데이터 용량도 적절히 줄고 계산 효율도 올라가게 됩니다. 이러한 데이터를 나열하는 방향에 대한 메타정보가 주어질 필요가 있고 메타정보를 유지하는 하나의 방법은 회귀신경망을 사용하는 것이고, 다른 방법으로는 프레임을 일관된 방식으로 순차적으로 MLP나 CNN에 전달하는 것입니다. 메타정보 손실을 요약하자면, 사람의 관점에서 미묘한 정보나 정성적 정보 또는 메타정보가 손실되지 않았는지 확인해야 합니다. 이처럼 상태의 단순화를 위해 설계한 상태의 데이터는 눈으로 반드시 확인하는 것이 필요합니다.

전처리

원시 상태를 설계된 상태로 변환하는 과정은 상태 전처리기 모듈로 구현할 수 있고, 상태의 변환을 환경 내부에서 일어나도록 할수도 있고 에이전트가 환경이 만드는 상태를 변환하게 할수도 있습니다. 그래서 에이전트 내부에 전처리기를 구현하는 것도 좋은 방법입니다. 이와 같은 전처리는 강화학습에만 사용되는 것이 아닌 머신러닝 전반적으로 사용되는 방법입니다. 일반적으로 전처리는 다양한 이유로 수행되는데, 주로 자연어처리에서 표준에 어긋난 문자를 문장에서 제거하는 정제, 알파벳 문자에 대해 직접 계산이 어려울때 신경망에서 읽을 수 있는 숫자 임베딩 부호화, 입력데이터를 표준화해서 각 데이터의 특성이 유사한 범위와 평균을 갖도록 하는 표준화, 특정 문제에 대해 데이터를 가장 잘 표현한 것이 분명하지 않을때 임베딩, 부호화, 그레이스케일링, 다운샘플링, 프레임 결합 같은 다양한 전처리 방법을 시도, 탐험해 보는 것이 실험 과정에 포함됩니다. 1. 데이터 표준화(Standardization) 데이터 표준화는 데이터의 평균을 0, 표준 편차를 1로 변환하는 과정입니다. 이는 데이터의 분포를 평균 0, 분산 1을 따르도록 변환합니다. 표준화는 다음 수식을 사용하여 수행됩니다: X standardized = σX−μ 여기서: X는 원본 데이터입니다. μ는 데이터의 평균입니다. σ는 데이터의 표준 편차입니다. 표준화는 특히 다음과 같은 상황에서 유용합니다: 데이터 분포가 정규 분포를 따를 때: 표준화를 통해 데이터가 정규 분포를 따르도록 만듭니다. 머신러닝 알고리즘에서: 많은 머신러닝 알고리즘(예: 선형 회귀, 로지스틱 회귀, SVM 등)은 데이터가 표준화되었을 때 더 좋은 성능을 발휘합니다. 적용 방법 강화학습에서 표준화는 다음과 같은 방법으로 적용할 수 있습니다: 상태 변수 표준화: 환경의 상태 변수를 표준화하여 에이전트가 학습하는 동안 상태 값의 스케일 차이로 인한 문제를 줄입니다. 보상 표준화: 보상 값을 표준화하여 학습 과정에서 보상 값의 극단적인 차이를 줄이고, 학습의 안정성을 높일 수 있습니다. 2. 데이터 정규화(Normalization) 데이터 정규화는 데이터의 범위를 0과 1 사이 또는 -1과 1 사이로 변환하는 과정입니다. 정규화는 다음 수식을 사용하여 수행됩니다: X normalized = (X−X min) / (X max −X min) ​ 여기서: X는 원본 데이터입니다. X min​ 은 데이터의 최소값입니다.⁡ X max 은 데이터의 최대값입니다. 또는 -1과 1 사이로 변환할 때: X normalized =2×(X−X min​) / (X max −X min) −1 정규화는 특히 다음과 같은 상황에서 유용합니다: 데이터의 범위가 크게 다를 때: 서로 다른 범위를 가진 데이터는 학습 알고리즘의 성능에 영향을 줄 수 있습니다. 정규화를 통해 데이터의 범위를 통일할 수 있습니다. 신경망 학습에서: 신경망은 입력 데이터의 범위가 일정할 때 더 잘 학습됩니다. 적용 방법 강화학습에서 정규화는 다음과 같은 방법으로 적용할 수 있습니다: 상태 변수 정규화: 환경의 상태 변수를 정규화하여 입력 값의 범위를 일정하게 유지하고, 학습 과정에서 신경망이 더 안정적으로 동작하도록 합니다. 보상 정규화: 보상 값을 정규화하여 학습 과정에서 보상 값의 변동을 줄이고, 보상 신호가 더 일관되게 작동하도록 합니다. 3. 표준화와 정규화의 차이점 표준화는 데이터의 평균을 0, 표준 편차를 1로 만들어 데이터의 분포를 정규 분포에 가깝게 만드는 것이 목적입니다. 정규화는 데이터의 범위를 일정한 값(예: 0과 1 사이 또는 -1과 1 사이)으로 변환하여 데이터의 스케일을 통일하는 것이 목적입니다. 적용 상황: 표준화는 데이터가 정규 분포를 따르거나, 표준 편차가 중요한 경우에 적용합니다. 정규화는 데이터의 범위가 크게 다르거나, 입력 값의 스케일이 중요한 경우에 적용합니다. 4. 강화학습에서의 표준화와 정규화 적용 사례 강화학습에서는 표준화와 정규화를 통해 데이터의 품질을 높이고, 에이전트의 학습 성능을 개선할 수 있습니다. 아래는 몇 가지 적용 사례입니다. 상태 변수는 에이전트가 환경을 이해하고, 적절한 행동을 선택하는 데 필요한 정보를 제공합니다. 상태 변수를 표준화하거나 정규화하면 다음과 같은 이점이 있습니다: 학습 안정성 증가: 상태 변수가 일정한 범위와 분포를 가지면, 에이전트가 학습하는 동안 값의 변동에 덜 민감해집니다. 학습 속도 향상: 정규화된 상태 변수는 학습 알고리즘이 더 빠르게 수렴하도록 도와줍니다. 보상은 에이전트가 특정 행동을 수행한 결과로 얻는 값으로, 학습의 중요한 피드백 요소입니다. 보상을 표준화하거나 정규화하면 다음과 같은 이점이 있습니다: 보상 신호의 일관성 유지: 보상 값을 표준화하거나 정규화하여 극단적인 보상 값의 영향을 줄이고, 일관된 학습 피드백을 제공합니다. 과도한 보상 방지: 정규화를 통해 보상 값의 범위를 제한함으로써 과도한 보상으로 인한 학습 불안을 방지할 수 있습니다. 데이터 전처리 과정에서 표준화와 정규화는 강화학습의 성능을 극대화하는 중요한 단계입니다. 표준화는 데이터의 분포를 정규화하고, 정규화는 데이터의 범위를 일정하게 유지하여 학습의 안정성과 속도를 향상시킵니다. 상태 변수와 보상 값을 적절히 표준화하거나 정규화함으로써 에이전트가 환경을 더 잘 이해하고, 최적의 행동을 선택할 수 있도록 도울 수 있습니다. 이 방법은 흔히 도움이 될수 있지만, 적용할 때 주의를 기울여야 하는데 상대적 변화에 대한 정보가 변환되고 유지되지만, 절대적이고 전반적인 정보는 손실될 수 있기에 이 방법을 적용하려면 작업에 필요한 정보와 데이터를 깊이있게 이해하는게 중요합니다. 이미지 처리에서는 RGB의 3채널 이미지를 1개 스칼라 값으로 매핑하는 그레이 스케일링을 하게 되는데, 원래 영상에 비해 세배 더 적은 메모리 용량을 차지하는 2D텐서입니다. 이때 해시 충돌이 일어나지 않도록 색 가중치를 신중히 선택해야 하고 표준적인 컴퓨터 비전 라이브러리에서는 범용적 계수를 갖는 그레이 스케일링으로 사용해야 합니다. 일반적으로 학습을 위해 필요한 것보다 더 많은 픽셀을 변환해야 하는데 텐서에 포함된 값의 개수를 줄여서 더 적은 원소를 저장하고 계산하려면 이미지를 다운 사이징해야 하고 이것을 다운샘플링 또는 리사이징이라고 합니다. 이 과정에서 이미지가 번지고 정보의 일부가 손실되게 되는데 이때 필요한 이미지 부분을 남기고 경계 부분을 이미지 자르기로 수행하기도 합니다. 이미지 픽셀 세기는 0~255범위의 총 256개의 값을 가질수 있는 정수로 표현되는데, 실수형 텐서로 형 변환을 하고 모든값을 255.0으로 나누어 이미지 정규화를 수행하여 최종적 이미지 텐서는 0.0~1.0 범위의 값을 갖게 될것입니다. 시간적 전처리는 하나의 프레임에서는 식별하기 어렵거나 불가능한 다단계 시간적 정보를 저장하거나 강조하기 위해 사용되는데, 프레임 결합과 프레임 적층의 방법이 있습니다. 결합과 적층은 회귀신경망이 아닌 모든 신경망에서 사용할 수 있는데, np.concatenate로 전체 c개의 프레임을 모아서 결합하거나, np.stack으로 적층을 통해 하나의 텐서로 합치는 상황을 생각해 볼수 있습니다. 전처리된 상태가 네트워크로 입력되면 새로운 입력이 다른 모양을 하고 있기 때문에 네트워크 입력 층위는 이 새로운 입력에 맞게 수정되어야 하고 훈련을 통해 네트워크는 전처리된 입력의 슬롯을 시간적 순서로 인지하는 것을 학습하게 됩니다. 첫번째 프레임이 두번째 프레임보다 먼저이고 나머지 프레임도 시간에 따라 순서가 정해진다고 학습하게 됩니다. 두 방법의 차이는 출력될 결과의 모양인데, 결합은 텐서의 랭크를 유지하지만 합쳐진 차원의 길이는 늘어나게 됩니다. 예를들어 4개의 벡터를 결합하면 원래의 벡터길이보다 네배 더 긴 벡터가 만들어지게 되는데, 결합은 보통 이미지가 아닌 상태에 대해 적용하기 때문에 순수한 다수 층위 퍼셉트론 네트워크의 입력 층위를 적절히 확장하면 결합된 상태를 쉽게 받아들일 수 있습니다. 반대로 적층은 텐서의 랭크를 1만큼 증가시키지만 텐서 자체의 모양은 쥬히하므로, 이것은 상태의 나열을 리스트로 구성하는 것과 동일하고, 4개의 채널을 갖는 이미지와 유사하게 됩니다. 단 여기서 채널이 색에 해당하지않고 시잔적 위치에 해당할뿐 적층은 보통 그레이스케일 이미지 상태에 적용되며 적층을 통해 전처리된 3D텐서가 4개의 채널을 갖는 이미지로서 중첩 네트워크에 입력됩니다. 이러한 상태의 결합과 적층은 다른 전처리 방법과 함께 사용되기도 하는데, 다른 방법으로는 프레임 건너뛰기가 있습니다. 4개의 프레임을 건너뛰면 비디오에서 4개의 프레임마다 하나의 프레임만 생성될 것이고 나머지 프레임들은 버려지게 되는데 이것은 시간 데이터에 대한 다운샘플링이라 볼수 있습니다. 비디오를 구성하는 모든 이미지를 나열한다면 너무 많은 이미지들로 인해 에이전트가 좋은 정책을 학습하는데 시간이 오래걸리고 필요 최소량보다 많아지게 되어 비효율적이 됩니다. 대부분의 이미지에는 의미없을 정도로 작은 변화가 포함되어 있을 것이기에 이는 학습에 도움이 되지 않습니다. 이 방법은 프레임 속도와 동일한 개념을 갖는 모든 형태의 시간 데이터에 적용할 수 있는데, 예를들어 주식시장의 신호, 오디오 데이터, 물체의 진동 등에 적용할 수 있고 샘플링 속도를 줄이는 것은 본질저긍로 시간적 다운샘플링 방법입니다. 일부 프레임이 인식되지 않을 수도 있기에 건너뛰는 프레임 사이에 평균 픽셀값이 최대인 프레임을 선택하는 방법도 있습니다. 이처럼 먼저데이터를 이해하고 나서 적절한 프레임 건너뛰기 방법을 사용하면 됩니다. 행동을 위해 프레임 건너뛰기를 구현할때 한가지 고려사항은 환경이 기본적으로 갖는 실제 프레임 속도와 프레임 건너뛰기를 통해 더 낮은 실질적 프레임 속도가 있는데, 실제 프레임 속도가 필요한지 아니면 정밀한 프레임을 보고 행동해도 되는지 잘 구별해서 이를 사용해야 합니다. 이 프레임을 잘 못맞추는 경우에는 에이전트 과잉행동의 원인이 될수 있기에 적절히 프레임을 잘 맞춰 행동을 하도록 학습해야 합니다.

결론

이처럼 세상으로부터 추출된 원시 상태가 문제를 해결하기위해 필요한 정보를 완벽히 갖추고 있는지 생각해봐야 하고, 그런 다음 원시 상태를 이용해 상태의 표현을 설계할 수 있습니다. 설계된 상태는 유용하다고 생각되는 엄선된 정보의 집합으로 지금까지 상태를 설계할때 고려해야 할 중요한 요소들을 알아보았습니다.

Blog Home Back to Post List