>기술 주변기기 >일체 포함 >Pytorch로 변압기 모델 구축에 대한 포괄적 인 가이드

Pytorch로 변압기 모델 구축에 대한 포괄적 인 가이드

William Shakespeare
William Shakespeare원래의
2025-03-10 09:30:13260검색

이 튜토리얼의 목표는 Pytorch를 사용하여 변압기 모델을 구성하는 방법에 대한 포괄적 인 이해를 제공하는 것입니다. 트랜스포머는 현대 머신 러닝에서 가장 강력한 모델 중 하나입니다. 그들은 언어 번역 및 텍스트 요약과 같은 자연 언어 처리 (NLP) 작업 에서이 분야에 혁명을 일으켰습니다. 장거리 종속성 및 병렬 계산을 처리하는 능력으로 인해 LSTM (Shom-Term Memory) 네트워크는 이러한 작업에서 변압기로 대체되었습니다. 트랜스포머를 구축하기 위해이 안내서에 사용 된 도구는 단순성, 다양성 및 효율성으로 유명한 인기있는 오픈 소스 머신 러닝 라이브러리 인 Pytorch입니다. 동적 계산 그래프와 광범위한 라이브러리를 통해 Pytorch는 기계 학습 및 인공 지능 영역의 연구원과 개발자에게 도움이되었습니다. Pytorch에 익숙하지 않은 사람들의 경우 DataCamp의 코스 방문, Pytorch와의 딥 러닝 소개는 견고한 접지에 권장됩니다.

배경과 이론 . 백서에서 처음 소개 된 것은 Vaswani et al.이 필요로하는 모든 것입니다. 트랜스포머는 고유 한 설계와 효과로 인해 많은 NLP 작업의 초석이되었습니다.

. 변압기의 핵심은주의 메커니즘, 특히 '자체 변환'의 개념으로, 모델이 입력 데이터의 다른 부분을 평가하고 우선 순위를 정할 수 있습니다. 이 메커니즘은 변압기가 데이터의 장거리 종속성을 관리 할 수있게합니다. 출력을 생성 할 때 모델이 입력의 다른 부분에 집중할 수있는 가중치 체계입니다. 이 메커니즘은 모델이 입력 순서에서 다른 단어 나 기능을 고려하여 주어진 출력을 생성하는 데 중요성을 나타내는 '무게'를 할당합니다. 예를 들어, 문장 번역 작업에서 특정 단어를 번역하는 동안 모델은 대상 단어와 문법적으로 또는 의미 적으로 관련된 단어에 더 높은주의 가중치를 할당 할 수 있습니다. 이 프로세스는 트랜스포머가 순서대로 서로의 거리에 관계없이 단어 나 기능 사이의 종속성을 캡처 할 수 있습니다. NLP 분야에서의 트랜스포머의 영향은 과장 될 수 없습니다. 그들은 많은 작업에서 전통적인 모델을 능가하여보다 미묘한 방식으로 인간 언어를 이해하고 생성 할 수있는 탁월한 능력을 보여줍니다.

. NLP에 대한 더 깊은 이해를 위해, Python 과정에서 DataCamp의 자연 언어 처리에 대한 DataCamp의 소개. pytorch 변압기를 구축하기 전에 작업 환경을 올바르게 설정해야합니다. 무엇보다도 Pytorch를 설치해야합니다. Pytorch (현재 안정 버전 -2.0.1)는 PIP 또는 Conda 패키지 관리자를 통해 쉽게 설치할 수 있습니다. PIP의 경우 명령을 사용하십시오

콘다의 경우 다음 명령을 사용하십시오

pip3 install torch torchvision torchaudio
CPU와 함께 Pytorch를 사용하려면 Pytorch 문서를 친절하게 방문하십시오.

또한 딥 러닝 개념에 대한 기본적인 이해를 갖는 것이 유리합니다. 변압기의 작동을 이해하는 데 기본이되기 때문입니다. 새로 고침이 필요한 사람들을 위해 Python의 DataCamp 코스 딥 러닝은 딥 러닝의 주요 개념을 다루는 귀중한 리소스입니다. Pytorch 로 변압기 모델 구축 변압기 모델을 구축하려면 다음 단계가 필요합니다.

