μ©μ΄μ§(Glossary)
μ΄ μ©μ΄μ§μ μ λ°μ μΈ λ¨Έμ λ¬λ λ° π€ Transformers κ΄λ ¨ μ©μ΄λ₯Ό μ μνμ¬ λ¬Έμλ₯Ό λ μ μ΄ν΄νλ λ° λμμ μ€λλ€.
A
μ΄ν μ λ§μ€ν¬ (attention mask)
μ΄ν μ λ§μ€ν¬(attention mask)λ μ¬λ¬ μνμ€λ₯Ό λ°°μΉ(batch)λ‘ μ²λ¦¬ν λ μ¬μ©λλ μ νμ μΈμμ λλ€.
μ΄ μΈμλ λͺ¨λΈμκ² μ΄λ€ ν ν°μ μ£Όμλ₯Ό κΈ°μΈμ¬μΌ νλμ§, κ·Έλ¦¬κ³ μ΄λ€ ν ν°μ 무μν΄μΌ νλμ§λ₯Ό μλ €μ€λλ€.
μλ₯Ό λ€μ΄, λ€μ λ κ°μ μνμ€κ° μλ€κ³ κ°μ ν΄ λ΄ μλ€:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence_a = "This is a short sequence."
>>> sequence_b = "This is a rather long sequence. It is at least longer than the sequence A."
>>> encoded_sequence_a = tokenizer(sequence_a)["input_ids"]
>>> encoded_sequence_b = tokenizer(sequence_b)["input_ids"]
μΈμ½λ©λ λ²μ λ€μ κΈΈμ΄κ° λ€λ¦ λλ€:
>>> len(encoded_sequence_a), len(encoded_sequence_b)
(8, 19)
λ°λΌμ μ΄ λ μνμ€λ₯Ό κ·Έλλ‘ νλμ ν μμ λ£μ μλ μμ΅λλ€. 첫 λ²μ§Έ μνμ€λ₯Ό λ λ²μ§Έ κΈΈμ΄μ λ§μΆ° ν¨λ© νκ±°λ, λ°λλ‘ λ λ²μ§Έ μνμ€λ₯Ό 첫 λ²μ§Έ κΈΈμ΄μ λ§μΆ° μλΌλ΄μΌ ν©λλ€.
첫 λ²μ§Έ κ²½μ°μλ ID λͺ©λ‘μ΄ ν¨λ© μΈλ±μ€λ‘ νμ₯λ©λλ€. μ΄λ κ² ν¨λ©μ μ μ©νλ €λ©΄ ν ν¬λμ΄μ μ 리μ€νΈλ₯Ό μ λ¬νκ³ λ€μκ³Ό κ°μ΄ μμ²ν μ μμ΅λλ€:
>>> padded_sequences = tokenizer([sequence_a, sequence_b], padding=True)
첫 λ²μ§Έ λ¬Έμ₯ μ€λ₯Έμͺ½μ 0μ΄ μΆκ°λμ΄ λ λ²μ§Έ λ¬Έμ₯κ³Ό κΈΈμ΄κ° κ°μμ§ κ²μ λ³Ό μ μμ΅λλ€:
>>> padded_sequences["input_ids"]
[[101, 1188, 1110, 170, 1603, 4954, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [101, 1188, 1110, 170, 1897, 1263, 4954, 119, 1135, 1110, 1120, 1655, 2039, 1190, 1103, 4954, 138, 119, 102]]
μ΄κ²μ PyTorchλ TensorFlowμ ν
μλ‘ λ³νλ μ μμ΅λλ€. μ΄ν
μ
λ§μ€ν¬λ λͺ¨λΈμ΄ ν¨λ© λ μΈλ±μ€λ₯Ό μ°Έμ‘°νμ§ μλλ‘ ν΄λΉ μμΉλ₯Ό λνλ΄λ μ΄μ§ ν
μμ
λλ€. [BertTokenizer]μ κ²½μ°, 1μ μ΄ν
μ
μ΄ νμν κ°μ λνλ΄κ³ , 0μ ν¨λ© λ κ°μ λνλ
λλ€. μ΄ μ΄ν
μ
λ§μ€ν¬λ ν ν¬λμ΄μ κ° λ°νλλ λμ
λ리μ "attention_mask" ν€ μλμ ν¬ν¨λμ΄ μμ΅λλ€:
>>> padded_sequences["attention_mask"]
[[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
μ€ν μΈμ½λ© λͺ¨λΈ (autoencoding models)
μΈμ½λ λͺ¨λΈκ³Ό λ§μ€νΉλ μΈμ΄ λͺ¨λΈλ§μ μ°Έκ³ νμΈμ.
μκΈ°νκ· λͺ¨λΈ (autoregressive models)
μΈκ³Όμ μΈμ΄ λͺ¨λΈλ§κ³Ό λμ½λ λͺ¨λΈμ μ°Έκ³ νμΈμ.
B
λ°±λ³Έ (backbone)
λ°±λ³Έ(backbone)μ μμ(hidden) μλ μν(hidden state) λλ νΉμ§(feature)μ μΆλ ₯νλ λ€νΈμν¬(μλ² λ©κ³Ό λ μ΄μ΄)μ
λλ€. μΌλ°μ μΌλ‘ μ΄ λ°±λ³Έμ ν΄λΉ νΉμ§μ μ
λ ₯μΌλ‘ λ°μ μμΈ‘μ μννλ ν€λμ μ°κ²°λ©λλ€. μλ₯Ό λ€μ΄, [ViTModel]μ νΉμ ν€λκ° μλ λ°±λ³Έμ
λλ€. λ€λ₯Έ λͺ¨λΈλ€λ[VitModel]μ λ°±λ³ΈμΌλ‘ μ¬μ©ν μ μμΌλ©°, DPTλ±μ΄ κ·Έ μμμ
λλ€.
C
μΈκ³Όμ μΈμ΄ λͺ¨λΈλ§ (causal language modeling)
λͺ¨λΈμ΄ ν μ€νΈλ₯Ό μμλλ‘ μ½μΌλ©° λ€μ λ¨μ΄λ₯Ό μμΈ‘ν΄μΌ νλ μ¬μ νμ΅(pretraining) μμ μ λλ€. μΌλ°μ μΌλ‘ λ¬Έμ₯μ μ μ²΄λ‘ μ½λ, λͺ¨λΈ λ΄λΆμμ νΉμ§ μμ μ΄νμ ν ν°μ λ§μ€νΉ(masking)νμ¬ λ€μ λ¨μ΄λ₯Ό μμΈ‘νκ² λ©λλ€.
μ±λ (channel)
μ»¬λ¬ μ΄λ―Έμ§λ λΉ¨κ°μ(R), μ΄λ‘μ(G), νλμ(B)μ μΈ μ±λ κ°μ μ‘°ν©νμ¬ κ΅¬μ±λλ©°, νλ°± μ΄λ―Έμ§λ λ¨μΌ μ±λλ§μ κ°μ§λλ€. π€ Transformersμμλ μ΄λ―Έμ§ ν
μμ μ±λμ΄ μ²« λ²μ§Έ λλ λ§μ§λ§ μ°¨μμ μμΉν μ μμ΅λλ€:[n_channels, height, width] λλ [height, width, n_channels]μ κ°μ νμμ
λλ€.
μ°κ²° μκ°λΆλ₯(connectionist temporal classification, CTC)
μ λ ₯κ³Ό μΆλ ₯μ μ λ ¬ μνλ₯Ό μ νν λͺ°λΌλ λͺ¨λΈμ΄ νμ΅ν μ μλλ‘ λλ μκ³ λ¦¬μ¦μ λλ€. CTCλ μ£Όμ΄μ§ μ λ ₯μ λν΄ κ°λ₯ν λͺ¨λ μΆλ ₯μ νλ₯ λΆν¬λ₯Ό κ³μ°νκ³ , κ·Έμ€ κ°μ₯ κ°λ₯μ±μ΄ λμ μΆλ ₯μ μ νν©λλ€. CTCλ λ§νλ μλμ μ°¨μ΄ λ± μ¬λ¬ μ΄μ λ‘ μμ±κ³Ό ν μ€νΈκ° νμ μ ννκ² μΌμΉνμ§ μκΈ° λλ¬Έμ μμ± μΈμ μμ μμ μμ£Ό μ¬μ©λ©λλ€.
컨볼루μ (convolution)
μ κ²½λ§μμ μ¬μ©λλ λ μ΄μ΄μ ν μ’ λ₯λ‘, μ λ ₯ νλ ¬μ λν΄ λ μμ νλ ¬(컀λ λλ νν°)μ μμλ³λ‘ κ³±ν λ€ κ·Έ κ°μ ν©μ°ν΄ μλ‘μ΄ νλ ¬μ λ§λλ μ°μ°μ λλ€. μ΄ μ°μ°μ 컨볼루μ μ°μ°μ΄λΌκ³ νλ©°, μ λ ₯ νλ ¬ μ 체μ κ±Έμ³ λ°λ³΅μ μΌλ‘ μνλ©λλ€. κ° μ°μ°μ μ λ ₯ νλ ¬μ μλ‘ λ€λ₯Έ ꡬκ°μ μ μ©λ©λλ€. 컨볼루μ μ κ²½λ§(CNN)μ μ»΄ν¨ν° λΉμ λΆμΌμμ λ리 μ¬μ©λ©λλ€.
D
λ°μ΄ν° λ³λ ¬ν (DataParallel)
μ¬λ¬ κ°μ GPUμμ νλ ¨μ μνν λ μ¬μ©νλ λ³λ ¬ν κΈ°λ²μΌλ‘, λμΌν λͺ¨λΈ ꡬμ±μ΄ μ¬λ¬ λ² λ³΅μ λλ©° κ° μΈμ€ν΄μ€λ μλ‘ λ€λ₯Έ λ°μ΄ν° μ‘°κ°μ λ°μ΅λλ€. λͺ¨λ μΈμ€ν΄μ€λ λ³λ ¬λ‘ μ²λ¦¬λ₯Ό μννλ©°, κ° νλ ¨ λ¨κ³κ° λλ ν κ²°κ³Όλ₯Ό λκΈ°νν©λλ€.
DataParallel λ°©μμ λν΄ λ μμλ³΄λ €λ©΄ μ¬κΈ°λ₯Ό μ°Έκ³ νμΈμ.
λμ½λ μ λ ₯ ID (decoder input IDs)
μ΄ μ λ ₯μ μΈμ½λ-λμ½λ λͺ¨λΈμ νΉνλ κ²μΌλ‘, λμ½λμ μ λ¬λ input ID λ€μ ν¬ν¨ν©λλ€. μ΄λ¬ν μ λ ₯μ λ²μμ΄λ μμ½κ³Ό κ°μ μνμ€-ν¬-μνμ€(sequence-to-sequence) μμ μ μ¬μ©λλ©°, μΌλ°μ μΌλ‘ λͺ¨λΈλ§λ€ κ³ μ ν λ°©μμΌλ‘ ꡬμ±λ©λλ€.
λλΆλΆμ μΈμ½λ-λμ½λ λͺ¨λΈ(BART, T5 λ±)μ labelsλ‘λΆν° μλμΌλ‘ decoder_input_idsλ₯Ό μμ±ν©λλ€. μ΄λ¬ν λͺ¨λΈμμλ νμ΅ μ labelsλ₯Ό μ λ¬νλ κ²μ΄ μΌλ°μ μΌλ‘ κΆμ₯λ©λλ€.
μνμ€-ν¬-μνμ€ νμ΅μμ κ° λͺ¨λΈμ΄ μ΄λ¬ν input IDλ₯Ό μ΄λ»κ² μ²λ¦¬νλμ§λ λͺ¨λΈ λ¬Έμλ₯Ό μ°Έκ³ νμκΈ°λ₯Ό λ°λλλ€.
λμ½λ λͺ¨λΈ (decoder models)
μκΈ°νκ· λͺ¨λΈ(Autoregressive models)μ΄λΌκ³ λ λΆλ¦¬λ λμ½λ λͺ¨λΈμ μΈκ³Ό μΈμ΄ λͺ¨λΈλ§(causal language modeling)μ΄λΌ λΆλ¦¬λ μ¬μ νμ΅ μμ μ μνν©λλ€. μ΄ μμ μμλ λͺ¨λΈμ΄ ν μ€νΈλ₯Ό μμλλ‘ μ½κ³ λ€μ λ¨μ΄λ₯Ό μμΈ‘ν΄μΌ ν©λλ€. μΌλ°μ μΌλ‘ λ¬Έμ₯μ μ 체λ₯Ό μ½λ, νΉμ μμ μ΄νμ ν ν°μ λ§μ€ν¬λ‘ κ°λ € μμΈ‘νκ² ν©λλ€.
λ₯λ¬λ (deep learning)
μ¬λ¬ μΈ΅μ μ κ²½λ§(neural network)μ μ¬μ©νλ λ¨Έμ λ¬λ μκ³ λ¦¬μ¦μ λλ€.
E
μΈμ½λ λͺ¨λΈ (encoder models)
μλ μΈμ½λ© λͺ¨λΈ(Autoencoding models)μ΄λΌκ³ λ λΆλ¦¬λ μΈμ½λ λͺ¨λΈμ ν μ€νΈλ μ΄λ―Έμ§μ κ°μ μ λ ₯μ λ°μ μλ² λ©μ΄λΌ λΆλ¦¬λ μμΆλ μμΉ ννμΌλ‘ λ°νν©λλ€. μΌλ°μ μΌλ‘ μΈμ½λ λͺ¨λΈμ μ λ ₯ μνμ€μ μΌλΆλ₯Ό λ§μ€νΉνκ³ λ μλ―Έ μλ ννμ μμ±νλλ‘ νμ΅νλ masked language modelingκ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ μ¬μ νμ΅λ©λλ€.
F
νΉμ§ μΆμΆ (feature extraction)
λ¨Έμ λ¬λ μκ³ λ¦¬μ¦μ΄ λ ν¨κ³Όμ μΌλ‘ νμ΅ν μ μλλ‘, μμ λ°μ΄ν°λ₯Ό μ ννκ³ λ³ννμ¬ λ μ μ©ν νΉμ§(feature) μ§ν©μΌλ‘ λ§λλ κ³Όμ μ λλ€. μλ₯Ό λ€μ΄, μμ ν μ€νΈλ₯Ό μλ μλ² λ©μΌλ‘ λ³ννκ±°λ μ΄λ―Έμ§λ λΉλμ€ λ°μ΄ν°μμ μ€κ³½μ μ΄λ ννμ κ°μ μ€μν νΉμ§μ μΆμΆνλ κ²μ΄ μμ΅λλ€.
νΌλ ν¬μλ μ²νΉ (feed forward chunking)
νΈλμ€ν¬λ¨Έμ κ° residual attention Blockμμλ self-Attention Layer λ€μμ λ³΄ν΅ λ κ°μ Feed Forward Layerκ° μ΄μ΄μ§λλ€. μ΄ Feed Forward Layersμ μ€κ° μλ² λ© ν¬κΈ°λ μ’
μ’
λͺ¨λΈμ νλ μ¬μ΄μ¦(hidden size)λ³΄λ€ ν½λλ€(μ:
google-bert/bert-base-uncased λͺ¨λΈμ κ²½μ°).
μ
λ ₯ ν¬κΈ°κ° [batch_size, sequence_length]μΌ κ²½μ°, μ€κ° Feed Forward μλ² λ©
[batch_size, sequence_length, config.intermediate_size]μ μ μ₯νλ λ° νμν λ©λͺ¨λ¦¬λ μ 체 λ©λͺ¨λ¦¬ μ¬μ©λμ ν° λΆλΆμ μ°¨μ§ν μ μμ΅λλ€.
Reformer: The Efficient Transformer λ
Όλ¬Έμ μ μλ€μ μ΄ μ°μ°μ΄ sequence_length μ°¨μμ λν΄ λ
립μ μ΄κΈ° λλ¬Έμ,ν ν°λ§λ€ Feed Forward Layerμ μΆλ ₯ μλ² λ©μ κ° ν ν°λ³λ‘ [batch_size, config.hidden_size]μ κ°λ³μ μΌλ‘ κ³μ°ν λ€, μ΄λ₯Ό μ΄μ΄ λΆμ¬ [batch_size, sequence_length, config.hidden_size] ννλ‘ λ§λ€ μ μμ΅λλ€.n = sequence_length. μ΄ λ°©μμ κ³μ° μκ°μ λμ΄λμ§λ§, λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄λ€κ² λ©λλ€.
[apply_chunking_to_forward] ν¨μλ₯Ό μ¬μ©νλ λͺ¨λΈμ κ²½μ°, chunk_sizeλ λ³λ ¬λ‘ κ³μ°λλ μΆλ ₯ μλ² λ©μ κ°μλ₯Ό μ μνλ©°, μ΄λ λ©λͺ¨λ¦¬ μ¬μ©λκ³Ό κ³μ° μκ° κ°μ νΈλ μ΄λμ€νλ₯Ό κ²°μ ν©λλ€.
chunk_sizeκ° 0μΌλ‘ μ€μ λλ©΄, νΌλ ν¬μλ μ²νΉ(Feed Forward Chunking)μ μνλμ§ μμ΅λλ€.
νμΈνλ λͺ¨λΈ (finetuned models)
νμΈνλ(Finetuning)μ μ μ΄ νμ΅(transfer learning)μ ν ννλ‘, μ¬μ νμ΅λ (pretrained) λͺ¨λΈμ μ¬μ©νμ¬ κ°μ€μΉλ₯Ό κ³ μ (freeze)νκ³ , μΆλ ₯μΈ΅μ μλ‘κ² μΆκ°λ λͺ¨λΈ ν€λλ‘ κ΅μ²΄ν λ€, ν΄λΉ λͺ¨λΈ ν€λλ₯Ό λͺ©ν λ°μ΄ν°μ μ λ§κ² νμ΅μν€λ λ°©μμ λλ€.
μμΈν λ΄μ©μ Fine-tune a pretrained model νν 리μΌμ μ°Έκ³ νμκ³ , π€ Transformersλ₯Ό μ¬μ©ν΄ λͺ¨λΈμ νμΈ νλνλ λ°©λ²λ ν¨κ» νμΈν΄ 보μΈμ.
H
ν€λ (head)
λͺ¨λΈ ν€λ(model head)λ μ κ²½λ§μ λ§μ§λ§ μΈ΅μ μλ―Ένλ©°, μ΄ μΈ΅μ μ΄μ μΈ΅μμ λμ¨ νλ μν(hidden states)λ₯Ό λ°μ λ€λ₯Έ μ°¨μμΌλ‘ λ³νν©λλ€. κ° μμ (task)μ λ°λΌ μλ‘ λ€λ₯Έ λͺ¨λΈ ν€λκ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄:
- [
GPT2ForSequenceClassification]μ κΈ°λ³Έ [GPT2Model] μμ μνμ€ λΆλ₯λ₯Ό μν μ νκ³μΈ΅(linear layer)μ μΆκ°ν λͺ¨λΈ ν€λμ λλ€. - [
ViTForImageClassification]μ μ΄λ―Έμ§ λΆλ₯λ₯Ό μν λͺ¨λΈ ν€λλ‘, κΈ°λ³Έ [ViTModel] μμCLSν ν°μ λ§μ§λ§ νλ μνμ μ ν κ³μΈ΅(linear layer)μ μΆκ°ν ꡬ쑰μ λλ€. - [
Wav2Vec2ForCTC]λ κΈ°λ³Έ [Wav2Vec2Model] μμ CTCλ₯Ό μ μ©ν μΈμ΄ λͺ¨λΈλ§ ν€λμ λλ€.
I
μ΄λ―Έμ§ ν¨μΉ (image patch)
λΉμ κΈ°λ° Transformer λͺ¨λΈμ μ΄λ―Έμ§λ₯Ό μμ ν¨μΉλ‘ λΆν ν ν, κ° ν¨μΉλ₯Ό μ ν μλ² λ©νμ¬ μνμ€λ‘ λͺ¨λΈμ μ
λ ₯ν©λλ€. λͺ¨λΈμ κ΅¬μ± νμΌμμ patch_size(λλ ν΄μλ)λ₯Ό νμΈν μ μμ΅λλ€.
μΈνΌλ°μ€ (inference)
μΈνΌλ°μ€λ νμ΅μ΄ μλ£λ λͺ¨λΈμ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ λ ₯νμ¬ μμΈ‘μ μννλ κ³Όμ μ λλ€. π€ Transformerμμ μΈνΌλ°μ€λ₯Ό μννλ λ°©λ²μ Pipeline for inference νν 리μΌμ μ°Έκ³ νμΈμ.
μ λ ₯ ID (input IDs)
μ λ ₯ IDλ μ’ μ’ λͺ¨λΈμ μ λ ₯μΌλ‘ μ λ¬ν΄μΌ νλ μ μΌν νμ νλΌλ―Έν°μ λλ€. μ΄λ€μ ν ν°μ μΈλ±μ€λ‘, λͺ¨λΈμ΄ μ λ ₯μΌλ‘ μ¬μ©ν μνμ€λ₯Ό ꡬμ±νλ ν ν°λ€μ μ«μ ννμ λλ€.
ν ν¬λμ΄μ λ§λ€ μλ λ°©μμ λ€λ₯΄μ§λ§, κΈ°λ³Έ λ©μ»€λμ¦μ λμΌν©λλ€. λ€μμ WordPiece ν ν¬λμ΄μ μΈ BERT ν ν¬λμ΄μ λ₯Ό μ¬μ©ν μμμ λλ€:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence = "A Titan RTX has 24GB of VRAM"
ν ν¬λμ΄μ λ μνμ€λ₯Ό ν ν¬λμ΄μ μ ν ν° λͺ©λ‘μ μλ νλͺ©μΌλ‘ λΆλ¦¬ν©λλ€.
>>> tokenized_sequence = tokenizer.tokenize(sequence)
ν ν°μ λ¨μ΄μ΄κ±°λ μλΈ μλ(subword)μ
λλ€. μλ₯Ό λ€μ΄, "VRAM"μ λͺ¨λΈμ μ΄ν μ¬μ μ μλ λ¨μ΄μ΄κΈ° λλ¬Έμ "V", "RA", "M"μΌλ‘ λλμμ΅λλ€. μ΄ ν ν°λ€μ΄ κ°λ³ λ¨μ΄κ° μλλΌ κ°μ λ¨μ΄μ μΌλΆμμ λνλ΄κΈ° μν΄ "RA"μ "M" μμ λλΈ ν΄μ(##)κ° μΆκ° λ©λλ€.
>>> print(tokenized_sequence)
['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']
μ΄λ¬ν ν ν°λ€μ λͺ¨λΈμ΄ μ΄ν΄ν μ μλ IDλ‘ λ³νλ μ μμ΅λλ€. μ΄ κ³Όμ μ λ¬Έμ₯μ λ°λ‘ ν ν¬λμ΄μ μ μ λ ₯ν¨μΌλ‘μ¨ μνλλ©°, μ±λ₯ μ΅μ νλ₯Ό μν΄ π€ Tokenizersμ Rust ꡬνμ νμ©ν©λλ€.
>>> inputs = tokenizer(sequence)
ν ν¬λμ΄μ λ ν΄λΉ λͺ¨λΈμ΄ μ¬λ°λ₯΄κ² μλνλ λ° νμν λͺ¨λ μΈμλ₯Ό ν¬ν¨ν λμ
λ리λ₯Ό λ°νν©λλ€. ν ν° μΈλ±μ€λ input_idsλΌλ ν€μ μ μ₯λ©λλ€.
>>> encoded_sequence = inputs["input_ids"]
>>> print(encoded_sequence)
[101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]
ν ν¬λμ΄μ λ (μ°κ²°λ λͺ¨λΈμ΄ μ΄λ₯Ό μ¬μ©νλ κ²½μ°) μλμΌλ‘ "νΉμ ν ν°"μ μΆκ°ν©λλ€. μ΄λ€μ λͺ¨λΈμ΄ νΉμ μν©μμ μ¬μ©νλ νΉλ³ν IDμ λλ€.
μ΄μ μ ID μνμ€λ₯Ό λμ½λ©νλ©΄,
>>> decoded_sequence = tokenizer.decode(encoded_sequence)
μ°λ¦¬λ λ€μκ³Ό κ°μ κ²°κ³Όλ₯Ό λ³΄κ² λ κ²μ λλ€.
>>> print(decoded_sequence)
[CLS] A Titan RTX has 24GB of VRAM [SEP]
μ΄λ [BertModel]μ΄ μ
λ ₯κ°μ κΈ°λνλ λ°©μμ΄κΈ° λλ¬Έμ
λλ€.
L
λ μ΄λΈ (labels)
λ μ΄λΈμ λͺ¨λΈμ΄ μμ€(loss)μ μ§μ κ³μ°ν μ μλλ‘ μ λ¬λλ μ νμ μΈμμ λλ€. μ΄ λ μ΄λΈμ λͺ¨λΈμ΄ μμΈ‘ν΄μΌ ν μ λ΅ κ°μ μλ―Ένλ©°, λͺ¨λΈμ μμΈ‘κ°κ³Ό μ΄ μ λ΅(label) μ¬μ΄μ μ°¨μ΄λ₯Ό νμ€ μμ€ ν¨μλ₯Ό μ΄μ©ν΄ κ³μ°νκ² λ©λλ€.
μ΄ λ μ΄λΈ(label)μ ννλ λͺ¨λΈ ν€λ(model head)μ μ’ λ₯μ λ°λΌ λ¬λΌμ§λλ€. μλ₯Ό λ€μ΄:
- μνμ€ λΆλ₯ λͺ¨λΈ([
BertForSequenceClassification] λ±)μ κ²½μ°, λͺ¨λΈμ(batch_size)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, λ°°μΉμ κ° κ°μ μ 체 μνμ€μ λν μμ λ μ΄λΈμ λνλ λλ€. - ν ν° λΆλ₯ λͺ¨λΈ([
BertForTokenClassification] λ±)μ κ²½μ°, λͺ¨λΈμ(batch_size, seq_length)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, κ° κ°μ κ°λ³ ν ν°μ λν μμ λ μ΄λΈμ λνλ λλ€. - λ§μ€νΉ μΈμ΄ λͺ¨λΈ([
BertForMaskedLM])μ κ²½μ°, λͺ¨λΈμ(batch_size,seq_length)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, κ° κ°μ κ°λ³ ν ν°μ λν μμ λ μ΄λΈμ λνλ λλ€. λ μ΄λΈμ λ§μ€νΉ λ ν ν°μ ν ν° IDμ΄λ©°, λλ¨Έμ§ ν ν°μ λν΄μλ 무μν κ°μ μ¬μ©ν©λλ€(μΌλ°μ μΌλ‘ -100). - μνμ€ ν¬ μνμ€ μμ
([
BartForConditionalGeneration], [MBartForConditionalGeneration]λ±)μ κ²½μ°, λͺ¨λΈμ(batch_size, tgt_seq_length)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, κ° κ°μ μ λ ₯ μνμ€μ λμνλ νκ² μνμ€λ₯Ό λνλ λλ€. νμ΅ μ€μλ BARTμ T5κ° μ μ νdecoder_input_idsμ λμ½λ attention λ§μ€ν¬λ₯Ό λ΄λΆμ μΌλ‘ μμ±νλ―λ‘, μΌλ°μ μΌλ‘ λ°λ‘ μ 곡ν νμκ° μμ΅λλ€. λ¨, μ΄λ Encoder-Decoder νλ μμν¬λ₯Ό μ§μ νμ©νλ λͺ¨λΈμλ μ μ©λμ§ μμ΅λλ€. - μ΄λ―Έμ§ λΆλ₯ λͺ¨λΈ([
ViTForImageClassification] λ±)μ κ²½μ°, λͺ¨λΈμ(batch_size)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, λ°°μΉμ κ° κ°μ κ°λ³ μ΄λ―Έμ§μ λν μμ λ μ΄λΈμ λνλ λλ€. - μλ©ν± μΈκ·Έλ©ν
μ΄μ
λͺ¨λΈ([
SegformerForSemanticSegmentation] λ±)μ κ²½μ°, λͺ¨λΈμ(batch_size, height, width)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, λ°°μΉμ κ° κ°μ κ°λ³ ν½μ μ λν μμ λ μ΄λΈμ λνλ λλ€. - κ°μ²΄ νμ§ λͺ¨λΈ([
DetrForObjectDetection] λ±)μ κ²½μ°, λͺ¨λΈμclass_labelsμboxesν€λ₯Ό ν¬ν¨νλ λμ λ리λ€μ 리μ€νΈλ₯Ό μ λ ₯μΌλ‘ λ°μ΅λλ€. λ°°μΉμ κ° κ°μ κ°λ³ μ΄λ―Έμ§μ λν μμ ν΄λμ€ λ μ΄λΈκ³Ό λ°μ΄λ© λ°μ€ μ 보λ₯Ό λνλ λλ€. - μλ μμ± μΈμ λͺ¨λΈ([
Wav2Vec2ForCTC] λ±)μ κ²½μ° λͺ¨λΈμ(batch_size,target_length)μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, κ° κ°μ κ°λ³ ν ν°μ λν μμ λ μ΄λΈμ λνλ λλ€.
λͺ¨λΈλ§λ€ μꡬνλ λ μ΄λΈ νμμ΄ λ€λ₯Ό μ μμΌλ―λ‘, κ° λͺ¨λΈμ λ¬Έμλ₯Ό νμΈνμ¬ ν΄λΉ λͺ¨λΈμ λ§λ λ μ΄λΈ νμμ λ°λμ νμΈνμΈμ!
κΈ°λ³Έ λͺ¨λΈ([BertModel] λ±)μ λ μ΄λΈμ μ
λ ₯μΌλ‘ λ°μ§ μμ΅λλ€. μ΄λ¬ν λͺ¨λΈμ λ¨μν νΉμ§(feature)μ μΆλ ₯νλ κΈ°λ³Έ νΈλμ€ν¬λ¨Έ λͺ¨λΈμ΄κΈ° λλ¬Έμ
λλ€.
λκ·λͺ¨ μΈμ΄ λͺ¨λΈ (LLM)
λκ·λͺ¨ λ°μ΄ν°λ‘ νμ΅λ νΈλμ€ν¬λ¨Έ μΈμ΄ λͺ¨λΈ(GPT-3, BLOOM, OPT λ±)μ μ§μΉνλ μΌλ°μ μΈ μ©μ΄μ λλ€. μ΄λ¬ν λͺ¨λΈμ νμ΅ν μ μλ νλΌλ―Έν°(parameter)μ μκ° λ§€μ° λ§μΌλ©°, μλ₯Ό λ€μ΄ GPT-3λ μ½ 1,750μ΅ κ°μ νλΌλ―Έν°λ₯Ό κ°μ§κ³ μμ΅λλ€.
M
λ§μ€νΉλ μΈμ΄ λͺ¨λΈλ§ (MLM)
μ¬μ νμ΅ λ¨κ³ μ€ νλλ‘, λͺ¨λΈμ μΌλΆ ν ν°μ΄ 무μμλ‘ λ§μ€νΉ λ μμλ λ¬Έμ₯μ μ λ ₯λ°κ³ , μλμ λ¬Έμ₯μ μμΈ‘ν΄μΌ ν©λλ€.
λ©ν°λͺ¨λ¬ (multimodal)
ν μ€νΈμ μ΄λ―Έμ§μ κ°μ λ€λ₯Έ ννμ μ λ ₯μ ν¨κ» μ¬μ©νλ μμ μ λλ€.
N
μμ°μ΄ μμ± (NLG)
ν μ€νΈλ₯Ό μμ±νλ λͺ¨λ μμ μ μλ―Έν©λλ€. (μ: Write With Transformers, λ²μ λ±).
μμ°μ΄ μ²λ¦¬ (NLP)
ν μ€νΈλ₯Ό λ€λ£¨λ μμ μ λ°μ μ§μΉνλ μΌλ°μ μΈ μ©μ΄μ λλ€.
μμ°μ΄ μ΄ν΄ (NLU)
ν μ€νΈμ λ΄κΈ΄ μλ―Έλ₯Ό μ΄ν΄νλ λͺ¨λ μμ μ ν¬ν¨ν©λλ€. (μ: μ 체 λ¬Έμ λΆλ₯, κ°λ³ λ¨μ΄ λΆλ₯ λ±).
P
νμ΄νλΌμΈ (pipeline)
π€ Transformersμμ νμ΄νλΌμΈμ λ°μ΄ν°λ₯Ό μ μ²λ¦¬νκ³ λ³νν ν, λͺ¨λΈμ ν΅ν΄ μμΈ‘κ°μ λ°ννλ μΌλ ¨μ λ¨κ³λ₯Ό μμ°¨μ μΌλ‘ μννλ μΆμνλ κ°λ μ λλ€. νμ΄νλΌμΈμ ν¬ν¨λ μ μλ λ¨κ³λ‘λ λ°μ΄ν° μ μ²λ¦¬, νΉμ§ μΆμΆ(feature extraction), μ κ·ν(normalization) λ±μ΄ μμ΅λλ€.
μμΈν λ΄μ©μ Pipelines for inference λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.
νμ΄νλΌμΈ λ³λ ¬ν (PP)
λͺ¨λΈμ μμ§ λ°©ν₯(λ μ΄μ΄ λ¨μ)μΌλ‘ μ¬λ¬ GPUμ λΆν νμ¬ λ³λ ¬λ‘ μ²λ¦¬νλ λ³λ ¬ν κΈ°λ²μ λλ€. κ° GPUλ λͺ¨λΈμ νλ λλ μ¬λ¬ κ°μ λ μ΄μ΄λ§μ λ΄λΉνλ©°, μ 체 νμ΄νλΌμΈμ μλ‘ λ€λ₯Έ λ¨κ³λ₯Ό λ³λ ¬λ‘ μ²λ¦¬νκ² λ©λλ€. λν κ° GPUλ λ°°μΉ(batch)μ μΌλΆ μμ μ‘°κ°λ§ μ²λ¦¬ν©λλ€. Pipeline Parallel λ°©μμ λν΄ λ μμλ³΄λ €λ©΄ μ΄ λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.
ν½μ κ° (pixel values)
μ΄λ―Έμ§λ₯Ό μμΉμμΌλ‘ ννν ν
μλ‘, λͺ¨λΈμ μ
λ ₯μΌλ‘ μ λ¬λ©λλ€. μ΄ ν
μλ μ΄λ―Έμ§ νλ‘μΈμλ₯Ό ν΅ν΄ μμ±λλ©΄, κ°μ [batch_size, num_channels, height, width] ννμ μ°¨μμ κ°μ§λλ€.
νλ§ (pooling)
νλ ¬μ νΉμ μ°¨μμμ μ΅λκ°μ΄λ νκ· κ°μ μ·¨νμ¬ λ μμ νλ ¬λ‘ μ€μ΄λ μ°μ°μ λλ€. νλ§ κ³μΈ΅μ μ£Όλ‘ ν©μ±κ³± κ³μΈ΅ μ¬μ΄μ μμΉνμ¬ νΉμ§ ννμ λ€μ΄μνλ§ νλ λ° μ¬μ©λ©λλ€.
ν¬μ§μ ID (position IDs)
RNN λͺ¨λΈκ³Ό λ¬λ¦¬ νΈλμ€ν¬λ¨Έλ κ° ν ν°μ μμΉ μ 보λ₯Ό λ΄λΆμ μΌλ‘ κ°μ§κ³ μμ§ μμ΅λλ€. λ°λΌμ λͺ¨λΈμ position_idsλ₯Ό μ¬μ©νμ¬ κ° ν ν°μ΄ μνμ€ λ΄μμ μ΄λ μμΉμ μλμ§λ₯Ό μΈμν©λλ€. μ΄ κ°μ μ νμ μΈ νλΌλ―Έν°μ
λλ€. λͺ¨λΈμ position_idsλ₯Ό μ λ¬νμ§ μμΌλ©΄, μ λ μμΉ μλ² λ© λ°©μμΌλ‘ μλ μμ±λ©λλ€. μ λ μμΉ μλ² λ©μ [0, config.max_position_embeddings - 1] λ²μ λ΄μμ μ νλ©λλ€. μΌλΆ λͺ¨λΈμ μ¬μΈν ννμ μμΉ μλ² λ©(sinusoidal position embeddings) λλ μλ μμΉ μλ² λ©(relative position embeddings)κ³Ό κ°μ λ€λ₯Έ μ νμ μμΉ μλ² λ©μ μ¬μ©νκΈ°λ ν©λλ€.
μ μ²λ¦¬ (preprocessing)
λ¨Έμ λ¬λ λͺ¨λΈμ΄ μ½κ² μ²λ¦¬ν μ μλλ‘ κ°κ³΅λμ§ μμ λ°μ΄ν°λ₯Ό μ μ νλ μμ μ λλ€. μλ₯Ό λ€μ΄, ν μ€νΈλ μΌλ°μ μΌλ‘ ν ν°ν(tokenization) κ³Όμ μ κ±°μΉ©λλ€. λ€λ₯Έ μ λ ₯ μ νμ λν μ μ²λ¦¬ λ°©μμ΄ κΆκΈνλ€λ©΄ Preprocess νν 리μΌμ μ°Έκ³ ν΄ λ³΄μΈμ.
μ¬μ νμ΅λ λͺ¨λΈ (pretrained model)
μΌλΆ λ°μ΄ν°(μ: μν€νΌλμ μ 체)λ‘ μ¬μ νμ΅(pretraining)λ λͺ¨λΈμ λλ€. μ¬μ νμ΅μ μκΈ° μ§λ νμ΅(self-supervised learning)μ λͺ©νλ₯Ό ν¬ν¨νλ©°, μλ₯Ό λ€μ΄ λ¬Έμ₯μ μ½κ³ λ€μ λ¨μ΄λ₯Ό μμΈ‘νκ±°λ (causal language modeling) μ°Έκ³ , μΌλΆ λ¨μ΄λ₯Ό λ§μ€νΉνκ³ μ΄λ₯Ό μμΈ‘νλ λ°©μ(masked language modeling)μ΄ μμ΅λλ€.
μμ± λ° λΉμ λͺ¨λΈμ κ³ μ μ μ¬μ νμ΅ λͺ©νλ₯Ό κ°μ§κ³ μμ΅λλ€. μλ₯Ό λ€μ΄, Wav2Vec2λ μμ± νν μ€ "μ§μ§"λ₯Ό "κ°μ§" μ€μμ ꡬλΆνλ λμ‘° νμ΅(contrastive learning) λ°©μμΌλ‘ μ¬μ νμ΅λ μμ± λͺ¨λΈμ λλ€. λ°λ©΄, BEiTλ μ΄λ―Έμ§ ν¨μΉ μ€ μΌλΆλ₯Ό λ§μ€νΉνκ³ μ΄λ₯Ό μμΈ‘νλ λ§μ€νΉ μ΄λ―Έμ§ λͺ¨λΈλ§ λ°©μμΌλ‘ μ¬μ νμ΅λ λΉμ λͺ¨λΈμ λλ€. μ΄λ λ§μ€νΉ μΈμ΄ λͺ¨λΈλ§κ³Ό μ μ¬ν λ°©μμ λλ€.
R
μν μ κ²½λ§ (RNN)
ν μ€νΈμ κ°μ μνμ€ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄ λ μ΄μ΄μ λ°λ³΅ ꡬ쑰(루ν)λ₯Ό μ¬μ©νλ μ κ²½λ§ λͺ¨λΈμ ν μ’ λ₯μ λλ€.
νννμ΅ (representation learning)
λ¨Έμ λ¬λμ νμ λΆμΌλ‘, μμ λ°μ΄ν°λ‘λΆν° μλ―Έ μλ ννμ νμ΅νλ λ° μ€μ μ λ‘λλ€. λνμ μΈ κΈ°λ²μΌλ‘λ λ¨μ΄ μλ² λ©, μ€ν μΈμ½λ(autoencoder), μμ±μ μ λ μ κ²½λ§(GAN) λ±μ΄ μμ΅λλ€.
S
μνλ§ μλ (sampling rate)
μνλ§ μλλ 1μ΄μ μΆμΆνλ (μ€λμ€ μ νΈ) μνμ κ°μλ₯Ό ν€λ₯΄μΈ (Hz) λ¨μλ‘ λνλΈ μΈ‘μ κ°μ λλ€. μ΄λ μμ±μ²λΌ μ°μμ μΈ μ νΈλ₯Ό λμ§νΈννμ¬ μ΄μ°μ μΈ ννλ‘ λ§λλ κ²°κ³Όμ λλ€.
μ ν μ΄ν μ (self-attention)
μ λ ₯μ κ° μμκ° λ€λ₯Έ μ΄λ€ μμμ μ£Όλͺ©ν΄μΌ νλμ§λ₯Ό μ€μ€λ‘ νλ¨νλ λ©μ»€λμ¦μ λλ€. μ΄λ λͺ¨λΈμ΄ λ¬Έμ₯μμ νΉμ λ¨μ΄λ§μ 보λ κ²μ΄ μλλΌ, λ€λ₯Έ λ¨μ΄λ€κ³Όμ κ΄κ³λ₯Ό κ³ λ €νμ¬ μ΄λ€ μ 보μ λ μ§μ€ν΄μΌ ν μ§λ₯Ό νμ΅νκ² ν©λλ€.
μκΈ°μ§λ νμ΅ (self-supervised learning)
λ μ΄λΈμ΄ μλ λ°μ΄ν°λ‘λΆν° λͺ¨λΈμ΄ μ€μ€λ‘ νμ΅ λͺ©νλ₯Ό μ μνμ¬ νμ΅νλ λ¨Έμ λ¬λ κΈ°λ²μ ν μ’ λ₯μ λλ€. λΉμ§λ νμ΅μ΄λ μ§λ νμ΅κ³Ό λ¬λ¦¬, νμ΅ κ³Όμ μ체λ κ°λ λ°©μ λμ§λ§, λΌλ²¨μ΄ λͺ μμ μΌλ‘ μ£Όμ΄μ§λ κ²μ μλλλ€.
μμλ‘λ λ§μ€ν¬ μΈμ΄ λͺ¨λΈλ§μ΄ μμΌλ©°, μ΄λ λ¬Έμ₯μ μΌλΆ ν ν°μ μ κ±°ν μνλ‘ λͺ¨λΈμ μ λ ₯νκ³ , λͺ¨λΈμ΄ ν΄λΉ ν ν°μ μμΈ‘νλλ‘ νμ΅νλ λ°©μμ λλ€.
μ€μ§λ νμ΅ (semi-supervised learning)
μλμ λΌλ²¨μ΄ λ¬λ¦° λ°μ΄ν°μ λλμ λΌλ²¨μ΄ μλ λ°μ΄ν°λ₯Ό ν¨κ» μ¬μ©νμ¬ λͺ¨λΈμ μ νλλ₯Ό λμ΄λ λ¨Έμ λ¬λ νλ ¨ κΈ°λ²μ λμ λ²μ£Όμ λλ€. μ΄λ μ§λ νμ΅μ΄λ λΉμ§λ νμ΅κ³Όλ λ€λ₯Έ λ°©μμ λλ€.
μ€μ§λ νμ΅ κΈ°λ²μ μλ‘λ "μκΈ° νμ΅(self-training)"μ΄ μμ΅λλ€. μ΄ λ°©μμ λ¨Όμ λΌλ²¨μ΄ μλ λ°μ΄ν°λ‘ λͺ¨λΈμ νμ΅μν€κ³ , κ·Έ λͺ¨λΈμ μ¬μ©ν΄ λΌλ²¨μ΄ μλ λ°μ΄ν°μ λν μμΈ‘μ μνν©λλ€. λͺ¨λΈμ΄ κ°μ₯ λμ νμ μ κ°μ§κ³ μμΈ‘ν λΌλ²¨μ΄ μλ λ°μ΄ν° μΌλΆλ₯Ό λΌλ²¨μ΄ μλ λ°μ΄ν°λ‘ μΆκ°νκ³ , μ΄λ₯Ό ν΅ν΄ λͺ¨λΈμ λ€μ νμ΅μν΅λλ€.
μνμ€ ν¬ μνμ€ (seq2seq)
μ λ ₯μΌλ‘λΆν° μλ‘μ΄ μνμ€λ₯Ό μμ±νλ λͺ¨λΈμ λλ€. μλ₯Ό λ€μ΄ λ²μ λͺ¨λΈμ΄λ μμ½ λͺ¨λΈμ΄ μ΄μ ν΄λΉνλ©°, λνμ μΈ μλ‘λ BartλT5 λͺ¨λΈμ΄ μμ΅λλ€.
λΆν DDP (Sharded DDP)
ZeRO κ°λ μ κΈ°λ°μΌλ‘ λ€μν ꡬνμμ μ¬μ©λλ λ€λ₯Έ μ΄λ¦μΌλ‘ λΆλ¦½λλ€.
μ€νΈλΌμ΄λ (stride)
convolution λλ poolingμμ μ€νΈλΌμ΄λ(stride)λ 컀λμ΄ νλ ¬ μλ₯Ό μ΄λνλ κ°κ²©μ μλ―Έν©λλ€. μ€νΈλΌμ΄λκ° 1μ΄λ©΄ 컀λμ΄ ν ν½μ μ© μ΄λνκ³ , 2μ΄λ©΄ λ ν½μ μ© μ΄λν©λλ€.
μ§λνμ΅ (supervised learning)
μ λ΅μ΄ ν¬ν¨λ λΌλ²¨λ§λ λ°μ΄ν°λ₯Ό μ§μ μ¬μ©νμ¬ λͺ¨λΈμ μ±λ₯μ κ°μ νλ νμ΅ λ°©μμ λλ€. νμ΅ μ€μΈ λͺ¨λΈμ λ°μ΄ν°λ₯Ό μ λ ₯νκ³ , μμΈ‘ κ²°κ³Όλ₯Ό μ λ΅κ³Ό λΉκ΅νμ¬ μ€μ°¨λ₯Ό κ³μ°ν©λλ€. λͺ¨λΈμ μ΄ μ€μ°¨λ₯Ό κΈ°λ°μΌλ‘ κ°μ€μΉλ₯Ό μ λ°μ΄νΈνλ©°, μ΄λ¬ν κ³Όμ μ λ°λ³΅νμ¬ μ±λ₯μ μ΅μ νν©λλ€.
T
ν μ λ³λ ¬ν (TP)
μ¬λ¬ GPUμμ νλ ¨νκΈ° μν λ³λ ¬ν κΈ°λ²μΌλ‘, κ° ν μλ₯Ό μ¬λ¬ λ©μ΄λ¦¬(chunk)λ‘ λλλλ€. λ°λΌμ μ 체 ν μκ° λ¨μΌ GPUμ μμ£Όνλ λμ , ν μμ κ° μ‘°κ°(shard)μ΄ μ§μ λ GPUμ μμ£Όνκ² λ©λλ€. μ΄ μ‘°κ°λ€μ κ°κ° λ€λ₯Έ GPUμμ κ°λ³μ μΌλ‘ λ³λ ¬ μ²λ¦¬λλ©°, μ²λ¦¬ λ¨κ³κ° λλ λ κ²°κ³Όκ° λκΈ°νλ©λλ€. μ΄λ¬ν λΆν μ΄ μν λ°©ν₯μΌλ‘ μΌμ΄λκΈ° λλ¬Έμ, μ΄λ λλλ‘ μνμ λ³λ ¬νλΌκ³ λΆλ¦½λλ€. Tensor Parallelismμ λν΄ λ μμλ³΄λ €λ©΄ μ¬κΈ°λ₯Ό μ°Έκ³ νμΈμ.
ν ν° (token)
μΌλ°μ μΈ λ¨μ΄ λ¨μμ΄μ§λ§, λμ λ°λΌ μλΈ μλ(μμ£Ό μ¬μ©λμ§ μλ λ¨μ΄λ μλΈ μλλ‘ λΆλ¦¬λ¨)λ λ¬Έμ₯ λΆνΈλ ν¬ν¨λ μ μλ λ¬Έμ₯μ κ΅¬μ± μμμ λλ€.
ν ν° νμ ID (token type IDs)
μΌλΆ λͺ¨λΈμ λ¬Έμ₯ μ λΆλ₯λ μ§μ μλ΅ μμ μ μννλ λ° μ¬μ©λ©λλ€.
μ΄λ¬ν μμ
μμλ λ κ°μ μλ‘ λ€λ₯Έ μνμ€λ₯Ό νλμ "input_ids" νλͺ©μΌλ‘ κ²°ν©ν΄μΌ νλ©°, μΌλ°μ μΌλ‘ [CLS] λΆλ₯μ© λ° [SEP] ꡬλΆμ©κ³Ό κ°μ νΉμ ν ν°μ μ¬μ©νμ¬ μ²λ¦¬ν©λλ€. μλ₯Ό λ€μ΄, BERT λͺ¨λΈμ λ κ°μ μνμ€λ₯Ό λ€μκ³Ό κ°μ λ°©μμΌλ‘ ꡬμ±ν©λλ€:
>>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]
λ κ°μ μνμ€λ₯Ό tokenizerμ 리μ€νΈκ° μλ κ°λ³ μΈμλ‘ μ λ¬νλ©΄, ν ν¬λμ΄μ κ° μλμΌλ‘ μ΄λ¬ν λ¬Έμ₯μ μμ±ν΄ μ€λλ€. μμλ λ€μκ³Ό κ°μ΅λλ€:
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased")
>>> sequence_a = "HuggingFace is based in NYC"
>>> sequence_b = "Where is HuggingFace based?"
>>> encoded_dict = tokenizer(sequence_a, sequence_b)
>>> decoded = tokenizer.decode(encoded_dict["input_ids"])
κ²°κ³Όλ μλμ κ°μ΅λλ€:
>>> print(decoded)
[CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP]
μ΄ μ½λλ μΌλΆ λͺ¨λΈμ΄ λ κ°μ μνμ€λ₯Ό μ΄λ»κ² ꡬλΆνλμ§ μ΄ν΄νλ λ° μΆ©λΆν©λλ€. κ·Έλ¬λ BERTμ κ°μ λ€λ₯Έ λͺ¨λΈμ ν ν° νμ ID(λλ μΈκ·Έλ¨ΌνΈ ID)λ₯Ό μΆκ°λ‘ μ¬μ©ν©λλ€. μ΄ IDλ 0κ³Ό 1λ‘ κ΅¬μ±λ μ΄μ§ λ§μ€ν¬λ‘, λ μνμ€λ₯Ό ꡬλΆνλ μν μ ν©λλ€.
ν ν¬λμ΄μ λ μ΄ λ§μ€ν¬λ₯Ό "token_type_id" νλͺ©μΌλ‘ λ°νν©λλ€:
>>> encoded_dict["token_type_ids"]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
μ§λ¬Έμ μ¬μ©λλ 첫 λ²μ§Έ μνμ€μΈ "context"λ λͺ¨λ ν ν°μ΄ 0μΌλ‘ νμλ©λλ€. λ°λ©΄ λ λ²μ§Έ μνμ€μΈ "question"μ λͺ¨λ ν ν°μ΄ 1λ‘ νμλ©λλ€.
μΌλΆ λͺ¨λΈ(μ: [XLNetModel])μ 2λ‘ νμλλ μΆκ° ν ν°μ μ¬μ©νκΈ°λ ν©λλ€.
μ μ΄νμ΅ (transfer learning)
μ¬μ νμ΅λ(pretrained) λͺ¨λΈμ κ°μ Έμ νΉμ μμ μ λ§λ λ°μ΄ν°μ μ λν΄ μΆκ° νμ΅νλ κΈ°μ μ λλ€. λͺ¨λΈμ μ²μλΆν° νμ΅μν€λ λμ , κΈ°μ‘΄ λͺ¨λΈμ΄ νμ΅ν μ§μμ μΆλ°μ μΌλ‘ μΌμ λμ± λΉ λ₯΄κ² νμ΅ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νμ΅ μλλ₯Ό λμ΄κ³ νμν λ°μ΄ν°μλ μ€μΌ μ μμ΅λλ€.
νΈλμ€ν¬λ¨Έ (transformer)
μ ν μ΄ν μ λ©μ»€λμ¦μ κΈ°λ°μΌλ‘ ν λ₯λ¬λ λͺ¨λΈ μν€ν μ²μ λλ€.
U
λΉμ§λ νμ΅ (unsupervised learning)
μ λ΅(λ μ΄λΈ)μ΄ ν¬ν¨λμ§ μμ λ°μ΄ν°λ₯Ό μ΄μ©ν΄ λͺ¨λΈμ νμ΅μν€λ λ°©μμ λλ€. λΉμ§λ νμ΅μ λ°μ΄ν° λΆν¬μ ν΅κ³μ νΉμ±μ νμ©ν΄ μ μ©ν ν¨ν΄μ μ°Ύμλ λλ€.
Z
Zero Redundancy Optimizer (ZeRO)
TensorParallelκ³Ό μ μ¬νκ² ν μλ₯Ό μ€λ©(sharding)νλ λ³λ ¬ μ²λ¦¬ κΈ°λ²μ΄μ§λ§, μμ ν(forward)λ μμ ν(backward) κ³μ° μμ μ μ 체 ν μλ₯Ό λ€μ 볡μνλ€λ μ μμ μ°¨μ΄κ° μμ΅λλ€. λ°λΌμ λͺ¨λΈ μ체λ₯Ό μμ ν νμκ° μμ΅λλ€. μ΄ λ°©λ²μ GPU λ©λͺ¨λ¦¬κ° λΆμ‘±ν κ²½μ° μ΄λ₯Ό 보μνκΈ° μν λ€μν μ€νλ‘λ© (offloading) κΈ°λ²λ μ§μν©λλ€. ZeROμ λν΄ λ μμλ³΄λ €λ©΄ μ΄ λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.