기술나눔

[PyTorch] torch.fmod는 잘린 정규 분포를 사용하여 신경망의 가중치를 초기화합니다.

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

이 코드 조각은 잘린 정규 분포를 사용하여 PyTorch를 사용하여 신경망의 가중치를 초기화하는 방법을 보여줍니다. 잘린 정규 분포는 생성된 값이 극단적인 값을 방지하기 위해 범위 내에서 잘리는 것을 의미합니다.여기서 사용됨torch.fmod 이 효과를 얻기 위한 해결 방법입니다.

상해

1. 잘린 정규 분포

잘린 정규 분포는 생성된 값이 특정 범위 내에 속하도록 보장하는 정규 분포를 수정한 것입니다. 구체적으로,torch.fmod 이 함수는 입력 텐서의 나머지 부분을 2로 나눈 값을 반환합니다(즉, 결과 값은 -2와 2 사이입니다).

2. 가중치 초기화

코드에서 4개의 가중치 텐서는 서로 다른 표준편차에 따라 계산됩니다(init_sd_first, init_sd_middle, init_sd_last )는 잘린 정규 분포에서 생성됩니다. 구체적인 측정기준은 다음과 같습니다.

  • 첫 번째 레이어의 가중치 텐서의 모양은 다음과 같습니다. (x_dim, width n_double)
  • 중간 레이어의 두 가중치 텐서의 모양은 다음과 같습니다. (width, width n_double)
  • 마지막 레이어의 가중치 텐서의 모양은 다음과 같습니다. (width, 1)

이러한 가중치 텐서는 다음과 같이 생성됩니다.

initial_weights = [
    torch.fmod(torch.normal(0, init_sd_first, size=(x_dim, width   n_double)), 2),
    torch.fmod(torch.normal(0, init_sd_middle, size=(width, width   n_double)), 2),
    torch.fmod(torch.normal(0, init_sd_middle, size=(width, width   n_double)), 2),
    torch.fmod(torch.normal(0, init_sd_last, size=(width, 1)), 2)
]