TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 딥러닝, 신경망>

[딥러닝] RNN 자연어 처리: 어텐션 매커니즘, 트랜스포머

by 기록자_Recordian 2024. 12. 6.
728x90
반응형
이전 내용
 

[딥러닝] RNN을 사용한 자연어 처리: 신경망 기계 번역

이전 내용 [딥러닝] RNN을 사용한 자연어 처리: 감성분석이전 내용 [딥러닝] RNN을 사용한 자연어 처리이전 내용 [딥러닝] RNN & CNN(feat. 시카고 교통국 데이터셋) - 3이전 내용  [딥러닝] RNN & CNN(fea

puppy-foot-it.tistory.com


어텐션 매커니즘

 

어텐션 메커니즘은 RNN 또는 다른 시퀀스 모델에서 주로 사용되며, 긴 시퀀스를 처리할 때 중요한 요소를 선택적으로 집중하는 방법이다. 이는 모델이 모든 입력 정보를 동일하게 처리하지 않고, 특정 시점에 중요한 정보를 강조하여 더 나은 성능을 발휘할 수 있도록 한다.

어텐션 매커니즘은 훈련 가능한 메모리 검색 시스템으로, 이 시스템은 매우 강력하기 때문에 어텐션 매커니즘만을 사용하여 최첨단 모델을 구축할 수 있다.

 

- 어텐션 메커니즘의 주요 개념

  1. 가중치 계산: 각 입력 요소에 가중치를 부여하여 특정 시간 단계에서 중요한 입력을 더 강조한다.
  2. 가중합: 계산된 가중치를 바탕으로 입력 요소들의 가중 평균을 구한다.
  3. 컨텍스트 벡터: 가중합 결과를 바탕으로 해당 시간 단계에서의 최종 출력 컨텍스트 벡터를 생성한다.

- 어텐션 메커니즘의 주요 종류

1. Bahdanau 어텐션 (Additive Attention)

  • 소개: Bahdanau 어텐션은 처음으로 제안된 어텐션 메커니즘으로, Encoder-Decoder 구조 내에서 사용된다.
  • 특징: 입력 시퀀스의 각 시간 단계에 대해 가중치를 계산하며, 이를 바탕으로 컨텍스트 벡터를 생성한다. 가중치는 학습 가능한 파라미터로 구성된 뉴럴 네트워크를 통해 계산된다.
  • 장점: 시점 간의 상관관계를 유연하게 반영할 수 있다.

2. Luong 어텐션 (Multiplicative Attention)

  • 소개: Luong 어텐션은 Bahdanau 어텐션 이후 제안된 방식으로, 효율성을 개선한 메커니즘이다.
  • 특징: 입력 시퀀스와 디코더 출력 간의 점곱(dot product)를 통해 가중치를 계산한다. 이 점곱은 인코더와 디코더의 숨겨진 상태(hiddens states) 간의 유사도를 반영한다.
  • 장점: 계산이 비교적 단순하고 빠르며, 유사한 성능을 발휘할 수 있다.

3. Self-Attention (자체 어텐션)

  • 소개: 주로 Transformer 모델에서 사용되며, 입력 시퀀스 내의 정보들 간의 상호작용을 파악한다.
  • 특징: 입력 시퀀스의 각각의 위치가 다른 모든 위치와의 관계를 고려하여 가중치를 부여한다. 이로 인해 시퀀스 안의 모든 요소들이 상호작용하게 된다.
  • 장점: 병렬처리가 가능하므로, RNN 기반의 모델보다 더 빠르고 효율적이며, 멀리 떨어진 요소 간의 관계를 잘 파악할 수 있다.

4. 양방향 어텐션 (Bidirectional Attention)

  • 소개: 입력 시퀀스의 양방향 정보를 모두 사용한다. 이는 각각의 단어가 앞뒤 각 단어들과의 관계를 모두 고려할 수 있게 한다.
  • 특징: 단어의 양방향 숨겨진 상태를 모두 결합하여 어텐션을 수행한다.
  • 장점: 더 풍부한 컨텍스트 정보를 사용할 수 있어 모델의 성능을 향상시킬 수 있다.

5. Hierarchical Attention

  • 소개: 큰 텍스트 구조를 다루기 위해 계층적인 구조를 활용한다.
  • 특징: 문장 내에서 단어 간, 그리고 문장 간의 어텐션을 수행하여 컨텍스트 벡터를 생성한다.
  • 장점: 문서와 같은 큰 텍스트 구조에서 중요한 정보를 체계적으로 추출할 수 있다.

어텐션 메커니즘은 NLP뿐 아니라 이미지 처리와 같은 다른 도메인에서도 활발히 연구 및 활용되고 있다. 모델의 성능을 향상시키는 중요한 기법으로 자리잡고 있으며, 다양한 변형들이 연구되고 있다.


케라스에서 어텐션 매커니즘 구현

 

케라스는 루웅 어텐션을 위해 tf.kreas.layers.Attention 층을, 바흐다나우 어텐션을 위해 AdditiveAttention 층을 제공한다. 인코더-디코더 모델에 루웅 어텐션을 추가해본다.

인코더의 모든 출력을 Attention 층으로 전달해야 하므로 먼저 인코더를 생성할 때 return_sequences=True로 설정해야 한다.

tf.random.set_seed(42)
encoder = tf.keras.layers.Bidirectional(
    tf.keras.layers.LSTM(256, return_sequences=True, return_state=True))

 

모델의 이 부분은 이전과 완전히 동일하다.

encoder_outputs, *encoder_state = encoder(encoder_embeddings)
encoder_state = [tf.concat(encoder_state[::2], axis=-1),  # 단기 (0 & 2)
                 tf.concat(encoder_state[1::2], axis=-1)]  # 장기 (1 & 3)
decoder = tf.keras.layers.LSTM(512, return_sequences=True)
decoder_outputs = decoder(decoder_embeddings, initial_state=encoder_state)

 

그리고 어텐션 층을 생성하고 디코더의 상태와 인코더의 출력을 전달해야 한다.

각 스텝에서 디코더의 상태를 참조하려면 사용자 정의 메모리 셀을 작성해야 하는데, 간단하게 하기 위해 디코더의 상태 대신 출력을 사용한다. 그런 다음 어텐션 층의 출력을 출력 층으로 직접 전달한다.

attention_layer = tf.keras.layers.Attention()
attention_outputs = attention_layer([decoder_outputs, encoder_outputs])
output_layer = tf.keras.layers.Dense(vocab_size, activation='softmax')
Y_proba = output_layer(attention_outputs)

 

이제 모델을 컴파일하고 훈련 시킨 뒤, translate 함수를 출력해본다.

model = tf.keras.Model(inputs=[encoder_inputs, decoder_inputs],
                       outputs=[Y_proba])
model.compile(loss="sparse_categorical_crossentropy", optimizer="nadam",
              metrics=["accuracy"])
model.fit((X_train, X_train_dec), Y_train, epochs=10,
          validation_data=((X_valid, X_valid_dec), Y_valid))

print(translate('Thank you so much, my friend'))
print(translate('I like soccer and also going to the mountain'))

 

이 모델에서 어텐션 층의 역할은 쿼리와 딕셔너리에 있는 각 키 사이의 유사도를 계산한 뒤, 소프트맥스 함수를 사용하여 이러한 유사도 점수를 가중치로 변환하여 모두 더했을 때 1이 되도록 만든다.

이것이 케라스의 Attention과 AdditiveAttention 층이 쿼리, 키 및 값에 해당하는 두 개 또는 세 개의 항목을 담은 리스트를 입력으로 기대하는 이유이며, 값을 전달하지 않으면 자동으로 키를 값으로 사용한다.

따라서 위 코드에서는 디코더 출력은 쿼리이고 인코더 출력은 키와 값이며, 각 디코더 출력(각 쿼리)에 대해 어텐션 층은 디코더 출력과 가장 유사한 인코더 출력(키/값)의 가중치 합을 반환한다.

beam_search("I like soccer and also going to the mountain", beam_width=3,
            verbose=True)

 


트랜스포머 구조

 

2017년의 한 논문애서 구글 연구 팀은 트랜스포머라는 구조를 만들었는데, 이 구조는 순환 층이나 합성곱 층을 전혀 사용하지 않고 임베딩 층, 밀집 층, 정규화 층, 몇 가지 다른 구성 요소와 어텐션 매커니즘만 사용하여 NMT 분야의 최신 기술을 크게 향상시켰다. 또한, 이 모델은 순환하지 않기 때문에 RNN처럼 그레이디언트 소실이나 폭주 문제가 발생하지 않으며, 더 적은 단계로 학습할 수 있고, 여러 GPU에 걸쳐 병렬화하기 쉬우며, RNN보다 장기 패턴을 더 잘 포착할 수 있다.

NMT에 트랜스포머를 사용한다면 훈련할 때 영어 문장을 인코더에 주입하고 이에 해당하는 스페인어 번역을 디코더에 공급해야 한다. 또한 스페인어 각 문장의 시작 부분에 추가적인 SOS 토큰을 삽입해야 한다. 추론 시에는 트랜스포머를 여러 번 호출하여 한 번에 한 단어씩 번역을 생성하고 매번 부분 번역을 디코더에 공급해야 한다.

인코더의 역할은 각 단어의 표현이 문맥 안에서 단어의 의미를 완벽하게 포착할 때까지 입력 (여기서는 영어 문장의 단어 표현)을 점진적으로 변환하는 것이다.

디코더의 역할은 번역된 문장의 각 단어 표현을 다음 번역 단어의 표현으로 점진적으로 변환하는 것이다.

디코더를 통과한 후 각 단어 표현은 소프트맥스 활성화 함수를 가진 마지막 Dense 층을 거치고, 이를 통해 올바른 다음 단어에 대해 높은 확률을, 다른 모든 단어에 대해 낮은 확률을 출력하길 기대한다.

 

◆ 인코더의 멀티 헤드 어텐션 층

이 층은 같은 문장에 있는 다른 모든 단어에 주의를 기울여 각 단어 표현을 업데이트한다. 이를 통해 단어의 모호한 표현이 더 풍부하고 정확한 표현으로 바뀌면서 주어진 문장에서 정확한 의미를 포착할 수 있다.

멀티 헤드 어텐션 층의 작동 방식을 이해하려면 스케일드 점곱 어텐션 층을 이해해야 하는데, 스케일링 인자만 제외하면 루옹 어텐션과 같다. 스케일링 인자는 소프트맥스 함수가 포화되어 그레이디언트가 너무 작아지지 않도록 유사도 점수를 낮춘다.

tf.keras.layers.Attention 층을 만들 때 use_scale=True로 지정하면 유사도 점수의 스케일을 적절히 낮추는 방법을 배울 수 있는 추가 파라미터가 생성된다.

 

 

◆ 디코더의 마스크드 멀티 헤드 어텐션 층

이 층도 인코더의 멀티 헤드 어텐션 층과 동일한 작업을 수행한다. 그러나 한 단어를 처리할 때 그 뒤에 있는 단어에는 관심을 기울이지 않는 인과적 층이다.

소프트맥스 함수를 계산하기 전에 유사도 점수에 아주 큰 음수를 더해 일부 키/값 쌍을 제외하도록 마스킹처리할 수 있다.

 

◆ 크로스 어텐션 층

디코더의 위쪽에 있는 멀티 헤드 어텐션 층은 디코더가 영어 문장의 단어에 주위를 기울이는 곳으로, 이를 셀프 어텐션이 아닌 크로스 어텐션이라고 한다.

 

◆ 위치 인코딩

위치 인코딩은 문장에서 각 단어의 위치를 나타내는 단어 임베딩과 매우 비슷한 밀집 벡터이다. n번째 위치 인코딩이 각 문장에 있는 n번째 단어의 단어 임베딩에 더해지는데, 이는 트랜스포머 구조에 있는 모든 층이 단어 위치를 무시하기 때문이다. 위치 인코딩이 없으면 입력 시퀀스를 섞을 수 있고 출력 시퀀스도 같은 방식으로 섞을 수 있게 된다. 단어의 순서가 중요하므로 트랜스포머에 위치 정보를 제공해야 하는데, 이때 단어 표현에 위치 인코딩을 추가하는 방식이 좋은 방식이 될 수 있다.

이를 구현하는 쉬운 방법은 Embedding 층을 사용하여 0부터 배치에 있는 최대 시퀀스 길이까지 모든 위치를 인코딩한 다음 그 결과를 단어 임베딩에 추가하는 것이다. 브로드캐스팅 규칙을 사용하면 모든 입력 시퀀스에 위치 인코딩이 적용된다.

브로드캐스팅 규칙
브로드캐스팅은 작은 배열을 큰 배열의 크기에 맞춰 확장하여 연산을 수행한다. 이는 반복문을 사용하지 않고도 효율적으로 연산을 수행할 수 있게 한다.

- 브로드캐스팅은 다음의 규칙을 따른다:
√두 배열의 차원이 다르면, 더 작은 배열의 앞쪽에 1인 차원을 추가하여 동일한 차원으로 맞춘다.
두 배열의 차원에서 크기가 다르면, 크기가 1인 차원은 다른 배열의 크기와 일치하도록 확장된다.

두 배열의 차원이 모두 일치하지 않으면 오류가 발생한다.

 

max_length = 50  # 전체 훈련 세트에 있는 최대 길이
embed_size = 128
tf.random.set_seed(42)
pos_embed_layer = tf.keras.layers.Embedding(max_length, embed_size)
batch_max_len_enc = tf.shape(encoder_embeddings)[1]
encoder_in = encoder_embeddings + pos_embed_layer(tf.range(batch_max_len_enc))
batch_max_len_dec = tf.shape(decoder_embeddings)[1]
decoder_in = decoder_embeddings + pos_embed_layer(tf.range(batch_max_len_dec))

▶ 이 구현은 임베딩이 래그드 텐서가 아닌 일반 텐서로 표현된다고 가정한다. 인코더와 디코더는 임베딩 크기가 동일하기 때문에 위치 인코딩을 하나의 Embedding 층을 공유한다.

 

텐서플로에는 PositionalEmbedding 과 같은 층이 없지만 생성자에서 위치 인코딩 행렬을 미리 계산한 다음, call() 메서드에서 이 인코딩 행렬을 입력의 최대 길이로 잘라 입력에 더한다. 그리고 입력 마스크를 다음 층으로 전파하기 위해 supports_masking=True로 지정한다.

class PositionalEncoding(tf.keras.layers.Layer):
    def __init__(self, max_length, embed_size, dtype=tf.float32, **kwargs):
        super().__init__(dtype=dtype, **kwargs)
        assert embed_size % 2 == 0, "embed_size must be even"
        p, i = np.meshgrid(np.arange(max_length),
                           2 * np.arange(embed_size // 2))
        pos_emb = np.empty((1, max_length, embed_size))
        pos_emb[0, :, ::2] = np.sin(p / 10_000 ** (i / embed_size)).T
        pos_emb[0, :, 1::2] = np.cos(p / 10_000 ** (i / embed_size)).T
        self.pos_encodings = tf.constant(pos_emb.astype(self.dtype))
        self.supports_masking = True

    def call(self, inputs):
        batch_max_length = tf.shape(inputs)[1]
        return inputs + self.pos_encodings[:, :batch_max_length]

 

이 층을 사용해 인코더의 입력에 위치 인코딩을 추가한다.

pos_embed_layer = PositionalEncoding(max_length, embed_size)
encoder_in = pos_embed_layer(encoder_embeddings)
decoder_in = pos_embed_layer(decoder_embeddings)

 

케라스에서 tf.keras.layers.MultiHeadAttention 층을 제공하므로 트랜스포머의 나머지를 구축하기 위해 필요한 모든 것이 준비되었다.

완전한 인코더를 만들어본다.

N = 2 # N은 6 대신 2
num_heads = 8
dropout_rate=0.1
n_units = 128 # 피드포워드 블록의 첫 번째 밀집 층
encoder_pad_mask = tf.math.not_equal(encoder_input_ids, 0)[:, tf.newaxis]
Z = encoder_in
for _ in range(N):
    skip = Z
    attn_layer = tf.keras.layers.MultiHeadAttention(
        num_heads=num_heads, key_dim=embed_size, dropout=dropout_rate)
    Z = attn_layer(Z, value=Z, attention_mask=encoder_pad_mask)
    Z = tf.keras.layers.LayerNormalization()(tf.keras.layers.Add()([Z, skip]))
    skip = Z
    Z = tf.keras.layers.Dense(n_units, activation='relu')(Z)
    Z = tf.keras.layers.Dense(embed_size)(Z)
    Z = tf.keras.layers.Dropout(dropout_rate)(Z)
    Z = tf.keras.layers.LayerNormalization()(tf.keras.layers.Add()([Z, skip]))

 

그다음 디코더를 만들어보는데, 여기서도 마스킹만 까다롭기 때문에 마스크부터 만든다.

첫 번째 멀티 헤드 어텐션 층은 인코더처럼 셀프 어텐션 층이다. 하지만 마스크드 멀티 헤드 어텐션 층이므로 미래의 모든 토큰을 무시해야 한다. 따라서 패딩 마스크와 코잘 마스크 두 개가 필요하다.

패딩 마스크는 인코더에서 만든 것과 똑같지만 디코더의 입력을 기반으로 한다.

코잘 마스크는 tf.linalg.band_part() 함수를 사용하여 만든다. 이 함수는 텐서를 받아 주대각선에서 지정한 값만큼 평행하게 덜어져 있는 모든 값을 0으로 바꾼 복사본을 반환한다. 이러한 매개변수를 사용하면 왼쪽 아래 삼각형에 있는 원소가 1이고, 오른쪽 위 삼각형에 있는 원소가 0인 배치에 있는 입력 시퀀스의 최대 길이(batch_max_len_dec)크기의 정방행렬을 얻을 수 있다.

decoder_pad_mask = tf.math.not_equal(decoder_input_ids, 0)[:, tf.newaxis]
causal_mask = tf.linalg.band_part(  # 하삼각행렬을 생성
    tf.ones((batch_max_len_dec, batch_max_len_dec), tf.bool), -1, 0)

 

마스크를 만들었으니, 디코더를 만든다.

첫 번째 어텐션 층을 위해 causal_mask & decoder_pad_mask 를 사용하여 패딩 토큰과 미래 토큰을 모두 마스킹한다.

두 번째 어텐션 층은 인코더의 최종 출력을 값으로 사용하기 때문에 decoder_pad_mask가 아니라 encoder_pad_mask를 사용한다는 점만 주의한다.

encoder_outputs = Z # 인코더의 최종 출력 저장
Z = decoder_in # 디코더 입력
for _ in range(N):
    skip = Z
    attn_layer = tf.keras.layers.MultiHeadAttention(
        num_heads=num_heads, key_dim=embed_size, dropout=dropout_rate)
    Z = attn_layer(Z, value=Z, attention_mask=causal_mask & decoder_pad_mask)
    Z = tf.keras.layers.LayerNormalization()(tf.keras.layers.Add()([Z, skip]))
    skip = Z
    attn_layer = tf.keras.layers.MultiHeadAttention(
        num_heads=num_heads, key_dim=embed_size, dropout=dropout_rate)
    Z = attn_layer(Z, value=encoder_outputs, attention_mask=encoder_pad_mask)
    Z = tf.keras.layers.LayerNormalization()(tf.keras.layers.Add()([Z, skip]))
    skip = Z
    Z = tf.keras.layers.Dense(n_units, activation='relu')(Z)
    Z = tf.keras.layers.Dense(embed_size)(Z)
    Z = tf.keras.layers.LayerNormalization()(tf.keras.layers.Add()([Z, skip]))

이제 최종 출력 층을 추가하고, 모델을 만들고, 컴파일하고 훈련한다.

Y_proba = tf.keras.layers.Dense(vocab_size, activation='softmax')(Z)
model = tf.keras.Model(inputs=[encoder_inputs, decoder_inputs],
                      outputs=[Y_proba])
model.compile(loss='sparse_categorical_crossentropy', optimizer='nadam',
             metrics=['accuracy'])
model.fit((X_train, X_train_dec), Y_train, epochs=10,
         validation_data=((X_valid, X_valid_dec), Y_valid))


비주얼 트랜스포머

 

◆ 구글 - 비전 트랜스포머 (Vision Transformer, ViT)

개요:

  • 발표: Google Research, 2020년

구조:

  • ViT는 이미지를 작은 패치(patch)들로 나눕니다. 일반적으로 16x16 픽셀 크기로 나뉜다.
  • 각 패치를 일련의 벡터로 변환한 후, 위치 임베딩과 함께 입력으로 사용한다.
  • 패치 벡터들은 트랜스포머 인코더 계층에 입력되어 처리된다.
  • 이를 통해 이미지의 전체 구조를 학습하며, 최종적으로 이미지를 분류한다.

특징:

  • 입력: 이미지는 각 패치가 시퀀스의 토큰처럼 사용된다. 예를 들어 224x224 크기의 이미지는 16x16 패치로 나누면 총 196개의 패치(토큰)가 생성된다.
  • 플랫닝과 임베딩: 각 패치는 플랫닝(flatten)되고, 선형 투영을 통해 임베딩 벡터로 변환된다.
  • 위치 임베딩: 패치들이 순서정보를 잃지 않도록 하기 위해 위치 임베딩을 추가한다.
  • 트랜스포머 인코더: 각 패치 벡터는 다중 헤드 셀프 어텐션(Multi-head Self Attention)과 피드 포워드(Fully Connected) 네트워크를 통해 처리된다.

장점:

  • 대규모 데이터셋에서 뛰어난 성능을 보인다.
  • CNN에 비해 구조가 더 단순하고, 병렬처리가 용이하다.

논문: "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale"
논문 링크

 

메타 - 데이터 효율적인 이미지 트랜스포머 (Data-efficient Image Transformer, DeiT)

개요:

  • 발표: Meta AI (Facebook AI Research), 2021년

구조:

  • DeiT는 ViT의 구조를 기반으로 하지만, 데이터 효율성을 높이기 위해 지식 증류(Knowledge Distillation)를 사용한다.
  • 지식 증류를 통해 학생 모델이 교사 모델로부터 학습하는 방식이다.

특징:

  • 작은 데이터셋에서도 높은 성능을 발휘할 수 있도록 설계되었다.
  • 교사 모델: CNN과 같은 기존의 강력한 모델을 교사 모델로 사용하여 학생 모델(DeiT)을 훈련한다.
  • 학생 모델: 임베딩 계층, 트랜스포머 인코더, 내적 모듈 등의 구조를 사용한다.

장점:

  • 작은 규모의 데이터셋에서도 효율적으로 학습할 수 있다.
  • 다양한 이미지 변형(enhancement)에도 강력한 성능을 유지한다.

논문: "Training data-efficient image transformers & distillation through attention"
논문 링크

 

딥마인드 - 퍼시비어 (Perceiver)

개요:

  • 발표: DeepMind, 2021년

구조:

  • Perceiver는 멀티모달 데이터를 처리할 수 있는 범용 모델이다.
  • 입력으로 들어오는 다양한 데이터(이미지, 텍스트, 비디오 등)를 처리하기 위해 정적 형태의 입력 조절이 필요 없다.

특징:

  • 데이터의 다양한 형태를 통합하고 처리할 수 있다.
  • 각 데이터 유형을 특정한 토큰으로 변환하여 사용한다.
  • 트랜스포머 인코더와 디코더를 통해 입력 데이터를 우선 처리하고, 컨텍스트 토큰으로 결합하여 최종 출력을 생성한다.

장점:

  • 다양한 형태의 데이터(멀티모달 데이터)를 통합적으로 처리할 수 있는 능력을 갖추고 있다.
  • 데이터 유형에 관계 없이 일관된 처리 방식을 제공한다.

논문: "Perceiver: General Perception with Iterative Attention"
논문 링크

 

마틸드 카론 - DINO (Self-Distillation with No Labels)

개요:

  • 발표: Mathilde Caron et al., 2021년

구조:

  • DINO는 레이블 없는 자가 증류(self-distillation)를 통해 지식 전달을 수행한다.
  • 학습 과정에서 각 이미지에 대한 무라벨 표현을 생성하고, 이를 바탕으로 자기 지식을 증류한다.

특징:

  • 두 네트워크: 교사와 학생 네트워크 없이 학습 데이터를 바탕으로 효과적으로 학습한다.
  • 지식 증류: 레이블 없는 학습을 통해 모델의 표현력을 강화한다.

장점:

  • 레이블 없이 강력한 표현 학습을 할 수 있다.
  • 자율 학습 기반으로 데이터 라벨링 비용을 줄일 수 있다.

논문: "Emerging Properties in Self-Supervised Vision Transformers"
논문 링크

 

딥마인드 - 플라밍고 (Flamingo)

개요:

  • 발표: DeepMind, 2022년

구조:

  • Flamingo는 텍스트와 이미지를 통합적으로 처리할 수 있는 멀티모달 모델이다.
  • 이미지-텍스트 통합을 통해 다양한 AI 응용 분야에서 활용 가능한 모델을 개발한다.

특징:

  • 멀티모달 트랜스포머: 이미지와 텍스트를 동시에 입력으로 받아 처리한다.
  • 텍스트와 이미지의 통합: 이미지와 텍스트 정보를 결합하여 컨텍스트를 이해하고 생성할 수 있다.

장점:

  • 이미지-텍스트 기반 작업에서 높은 성능을 발휘한다.
  • 다양한 멀티모달 데이터셋에 적용 가능하다.

딥마인드 - GATO

개요:

  • 발표: DeepMind, 2022년

구조:

  • GATO는 단일 모델로 다양한 작업을 해결할 수 있는 범용 AI 모델이다.
  • 텍스트, 이미지, 행동 정책 등 다양한 형태의 데이터를 처리할 수 있는 멀티모달 트랜스포머 구조를 사용한다.

특징:

  • 범용 모델: 여러 작업을 처리할 수 있는 능력을 갖추고 있다.
  • 멀티모달 데이터 처리: 다양한 형태의 데이터를 동시에 처리한다.

장점:

  • 다수의 서로 다른 작업을 일관된 성능으로 처리할 수 있다.
  • 예를 들어, 이미지 분류, 텍스트 생성, 로봇 제어 등 다양한 작업에 적용 가능하다.

허깅 페이스의 트랜스포머스 라이브러리

 

허깅페이스(Hugging Face)는 자연어 처리(NLP)와 머신러닝(ML) 커뮤니티에서 가장 혁신적이고 중요한 플랫폼 중 하나로 자리 잡고 있다. 허깅페이스는 주로 Transformer 모델을 중심으로 한 오픈 소스 라이브러리와 도구를 제공하며, 연구자, 개발자, 기업이 쉽게 AI 모델을 구축하고 배포할 수 있도록 돕는다.

 

허깅페이스는 미국의 인공지능 스타트업이며, 트랜스포머나 데이터셋 같은 머신러닝 프레임워크를 제공하는 세계 최대의 인공지능 플랫폼 중 하나이다.

 

개발자는 여기에 공개된 머신러닝 레퍼런스를 통해 최신 모델을 스스로 구축할 수 있다. 트랜스포머 모델을 만들 때 코드를 작성할 필요없이 여기서 트랜스포머 라이브러리를 가져오기만 하면 되기 때문에 앱 구축 과정에서 상당히 유용하다. 최신 모델을 업데이트할 뿐만 아니라, 지속적인 리뷰를 통해 완성도 높은 모델을 받을 수 있다. 특히 배포->리뷰->수정 단계를 거치도록 형성하는 오픈 소스 커뮤니티라는 장점을 갖고 있다.

 

[AI 플랫폼] 허깅페이스: AI와 머신러닝의 새로운 지평

허깅페이스란? 허깅페이스(Hugging Face)는 자연어 처리(NLP)와 머신러닝(ML) 커뮤니티에서 가장 혁신적이고 중요한 플랫폼 중 하나로 자리 잡고 있다. 허깅페이스는 주로 Transformer 모델을 중심으로

puppy-foot-it.tistory.com


다음 내용

 

[딥러닝] 비지도 학습: 오토인코더, GAN, 확산 모델

이전 내용 주피터노트북에서 tensorflow GPU 사용하기 [문제 해결] 주피터노트북에 GPU 연결하기GPU vs CPU출처: 챗GPT ◆ CPU (Central Processing Unit) - 특징 CPU는 범용 프로세서로, 다양한 작업을 처리하는

puppy-foot-it.tistory.com


[출처]

핸즈 온 머신러닝

인투 더 파이썬(INTO THE PYTHON), 기초부터 AI까지

728x90
반응형