라이브러리 및 모듈 가져 오기 기본 빌딩 블록 정의-다중 헤드주의, 위치 현행 피드 포워드 네트워크, 위치 인코딩 인코더 블록 구축 디코더 블록 구축 인코더와 디코더 레이어를 결합하여 완전한 변압기 네트워크를 만듭니다.

1. 필요한 라이브러리 및 모듈 가져 오기

우리는 핵심 기능을위한 Pytorch 라이브러리, 신경망을 만들기위한 신경망 모듈, 교육 네트워크를위한 최적화 모듈 및 데이터 처리를위한 데이터 유틸리티 기능을 가져 오는 것으로 시작합니다. 또한 수학 작업을위한 표준 Python Math 모듈과 복잡한 개체의 사본을 생성하기위한 사본 모듈을 가져옵니다. 이 도구는 모델의 아키텍처를 정의하고 데이터 관리 및 교육 프로세스 설정을위한 토대를 설정했습니다.
  1. 2. 기본 빌딩 블록 정의 : 멀티 헤드주의, 위치 현행 피드 포워드 네트워크, 위치 인코딩 멀티 헤드주의 다중 헤드주의 메커니즘은 각각의 위치 쌍 사이의 시퀀스를 순서로 계산합니다. 입력 시퀀스의 다른 측면을 포착하는 여러 "주의 헤드"로 구성됩니다. 다중 헤드주의에 대해 자세히 알아 보려면 LLMS (Lange Language Models) 개념 코스 의이주의 메커니즘 섹션을 확인하십시오.
  2. 그림 1. 다중 헤드주의 (출처 : 저자에 의해 생성 된 이미지)
  3. 클래스 정의 및 초기화 :
  4. 클래스는 Pytorch의 nn.module의 서브 클래스로 정의됩니다.
  5. d_model : 입력의 치수 num_heads : 입력을 분할 할 주의력 횟수.
초기화는 d_model이 NUM_HEADS로 나눌 수 있는지 확인한 다음 쿼리, 키, 값 및 출력에 대한 변환 가중치를 정의합니다. 스케일링 된 도트 제품주의 :
pip3 install torch torchvision torchaudio
    주의 점수 계산 : attn_scores = torch.matmul (q, k.transpose (-2, -1)) / math.sqrt (self.d_k). 여기서주의 점수는 쿼리 (Q) 및 키 (k)의 도트 제품을 가져간 다음 키 차원 (d_k)의 제곱근으로 스케일링하여 계산됩니다. 마스크 적용 : 마스크가 제공되면 특정 값을 마스킹하기 위해주의 점수에 적용됩니다. 주의력 계산 :주의 점수는 SoftMax 함수를 통해 전달되어 1으로 합산되는 확률로 변환합니다. 출력 계산 : 주의력의 최종 출력은주의 가중치에 값 (v)을 곱하여 계산됩니다.
  1. 헤드 분할 머리 :
  2. 이 메소드는 입력 x를 모양 (batch_size, num_heads, seq_length, d_k)으로 재구성합니다. 모델이 여러주의 헤드를 동시에 처리 할 수있어 병렬 계산이 가능합니다. 결합 헤드 :
  3. 각 헤드에 별도로주의를 적용한 후,이 방법은 결과를 단일 텐서 (batch_size, seq_length, d_model)로 다시 결합합니다. 이것은 추가 처리를위한 결과를 준비합니다. 전방 방법 :
  4. 전방 방법은 실제 계산이 발생하는 곳입니다
> 선형 변환 적용 : 쿼리 (q), 키 (k) 및 값 (v)은 먼저 초기화에 정의 된 가중치를 사용하여 선형 변환을 통해 전달됩니다. <:> 분할 헤드 : 변환 된 q, k, v는 split_heads 메소드를 사용하여 여러 헤드로 분할됩니다. 스케일링 된 도트-제품주의를 적용하십시오 : scaled_dot_product_attention 메소드는 분할 헤드에서 호출됩니다. 콤바인 헤드 : 각 헤드의 결과는 combine_heads 메소드를 사용하여 단일 텐서로 다시 결합됩니다. 출력 변환 적용 : 마지막으로 결합 된 텐서는 출력 선형 변환을 통해 전달됩니다.

