| <!--Copyright 2020 The HuggingFace Team. All rights reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | |
| an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations under the License. | |
| β οΈ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be | |
| rendered properly in your Markdown viewer. | |
| --> | |
| # μ©μ΄μ§(Glossary) | |
| μ΄ μ©μ΄μ§μ μ λ°μ μΈ λ¨Έμ λ¬λ λ° π€ Transformers κ΄λ ¨ μ©μ΄λ₯Ό μ μνμ¬ λ¬Έμλ₯Ό λ μ μ΄ν΄νλ λ° λμμ μ€λλ€. | |
| ## A | |
| ### μ΄ν μ λ§μ€ν¬ (attention mask) | |
| μ΄ν μ λ§μ€ν¬(attention mask)λ μ¬λ¬ μνμ€λ₯Ό λ°°μΉ(batch)λ‘ μ²λ¦¬ν λ μ¬μ©λλ μ νμ μΈμμ λλ€. | |
| <Youtube id="M6adb1j2jPI"/> | |
| μ΄ μΈμλ λͺ¨λΈμκ² μ΄λ€ ν ν°μ μ£Όμλ₯Ό κΈ°μΈμ¬μΌ νλμ§, κ·Έλ¦¬κ³ μ΄λ€ ν ν°μ 무μν΄μΌ νλμ§λ₯Ό μλ €μ€λλ€. | |
| μλ₯Ό λ€μ΄, λ€μ λ κ°μ μνμ€κ° μλ€κ³ κ°μ ν΄ λ΄ μλ€: | |
| ```python | |
| >>> 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"] | |
| ``` | |
| μΈμ½λ©λ λ²μ λ€μ κΈΈμ΄κ° λ€λ¦ λλ€: | |
| ```python | |
| >>> len(encoded_sequence_a), len(encoded_sequence_b) | |
| (8, 19) | |
| ``` | |
| λ°λΌμ μ΄ λ μνμ€λ₯Ό κ·Έλλ‘ νλμ ν μμ λ£μ μλ μμ΅λλ€. 첫 λ²μ§Έ μνμ€λ₯Ό λ λ²μ§Έ κΈΈμ΄μ λ§μΆ° ν¨λ© νκ±°λ, λ°λλ‘ λ λ²μ§Έ μνμ€λ₯Ό 첫 λ²μ§Έ κΈΈμ΄μ λ§μΆ° μλΌλ΄μΌ ν©λλ€. | |
| 첫 λ²μ§Έ κ²½μ°μλ ID λͺ©λ‘μ΄ ν¨λ© μΈλ±μ€λ‘ νμ₯λ©λλ€. μ΄λ κ² ν¨λ©μ μ μ©νλ €λ©΄ ν ν¬λμ΄μ μ 리μ€νΈλ₯Ό μ λ¬νκ³ λ€μκ³Ό κ°μ΄ μμ²ν μ μμ΅λλ€: | |
| ```python | |
| >>> padded_sequences = tokenizer([sequence_a, sequence_b], padding=True) | |
| ``` | |
| 첫 λ²μ§Έ λ¬Έμ₯ μ€λ₯Έμͺ½μ 0μ΄ μΆκ°λμ΄ λ λ²μ§Έ λ¬Έμ₯κ³Ό κΈΈμ΄κ° κ°μμ§ κ²μ λ³Ό μ μμ΅λλ€: | |
| ```python | |
| >>> 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" ν€ μλμ ν¬ν¨λμ΄ μμ΅λλ€: | |
| ```python | |
| >>> 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) | |
| [μΈμ½λ λͺ¨λΈ](#encoder-models)κ³Ό [λ§μ€νΉλ μΈμ΄ λͺ¨λΈλ§](#masked-language-modeling-mlm)μ μ°Έκ³ νμΈμ. | |
| ### μκΈ°νκ· λͺ¨λΈ (autoregressive models) | |
| [μΈκ³Όμ μΈμ΄ λͺ¨λΈλ§](#causal-language-modeling)κ³Ό [λμ½λ λͺ¨λΈ](#decoder-models)μ μ°Έκ³ νμΈμ. | |
| ## B | |
| ### λ°±λ³Έ (backbone) | |
| λ°±λ³Έ(backbone)μ μμ(hidden) μλ μν(hidden state) λλ νΉμ§(feature)μ μΆλ ₯νλ λ€νΈμν¬(μλ² λ©κ³Ό λ μ΄μ΄)μ λλ€. μΌλ°μ μΌλ‘ μ΄ λ°±λ³Έμ ν΄λΉ νΉμ§μ μ λ ₯μΌλ‘ λ°μ μμΈ‘μ μννλ [ν€λ](#head)μ μ°κ²°λ©λλ€. μλ₯Ό λ€μ΄, [`ViTModel`]μ νΉμ ν€λκ° μλ λ°±λ³Έμ λλ€. λ€λ₯Έ λͺ¨λΈλ€λ[`VitModel`]μ λ°±λ³ΈμΌλ‘ μ¬μ©ν μ μμΌλ©°, [DPT](model_doc/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 λ°©μμ λν΄ λ μμλ³΄λ €λ©΄ [μ¬κΈ°](perf_train_gpu_many#dataparallel-vs-distributeddataparallel)λ₯Ό μ°Έκ³ νμΈμ. | |
| ### λμ½λ μ λ ₯ 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)μ΄λΌ λΆλ¦¬λ μ¬μ νμ΅ μμ μ μνν©λλ€. μ΄ μμ μμλ λͺ¨λΈμ΄ ν μ€νΈλ₯Ό μμλλ‘ μ½κ³ λ€μ λ¨μ΄λ₯Ό μμΈ‘ν΄μΌ ν©λλ€. μΌλ°μ μΌλ‘ λ¬Έμ₯μ μ 체λ₯Ό μ½λ, νΉμ μμ μ΄νμ ν ν°μ λ§μ€ν¬λ‘ κ°λ € μμΈ‘νκ² ν©λλ€. | |
| <Youtube id="d_ixlCubqQw"/> | |
| ### λ₯λ¬λ (deep learning) | |
| μ¬λ¬ μΈ΅μ μ κ²½λ§(neural network)μ μ¬μ©νλ λ¨Έμ λ¬λ μκ³ λ¦¬μ¦μ λλ€. | |
| ## E | |
| ### μΈμ½λ λͺ¨λΈ (encoder models) | |
| μλ μΈμ½λ© λͺ¨λΈ(Autoencoding models)μ΄λΌκ³ λ λΆλ¦¬λ μΈμ½λ λͺ¨λΈμ ν μ€νΈλ μ΄λ―Έμ§μ κ°μ μ λ ₯μ λ°μ μλ² λ©μ΄λΌ λΆλ¦¬λ μμΆλ μμΉ ννμΌλ‘ λ°νν©λλ€. μΌλ°μ μΌλ‘ μΈμ½λ λͺ¨λΈμ μ λ ₯ μνμ€μ μΌλΆλ₯Ό λ§μ€νΉνκ³ λ μλ―Έ μλ ννμ μμ±νλλ‘ νμ΅νλ [masked language modeling](#masked-language-modeling-mlm)κ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ μ¬μ νμ΅λ©λλ€. | |
| <Youtube id="H39Z_720T5s"/> | |
| ## 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](https://arxiv.org/abs/2001.04451) λ Όλ¬Έμ μ μλ€μ μ΄ μ°μ°μ΄ `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)νκ³ , μΆλ ₯μΈ΅μ μλ‘κ² μΆκ°λ [λͺ¨λΈ ν€λ](#head)λ‘ κ΅μ²΄ν λ€, ν΄λΉ λͺ¨λΈ ν€λλ₯Ό λͺ©ν λ°μ΄ν°μ μ λ§κ² νμ΅μν€λ λ°©μμ λλ€. | |
| μμΈν λ΄μ©μ [Fine-tune a pretrained model](https://huggingface.co/docs/transformers/training) νν 리μΌμ μ°Έκ³ νμκ³ , π€ Transformersλ₯Ό μ¬μ©ν΄ λͺ¨λΈμ νμΈ νλνλ λ°©λ²λ ν¨κ» νμΈν΄ 보μΈμ. | |
| ## H | |
| ### ν€λ (head) | |
| λͺ¨λΈ ν€λ(model head)λ μ κ²½λ§μ λ§μ§λ§ μΈ΅μ μλ―Ένλ©°, μ΄ μΈ΅μ μ΄μ μΈ΅μμ λμ¨ νλ μν(hidden states)λ₯Ό λ°μ λ€λ₯Έ μ°¨μμΌλ‘ λ³νν©λλ€. κ° μμ (task)μ λ°λΌ μλ‘ λ€λ₯Έ λͺ¨λΈ ν€λκ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄: | |
| * [`GPT2ForSequenceClassification`]μ κΈ°λ³Έ [`GPT2Model`] μμ μνμ€ λΆλ₯λ₯Ό μν μ νκ³μΈ΅(linear layer)μ μΆκ°ν λͺ¨λΈ ν€λμ λλ€. | |
| * [`ViTForImageClassification`]μ μ΄λ―Έμ§ λΆλ₯λ₯Ό μν λͺ¨λΈ ν€λλ‘, κΈ°λ³Έ [`ViTModel`] μμ `CLS` ν ν°μ λ§μ§λ§ νλ μνμ μ ν κ³μΈ΅(linear layer)μ μΆκ°ν ꡬ쑰μ λλ€. | |
| * [`Wav2Vec2ForCTC`]λ κΈ°λ³Έ [`Wav2Vec2Model`] μμ [CTC](#connectionist-temporal-classification-ctc)λ₯Ό μ μ©ν μΈμ΄ λͺ¨λΈλ§ ν€λμ λλ€. | |
| ## I | |
| ### μ΄λ―Έμ§ ν¨μΉ (image patch) | |
| λΉμ κΈ°λ° Transformer λͺ¨λΈμ μ΄λ―Έμ§λ₯Ό μμ ν¨μΉλ‘ λΆν ν ν, κ° ν¨μΉλ₯Ό μ ν μλ² λ©νμ¬ μνμ€λ‘ λͺ¨λΈμ μ λ ₯ν©λλ€. λͺ¨λΈμ κ΅¬μ± νμΌμμ `patch_size`(λλ ν΄μλ)λ₯Ό νμΈν μ μμ΅λλ€. | |
| ### μΈνΌλ°μ€ (inference) | |
| μΈνΌλ°μ€λ νμ΅μ΄ μλ£λ λͺ¨λΈμ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ λ ₯νμ¬ μμΈ‘μ μννλ κ³Όμ μ λλ€. π€ Transformerμμ μΈνΌλ°μ€λ₯Ό μννλ λ°©λ²μ [Pipeline for inference](https://huggingface.co/docs/transformers/pipeline_tutorial) νν 리μΌμ μ°Έκ³ νμΈμ. | |
| ### μ λ ₯ ID (input IDs) | |
| μ λ ₯ IDλ μ’ μ’ λͺ¨λΈμ μ λ ₯μΌλ‘ μ λ¬ν΄μΌ νλ μ μΌν νμ νλΌλ―Έν°μ λλ€. μ΄λ€μ ν ν°μ μΈλ±μ€λ‘, λͺ¨λΈμ΄ μ λ ₯μΌλ‘ μ¬μ©ν μνμ€λ₯Ό ꡬμ±νλ ν ν°λ€μ μ«μ ννμ λλ€. | |
| <Youtube id="VFp38yj8h3A"/> | |
| ν ν¬λμ΄μ λ§λ€ μλ λ°©μμ λ€λ₯΄μ§λ§, κΈ°λ³Έ λ©μ»€λμ¦μ λμΌν©λλ€. λ€μμ [WordPiece](https://arxiv.org/pdf/1609.08144.pdf) ν ν¬λμ΄μ μΈ BERT ν ν¬λμ΄μ λ₯Ό μ¬μ©ν μμμ λλ€: | |
| ```python | |
| >>> from transformers import BertTokenizer | |
| >>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-cased") | |
| >>> sequence = "A Titan RTX has 24GB of VRAM" | |
| ``` | |
| ν ν¬λμ΄μ λ μνμ€λ₯Ό ν ν¬λμ΄μ μ ν ν° λͺ©λ‘μ μλ νλͺ©μΌλ‘ λΆλ¦¬ν©λλ€. | |
| ```python | |
| >>> tokenized_sequence = tokenizer.tokenize(sequence) | |
| ``` | |
| ν ν°μ λ¨μ΄μ΄κ±°λ μλΈ μλ(subword)μ λλ€. μλ₯Ό λ€μ΄, "VRAM"μ λͺ¨λΈμ μ΄ν μ¬μ μ μλ λ¨μ΄μ΄κΈ° λλ¬Έμ "V", "RA", "M"μΌλ‘ λλμμ΅λλ€. μ΄ ν ν°λ€μ΄ κ°λ³ λ¨μ΄κ° μλλΌ κ°μ λ¨μ΄μ μΌλΆμμ λνλ΄κΈ° μν΄ "RA"μ "M" μμ λλΈ ν΄μ(`##`)κ° μΆκ° λ©λλ€. | |
| ```python | |
| >>> print(tokenized_sequence) | |
| ['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M'] | |
| ``` | |
| μ΄λ¬ν ν ν°λ€μ λͺ¨λΈμ΄ μ΄ν΄ν μ μλ IDλ‘ λ³νλ μ μμ΅λλ€. μ΄ κ³Όμ μ λ¬Έμ₯μ λ°λ‘ ν ν¬λμ΄μ μ μ λ ₯ν¨μΌλ‘μ¨ μνλλ©°, μ±λ₯ μ΅μ νλ₯Ό μν΄ [π€ Tokenizers](https://github.com/huggingface/tokenizers)μ Rust ꡬνμ νμ©ν©λλ€. | |
| ```python | |
| >>> inputs = tokenizer(sequence) | |
| ``` | |
| ν ν¬λμ΄μ λ ν΄λΉ λͺ¨λΈμ΄ μ¬λ°λ₯΄κ² μλνλ λ° νμν λͺ¨λ μΈμλ₯Ό ν¬ν¨ν λμ λ리λ₯Ό λ°νν©λλ€. ν ν° μΈλ±μ€λ `input_ids`λΌλ ν€μ μ μ₯λ©λλ€. | |
| ```python | |
| >>> encoded_sequence = inputs["input_ids"] | |
| >>> print(encoded_sequence) | |
| [101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102] | |
| ``` | |
| ν ν¬λμ΄μ λ (μ°κ²°λ λͺ¨λΈμ΄ μ΄λ₯Ό μ¬μ©νλ κ²½μ°) μλμΌλ‘ "νΉμ ν ν°"μ μΆκ°ν©λλ€. μ΄λ€μ λͺ¨λΈμ΄ νΉμ μν©μμ μ¬μ©νλ νΉλ³ν IDμ λλ€. | |
| μ΄μ μ ID μνμ€λ₯Ό λμ½λ©νλ©΄, | |
| ```python | |
| >>> decoded_sequence = tokenizer.decode(encoded_sequence) | |
| ``` | |
| μ°λ¦¬λ λ€μκ³Ό κ°μ κ²°κ³Όλ₯Ό λ³΄κ² λ κ²μ λλ€. | |
| ```python | |
| >>> 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)` μ°¨μμ ν μλ₯Ό μ λ ₯μΌλ‘ λ°μΌλ©°, κ° κ°μ κ°λ³ ν ν°μ λν μμ λ μ΄λΈμ λνλ λλ€. | |
| <Tip> | |
| λͺ¨λΈλ§λ€ μꡬνλ λ μ΄λΈ νμμ΄ λ€λ₯Ό μ μμΌλ―λ‘, κ° λͺ¨λΈμ λ¬Έμλ₯Ό νμΈνμ¬ ν΄λΉ λͺ¨λΈμ λ§λ λ μ΄λΈ νμμ λ°λμ νμΈνμΈμ! | |
| </Tip> | |
| κΈ°λ³Έ λͺ¨λΈ([`BertModel`] λ±)μ λ μ΄λΈμ μ λ ₯μΌλ‘ λ°μ§ μμ΅λλ€. μ΄λ¬ν λͺ¨λΈμ λ¨μν νΉμ§(feature)μ μΆλ ₯νλ κΈ°λ³Έ νΈλμ€ν¬λ¨Έ λͺ¨λΈμ΄κΈ° λλ¬Έμ λλ€. | |
| ### λκ·λͺ¨ μΈμ΄ λͺ¨λΈ (LLM) | |
| λκ·λͺ¨ λ°μ΄ν°λ‘ νμ΅λ νΈλμ€ν¬λ¨Έ μΈμ΄ λͺ¨λΈ(GPT-3, BLOOM, OPT λ±)μ μ§μΉνλ μΌλ°μ μΈ μ©μ΄μ λλ€. μ΄λ¬ν λͺ¨λΈμ νμ΅ν μ μλ νλΌλ―Έν°(parameter)μ μκ° λ§€μ° λ§μΌλ©°, μλ₯Ό λ€μ΄ GPT-3λ μ½ 1,750μ΅ κ°μ νλΌλ―Έν°λ₯Ό κ°μ§κ³ μμ΅λλ€. | |
| ## M | |
| ### λ§μ€νΉλ μΈμ΄ λͺ¨λΈλ§ (MLM) | |
| μ¬μ νμ΅ λ¨κ³ μ€ νλλ‘, λͺ¨λΈμ μΌλΆ ν ν°μ΄ 무μμλ‘ λ§μ€νΉ λ μμλ λ¬Έμ₯μ μ λ ₯λ°κ³ , μλμ λ¬Έμ₯μ μμΈ‘ν΄μΌ ν©λλ€. | |
| ### λ©ν°λͺ¨λ¬ (multimodal) | |
| ν μ€νΈμ μ΄λ―Έμ§μ κ°μ λ€λ₯Έ ννμ μ λ ₯μ ν¨κ» μ¬μ©νλ μμ μ λλ€. | |
| ## N | |
| ### μμ°μ΄ μμ± (NLG) | |
| ν μ€νΈλ₯Ό μμ±νλ λͺ¨λ μμ μ μλ―Έν©λλ€. (μ: [Write With Transformers](https://transformer.huggingface.co/), λ²μ λ±). | |
| ### μμ°μ΄ μ²λ¦¬ (NLP) | |
| ν μ€νΈλ₯Ό λ€λ£¨λ μμ μ λ°μ μ§μΉνλ μΌλ°μ μΈ μ©μ΄μ λλ€. | |
| ### μμ°μ΄ μ΄ν΄ (NLU) | |
| ν μ€νΈμ λ΄κΈ΄ μλ―Έλ₯Ό μ΄ν΄νλ λͺ¨λ μμ μ ν¬ν¨ν©λλ€. (μ: μ 체 λ¬Έμ λΆλ₯, κ°λ³ λ¨μ΄ λΆλ₯ λ±). | |
| ## P | |
| ### νμ΄νλΌμΈ (pipeline) | |
| π€ Transformersμμ νμ΄νλΌμΈμ λ°μ΄ν°λ₯Ό μ μ²λ¦¬νκ³ λ³νν ν, λͺ¨λΈμ ν΅ν΄ μμΈ‘κ°μ λ°ννλ μΌλ ¨μ λ¨κ³λ₯Ό μμ°¨μ μΌλ‘ μννλ μΆμνλ κ°λ μ λλ€. νμ΄νλΌμΈμ ν¬ν¨λ μ μλ λ¨κ³λ‘λ λ°μ΄ν° μ μ²λ¦¬, νΉμ§ μΆμΆ(feature extraction), μ κ·ν(normalization) λ±μ΄ μμ΅λλ€. | |
| μμΈν λ΄μ©μ [Pipelines for inference](https://huggingface.co/docs/transformers/pipeline_tutorial) λ¬Έμλ₯Ό μ°Έκ³ νμΈμ. | |
| ### νμ΄νλΌμΈ λ³λ ¬ν (PP) | |
| λͺ¨λΈμ μμ§ λ°©ν₯(λ μ΄μ΄ λ¨μ)μΌλ‘ μ¬λ¬ GPUμ λΆν νμ¬ λ³λ ¬λ‘ μ²λ¦¬νλ λ³λ ¬ν κΈ°λ²μ λλ€. κ° GPUλ λͺ¨λΈμ νλ λλ μ¬λ¬ κ°μ λ μ΄μ΄λ§μ λ΄λΉνλ©°, μ 체 νμ΄νλΌμΈμ μλ‘ λ€λ₯Έ λ¨κ³λ₯Ό λ³λ ¬λ‘ μ²λ¦¬νκ² λ©λλ€. λν κ° GPUλ λ°°μΉ(batch)μ μΌλΆ μμ μ‘°κ°λ§ μ²λ¦¬ν©λλ€. Pipeline Parallel λ°©μμ λν΄ λ μμλ³΄λ €λ©΄ [μ΄ λ¬Έμ](perf_train_gpu_many#from-naive-model-parallelism-to-pipeline-parallelism)λ₯Ό μ°Έκ³ νμΈμ. | |
| ### ν½μ κ° (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](https://huggingface.co/docs/transformers/preprocessing) νν 리μΌμ μ°Έκ³ ν΄ λ³΄μΈμ. | |
| ### μ¬μ νμ΅λ λͺ¨λΈ (pretrained model) | |
| μΌλΆ λ°μ΄ν°(μ: μν€νΌλμ μ 체)λ‘ μ¬μ νμ΅(pretraining)λ λͺ¨λΈμ λλ€. μ¬μ νμ΅μ μκΈ° μ§λ νμ΅(self-supervised learning)μ λͺ©νλ₯Ό ν¬ν¨νλ©°, μλ₯Ό λ€μ΄ λ¬Έμ₯μ μ½κ³ λ€μ λ¨μ΄λ₯Ό μμΈ‘νκ±°λ ([causal language modeling](#causal-language-modeling)) μ°Έκ³ , μΌλΆ λ¨μ΄λ₯Ό λ§μ€νΉνκ³ μ΄λ₯Ό μμΈ‘νλ λ°©μ([masked language modeling](#masked-language-modeling-mlm))μ΄ μμ΅λλ€. | |
| μμ± λ° λΉμ λͺ¨λΈμ κ³ μ μ μ¬μ νμ΅ λͺ©νλ₯Ό κ°μ§κ³ μμ΅λλ€. μλ₯Ό λ€μ΄, Wav2Vec2λ μμ± νν μ€ "μ§μ§"λ₯Ό "κ°μ§" μ€μμ ꡬλΆνλ λμ‘° νμ΅(contrastive learning) λ°©μμΌλ‘ μ¬μ νμ΅λ μμ± λͺ¨λΈμ λλ€. λ°λ©΄, BEiTλ μ΄λ―Έμ§ ν¨μΉ μ€ μΌλΆλ₯Ό λ§μ€νΉνκ³ μ΄λ₯Ό μμΈ‘νλ λ§μ€νΉ μ΄λ―Έμ§ λͺ¨λΈλ§ λ°©μμΌλ‘ μ¬μ νμ΅λ λΉμ λͺ¨λΈμ λλ€. μ΄λ λ§μ€νΉ μΈμ΄ λͺ¨λΈλ§κ³Ό μ μ¬ν λ°©μμ λλ€. | |
| ## R | |
| ### μν μ κ²½λ§ (RNN) | |
| ν μ€νΈμ κ°μ μνμ€ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄ λ μ΄μ΄μ λ°λ³΅ ꡬ쑰(루ν)λ₯Ό μ¬μ©νλ μ κ²½λ§ λͺ¨λΈμ ν μ’ λ₯μ λλ€. | |
| ### νννμ΅ (representation learning) | |
| λ¨Έμ λ¬λμ νμ λΆμΌλ‘, μμ λ°μ΄ν°λ‘λΆν° μλ―Έ μλ ννμ νμ΅νλ λ° μ€μ μ λ‘λλ€. λνμ μΈ κΈ°λ²μΌλ‘λ λ¨μ΄ μλ² λ©, μ€ν μΈμ½λ(autoencoder), μμ±μ μ λ μ κ²½λ§(GAN) λ±μ΄ μμ΅λλ€. | |
| ## S | |
| ### μνλ§ μλ (sampling rate) | |
| μνλ§ μλλ 1μ΄μ μΆμΆνλ (μ€λμ€ μ νΈ) μνμ κ°μλ₯Ό ν€λ₯΄μΈ (Hz) λ¨μλ‘ λνλΈ μΈ‘μ κ°μ λλ€. μ΄λ μμ±μ²λΌ μ°μμ μΈ μ νΈλ₯Ό λμ§νΈννμ¬ μ΄μ°μ μΈ ννλ‘ λ§λλ κ²°κ³Όμ λλ€. | |
| ### μ ν μ΄ν μ (self-attention) | |
| μ λ ₯μ κ° μμκ° λ€λ₯Έ μ΄λ€ μμμ μ£Όλͺ©ν΄μΌ νλμ§λ₯Ό μ€μ€λ‘ νλ¨νλ λ©μ»€λμ¦μ λλ€. μ΄λ λͺ¨λΈμ΄ λ¬Έμ₯μμ νΉμ λ¨μ΄λ§μ 보λ κ²μ΄ μλλΌ, λ€λ₯Έ λ¨μ΄λ€κ³Όμ κ΄κ³λ₯Ό κ³ λ €νμ¬ μ΄λ€ μ 보μ λ μ§μ€ν΄μΌ ν μ§λ₯Ό νμ΅νκ² ν©λλ€. | |
| ### μκΈ°μ§λ νμ΅ (self-supervised learning) | |
| λ μ΄λΈμ΄ μλ λ°μ΄ν°λ‘λΆν° λͺ¨λΈμ΄ μ€μ€λ‘ νμ΅ λͺ©νλ₯Ό μ μνμ¬ νμ΅νλ λ¨Έμ λ¬λ κΈ°λ²μ ν μ’ λ₯μ λλ€. [λΉμ§λ νμ΅](#unsupervised-learning)μ΄λ [μ§λ νμ΅](#supervised-learning)κ³Ό λ¬λ¦¬, νμ΅ κ³Όμ μ체λ κ°λ λ°©μ λμ§λ§, λΌλ²¨μ΄ λͺ μμ μΌλ‘ μ£Όμ΄μ§λ κ²μ μλλλ€. | |
| μμλ‘λ [λ§μ€ν¬ μΈμ΄ λͺ¨λΈλ§](#masked-language-modeling-mlm)μ΄ μμΌλ©°, μ΄λ λ¬Έμ₯μ μΌλΆ ν ν°μ μ κ±°ν μνλ‘ λͺ¨λΈμ μ λ ₯νκ³ , λͺ¨λΈμ΄ ν΄λΉ ν ν°μ μμΈ‘νλλ‘ νμ΅νλ λ°©μμ λλ€. | |
| ### μ€μ§λ νμ΅ (semi-supervised learning) | |
| μλμ λΌλ²¨μ΄ λ¬λ¦° λ°μ΄ν°μ λλμ λΌλ²¨μ΄ μλ λ°μ΄ν°λ₯Ό ν¨κ» μ¬μ©νμ¬ λͺ¨λΈμ μ νλλ₯Ό λμ΄λ λ¨Έμ λ¬λ νλ ¨ κΈ°λ²μ λμ λ²μ£Όμ λλ€. μ΄λ [μ§λ νμ΅](#supervised-learning)μ΄λ [λΉμ§λ νμ΅](#unsupervised-learning)κ³Όλ λ€λ₯Έ λ°©μμ λλ€. | |
| μ€μ§λ νμ΅ κΈ°λ²μ μλ‘λ "μκΈ° νμ΅(self-training)"μ΄ μμ΅λλ€. μ΄ λ°©μμ λ¨Όμ λΌλ²¨μ΄ μλ λ°μ΄ν°λ‘ λͺ¨λΈμ νμ΅μν€κ³ , κ·Έ λͺ¨λΈμ μ¬μ©ν΄ λΌλ²¨μ΄ μλ λ°μ΄ν°μ λν μμΈ‘μ μνν©λλ€. λͺ¨λΈμ΄ κ°μ₯ λμ νμ μ κ°μ§κ³ μμΈ‘ν λΌλ²¨μ΄ μλ λ°μ΄ν° μΌλΆλ₯Ό λΌλ²¨μ΄ μλ λ°μ΄ν°λ‘ μΆκ°νκ³ , μ΄λ₯Ό ν΅ν΄ λͺ¨λΈμ λ€μ νμ΅μν΅λλ€. | |
| ### μνμ€ ν¬ μνμ€ (seq2seq) | |
| μ λ ₯μΌλ‘λΆν° μλ‘μ΄ μνμ€λ₯Ό μμ±νλ λͺ¨λΈμ λλ€. μλ₯Ό λ€μ΄ λ²μ λͺ¨λΈμ΄λ μμ½ λͺ¨λΈμ΄ μ΄μ ν΄λΉνλ©°, λνμ μΈ μλ‘λ [Bart](model_doc/bart)λ[T5](model_doc/t5) λͺ¨λΈμ΄ μμ΅λλ€. | |
| ### λΆν DDP (Sharded DDP) | |
| [ZeRO](#zero-redundancy-optimizer-zero) κ°λ μ κΈ°λ°μΌλ‘ λ€μν ꡬνμμ μ¬μ©λλ λ€λ₯Έ μ΄λ¦μΌλ‘ λΆλ¦½λλ€. | |
| ### μ€νΈλΌμ΄λ (stride) | |
| [convolution](#convolution) λλ [pooling](#pooling)μμ μ€νΈλΌμ΄λ(stride)λ 컀λμ΄ νλ ¬ μλ₯Ό μ΄λνλ κ°κ²©μ μλ―Έν©λλ€. μ€νΈλΌμ΄λκ° 1μ΄λ©΄ 컀λμ΄ ν ν½μ μ© μ΄λνκ³ , 2μ΄λ©΄ λ ν½μ μ© μ΄λν©λλ€. | |
| ### μ§λνμ΅ (supervised learning) | |
| μ λ΅μ΄ ν¬ν¨λ λΌλ²¨λ§λ λ°μ΄ν°λ₯Ό μ§μ μ¬μ©νμ¬ λͺ¨λΈμ μ±λ₯μ κ°μ νλ νμ΅ λ°©μμ λλ€. νμ΅ μ€μΈ λͺ¨λΈμ λ°μ΄ν°λ₯Ό μ λ ₯νκ³ , μμΈ‘ κ²°κ³Όλ₯Ό μ λ΅κ³Ό λΉκ΅νμ¬ μ€μ°¨λ₯Ό κ³μ°ν©λλ€. λͺ¨λΈμ μ΄ μ€μ°¨λ₯Ό κΈ°λ°μΌλ‘ κ°μ€μΉλ₯Ό μ λ°μ΄νΈνλ©°, μ΄λ¬ν κ³Όμ μ λ°λ³΅νμ¬ μ±λ₯μ μ΅μ νν©λλ€. | |
| ## T | |
| ### ν μ λ³λ ¬ν (TP) | |
| μ¬λ¬ GPUμμ νλ ¨νκΈ° μν λ³λ ¬ν κΈ°λ²μΌλ‘, κ° ν μλ₯Ό μ¬λ¬ λ©μ΄λ¦¬(chunk)λ‘ λλλλ€. λ°λΌμ μ 체 ν μκ° λ¨μΌ GPUμ μμ£Όνλ λμ , ν μμ κ° μ‘°κ°(shard)μ΄ μ§μ λ GPUμ μμ£Όνκ² λ©λλ€. μ΄ μ‘°κ°λ€μ κ°κ° λ€λ₯Έ GPUμμ κ°λ³μ μΌλ‘ λ³λ ¬ μ²λ¦¬λλ©°, μ²λ¦¬ λ¨κ³κ° λλ λ κ²°κ³Όκ° λκΈ°νλ©λλ€. μ΄λ¬ν λΆν μ΄ μν λ°©ν₯μΌλ‘ μΌμ΄λκΈ° λλ¬Έμ, μ΄λ λλλ‘ μνμ λ³λ ¬νλΌκ³ λΆλ¦½λλ€. Tensor Parallelismμ λν΄ λ μμλ³΄λ €λ©΄ [μ¬κΈ°](perf_train_gpu_many#tensor-parallelism)λ₯Ό μ°Έκ³ νμΈμ. | |
| ### ν ν° (token) | |
| μΌλ°μ μΈ λ¨μ΄ λ¨μμ΄μ§λ§, λμ λ°λΌ μλΈ μλ(μμ£Ό μ¬μ©λμ§ μλ λ¨μ΄λ μλΈ μλλ‘ λΆλ¦¬λ¨)λ λ¬Έμ₯ λΆνΈλ ν¬ν¨λ μ μλ λ¬Έμ₯μ κ΅¬μ± μμμ λλ€. | |
| ### ν ν° νμ ID (token type IDs) | |
| μΌλΆ λͺ¨λΈμ λ¬Έμ₯ μ λΆλ₯λ μ§μ μλ΅ μμ μ μννλ λ° μ¬μ©λ©λλ€. | |
| <Youtube id="0u3ioSwev3s"/> | |
| μ΄λ¬ν μμ μμλ λ κ°μ μλ‘ λ€λ₯Έ μνμ€λ₯Ό νλμ "input_ids" νλͺ©μΌλ‘ κ²°ν©ν΄μΌ νλ©°, μΌλ°μ μΌλ‘ `[CLS]` λΆλ₯μ© λ° `[SEP]` ꡬλΆμ©κ³Ό κ°μ νΉμ ν ν°μ μ¬μ©νμ¬ μ²λ¦¬ν©λλ€. μλ₯Ό λ€μ΄, BERT λͺ¨λΈμ λ κ°μ μνμ€λ₯Ό λ€μκ³Ό κ°μ λ°©μμΌλ‘ ꡬμ±ν©λλ€: | |
| ```python | |
| >>> # [CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP] | |
| ``` | |
| λ κ°μ μνμ€λ₯Ό `tokenizer`μ 리μ€νΈκ° μλ κ°λ³ μΈμλ‘ μ λ¬νλ©΄, ν ν¬λμ΄μ κ° μλμΌλ‘ μ΄λ¬ν λ¬Έμ₯μ μμ±ν΄ μ€λλ€. μμλ λ€μκ³Ό κ°μ΅λλ€: | |
| ```python | |
| >>> 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"]) | |
| ``` | |
| κ²°κ³Όλ μλμ κ°μ΅λλ€: | |
| ```python | |
| >>> print(decoded) | |
| [CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP] | |
| ``` | |
| μ΄ μ½λλ μΌλΆ λͺ¨λΈμ΄ λ κ°μ μνμ€λ₯Ό μ΄λ»κ² ꡬλΆνλμ§ μ΄ν΄νλ λ° μΆ©λΆν©λλ€. κ·Έλ¬λ BERTμ κ°μ λ€λ₯Έ λͺ¨λΈμ ν ν° νμ ID(λλ μΈκ·Έλ¨ΌνΈ ID)λ₯Ό μΆκ°λ‘ μ¬μ©ν©λλ€. μ΄ IDλ 0κ³Ό 1λ‘ κ΅¬μ±λ μ΄μ§ λ§μ€ν¬λ‘, λ μνμ€λ₯Ό ꡬλΆνλ μν μ ν©λλ€. | |
| ν ν¬λμ΄μ λ μ΄ λ§μ€ν¬λ₯Ό "token_type_id" νλͺ©μΌλ‘ λ°νν©λλ€: | |
| ```python | |
| >>> 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](#tensor-parallelism-tp)κ³Ό μ μ¬νκ² ν μλ₯Ό μ€λ©(sharding)νλ λ³λ ¬ μ²λ¦¬ κΈ°λ²μ΄μ§λ§, μμ ν(forward)λ μμ ν(backward) κ³μ° μμ μ μ 체 ν μλ₯Ό λ€μ 볡μνλ€λ μ μμ μ°¨μ΄κ° μμ΅λλ€. λ°λΌμ λͺ¨λΈ μ체λ₯Ό μμ ν νμκ° μμ΅λλ€. μ΄ λ°©λ²μ GPU λ©λͺ¨λ¦¬κ° λΆμ‘±ν κ²½μ° μ΄λ₯Ό 보μνκΈ° μν λ€μν μ€νλ‘λ© (offloading) κΈ°λ²λ μ§μν©λλ€. | |
| ZeROμ λν΄ λ μμλ³΄λ €λ©΄ [μ΄ λ¬Έμ](perf_train_gpu_many#zero-data-parallelism)λ₯Ό μ°Έκ³ νμΈμ. | |