File size: 31,350 Bytes
ca32b0e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 | <!--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)λ₯Ό μ°Έκ³ νμΈμ.
|