* 우리가 사용했던 cartpole환경의 경우 action이 2가지 밖에 없으므로 binary classification을 하는 신경망과 같이 마지막 layer에 neuron 1개를 적용하고 sigmoid함수를 통해 0~1사이의 확률을 출력하도록 구성한다. 이 때 출력된 확률 p는 threshold를 통해 0.5 이상이면 action 0을 출력하는 등의 처리를 해주는 것이 아니라, 정책을 sampling하는데 사용한다. 무슨 말이냐면 p가 0.3일 경우 0.3의 확률로 action 0을 선택하게 된다는 것이다. 이렇게 random sampling 과정을 추가하는 이유는 agent가 새로운 행동을 exploring하는 것과 잘 할 수 있는 행동을 exploiting하는 것의 균형을 맞추기 위해서이다. 다시 말해 무조건 어떤 action을 취하기보다는 새로운 action을 취할 여지를 남겨두는 것이 더 다양한 학습이 가능하기 때문에 이러한 방법을 사용하는 것이다.
* 추가적으로 cartpole과 같이 모든 정보(속도, 위치)가 주어지고, 잡음이 없는 정보가 주어질 경우에는 상관 없지만, 일반적인 환경들에서 만약 어떤 정보가 누락되어 주어진다면 우리는 해당 정보를 참고하기 위하여 과거의 관측들도 활용해야 한다.
keras.backend.clear_session()
tf.random.set_seed(42)
np.random.seed(42)
n_inputs = 4 # 관측 공간의 크기(obs의 length)
model = keras.models.Sequential([
keras.layers.Dense(5, activation="elu", input_shape=[n_inputs]),
keras.layers.Dense(1, activation="sigmoid"),
])
* 방금 설명한 내용을 keras로 구현해 보았다. 중요한 것은 n_inputs 즉, 첫 번째 layer의 input shape은 관측 공간의 크기여야 한다는 점이다. obs의 크기가 4였으니 우리의 모델에도 4의 값을 부여하였다.
* 모델을 만들었으니 다음 포스팅에서는 학습 방법에 대해서 살펴보겠다.
'Deep Learning > Hands On Machine Learning' 카테고리의 다른 글
PG(Policy Gradient) Algorithm (0) | 2022.01.08 |
---|---|
신용할당 문제(Credit Assignment Problem) (0) | 2022.01.08 |
OpenAI gym (0) | 2022.01.08 |
강화학습 기본 (0) | 2022.01.08 |
GAN(Generative Adversarial Network) (0) | 2022.01.01 |