요약하면, 다중 헤드 변형 클래스는 변압기 모델에서 일반적으로 사용되는 다중 헤드주의 메커니즘을 캡슐화합니다. 입력을 여러주의 헤드로 분할하고 각 헤드에주의를 기울인 다음 결과를 결합해야합니다. 그렇게함으로써 모델은 다른 척도에서 입력 데이터의 다양한 관계를 캡처하여 모델의 표현 능력을 향상시킬 수 있습니다. 위치에 대한 피드 포워드 네트워크 클래스 정의 :

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
클래스는 Pytorch의 NN.Module의 서브 클래스입니다. 즉, 신경망 레이어와 함께 작동하는 데 필요한 모든 기능을 상속합니다. 초기화 :

pip3 install torch torchvision torchaudio
    d_model : 모델 입력 및 출력의 차원 <:> d_ff : 피드 포워드 네트워크에서 내부 층의 차원. self.fc1 및 self.fc2 : d_model 및 d_ff에 의해 정의 된 입력 및 출력 치수가있는 완전히 연결된 2 개의 (선형) 레이어 2 개 self.relu : Relu (정류 된 선형 단위) 활성화 함수. 두 선형 레이어 사이에 비선형 성을 소개합니다.
  1. 전방 방법 :
  2. x : 피드 포워드 네트워크에 대한 입력. self.fc1 (x) : 입력은 먼저 첫 번째 선형 레이어 (fc1)를 통과합니다. self.relu (...) : FC1의 출력은 Relu 활성화 함수를 통과합니다. Relu는 모든 음수 값을 0으로 대체하여 비선형 성을 모델에 도입합니다. self.fc2 (...) : 활성화 된 출력은 두 번째 선형 레이어 (FC2)를 통과하여 최종 출력을 생성합니다.
  3. 요약하자면, 위치 와이드 피드 포워드 클래스는 사이에 릴루 활성화 함수가있는 2 개의 선형 층으로 구성된 위치 현행 피드 포워드 신경망을 정의합니다. 변압기 모델의 맥락에서,이 피드 포워드 네트워크는 각 위치에 개별적으로 동일하게 적용됩니다. 트랜스포머 내의주의 메커니즘으로 배운 기능을 변환하는 데 도움이되어주의 출력을위한 추가 처리 단계 역할을합니다. 위치 인코딩
  4. 위치 인코딩은 입력 순서에서 각 토큰의 위치 정보를 주입하는 데 사용됩니다. 위치 인코딩을 생성하기 위해 다른 주파수의 사인 및 코사인 함수를 사용합니다.
  5. 클래스 정의 :
클래스는 Pytorch의 nn.module의 서브 클래스로 정의되어 표준 Pytorch 층으로 사용할 수 있습니다. 초기화 :

d_model : 모델 입력의 치수.

