그냥 모든 경우의 수 (1번폰 앞으로 한칸, 2번폰 앞으로 한칸, ... , 퀸 대각선 오른쪽 한칸, 퀸 대각선 오른쪽 두칸, ...) 이런식으로 라벨링 한다음에 softmax로 정책 뽑은다음에 움직이는거 불가능한거 다 0으로 바꾸는 그런 식으로 학습하는거?
뉴비라 논문 찾아볼 짬이 안되서 구글링으로 여러 사람들이 정리해놓은거 읽고 있는데 출력 관련된 부분을 어떻게 하는지는 안나와있어서 질문 올려봄..
이것 말고도 상황에 따라 행동의 경우의 수가 달라지는 것들은 어떻게 학습시키는지 궁금함
트리비얼하지 않음..ㅠㅠ
강화학습 제외하면 비지도 학습이어야 할듯
어떤 액션을 못하게 하려면 masking 하는 방법이 가장 많이 쓰이고 후자의 경우에는 모든 경우의 수를 출력하고 택할 것 제외하고 다 masking 하면됨.
아니면 특정 상황마다 다른 모델을 쓰는 방법도 있음
https://arxiv.org/abs/2003.13590
참고
그리고 masking 방법은 softmax 취하기 전에 매우 작은 값을 넣어서 해당 값을 softmax 취하면 0이 나오게 하면 됨
예를 들어 본문에 나온 상황에선 다음과 같이 두 모델을 만드는 것을 고려할 수 있음: 1.움직일 기물 선택 모델 2.선택된 기물을 이동할 위치를 선택하는 모델 state가 (가로축 크기, 세로축 크기, 기물의 종류)이면 (예를 들어서 (0, 0)에서 폰(0)이 존재하면 (0, 0, 0) = 1 이고 그렇지 않으면 0임) 모델 내에서 forward를 진행할 때 1번 모델 같은 경우는 마지막 축에 대해서 더했을 때, 1이여야 기물이 존재한다는 거니까 action space의 크기가 (가로축 크기, 세로축 크기)라고하면 torch.where(state.sum(dim=-1) > 0, result, -1e9) 이런식으로 masking 해서 반환해주면됨. 2번 모델 같은 경우는 state를
(가로축 크기, 세로축 크기, 선택된 기물의 이동 가능 여부)를 state로 받고 1번 모델과 비슷한 형식으로 masking 해서 반환하면됨
아 그런 방법이 있구나 마스킹은 어렴풋이 알거 같았는데 특정상황마다 다른 모델 쓰는건 생각도 못했네
트리 알고리즘쪽 아님?? - dc App