Main Content

layerNormalizationLayer

계층 정규화 계층

R2021a 이후

    설명

    계층 정규화 계층은 각 관측값에 대해 모든 채널에서 데이터의 미니 배치를 독립적으로 정규화합니다. 순환 다층 퍼셉트론 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 학습 가능한 계층(예: LSTM 및 완전 연결 계층) 다음에 계층 정규화 계층을 사용하십시오.

    정규화 후 이 계층은 입력값을 학습 가능한 스케일링 인자 γ만큼 스케일링하고 학습 가능한 오프셋 β만큼 이동합니다.

    생성

    설명

    layer = layerNormalizationLayer는 계층 정규화 계층을 만듭니다.

    예제

    layer = layerNormalizationLayer(Name,Value)는 하나 이상의 이름-값 인수를 사용하여 선택적으로 Epsilon, 파라미터 및 초기화, 학습률 및 정규화, Name 속성을 설정합니다. 예를 들어, layerNormalizationLayer('Name','layernorm')은 이름이 'layernorm'인 계층 정규화 계층을 만듭니다.

    속성

    모두 확장

    계층 정규화

    미니 배치 분산에 더할 상수로, 양의 스칼라로 지정됩니다.

    소프트웨어는 수치적 안정성을 보장하고 0으로 나누기를 방지하기 위해 정규화 전에 미니 배치 분산에 이 상수를 더합니다.

    R2023a 이전: Epsilon1e-5보다 크거나 같아야 합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    읽기 전용 속성입니다.

    입력 채널의 개수로, 다음 중 하나로 지정됩니다.

    • 'auto' — 훈련 시점에 자동으로 입력 채널의 개수가 결정됩니다.

    • 양의 정수 — 지정된 입력 채널의 개수에 맞게 계층을 구성합니다. NumChannels와 계층 입력 데이터의 채널 개수는 일치해야 합니다. 예를 들어, 입력값이 RGB 영상이면 NumChannels는 3이어야 합니다. 입력값이 16개의 필터가 있는 컨벌루션 계층의 출력값이면 NumChannels는 16이어야 합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

    R2023a 이후

    정규화를 수행할 차원으로, 다음 값 중 하나로 지정됩니다.

    • "auto" — 특징, 시퀀스, 1차원 영상 또는 시공간 입력값의 경우 채널 차원에 대해 정규화합니다. 그 외의 경우에는 공간 차원과 채널 차원에 대해 정규화합니다.

    • "channel-only" — 채널 차원에 대해 정규화합니다.

    • "spatial-channel" — 공간 차원과 채널 차원에 대해 정규화합니다.

    • "batch-excluded" — 배치 차원을 제외한 모든 차원에 대해 정규화합니다.

    파라미터 및 초기화

    채널 스케일링 인자를 초기화하는 함수로, 다음 중 하나로 지정됩니다.

    • 'ones' – 채널 스케일링 인자를 1로 초기화합니다.

    • 'zeros' – 채널 스케일링 인자를 0으로 초기화합니다.

    • 'narrow-normal' – 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 채널 스케일링 인자를 초기화합니다.

    • 함수 핸들 – 사용자 지정 함수를 사용하여 채널 스케일링 인자를 초기화합니다. 함수 핸들을 지정할 경우, 함수는 scale = func(sz) 형식이 되어야 합니다. 여기서 sz는 스케일링의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.

    계층은 Scale 속성이 비어 있는 경우에만 채널 스케일링 인자를 초기화합니다.

    데이터형: char | string | function_handle

    채널 오프셋을 초기화하는 함수로, 다음 중 하나로 지정됩니다.

    • 'zeros' – 채널 오프셋을 0으로 초기화합니다.

    • 'ones' – 채널 오프셋을 1로 초기화합니다.

    • 'narrow-normal' – 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 채널 오프셋을 초기화합니다.

    • 함수 핸들 – 사용자 지정 함수를 사용하여 채널 오프셋을 초기화합니다. 함수 핸들을 지정할 경우, 함수는 offset = func(sz) 형식이 되어야 합니다. 여기서 sz는 스케일링의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.

    계층은 Offset 속성이 비어 있는 경우에만 채널 오프셋을 초기화합니다.

    데이터형: char | string | function_handle

    채널 스케일링 인자 γ로, 숫자형 배열로 지정됩니다.

    채널 스케일링 인자는 학습 가능한 파라미터입니다. trainnet 함수를 사용하여 신경망을 훈련시키거나 dlnetwork 객체를 초기화할 때 Scale이 비어 있지 않으면 Scale 속성이 초기값으로 사용됩니다. Scale이 비어 있으면 ScaleInitializer로 지정된 이니셜라이저가 사용됩니다.

    계층 입력값 유형에 따라 trainnetdlnetwork 함수는 자동으로 이 속성의 형태를 변경하여 다음과 같은 크기를 갖게 됩니다.

    계층 입력값속성 크기
    특징 입력값NumChannels×1
    벡터 시퀀스 입력값

    1차원 영상 입력값 (R2023a 이후)

    NumChannels

    1차원 영상 시퀀스 입력값 (R2023a 이후)

    2차원 영상 입력값1×1×NumChannels
    2차원 영상 시퀀스 입력값
    3차원 영상 입력값1×1×1×NumChannels
    3차원 영상 시퀀스 입력값

    데이터형: single | double

    채널 오프셋 β로, 숫자형 벡터로 지정됩니다.

    채널 오프셋은 학습 가능한 파라미터입니다. trainnet 함수를 사용하여 신경망을 훈련시키거나 dlnetwork 객체를 초기화할 때 Offset이 비어 있지 않으면 Offset 속성이 초기값으로 사용됩니다. Offset이 비어 있으면 OffsetInitializer로 지정된 이니셜라이저가 사용됩니다.

    계층 입력값 유형에 따라 trainnetdlnetwork 함수는 자동으로 이 속성의 형태를 변경하여 다음과 같은 크기를 갖게 됩니다.

    계층 입력값속성 크기
    특징 입력값NumChannels×1
    벡터 시퀀스 입력값

    1차원 영상 입력값 (R2023a 이후)

    NumChannels

    1차원 영상 시퀀스 입력값 (R2023a 이후)

    2차원 영상 입력값1×1×NumChannels
    2차원 영상 시퀀스 입력값
    3차원 영상 입력값1×1×1×NumChannels
    3차원 영상 시퀀스 입력값

    데이터형: single | double

    학습률 및 정규화

    스케일링 인자에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 학습률을 곱하여 계층의 스케일링 인자에 대한 학습률이 결정됩니다. 예를 들어, ScaleLearnRateFactor2인 경우, 이 계층의 스케일링 인자에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    오프셋에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 학습률을 곱하여 계층의 오프셋에 대한 학습률이 결정됩니다. 예를 들어, OffsetLearnRateFactor2인 경우, 이 계층의 오프셋에 대한 학습률은 현재 전역 학습률의 2배입니다. 소프트웨어는 trainingOptions 함수로 지정된 설정을 기준으로 전역 학습률을 결정합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    스케일링 인자에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 L2 정규화 인자를 곱하여 계층의 스케일링 인자에 대한 학습률이 결정됩니다. 예를 들어, ScaleL2Factor2인 경우, 이 계층의 오프셋에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    오프셋에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 L2 정규화 인자를 곱하여 계층의 오프셋에 대한 학습률이 결정됩니다. 예를 들어, OffsetL2Factor2인 경우, 이 계층의 오프셋에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    계층

    계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. Layer 배열 입력값에 대해 trainnetdlnetwork 함수는 이름이 ""인 계층에 자동으로 이름을 할당합니다.

    LayerNormalizationLayer 객체는 이 속성을 문자형 벡터로 저장합니다.

    데이터형: char | string

    읽기 전용 속성입니다.

    계층에 대한 입력값의 개수로, 1로 반환됩니다. 이 계층은 단일 입력값만 받습니다.

    데이터형: double

    읽기 전용 속성입니다.

    입력값 이름으로, {'in'}으로 반환됩니다. 이 계층은 단일 입력값만 받습니다.

    데이터형: cell

    읽기 전용 속성입니다.

    계층의 출력값 개수로, 1로 반환됩니다. 이 계층은 단일 출력값만 가집니다.

    데이터형: double

    읽기 전용 속성입니다.

    출력값 이름으로, {'out'}으로 반환됩니다. 이 계층은 단일 출력값만 가집니다.

    데이터형: cell

    예제

    모두 축소

    이름이 'layernorm'인 계층 정규화 계층을 만듭니다.

    layer = layerNormalizationLayer('Name','layernorm')
    layer = 
      LayerNormalizationLayer with properties:
    
                      Name: 'layernorm'
               NumChannels: 'auto'
    
       Hyperparameters
                   Epsilon: 1.0000e-05
        OperationDimension: 'auto'
    
       Learnable Parameters
                    Offset: []
                     Scale: []
    
    Use properties method to see a list of all properties.
    
    

    Layer 배열에 계층 정규화 계층을 포함시킵니다.

    layers = [
        imageInputLayer([32 32 3]) 
        convolution2dLayer(3,16,'Padding',1)
        layerNormalizationLayer
        reluLayer   
        maxPooling2dLayer(2,'Stride',2)
        convolution2dLayer(3,32,'Padding',1)
        layerNormalizationLayer
        reluLayer
        fullyConnectedLayer(10)
        softmaxLayer]
    layers = 
      10x1 Layer array with layers:
    
         1   ''   Image Input           32x32x3 images with 'zerocenter' normalization
         2   ''   2-D Convolution       16 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
         3   ''   Layer Normalization   Layer normalization
         4   ''   ReLU                  ReLU
         5   ''   2-D Max Pooling       2x2 max pooling with stride [2  2] and padding [0  0  0  0]
         6   ''   2-D Convolution       32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
         7   ''   Layer Normalization   Layer normalization
         8   ''   ReLU                  ReLU
         9   ''   Fully Connected       10 fully connected layer
        10   ''   Softmax               softmax
    

    알고리즘

    모두 확장

    참고 문헌

    [1] Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. “Layer Normalization.” Preprint, submitted July 21, 2016. https://arxiv.org/abs/1607.06450.

    확장 기능

    C/C++ 코드 생성
    MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

    GPU 코드 생성
    GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

    버전 내역

    R2021a에 개발됨

    모두 확장