더북(TheBook)

map()은 두 번째 인자의 리스트/튜플에 포함된 모든 데이터에 변환 함수를 적용하여 다른 형태(타입)의 데이터로 바꾸어 줍니다.

def multiply(x):
    return x * 5

tuple(map(multiply, [1, 2, 3, 4]))

map()을 적용한 결과는 다음과 같습니다.

(5, 10, 15, 20)

[1, 2, 3, 4]의 각 값에 5를 곱한 결과를 보여 줍니다.

device: 어떤 장치(CPU/GPU)를 사용할지 지정

torch.bool: 참과 거짓을 표현하는 자료형

③ 발생 가능한 다음 상태(V(st+1))를 계산하기 위한 코드입니다. 다음 상태에서 발생할 행동(action)의 기댓값 계산은 타깃 네트워크(target_net)를 사용하며, 다음 상태의 행동은 보상이 최대(max(1)[0])가 되는 것을 선택합니다.

④ 오차를 계산하기 위해 smooth_l1_loss 손실 함수를 사용합니다. smooth_l1_loss는 L1 손실과 L2 손실을 함께 사용합니다. 배열(텐서)에서 요소별 오차의 절댓값이 베타 미만의 값이면 제곱 항(L2 손실)을 사용하고 그렇지 않으면 L1 손실을 사용합니다.

L1 손실의 경우 V자 형태를 갖기 때문에 미분 불가능한 지점이 있지만, 상대적으로 L2 손실에 비해 이상치에 의한 영향은 적은 장점이 있습니다. 반면에 L2 손실의 경우 U자 형태로 모든 지점에서 미분 가능하지만 이상치에 취약한 단점이 있습니다. 결국 smooth_l1_loss는 L1 손실과 L2 손실의 장점을 결합한 손실 함수라고 할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.