Transformers documentation

Decision Transformer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

이 모델은 2021-06-02에 HF papers에 게시되었으며, 2022-03-23에 Hugging Face Transformers에 기여되었습니다.

Decision Transformer

개요

Decision Transformer 모델은 Lili Chen, Kevin Lu, Aravind Rajeswaran, Kimin Lee, Aditya Grover, Michael Laskin, Pieter Abbeel, Aravind Srinivas, Igor Mordatch가 Decision Transformer: Reinforcement Learning via Sequence Modeling
에서 제안했습니다.

해당 논문의 초록은 다음과 같습니다:

강화학습(RL)을 시퀀스 모델링 문제로 추상화하는 프레임워크를 소개합니다. 이를 통해 Transformer 아키텍처의 단순성과 확장성, 그리고 GPT-x와 BERT와 같은 언어 모델링 분야의 관련 발전 사항을 활용할 수 있습니다. 특히, Decision Transformer는 RL 문제를 조건부 시퀀스 모델링으로 재정의하는 아키텍처입니다. 가치 함수를 적합하거나 정책 기울기를 계산하는 기존 RL 접근법과 달리, Decision Transformer는 인과적으로 마스킹된 Transformer를 활용하여 단순히 최적의 행동을 출력합니다. 원하는 리턴(보상), 과거 상태, 그리고 행동을 오토레그레시브 모델의 조건으로 설정함으로써, 우리의 Decision Transformer 모델은 원하는 리턴을 달성하는 미래 행동을 생성할 수 있습니다. 그 단순성에도 불구하고, Decision Transformer는 Atari, OpenAI Gym, Key-to-Door 작업에서 최첨단 모델-프리 오프라인 RL 베이스라인의 성능을匹敵하거나 초과합니다.

이 모델 버전은 상태가 벡터인 작업을 위해 제공됩니다.

이 모델은 edbeeching이(가) 기여했습니다. 원본 코드는 여기에서 찾을 수 있습니다.

DecisionTransformerConfig

class transformers.DecisionTransformerConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonestate_dim: int = 17act_dim: int = 4hidden_size: int = 128max_ep_len: int = 4096action_tanh: bool = Truevocab_size: int = 1n_positions: int = 1024n_layer: int = 3n_head: int = 1n_inner: int | None = Noneactivation_function: str = 'relu'resid_pdrop: float | int = 0.1embd_pdrop: float | int = 0.1attn_pdrop: float | int = 0.1layer_norm_epsilon: float = 1e-05initializer_range: float = 0.02scale_attn_weights: bool = Trueuse_cache: bool = Truebos_token_id: int | None = 50256eos_token_id: int | list[int] | None = 50256scale_attn_by_inverse_layer_idx: bool = Falsereorder_and_upcast_attn: bool = Falseadd_cross_attention: bool = False )

매개변수

  • state_dim (int, 선택 사항, 기본값 17) — RL 환경의 상태 크기
  • act_dim (int, 선택 사항, 기본값 4) — 출력 액션 공간의 크기
  • hidden_size (int, 선택 사항, 기본값 128) — 숨겨진 표현의 차원입니다.
  • max_ep_len (int, 선택 사항, 기본값 4096) — 환경에서 에피소드의 최대 길이
  • action_tanh (bool, 선택 사항, 기본값 True) — action 예측에 tanh 활성화 함수를 사용할지 여부
  • vocab_size (int, 선택 사항, 기본값 1) — 모델의 어휘 크기입니다. input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다.
  • n_positions (int, 선택 사항, 기본값 1024) — 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다.
  • n_layer (int, 선택 사항, 기본값 3) — Transformer decoder의 숨겨진 레이어 수입니다.
  • n_head (int, 선택 사항, 기본값 1) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다.
  • n_inner (int, 선택 사항) — MLP 표현의 차원.
  • activation_function (str, 선택 사항, 기본값 relu) — 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어, "gelu", "relu", "silu" 등이 있습니다.
  • resid_pdrop (Union[float, int], 선택 사항, 기본값 0.1) — 임베딩, 인코더, 풀러의 모든 완전 연결 계층에 적용되는 dropout 확률입니다.
  • embd_pdrop (Union[float, int], 선택 사항, 기본값 0.1) — 임베딩에 적용할 dropout 비율입니다.
  • attn_pdrop (Union[float, int], 선택 사항, 기본값 0.1) — Attention 확률에 적용할 dropout 비율입니다.
  • layer_norm_epsilon (float, 선택 사항, 기본값 1e-05) — 레이어 정규화 레이어에서 사용되는 epsilon 값입니다.
  • initializer_range (float, 선택 사항, 기본값 0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다.
  • scale_attn_weights (bool, 선택 사항, 기본값 True) — hidden_size의 제곱근으로 나누어 attention weights를 스케일링합니다.
  • use_cache (bool, 선택 사항, 기본값 True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음). config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다.
  • bos_token_id (int, 선택 사항, 기본값 50256) — 어휘에서 스트림 시작에 사용되는 토큰 ID입니다.
  • eos_token_id (Union[int, list[int]], 선택 사항, 기본값 50256) — 어휘에서 스트림 종료에 사용되는 토큰 id입니다.
  • scale_attn_by_inverse_layer_idx (bool, 선택 사항, 기본값 False) — attention 가중치를 1 / layer_idx + 1로 추가로 스케일링할지 여부.
  • reorder_and_upcast_attn (bool, 선택 사항, 기본값 False) — 혼합 정밀도로 학습할 때, 어텐션(내적)을 계산하기 전에 키(K)를 스케일링하고 어텐션 내적/softmax를 float()로 업캐스트할지 여부.
  • add_cross_attention (bool, 선택 사항, 기본값 False) — 모델에 cross-attention 레이어를 추가할지 여부.

이것은 DecisionTransformerModel의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Decision Transformer 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 와 유사한 설정이 생성됩니다.

Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.

예:

>>> from transformers import DecisionTransformerConfig, DecisionTransformerModel

>>> # Initializing a DecisionTransformer configuration
>>> configuration = DecisionTransformerConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = DecisionTransformerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

DecisionTransformerGPT2Model

class transformers.DecisionTransformerGPT2Model

< >

( config: DecisionTransformerConfig )

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )

DecisionTransformerModel

클래스 transformers.DecisionTransformerModel

< >

( config: DecisionTransformerConfig )

매개변수

  • config (DecisionTransformerConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 관련된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.

Decision Transformer 모델

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

( states: typing.Optional[torch.Tensor] = Noneactions: typing.Optional[torch.Tensor] = Nonerewards: typing.Optional[torch.Tensor] = Nonereturns_to_go: typing.Optional[torch.Tensor] = Nonetimesteps: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DecisionTransformerOutput or tuple(torch.Tensor)

매개변수

  • states (torch.Tensor, shape (batch_size, episode_length, state_dim)) — 트래젝토리에서 각 단계에 대한 상태
  • actions (torch.Tensor, shape (batch_size, episode_length, act_dim)) — 현재 상태에서 “expert” 정책이 취한 동작입니다. 자동 회귀 예측을 위해 마스킹됩니다.
  • rewards (torch.Tensor, shape (batch_size, episode_length, 1)) — 각 상태, 액션에 대한 보상
  • returns_to_go (torch.Tensor, shape (batch_size, episode_length, 1)) — 트래젝토리에서 각 상태에 대한 리턴
  • timesteps (torch.LongTensor, shape (batch_size, episode_length)) — 트래젝토리에서 각 스텝에 해당하는 timestep
  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • output_hidden_states (bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중 hidden_states 항목을 참고하세요.
  • output_attentions (bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의 attentions 항목을 참조하세요.
  • return_dict (bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.

반환값

DecisionTransformerOutput 또는 tuple(torch.Tensor)

DecisionTransformerOutput 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(DecisionTransformerConfig)과 입력에 따라 다양한 요소를 포함합니다.

DecisionTransformerModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • state_preds (torch.Tensor, shape (batch_size, sequence_length, state_dim)) — 환경 상태 예측

  • action_preds (torch.Tensor, shape (batch_size, sequence_length, action_dim)) — 모델의 액션 예측

  • return_preds (torch.Tensor, shape (batch_size, sequence_length, 1)) — 각 상태에 대한 예측된 리턴

  • hidden_states (torch.Tensor, 선택 사항, output_hidden_states=True가 전달되거나 config.output_hidden_states=True인 경우 반환됨) — torch.Tensor의 튜플 (모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.

  • attentions (torch.Tensor, 선택 사항, output_attentions=True가 전달되거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.

  • last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.

예:

>>> from transformers import DecisionTransformerModel
>>> import torch

>>> model = DecisionTransformerModel.from_pretrained("edbeeching/decision-transformer-gym-hopper-medium")
>>> # evaluation
>>> model = model.to(device)
>>> model.eval()

>>> env = gym.make("Hopper-v3")
>>> state_dim = env.observation_space.shape[0]
>>> act_dim = env.action_space.shape[0]

>>> state = env.reset()
>>> states = torch.from_numpy(state).reshape(1, 1, state_dim).to(device=device, dtype=torch.float32)
>>> actions = torch.zeros((1, 1, act_dim), device=device, dtype=torch.float32)
>>> rewards = torch.zeros(1, 1, device=device, dtype=torch.float32)
>>> target_return = torch.tensor(TARGET_RETURN, dtype=torch.float32).reshape(1, 1)
>>> timesteps = torch.tensor(0, device=device, dtype=torch.long).reshape(1, 1)
>>> attention_mask = torch.zeros(1, 1, device=device, dtype=torch.float32)

>>> # forward pass
>>> with torch.no_grad():
...     state_preds, action_preds, return_preds = model(
...         states=states,
...         actions=actions,
...         rewards=rewards,
...         returns_to_go=target_return,
...         timesteps=timesteps,
...         attention_mask=attention_mask,
...         return_dict=False,
...     )
Update on GitHub