max_seq_length : 위치 인코딩이 사전 계산되는 시퀀스의 최대 길이. pe : 위치 인코딩으로 채워진 0으로 채워진 텐서. 위치 : 시퀀스의 각 위치에 대한 위치 지수를 포함하는 텐서. <: :> div_term : 특정 방식으로 위치 지수를 확장하는 데 사용되는 용어. 사인 함수는 짝수 지수와 코사인 기능에 PE의 홀수 지수에 적용됩니다. 마지막으로, PE는 버퍼로 등록되어 있으며, 이는 모듈 상태의 일부가되지만 훈련 가능한 매개 변수로 간주되지는 않습니다.
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
.
    전방 방법 :
  1. 전방 방법은 입력 x에 위치 인코딩을 추가합니다. 첫 번째 X.Size (1) PE의 요소를 사용하여 위치 인코딩이 실제 시퀀스 길이 x. 요약
  2. 위치 알코딩 클래스는 시퀀스 내에서 토큰 위치에 대한 정보를 추가합니다. 변압기 모델은 토큰 순서에 대한 고유 한 지식이 없기 때문에 (자체 변환 메커니즘으로 인해)이 클래스는 모델이 시퀀스에서 토큰의 위치를 ​​고려하는 데 도움이됩니다. SINUSOIDAL 기능은 순서대로 각 위치에 대해 독특하고 부드러운 인코딩을 생성하기 때문에 모델이 상대 위치에 쉽게 참석하는 법을 배울 수 있도록 선택되었습니다.

    .

    3. 인코더 블록 구축

    Pytorch로 변압기 모델 구축에 대한 포괄적 인 가이드 그림 2. 변압기 네트워크의 인코더 부분 (출처 : 원본 용지의 이미지)

    클래스 정의 :

    클래스는 Pytorch의 NN.Module의 서브 클래스로 정의되므로 Pytorch의 신경망의 빌딩 블록으로 사용할 수 있습니다. 초기화 :

    매개 변수 :
    pip3 install torch torchvision torchaudio

    d_model : 입력의 치수 num_heads : 멀티 헤드주의에주의를 기울이는 수의 수 <:> d_ff : 위치 현행 피드 포워드 네트워크에서 내부 층의 차원. 드롭 아웃 : 정규화에 사용되는 드롭 아웃 속도 구성 요소 :

    <_> self.self_attn : 다중 헤드주의 메커니즘. self.feed_forward : 위치에 대한 피드 포워드 신경 네트워크. self.norm1 및 self.norm2 : 레이어 정규화, 레이어 입력을 부드럽게하기 위해 적용됩니다. self.dropout : 드롭 아웃 레이어, 훈련 중에 일부 활성화를 무작위로 설정함으로써 과적으로 과정을 방지하는 데 사용됩니다.
    conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
    전방 방법 :

    입력 :

    x : 인코더 레이어에 대한 입력. 마스크 : 입력의 특정 부분을 무시하는 옵션 마스크. 처리 단계 :

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import torch.utils.data as data
    import math
    import copy
    <:> 자체 변환 : 입력 X는 다중 헤드 자체 변환 메커니즘을 통해 전달됩니다. 추가 및 정규화 (주의 후) :주의 출력이 원래 입력 (잔류 연결)에 추가 된 다음 Norm1을 사용하여 드롭 아웃 및 정규화됩니다. 피드 포워드 네트워크 : 이전 단계의 출력은 위치 현행 피드 포워드 네트워크를 통해 전달됩니다. 추가 및 정규화 (피드 포워드 후) : 2 단계와 유사하게, 피드 포워드 출력은이 단계의 입력 (잔류 연결)에 추가 된 다음 Norm2를 사용하여 드롭 아웃 및 정규화됩니다. 출력 : 처리 된 텐서는 인코더 층의 출력으로 반환됩니다.

    요약 : encoderlayer 클래스는 변압기 인코더의 단일 레이어를 정의합니다. 그것은 잔류 연결, 층 정규화 및 적절하게 적용되는 다중 헤드 자체 변환 메커니즘에이어서 위치 현지 공급 신경 네트워크를 캡슐화합니다. 이러한 구성 요소를 사용하면 인코더가 입력 데이터의 복잡한 관계를 캡처하고 다운 스트림 작업에 유용한 표현으로 변환 할 수 있습니다. 일반적으로, 이러한 인코더 층은 트랜스포머 모델의 완전한 인코더 부분을 형성하기 위해 쌓입니다.

    4. 디코더 블록 구축

    Pytorch로 변압기 모델 구축에 대한 포괄적 인 가이드 클래스 정의 :

    pip3 install torch torchvision torchaudio
    초기화 :

    매개 변수 :

    d_model : 입력의 치수 num_heads : 멀티 헤드주의에주의를 기울이는 수의 수 <:> d_ff : 피드 포워드 네트워크에서 내부 층의 치수. 드롭 아웃 : 정규화를위한 드롭 아웃 속도
    conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
    구성 요소

    : <_> self.self_attn : 대상 시퀀스에 대한 다중 헤드 자체 정보 메커니즘 self.cross_attn : 인코더의 출력에 참석하는 다중 헤드주의 메커니즘. self.feed_forward : 위치에 대한 피드 포워드 신경 네트워크. self.norm1, self.norm2, self.norm3 : 레이어 정규화 구성 요소 self.dropout : 정규화를위한 드롭 아웃 레이어 전방

    import torch
    import torch.nn as nn
    import torch.optim as optim
    import torch.utils.data as data
    import math
    import copy
    메소드

    : 입력 입력

    :
      x : 디코더 층에 대한 입력. ENC_OUTPUT : 해당 인코더의 출력 (교차 변호 단계에서 사용). <_ _> src_mask : 인코더 출력의 특정 부분을 무시하는 소스 마스크. <_ _> tgt_mask : 디코더 입력의 특정 부분을 무시하기위한 대상 마스크.
    1. 처리 단계 :
      1. 대상 시퀀스에 대한 자체 변환 : 입력 X는 자체 변환 메커니즘을 통해 처리됩니다. add and normalize (자체 소송 후) : 자체 소송의 출력은 원래 x에 추가 된 다음 Norm1을 사용하여 드롭 아웃 및 정규화됩니다. 인코더 출력과의 교차 중단 : 이전 단계의 정규화 된 출력은 인코더의 출력 ENC_OUTPUT에 참석하는 크로스 오프닝 메커니즘을 통해 처리됩니다. 추가 및 정규화 (교차 변호 후) : 크로스 텐션의 출력 이이 단계의 입력에 추가 된 다음 Norm2를 사용하여 드롭 아웃 및 정규화됩니다. 피드 포워드 네트워크 : 이전 단계의 출력은 피드 포워드 네트워크를 통해 전달됩니다. 추가 및 정규화 (피드 포워드 후) : 피드 포워드 출력 이이 단계의 입력에 추가 된 다음 Norm3을 사용하여 드롭 아웃 및 정규화됩니다. 출력 : 처리 된 텐서는 디코더 층의 출력으로 반환됩니다.
      2. 요약 :
      3. 디코더 레이어 클래스는 변압기 디코더의 단일 층을 정의합니다. 다중 헤드 자체 변환 메커니즘, 멀티 헤드 교차 변형 메커니즘 (인코더 출력에 참석), 위치 현장의 피드 포워드 신경망 및 해당 잔류 연결, 레이어 정규화 및 드롭 아웃 레이어로 구성됩니다. 이 조합을 사용하면 디코더가 목표 시퀀스 및 소스 시퀀스를 모두 고려하여 인코더의 표현에 따라 의미있는 출력을 생성 할 수 있습니다. 인코더와 마찬가지로, 다중 디코더 층은 일반적으로 변압기 모델의 완전한 디코더 부분을 형성하기 위해 쌓입니다. 다음으로, 포괄적 인 변압기 모델을 구성하기 위해 인코더와 디코더 블록이 모여 들었습니다.
      4. 5. 인코더와 디코더 레이어를 결합하여 완전한 변압기 네트워크를 만듭니다
      5. 그림 4. 변압기 네트워크 (출처 : 원본 용지의 이미지)
      6. 클래스 정의 :
      7. 초기화 :
      8. 생성자는 다음 매개 변수를 취합니다
      9. <_ _> src_vocab_size : 소스 어휘 크기. <_ _> tgt_vocab_size : 대상 어휘 크기. d_model : 모델 임베딩의 치수 num_heads : 멀티 헤드주의 메커니즘의주의 헤드 수. num_layers : 인코더와 디코더 모두에 대한 레이어 수. <:> d_ff : 피드 포워드 네트워크에서 내부 층의 차원. max_seq_length : 위치 인코딩의 최대 시퀀스 길이 드롭 아웃 : 정규화를위한 드롭 아웃 속도.
      그리고 다음 구성 요소를 정의합니다
        self.encoder_embedding : 소스 시퀀스에 대한 임베딩 레이어 self.decoder_embedding : 대상 시퀀스에 대한 임베딩 레이어 self.positional_encoding : 위치 인코딩 구성 요소 self.encoder_layers : 인코더 레이어 목록 self.decoder_layers : 디코더 층 목록 self.fc : 대상 어휘 크기를 위해 최종 완전히 연결된 (선형) 레이어 매핑. self.dropout : 드롭 아웃 레이어.
      1. 마스크 메소드 생성 메소드 :
      2. 이 방법은 소스 및 대상 시퀀스에 대한 마스크를 만드는 데 사용되어 패딩 토큰이 무시되고 대상 시퀀스에 대한 훈련 중에 미래 토큰이 보이지 않도록합니다.
      3. . 전방 방법 :
      4. 이 방법은 변압기의 순방향 패스를 정의하고 소스 및 대상 시퀀스를 취하고 출력 예측을 생성합니다.
      5. 입력 임베딩 및 위치 인코딩 : 소스 및 대상 시퀀스는 먼저 각각의 임베딩 층을 사용하여 내장 된 다음 위치 인코딩에 추가됩니다. 인코더 레이어 : 소스 시퀀스는 엔코더 레이어를 통해 전달되며 최종 인코더 출력은 처리 된 소스 시퀀스를 나타냅니다. 디코더 레이어 : 대상 시퀀스와 인코더의 출력은 디코더 층을 통과하여 디코더의 출력을 초래합니다. 최종 선형 레이어 : 디코더의 출력은 완전히 연결된 (선형) 레이어를 사용하여 대상 어휘 크기에 매핑됩니다.
      6. 출력 :
      7. 최종 출력은 대상 시퀀스에 대한 모델의 예측을 나타내는 텐서입니다. 요약 :
      8. 변압기 클래스는 임베딩, 위치 인코딩, 인코더 층 및 디코더 층을 포함하여 변압기 모델의 다양한 구성 요소를 모았습니다. 교육 및 추론을위한 편리한 인터페이스를 제공하여 다중 헤드주의, 피드 포워드 네트워크 및 계층 정규화의 복잡성을 캡슐화합니다. 이 구현은 표준 변압기 아키텍처를 따라 기계 번역, 텍스트 요약 등과 같은 시퀀스-시퀀스 작업에 적합합니다. 마스킹을 포함 시키면 모델이 시퀀스 내에서 인과 적 의존성을 고착하여 패딩 토큰을 무시하고 Future Tokens의 정보 누출을 방지 할 수 있습니다. 이러한 순차적 단계는 변압기 모델이 입력 시퀀스를 효율적으로 처리하고 해당 출력 시퀀스를 생성 할 수 있도록 강화합니다. Pytorch 변압기 ​​모델 훈련 샘플 데이터 준비 예시적인 목적을 위해이 예에서는 더미 데이터 세트가 제작됩니다. 그러나 실제 시나리오에서는보다 실질적인 데이터 세트가 사용될 것이며 프로세스에는 소스 및 대상 언어 모두에 대한 어휘 매핑 생성과 함께 텍스트 전처리가 포함됩니다.
        pip3 install torch torchvision torchaudio
        하이퍼 파라미터 :

        이 값은 변압기 모델의 아키텍처와 동작을 정의합니다. <_> src_vocab_size, tgt_vocab_size : 소스 및 대상 시퀀스의 어휘 크기는 5000으로 설정되어 있습니다. d_model : 모델 임베딩의 차원, 512로 설정되었습니다 num_heads : 멀티 헤드주의 메커니즘의주의 헤드 수, 8으로 설정 num_layers : 인코더와 디코더 모두에 대한 레이어 수는 6으로 설정되었습니다. <:> d_ff : 피드 포워드 네트워크에서 내부 층의 차원, 2048로 설정 max_seq_length : 위치 인코딩의 최대 시퀀스 길이, 100으로 설정 드롭 아웃 : 정규화를위한 드롭 아웃 속도, 0.1 변압기 인스턴스 생성 :

        이 라인은 변압기 클래스의 인스턴스를 생성하여 주어진 하이퍼 파라미터로 초기화합니다. 인스턴스는이 과수기계에 의해 정의 된 아키텍처와 동작을 갖습니다.

        랜덤 샘플 데이터 생성 :
          다음 선은 랜덤 소스 및 대상 시퀀스를 생성합니다
        1. SRC_DATA : 1과 src_vocab_size 사이의 랜덤 정수는 모양 (64, max_seq_length)을 가진 소스 시퀀스의 배치를 나타냅니다. <__> tgt_data : 1과 tgt_vocab_size 사이의 랜덤 정수는 모양 (64, max_seq_length)을 가진 대상 시퀀스의 배치를 나타냅니다. 이러한 랜덤 시퀀스는 변압기 모델에 대한 입력으로 사용될 수 있으며, 길이 100의 64 개의 예와 시퀀스로 데이터 배치를 시뮬레이션 할 수 있습니다.
        2. 요약 :
        3. 코드 스 니펫은 변압기 모델을 초기화하고 모델에 공급 될 수있는 랜덤 소스 및 대상 시퀀스를 생성하는 방법을 보여줍니다. 선택된 하이퍼 파라미터는 변압기의 특정 구조 및 특성을 결정합니다. 이 설정은 기계 번역 또는 텍스트 요약과 같은 실제 시퀀스-시퀀스 작업에서 모델을 교육하고 평가하는 더 큰 스크립트의 일부일 수 있습니다. 모델 훈련 다음으로,이 모델은 위에서 언급 한 샘플 데이터를 사용하여 교육을받습니다. 그러나 실제 시나리오에서는 훨씬 더 큰 데이터 세트가 사용될 것이며, 이는 일반적으로 훈련 및 검증 목적으로 별개의 세트로 분할됩니다.
        4. .
        5. 손실 함수 및 옵티마이저 :
        6. criterion = nn.crossentropyloss (ingore_index = 0) : 손실 함수를 교차 엔트로피 손실로 정의합니다. INGORE_INDEX 인수는 0으로 설정되어 있습니다. 즉, 손실은 인덱스가 0 인 대상을 고려하지 않습니다 (일반적으로 패딩 토큰 용으로 예약). Optimizer = Optim.Adam (...) : 학습 속도가 0.0001이고 특정 베타 값을 가진 Adam으로 Optimizer를 Adam으로 정의합니다.
        7. 모델 훈련 모드 :
          1. transformer.train () : 트랜스포머 모델을 교육 모드로 설정하여 훈련 중에 만 적용되는 드롭 아웃과 같은 동작을 가능하게합니다.
          2. 훈련 루프 :
          3. 코드 스 니펫은 일반적인 훈련 루프를 사용하여 100 개의 에포크 모델을 훈련시킵니다.
          범위 (100)의 epoch의 경우 : 100 개가 넘는 훈련 에포크를 반복합니다 optimizer.zero_grad () : 이전 반복에서 그라디언트를 지 웁니다 output = transformer (src_data, tgt_data [:, : -1]) : 변압기를 통해 소스 데이터와 대상 데이터 (각 시퀀스의 마지막 토큰 제외)를 전달합니다. 이것은 대상이 하나의 토큰으로 이동하는 순서 대 순 시퀀스 작업에서 일반적입니다. loss = criterion (...) : 모델의 예측과 대상 데이터 사이의 손실을 계산합니다 (각 순서에서 첫 번째 토큰 제외). 손실은 데이터를 1 차원 텐서로 재구성하고 교차 엔트로피 손실 함수를 사용하여 계산됩니다. loss.backward () : 모델의 매개 변수와 관련하여 손실의 그라디언트를 계산합니다. optimizer.step () : 계산 된 그라디언트를 사용하여 모델의 매개 변수를 업데이트합니다 print (f "epoch : {epoch 1}, 손실 : {loss.item ()}") : 현재 에포크 번호와 그 시대의 손실 값을 인쇄합니다.

          요약 : 이 코드 스 니펫은 100 개의 에포크에 대한 무작위로 생성 된 소스 및 대상 시퀀스에서 변압기 모델을 훈련시킵니다. Adam Optimizer 및 Cross-Entropy Loss 함수를 사용합니다. 손실은 각 시대에 대해 인쇄되어 훈련 진행 상황을 모니터링 할 수 있습니다. 실제 시나리오에서는 임의의 소스 및 대상 시퀀스를 기계 번역과 같은 작업의 실제 데이터로 바꾸게됩니다. 변압기 모델 성능 평가 모델을 훈련 한 후 성능은 유효성 검사 데이터 세트 또는 테스트 데이터 세트에서 평가할 수 있습니다. 다음은 이것이 어떻게 수행 될 수 있는지에 대한 예입니다.

          평가 모드 :

          transformer.eval () : 변압기 모델을 평가 모드에 넣습니다. 이것은 훈련 중에 만 사용되는 드롭 아웃과 같은 특정 동작을 끄기 때문에 중요합니다.
          1. 랜덤 유효성 검사 데이터를 생성합니다 :
          2. val_src_data : 1과 src_vocab_size 사이의 랜덤 정수, 모양 (64, max_seq_length)의 유효성 검사 소스 시퀀스를 나타냅니다. val_tgt_data : 1과 tgt_vocab_size 사이의 랜덤 정수, 모양 (64, max_seq_length)을 가진 유효성 검사 대상 시퀀스의 배치를 나타냅니다.
          3. 검증 루프 :
            1. Torch.no_grad () with <...> : 유효성 검사 중에 그라디언트를 계산할 필요가 없으므로 그라디언트 계산을 비활성화합니다. 이렇게하면 메모리 소비를 줄이고 계산 속도를 높일 수 있습니다 val_output = 변압기 (Val_Src_data, val_tgt_data [:, : -1]) : 변압기를 통해 유효성 검사 소스 데이터와 유효성 검사 대상 데이터 (각 시퀀스의 마지막 토큰 제외)를 전달합니다. val_loss = criterion (...) : 모델의 예측과 검증 대상 데이터 (각 시퀀스에서 첫 번째 토큰 제외) 사이의 손실을 계산합니다. 손실은 데이터를 1 차원 텐서로 재구성하고 이전에 정의 된 교차 엔트로피 손실 함수를 사용하여 계산됩니다. print (f "유효성 검사 손실 : {val_loss.item ()}") : 유효성 검사 손실 값을 인쇄합니다
            2. 요약 :
            3. 이 코드 스 니펫은 무작위로 생성 된 유효성 검사 데이터 세트의 변압기 모델을 평가하고 검증 손실을 계산하며 인쇄합니다. 실제 시나리오에서는 임의의 검증 데이터를 작업중인 작업의 실제 유효성 검사 데이터로 대체해야합니다. 유효성 검사 손실은 보이지 않는 데이터에서 모델이 얼마나 잘 수행되는지에 대한 표시를 제공 할 수 있습니다. 이는 모델의 일반화 능력의 중요한 척도입니다. 변압기 및 포옹 얼굴에 대한 자세한 내용은 변압기 및 포옹 얼굴 사용에 대한 소개 인 튜토리얼이 유용합니다. 결론 및 추가 자원 결론적으로,이 튜토리얼은 딥 러닝을위한 가장 다양한 도구 중 하나 인 Pytorch를 사용하여 변압기 모델을 구성하는 방법을 보여주었습니다. 병렬화 능력과 데이터에서 장기 종속성을 포착하는 능력으로 변압기는 다양한 필드, 특히 번역, 요약 및 감정 분석과 같은 NLP 작업에서 엄청난 잠재력을 가지고 있습니다. 고급 딥 러닝 개념과 기술에 대한 이해를 심화시키기 위해 Datacamp의 Keras와의 고급 딥 러닝 과정을 탐색하는 것을 고려하십시오. 별도의 튜토리얼에서 Pytorch와 함께 간단한 신경망을 구축하는 것에 대해 읽을 수도 있습니다.
          4. 최고 AI 인증을 받으
          5. ai.get 인증을 효과적이고 책임감있게 사용할 수 있음을 보여줍니다.

위 내용은 Pytorch로 변압기 모델 구축에 대한 포괄적 인 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.