File size: 33,311 Bytes
ee6e328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
<!--Copyright 2023 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.

-->

# πŸ€— Transformers둜 μž‘μ—…μ„ ν•΄κ²°ν•˜λŠ” 방법[[how-transformers-solve-tasks]]

[πŸ€— Transformers둜 ν•  수 μžˆλŠ” μž‘μ—…](task_summary)μ—μ„œ μžμ—°μ–΄ 처리(NLP), μŒμ„± 및 μ˜€λ””μ˜€, 컴퓨터 λΉ„μ „ μž‘μ—… λ“±μ˜ μ€‘μš”ν•œ μ‘μš©μ„ λ°°μ› μŠ΅λ‹ˆλ‹€. 이 νŽ˜μ΄μ§€μ—μ„œλŠ” λͺ¨λΈμ΄ μ΄λŸ¬ν•œ μž‘μ—…μ„ μ–΄λ–»κ²Œ ν•΄κ²°ν•˜λŠ”μ§€ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ³  λ‚΄λΆ€μ—μ„œ μ–΄λ–€ 일이 μΌμ–΄λ‚˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€. 주어진 μž‘μ—…μ„ ν•΄κ²°ν•˜λŠ” λ§Žμ€ 방법이 있으며, 일뢀 λͺ¨λΈμ€ νŠΉμ • κΈ°μˆ μ„ κ΅¬ν˜„ν•˜κ±°λ‚˜ 심지어 μƒˆλ‘œμš΄ λ°©μ‹μœΌλ‘œ μž‘μ—…μ— μ ‘κ·Όν•  μˆ˜λ„ μžˆμ§€λ§Œ, Transformer λͺ¨λΈμ˜ 경우 일반적인 μ•„μ΄λ””μ–΄λŠ” λ™μΌν•©λ‹ˆλ‹€. μœ μ—°ν•œ μ•„ν‚€ν…μ²˜ 덕뢄에 λŒ€λΆ€λΆ„μ˜ λͺ¨λΈμ€ 인코더, 디코더 λ˜λŠ” 인코더-디코더 ꡬ쑰의 λ³€ν˜•μž…λ‹ˆλ‹€. Transformer λͺ¨λΈλΏλ§Œ μ•„λ‹ˆλΌ 우리의 λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” μ˜€λŠ˜λ‚  컴퓨터 λΉ„μ „ μž‘μ—…μ— μ‚¬μš©λ˜λŠ” λͺ‡ 가지 ν•©μ„±κ³± 신경망(CNNs)도 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μš°λ¦¬λŠ” ν˜„λŒ€ CNN의 μž‘λ™ 방식에 λŒ€ν•΄ μ„€λͺ…ν•  κ²ƒμž…λ‹ˆλ‹€.

μž‘μ—…μ΄ μ–΄λ–»κ²Œ ν•΄κ²°λ˜λŠ”μ§€ μ„€λͺ…ν•˜κΈ° μœ„ν•΄, μœ μš©ν•œ μ˜ˆμΈ‘μ„ 좜λ ₯ν•˜κ³ μž λͺ¨λΈ λ‚΄λΆ€μ—μ„œ μ–΄λ–€ 일이 μΌμ–΄λ‚˜λŠ”μ§€ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.

- μ˜€λ””μ˜€ λΆ„λ₯˜ 및 μžλ™ μŒμ„± 인식(ASR)을 μœ„ν•œ [Wav2Vec2](model_doc/wav2vec2)
- 이미지 λΆ„λ₯˜λ₯Ό μœ„ν•œ [Vision Transformer (ViT)](model_doc/vit) 및 [ConvNeXT](model_doc/convnext)
- 객체 탐지λ₯Ό μœ„ν•œ [DETR](model_doc/detr)
- 이미지 뢄할을 μœ„ν•œ [Mask2Former](model_doc/mask2former)
- 깊이 좔정을 μœ„ν•œ [GLPN](model_doc/glpn)
- 인코더λ₯Ό μ‚¬μš©ν•˜λŠ” ν…μŠ€νŠΈ λΆ„λ₯˜, 토큰 λΆ„λ₯˜ 및 μ§ˆμ˜μ‘λ‹΅κ³Ό 같은 NLP μž‘μ—…μ„ μœ„ν•œ [BERT](model_doc/bert)
- 디코더λ₯Ό μ‚¬μš©ν•˜λŠ” ν…μŠ€νŠΈ 생성과 같은 NLP μž‘μ—…μ„ μœ„ν•œ [GPT2](model_doc/gpt2)
- 인코더-디코더λ₯Ό μ‚¬μš©ν•˜λŠ” μš”μ•½ 및 λ²ˆμ—­κ³Ό 같은 NLP μž‘μ—…μ„ μœ„ν•œ [BART](model_doc/bart)

<Tip>

더 λ‚˜μ•„κ°€κΈ° 전에, κΈ°μ‘΄ Transformer μ•„ν‚€ν…μ²˜μ— λŒ€ν•œ 기본적인 지식을 μˆ™μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 인코더, 디코더 및 μ–΄ν…μ…˜μ˜ μž‘λ™ 방식을 μ•Œλ©΄ λ‹€μ–‘ν•œ Transformer λͺ¨λΈμ΄ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ΄ν•΄ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€. μ‹œμž‘ λ‹¨κ³„κ±°λ‚˜ 볡슡이 ν•„μš”ν•œ 경우, 더 λ§Žμ€ 정보λ₯Ό μœ„ν•΄ [μ½”μŠ€](https://huggingface.co/course/chapter1/4?fw=pt)λ₯Ό ν™•μΈν•˜μ„Έμš”!

</Tip>

## μŒμ„± 및 μ˜€λ””μ˜€[[speech-and-audio]]

[Wav2Vec2](model_doc/wav2vec2)λŠ” λ ˆμ΄λΈ”μ΄ μ§€μ •λ˜μ§€ μ•Šμ€ μŒμ„± 데이터에 λŒ€ν•΄ μ‚¬μ „ν›ˆλ ¨λœ λͺ¨λΈλ‘œ, μ˜€λ””μ˜€ λΆ„λ₯˜ 및 μžλ™ μŒμ„± 인식을 μœ„ν•΄ λ ˆμ΄λΈ”μ΄ μ§€μ •λœ λ°μ΄ν„°λ‘œ λ―Έμ„Έ μ‘°μ •ν•©λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/wav2vec2_architecture.png"/>
</div>

이 λͺ¨λΈμ—λŠ” 4가지 μ£Όμš” ꡬ성 μš”μ†Œκ°€ μžˆμŠ΅λ‹ˆλ‹€:

1. *νŠΉμ§• 인코더(feature encoder)*λŠ” μ›μ‹œ μ˜€λ””μ˜€ νŒŒν˜•(raw audio waveform)을 κ°€μ Έμ™€μ„œ 제둜 평균 및 λ‹¨μœ„ λΆ„μ‚°μœΌλ‘œ ν‘œμ€€ν™”ν•˜κ³ , 각각 20ms 길이의 νŠΉμ§• λ²‘ν„°μ˜ μ‹œν€€μŠ€λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

2. μ˜€λ””μ˜€ νŒŒν˜•μ€ 본질적으둜 연속적이기 λ•Œλ¬Έμ—, ν…μŠ€νŠΈ μ‹œν€€μŠ€λ₯Ό λ‹¨μ–΄λ‘œ λ‚˜λˆ„λŠ” 것과 같이 λΆ„ν• ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ *μ–‘μžν™” λͺ¨λ“ˆ(quantization module)*둜 μ „λ‹¬λ˜λŠ” νŠΉμ§• λ²‘ν„°λŠ” μ΄μ‚°ν˜• μŒμ„± λ‹¨μœ„λ₯Ό ν•™μŠ΅ν•˜κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. μŒμ„± λ‹¨μœ„λŠ” *μ½”λ“œλΆ(codebook)*(μ–΄νœ˜μ§‘μ΄λΌκ³  생각할 수 μžˆμŠ΅λ‹ˆλ‹€)μ΄λΌλŠ” μ½”λ“œλ‹¨μ–΄(codewords) μ½œλ ‰μ…˜μ—μ„œ μ„ νƒλ©λ‹ˆλ‹€. μ½”λ“œλΆμ—μ„œ 연속적인 μ˜€λ””μ˜€ μž…λ ₯을 κ°€μž₯ 잘 λ‚˜νƒ€λ‚΄λŠ” 벑터 λ˜λŠ” μŒμ„± λ‹¨μœ„κ°€ μ„ νƒλ˜μ–΄ λͺ¨λΈμ„ ν†΅κ³Όν•©λ‹ˆλ‹€.

3. νŠΉμ§• λ²‘ν„°μ˜ μ ˆλ°˜μ€ λ¬΄μž‘μœ„λ‘œ λ§ˆμŠ€ν¬κ°€ 적용되며, 마슀크된 νŠΉμ§• λ²‘ν„°λŠ” *μƒλŒ€μ  μœ„μΉ˜ μž„λ² λ”©*을 μΆ”κ°€ν•˜λŠ” Transformer 인코더인 *λ¬Έλ§₯ λ„€νŠΈμ›Œν¬(context network)*둜 μ „λ‹¬λ©λ‹ˆλ‹€.

4. λ¬Έλ§₯ λ„€νŠΈμ›Œν¬μ˜ μ‚¬μ „ν›ˆλ ¨ λͺ©ν‘œλŠ” *λŒ€μ‘°μ  μž‘μ—…(contrastive task)*μž…λ‹ˆλ‹€. λͺ¨λΈμ€ 잘λͺ»λœ 예츑 μ‹œν€€μŠ€μ—μ„œ 마슀크된 예츑의 μ‹€μ œ μ–‘μžν™”λœ μŒμ„± ν‘œν˜„μ„ μ˜ˆμΈ‘ν•˜λ©°, λͺ¨λΈμ΄ κ°€μž₯ μœ μ‚¬ν•œ μ»¨ν…μŠ€νŠΈ 벑터와 μ–‘μžν™”λœ μŒμ„± λ‹¨μœ„(νƒ€κ²Ÿ λ ˆμ΄λΈ”)λ₯Ό 찾도둝 ꢌμž₯ν•©λ‹ˆλ‹€.

이제 wav2vec2κ°€ μ‚¬μ „ν›ˆλ ¨λ˜μ—ˆμœΌλ―€λ‘œ, μ˜€λ””μ˜€ λΆ„λ₯˜ λ˜λŠ” μžλ™ μŒμ„± 인식을 μœ„ν•΄ 데이터에 맞좰 λ―Έμ„Έ μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

### μ˜€λ””μ˜€ λΆ„λ₯˜[[audio-classification]]

μ‚¬μ „ν›ˆλ ¨λœ λͺ¨λΈμ„ μ˜€λ””μ˜€ λΆ„λ₯˜μ— μ‚¬μš©ν•˜λ €λ©΄, κΈ°λ³Έ Wav2Vec2 λͺ¨λΈ 상단에 μ‹œν€€μŠ€ λΆ„λ₯˜ ν—€λ“œλ₯Ό μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€. λΆ„λ₯˜ ν—€λ“œλŠ” μΈμ½”λ”μ˜ 은닉 μƒνƒœ(hidden states)λ₯Ό λ°›λŠ” μ„ ν˜• λ ˆμ΄μ–΄μž…λ‹ˆλ‹€. 은닉 μƒνƒœλŠ” 각각 길이가 λ‹€λ₯Έ μ˜€λ””μ˜€ ν”„λ ˆμž„μ—μ„œ ν•™μŠ΅λœ νŠΉμ§•μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. κ³ μ • 길이의 벑터 ν•˜λ‚˜λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄, 은닉 μƒνƒœλŠ” λ¨Όμ € ν’€λ§λ˜κ³ , 클래슀 λ ˆμ΄λΈ”μ— λŒ€ν•œ λ‘œμ§“μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. κ°€μž₯ κ°€λŠ₯성이 높은 클래슀λ₯Ό μ°ΎκΈ° μœ„ν•΄ λ‘œμ§“κ³Ό νƒ€κ²Ÿ μ‚¬μ΄μ˜ ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀이 κ³„μ‚°λ©λ‹ˆλ‹€.

μ˜€λ””μ˜€ λΆ„λ₯˜μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [μ˜€λ””μ˜€ λΆ„λ₯˜ κ°€μ΄λ“œ](tasks/audio_classification)λ₯Ό ν™•μΈν•˜μ—¬ Wav2Vec2λ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

### μžλ™ μŒμ„± 인식[[automatic-speech-recognition]]

μ‚¬μ „ν›ˆλ ¨λœ λͺ¨λΈμ„ μžλ™ μŒμ„± 인식에 μ‚¬μš©ν•˜λ €λ©΄, [μ—°κ²°μ£Όμ˜μ  μ‹œκ°„ λΆ„λ₯˜(CTC, Connectionist Temporal Classification)](glossary#connectionist-temporal-classification-ctc)λ₯Ό μœ„ν•΄ κΈ°λ³Έ Wav2Vec2 λͺ¨λΈ 상단에 μ–Έμ–΄ λͺ¨λΈλ§ ν—€λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. μ–Έμ–΄ λͺ¨λΈλ§ ν—€λ“œλŠ” μΈμ½”λ”μ˜ 은닉 μƒνƒœλ₯Ό λ°›μ•„μ„œ λ‘œμ§“μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. 각 λ‘œμ§“μ€ 토큰 클래슀(토큰 μˆ˜λŠ” μž‘μ—…μ˜ μ–΄νœ˜μ—μ„œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. CTC 손싀은 ν…μŠ€νŠΈλ‘œ λ””μ½”λ”©λœ ν† ν°μ—μ„œ κ°€μž₯ κ°€λŠ₯성이 높은 토큰 μ‹œν€€μŠ€λ₯Ό μ°ΎκΈ° μœ„ν•΄ λ‘œμ§“κ³Ό νƒ€κ²Ÿ μ‚¬μ΄μ—μ„œ κ³„μ‚°λ©λ‹ˆλ‹€. 

μžλ™ μŒμ„± 인식에 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [μžλ™ μŒμ„± 인식 κ°€μ΄λ“œ](tasks/asr)λ₯Ό ν™•μΈν•˜μ—¬ Wav2Vec2λ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

## 컴퓨터 λΉ„μ „[[computer-vision]]

컴퓨터 λΉ„μ „ μž‘μ—…μ— μ ‘κ·Όν•˜λŠ” 2가지 방법이 μžˆμŠ΅λ‹ˆλ‹€:

1. 이미지λ₯Ό 패치 μ‹œν€€μŠ€λ‘œ λΆ„λ¦¬ν•˜κ³  Transformer둜 병렬 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
2. [ConvNeXT](model_doc/convnext)와 같은 ν˜„λŒ€ CNN을 μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” ν•©μ„±κ³± λ ˆμ΄μ–΄λ₯Ό 기반으둜 ν•˜μ§€λ§Œ ν˜„λŒ€ λ„€νŠΈμ›Œν¬ 섀계λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

<Tip>

μ„Έ 번째 방법은 Transformer와 ν•©μ„±κ³±(예λ₯Ό λ“€μ–΄, [Convolutional Vision Transformer](model_doc/cvt) λ˜λŠ” [LeViT](model_doc/levit))을 κ²°ν•©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” μ‚΄νŽ΄λ³Ό 두 가지 λ°©λ²•λ§Œ κ²°ν•©ν•˜κΈ° λ•Œλ¬Έμ— μ—¬κΈ°μ„œ 이 방법을 닀루지 μ•ŠμŠ΅λ‹ˆλ‹€.

</Tip>

ViT와 ConvNeXTλŠ” 일반적으둜 이미지 λΆ„λ₯˜μ—μ„œ μ‚¬μš©λ˜μ§€λ§Œ, 물체 감지, λΆ„ν• , 깊이 μΆ”μ •κ³Ό 같은 λ‹€λ₯Έ λΉ„μ „ μž‘μ—…μ—λŠ” 각각 DETR, Mask2Former, GLPN이 더 μ ν•©ν•˜λ―€λ‘œ μ΄λŸ¬ν•œ λͺ¨λΈμ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

### 이미지 λΆ„λ₯˜[[image-classification]]

ViT와 ConvNeXT λͺ¨λ‘ 이미지 λΆ„λ₯˜μ— μ‚¬μš©λ  수 μžˆμ§€λ§Œ, ViTλŠ” μ–΄ν…μ…˜ λ©”μ»€λ‹ˆμ¦˜μ„, ConvNeXTλŠ” 합성곱을 μ‚¬μš©ν•˜λŠ” 것이 주된 μ°¨μ΄μž…λ‹ˆλ‹€.

#### Transformer[[transformer]]

[ViT](model_doc/vit)은 합성곱을 μ „μ μœΌλ‘œ 순수 Transformer μ•„ν‚€ν…μ²˜λ‘œ λŒ€μ²΄ν•©λ‹ˆλ‹€. κΈ°μ‘΄ Transformer에 μ΅μˆ™ν•˜λ‹€λ©΄, ViTλ₯Ό μ΄ν•΄ν•˜λŠ” λ°©λ²•μ˜ λŒ€λΆ€λΆ„μ„ 이미 νŒŒμ•…ν–ˆλ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/vit_architecture.jpg"/>
</div>

ViTκ°€ λ„μž…ν•œ μ£Όμš” λ³€κ²½ 사항은 이미지가 Transformer둜 μ–΄λ–»κ²Œ μ „λ‹¬λ˜λŠ”μ§€μ— μžˆμŠ΅λ‹ˆλ‹€:

1. μ΄λ―Έμ§€λŠ” μ„œλ‘œ μ€‘μ²©λ˜μ§€ μ•ŠλŠ” μ •μ‚¬κ°ν˜• 패치둜 λΆ„ν• λ˜κ³ , 각 νŒ¨μΉ˜λŠ” 벑터 λ˜λŠ” *패치 μž„λ² λ”©(patch embedding)*으둜 λ³€ν™˜λ©λ‹ˆλ‹€. 패치 μž„λ² λ”©μ€ μ μ ˆν•œ μž…λ ₯ 차원을 λ§Œλ“œλŠ” 2D ν•©μ„±κ³± κ³„μΈ΅μ—μ„œ μƒμ„±λ©λ‹ˆλ‹€(κΈ°λ³Έ Transformer의 경우 각 패치의 μž„λ² λ”©λ§ˆλ‹€ 768개의 값이 ν•„μš”ν•©λ‹ˆλ‹€). 224x224 ν”½μ…€ 이미지가 μžˆλ‹€λ©΄, 16x16 이미지 패치 196개둜 λΆ„ν• ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν…μŠ€νŠΈκ°€ λ‹¨μ–΄λ‘œ ν† ν°ν™”λ˜λŠ” κ²ƒμ²˜λŸΌ, 이미지도 패치 μ‹œν€€μŠ€λ‘œ "토큰화"λ©λ‹ˆλ‹€.

2. *ν•™μŠ΅ κ°€λŠ₯ν•œ μž„λ² λ”©(learnable embedding)*(νŠΉμˆ˜ν•œ `[CLS]` 토큰)이 BERT와 같이 패치 μž„λ² λ”©μ˜ μ‹œμž‘ 뢀뢄에 μΆ”κ°€λ©λ‹ˆλ‹€. `[CLS]` ν† ν°μ˜ λ§ˆμ§€λ§‰ 은닉 μƒνƒœλŠ” λΆ€μ°©λœ λΆ„λ₯˜ ν—€λ“œμ˜ μž…λ ₯으둜 μ‚¬μš©λ˜κ³ , λ‹€λ₯Έ 좜λ ₯은 λ¬΄μ‹œλ©λ‹ˆλ‹€. 이 토큰은 λͺ¨λΈμ΄ μ΄λ―Έμ§€μ˜ ν‘œν˜„μ„ μΈμ½”λ”©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

3. νŒ¨μΉ˜μ™€ ν•™μŠ΅ κ°€λŠ₯ν•œ μž„λ² λ”©μ— λ§ˆμ§€λ§‰μœΌλ‘œ μΆ”κ°€ν•  것은 *μœ„μΉ˜ μž„λ² λ”©*μž…λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ λͺ¨λΈμ€ 이미지 패치의 μˆœμ„œλ₯Ό λͺ¨λ₯΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μœ„μΉ˜ μž„λ² λ”©λ„ ν•™μŠ΅ κ°€λŠ₯ν•˜λ©°, 패치 μž„λ² λ”©κ³Ό λ™μΌν•œ 크기λ₯Ό κ°€μ§‘λ‹ˆλ‹€. μ΅œμ’…μ μœΌλ‘œ, λͺ¨λ“  μž„λ² λ”©μ΄ Transformer 인코더에 μ „λ‹¬λ©λ‹ˆλ‹€.

4. `[CLS]` 토큰을 ν¬ν•¨ν•œ 좜λ ₯은 λ‹€μΈ΅ νΌμ…‰νŠΈλ‘  ν—€λ“œ(MLP)에 μ „λ‹¬λ©λ‹ˆλ‹€. ViT의 μ‚¬μ „ν›ˆλ ¨ λͺ©ν‘œλŠ” λ‹¨μˆœνžˆ λΆ„λ₯˜μž…λ‹ˆλ‹€. λ‹€λ₯Έ λΆ„λ₯˜ ν—€λ“œμ™€ 같이, MLP ν—€λ“œλŠ” 좜λ ₯을 클래슀 λ ˆμ΄λΈ”μ— λŒ€ν•΄ λ‘œμ§“μœΌλ‘œ λ³€ν™˜ν•˜κ³  ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀을 κ³„μ‚°ν•˜μ—¬ κ°€μž₯ κ°€λŠ₯성이 높은 클래슀λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

이미지 λΆ„λ₯˜μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [이미지 λΆ„λ₯˜ κ°€μ΄λ“œ](tasks/image_classification)λ₯Ό ν™•μΈν•˜μ—¬ ViTλ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

#### CNN[[cnn]]

<Tip>

이 μ„Ήμ…˜μ—μ„œλŠ” 합성곱에 λŒ€ν•΄ κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λ―Έμ§€μ˜ λͺ¨μ–‘κ³Ό 크기가 μ–΄λ–»κ²Œ λ³€ν™”ν•˜λŠ”μ§€μ— λŒ€ν•œ 사전 이해가 μžˆλ‹€λ©΄ 도움이 될 κ²ƒμž…λ‹ˆλ‹€. 합성곱에 μ΅μˆ™ν•˜μ§€ μ•Šμ€ 경우, fastai book의 [ν•©μ„±κ³± 신경망 챕터](https://github.com/fastai/fastbook/blob/master/13_convolutions.ipynb)λ₯Ό ν™•μΈν•˜μ„Έμš”!

</Tip>

[ConvNeXT](model_doc/convnext)λŠ” μ„±λŠ₯을 높이기 μœ„ν•΄ μƒˆλ‘œμš΄ ν˜„λŒ€ λ„€νŠΈμ›Œν¬ 섀계λ₯Ό μ μš©ν•œ CNN κ΅¬μ‘°μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 합성곱은 μ—¬μ „νžˆ λͺ¨λΈμ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€. 높은 μˆ˜μ€€μ˜ κ΄€μ μ—μ„œ λ³Ό λ•Œ, [ν•©μ„±κ³±](glossary#convolution)은 μž‘μ€ ν–‰λ ¬(*컀널*)에 이미지 ν”½μ…€μ˜ μž‘μ€ μœˆλ„μš°λ₯Ό κ³±ν•˜λŠ” μ—°μ‚°μž…λ‹ˆλ‹€. μ΄λŠ” νŠΉμ • ν…μŠ€μ³(texture)μ΄λ‚˜ μ„ μ˜ 곑λ₯ κ³Ό 같은 일뢀 νŠΉμ§•μ„ κ³„μ‚°ν•©λ‹ˆλ‹€. 그러고 λ‹€μŒ ν”½μ…€ μœˆλ„μš°λ‘œ λ„˜μ–΄κ°€λŠ”λ°, μ—¬κΈ°μ„œ 합성곱이 μ΄λ™ν•˜λŠ” 거리λ₯Ό *보폭(stride)*이라고 ν•©λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/convolution.gif"/>
</div>

<small>νŒ¨λ”©μ΄λ‚˜ 보폭이 μ—†λŠ” κΈ°λ³Έ ν•©μ„±κ³±, <a href="https://arxiv.org/abs/1603.07285">λ”₯λŸ¬λ‹μ„ μœ„ν•œ ν•©μ„±κ³± μ—°μ‚° κ°€μ΄λ“œ</a></small>

이 좜λ ₯을 λ‹€λ₯Έ ν•©μ„±κ³± λ ˆμ΄μ–΄μ— 전달할 수 있으며, 각 연속적인 λ ˆμ΄μ–΄λ₯Ό 톡해 λ„€νŠΈμ›Œν¬λŠ” ν•«λ„κ·Έλ‚˜ λ‘œμΌ“κ³Ό 같이 더 λ³΅μž‘ν•˜κ³  좔상적인 것을 ν•™μŠ΅ν•©λ‹ˆλ‹€. ν•©μ„±κ³± λ ˆμ΄μ–΄ 사이에 풀링 λ ˆμ΄μ–΄λ₯Ό μΆ”κ°€ν•˜μ—¬ 차원을 쀄이고 νŠΉμ§•μ˜ μœ„μΉ˜ 변화에 λŒ€ν•΄ λͺ¨λΈμ„ 더 κ²¬κ³ ν•˜κ²Œ λ§Œλ“œλŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/convnext_architecture.png"/>
</div>

ConvNeXTλŠ” CNN을 5가지 λ°©μ‹μœΌλ‘œ ν˜„λŒ€ν™”ν•©λ‹ˆλ‹€:

1. 각 λ‹¨κ³„μ˜ 블둝 수λ₯Ό λ³€κ²½ν•˜κ³  더 큰 보폭과 그에 λŒ€μ‘ν•˜λŠ” 컀널 크기둜 이미지λ₯Ό "νŒ¨μΉ˜ν™”(patchify)"ν•©λ‹ˆλ‹€. κ²ΉμΉ˜μ§€ μ•ŠλŠ” μŠ¬λΌμ΄λ”© μœˆλ„μš°λŠ” ViTκ°€ 이미지λ₯Ό 패치둜 λΆ„ν• ν•˜λŠ” 방법과 μœ μ‚¬ν•˜κ²Œ 이 νŒ¨μΉ˜ν™” μ „λž΅μ„ λ§Œλ“­λ‹ˆλ‹€.

2. *병λͺ©(bottleneck)* λ ˆμ΄μ–΄λŠ” 채널 수λ₯Ό μ€„μ˜€λ‹€κ°€ λ‹€μ‹œ λ³΅μ›ν•©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 1x1 합성곱을 μˆ˜ν–‰ν•˜λŠ” 것이 더 λΉ λ₯΄κ³ , 깊이λ₯Ό 늘릴 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ—­ 병λͺ©(inverted bottlenect)은 채널 수λ₯Ό ν™•μž₯ν•˜κ³  μΆ•μ†Œν•¨μœΌλ‘œμ¨ κ·Έ λ°˜λŒ€λ‘œ μˆ˜ν–‰ν•˜λ―€λ‘œ, λ©”λͺ¨λ¦¬ 효율이 더 λ†’μŠ΅λ‹ˆλ‹€.

3. 병λͺ© λ ˆμ΄μ–΄μ˜ 일반적인 3x3 ν•©μ„±κ³± λ ˆμ΄μ–΄λ₯Ό 각 μž…λ ₯ 채널에 κ°œλ³„μ μœΌλ‘œ 합성곱을 μ μš©ν•œ λ‹€μŒ λ§ˆμ§€λ§‰μ— μŒ“λŠ” *κΉŠμ΄λ³„ ν•©μ„±κ³±(depthwise convolution)*으둜 λŒ€μ²΄ν•©λ‹ˆλ‹€. μ΄λŠ” λ„€νŠΈμ›Œν¬ 폭이 λ„“ν˜€ μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€.

4. ViTλŠ” μ–΄ν…μ…˜ λ©”μ»€λ‹ˆμ¦˜ 덕뢄에 ν•œ λ²ˆμ— 더 λ§Žμ€ 이미지λ₯Ό λ³Ό 수 μžˆλŠ” μ „μ—­ μˆ˜μ‹  ν•„λ“œλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. ConvNeXTλŠ” 컀널 크기λ₯Ό 7x7둜 늘렀 이 효과λ₯Ό μž¬ν˜„ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€.

5. λ˜ν•œ ConvNeXTλŠ” Transformer λͺ¨λΈμ„ λͺ¨λ°©ν•˜λŠ” λͺ‡ 가지 λ ˆμ΄μ–΄ 섀계λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. ν™œμ„±ν™” 및 μ •κ·œν™” λ ˆμ΄μ–΄κ°€ 더 적고, ν™œμ„±ν™” ν•¨μˆ˜κ°€ ReLU λŒ€μ‹  GELU둜 μ „ν™˜λ˜κ³ , BatchNorm λŒ€μ‹  LayerNorm을 μ‚¬μš©ν•©λ‹ˆλ‹€.

ν•©μ„±κ³± λΈ”λ‘μ˜ 좜λ ₯은 λΆ„λ₯˜ ν—€λ“œλ‘œ μ „λ‹¬λ˜λ©°, λΆ„λ₯˜ ν—€λ“œλŠ” 좜λ ₯을 λ‘œμ§“μœΌλ‘œ λ³€ν™˜ν•˜κ³  ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀을 κ³„μ‚°ν•˜μ—¬ κ°€μž₯ κ°€λŠ₯성이 높은 λ ˆμ΄λΈ”μ„ μ°ΎμŠ΅λ‹ˆλ‹€.

### 객체 탐지[[object-detection]]

[DETR](model_doc/detr), *DEtection TRansformer*λŠ” CNNκ³Ό Transformer 인코더-디코더λ₯Ό κ²°ν•©ν•œ 쒅단간(end-to-end) 객체 탐지 λͺ¨λΈμž…λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/detr_architecture.png"/>
</div>

1. μ‚¬μ „ν›ˆλ ¨λœ CNN *λ°±λ³Έ(backbone)*은 ν”½μ…€ κ°’μœΌλ‘œ λ‚˜νƒ€λ‚Έ 이미지λ₯Ό 가져와 저해상도 νŠΉμ§• 맡을 λ§Œλ“­λ‹ˆλ‹€. νŠΉμ§• 맡에 λŒ€ν•΄ 1x1 합성곱을 μ μš©ν•˜μ—¬ 차원을 쀄이고, κ³ μˆ˜μ€€ 이미지 ν‘œν˜„μ„ 가진 μƒˆλ‘œμš΄ νŠΉμ§• 맡을 μƒμ„±ν•©λ‹ˆλ‹€. TransformerλŠ” μ‹œν€€μŠ€ λͺ¨λΈμ΄κΈ° λ•Œλ¬Έμ— νŠΉμ§• 맡을 μœ„μΉ˜ μž„λ² λ”©κ³Ό κ²°ν•©λœ νŠΉμ§• λ²‘ν„°μ˜ μ‹œν€€μŠ€λ‘œ ν‰νƒ„ν™”ν•©λ‹ˆλ‹€.

2. νŠΉμ§• λ²‘ν„°λŠ” μ–΄ν…μ…˜ λ ˆμ΄μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 이미지 ν‘œν˜„μ„ ν•™μŠ΅ν•˜λŠ” 인코더에 μ „λ‹¬λ©λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ, μΈμ½”λ”μ˜ 은닉 μƒνƒœλŠ” λ””μ½”λ”μ—μ„œ *객체 쿼리*와 κ²°ν•©λ©λ‹ˆλ‹€. 객체 μΏΌλ¦¬λŠ” μ΄λ―Έμ§€μ˜ λ‹€λ₯Έ μ˜μ—­μ— μ΄ˆμ μ„ 맞좘 ν•™μŠ΅λœ μž„λ² λ”©μœΌλ‘œ ν•™μŠ΅λ˜κ³ , 각 μ–΄ν…μ…˜ λ ˆμ΄μ–΄λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ κ°±μ‹ λ©λ‹ˆλ‹€. λ””μ½”λ”μ˜ 은닉 μƒνƒœλŠ” 각 객체 쿼리에 λŒ€ν•œ λ°”μš΄λ”© λ°•μŠ€ μ’Œν‘œμ™€ 클래슀 λ ˆμ΄λΈ”μ„ μ˜ˆμΈ‘ν•˜λŠ” 순방ν–₯ λ„€νŠΈμ›Œν¬μ— μ „λ‹¬λ˜λ©°, 객체가 μ—†λŠ” 경우 `no object`κ°€ 좜λ ₯λ©λ‹ˆλ‹€.

    DETR은 각 객체 쿼리λ₯Ό λ³‘λ ¬λ‘œ λ””μ½”λ”©ν•˜μ—¬ *N* 개의 μ΅œμ’… μ˜ˆμΈ‘μ„ 좜λ ₯ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ *N*은 쿼리 μˆ˜μž…λ‹ˆλ‹€. ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μš”μ†Œλ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 일반적인 μžκΈ°νšŒκ·€ λͺ¨λΈκ³Ό 달리, 객체 νƒμ§€λŠ” ν•œ λ²ˆμ— *N* 개의 μ˜ˆμΈ‘μ„ μˆ˜ν–‰ν•˜λŠ” 집합 예츑 μž‘μ—…(`λ°”μš΄λ”© λ°•μŠ€`, `클래슀 λ ˆμ΄λΈ”`)μž…λ‹ˆλ‹€.

3. DETR은 ν›ˆλ ¨ 쀑 *이뢄 맀칭 손싀(bipartite matching loss)*을 μ‚¬μš©ν•˜μ—¬ κ³ μ •λœ 수의 예츑과 κ³ μ •λœ μ‹€μ œ μ •λ‹΅ λ ˆμ΄λΈ”(ground truth labels) μ„ΈνŠΈλ₯Ό λΉ„κ΅ν•©λ‹ˆλ‹€. *N*개의 λ ˆμ΄λΈ” μ„ΈνŠΈμ— μ‹€μ œ μ •λ‹΅ λ ˆμ΄λΈ”λ³΄λ‹€ 적은 경우, `no object` 클래슀둜 νŒ¨λ”©λ©λ‹ˆλ‹€. 이 손싀 ν•¨μˆ˜λŠ” DETR이 예츑과 μ‹€μ œ μ •λ‹΅ λ ˆμ΄λΈ” κ°„ 1:1 λŒ€μ‘μ„ 찾도둝 ꢌμž₯ν•©λ‹ˆλ‹€. λ°”μš΄λ”© λ°•μŠ€ λ˜λŠ” 클래슀 λ ˆμ΄λΈ” 쀑 ν•˜λ‚˜λΌλ„ 잘λͺ»λœ 경우, 손싀이 λ°œμƒν•©λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ, μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 객체λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 경우, νŒ¨λ„ν‹°λ₯Ό λ°›μŠ΅λ‹ˆλ‹€. 이둜 인해 DETR은 μ΄λ―Έμ§€μ—μ„œ λˆˆμ— 잘 λ„λŠ” 물체 ν•˜λ‚˜μ— μ§‘μ€‘ν•˜λŠ” λŒ€μ‹ , λ‹€λ₯Έ 객체λ₯Ό 찾도둝 ꢌμž₯λ©λ‹ˆλ‹€.

객체 탐지 ν—€λ“œκ°€ DETR 상단에 μΆ”κ°€λ˜μ–΄ 클래슀 λ ˆμ΄λΈ”κ³Ό λ°”μš΄λ”© λ°•μŠ€μ˜ μ’Œν‘œλ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. 객체 탐지 ν—€λ“œμ—λŠ” 두 가지 ꡬ성 μš”μ†Œκ°€ μžˆμŠ΅λ‹ˆλ‹€: 디코더 은닉 μƒνƒœλ₯Ό 클래슀 λ ˆμ΄λΈ”μ˜ λ‘œμ§“μœΌλ‘œ λ³€ν™˜ν•˜λŠ” μ„ ν˜• λ ˆμ΄μ–΄ 및 λ°”μš΄λ”© λ°•μŠ€λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” MLP

객체 탐지에 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [객체 탐지 κ°€μ΄λ“œ](tasks/object_detection)λ₯Ό ν™•μΈν•˜μ—¬ DETR을 λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

### 이미지 λΆ„ν• [[image-segmentation]]

[Mask2Former](model_doc/mask2former)λŠ” λͺ¨λ“  μœ ν˜•μ˜ 이미지 λΆ„ν•  μž‘μ—…μ„ ν•΄κ²°ν•˜λŠ” λ²”μš© μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€. 전톡적인 λΆ„ν•  λͺ¨λΈμ€ 일반적으둜 μ‹œλ©˜ν‹±(semantic) λ˜λŠ” νŒŒλ†‰ν‹±(panoptic) λΆ„ν• κ³Ό 같은 이미지 λΆ„ν• μ˜ νŠΉμ • ν•˜μœ„ μž‘μ—…μ— 맞좰 μ‘°μ •λ©λ‹ˆλ‹€. Mask2FormerλŠ” λͺ¨λ“  μž‘μ—…μ„ *마슀크 λΆ„λ₯˜* 문제둜 κ΅¬μ„±ν•©λ‹ˆλ‹€. 마슀크 λΆ„λ₯˜λŠ” 픽셀을 *N*개 μ„Έκ·Έλ¨ΌνŠΈλ‘œ κ·Έλ£Ήν™”ν•˜κ³ , 주어진 이미지에 λŒ€ν•΄ *N*개의 λ§ˆμŠ€ν¬μ™€ 그에 λŒ€μ‘ν•˜λŠ” 클래슀 λ ˆμ΄λΈ”μ„ μ˜ˆμΈ‘ν•©λ‹ˆλ‹€. 이 μ„Ήμ…˜μ—μ„œ Mask2Former의 μž‘λ™ 방법을 μ„€λͺ…ν•œ λ‹€μŒ, λ§ˆμ§€λ§‰μ— SegFormerλ₯Ό λ―Έμ„Έ μ‘°μ •ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/mask2former_architecture.png"/>
</div>

Mask2Formerμ—λŠ” 3가지 μ£Όμš” ꡬ성 μš”μ†Œκ°€ μžˆμŠ΅λ‹ˆλ‹€:

1. [Swin](model_doc/swin) 백본이 이미지λ₯Ό λ°›μ•„ 3개의 μ—°μ†λœ 3x3 ν•©μ„±κ³±μ—μ„œ 저해상도 이미지 νŠΉμ§• 맡을 μƒμ„±ν•©λ‹ˆλ‹€.

2. νŠΉμ§• 맡은 *ν”½μ…€ 디코더*에 μ „λ‹¬λ©λ‹ˆλ‹€. 이 λ””μ½”λ”λŠ” 저해상도 νŠΉμ§•μ„ 고해상도 ν”½μ…€ μž„λ² λ”©μœΌλ‘œ μ μ§„μ μœΌλ‘œ μ—…μƒ˜ν”Œλ§ν•©λ‹ˆλ‹€. ν”½μ…€ λ””μ½”λ”λŠ” μ‹€μ œλ‘œ 원본 μ΄λ―Έμ§€μ˜ 1/32, 1/16, 1/8 ν•΄μƒλ„μ˜ 닀쀑 μŠ€μΌ€μΌ νŠΉμ§•(저해상도 및 고해상도 νŠΉμ§• λͺ¨λ‘ 포함)을 μƒμ„±ν•©λ‹ˆλ‹€.

3. μ΄λŸ¬ν•œ μ„œλ‘œ λ‹€λ₯Έ 크기의 νŠΉμ§• 맡은 고해상도 νŠΉμ§•μ—μ„œ μž‘μ€ 객체λ₯Ό ν¬μ°©ν•˜κΈ° μœ„ν•΄ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ Transformer 디코더 λ ˆμ΄μ–΄μ— μ—°μ†μ μœΌλ‘œ κ³΅κΈ‰λ©λ‹ˆλ‹€. Mask2Former의 핡심은 λ””μ½”λ”μ˜ *마슀크 μ–΄ν…μ…˜* λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. 전체 이미지λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” 크둜슀 μ–΄ν…μ…˜(cross-attention)κ³Ό 달리, 마슀크 μ–΄ν…μ…˜μ€ μ΄λ―Έμ§€μ˜ νŠΉμ • μ˜μ—­μ—λ§Œ μ§‘μ€‘ν•©λ‹ˆλ‹€. μ΄λŠ” μ΄λ―Έμ§€μ˜ 지역적 νŠΉμ§•λ§ŒμœΌλ‘œ λͺ¨λΈμ΄ μΆ©λΆ„νžˆ ν•™μŠ΅ν•  수 있기 λ•Œλ¬Έμ— 더 λΉ λ₯΄κ³  μ„±λŠ₯이 μš°μˆ˜ν•©λ‹ˆλ‹€.

4. [DETR](tasks_explained#object-detection)κ³Ό 같이, Mask2FormerλŠ” ν•™μŠ΅λœ 객체 쿼리λ₯Ό μ‚¬μš©ν•˜κ³  이λ₯Ό ν”½μ…€ λ””μ½”λ”μ—μ„œμ˜ 이미지 νŠΉμ§•κ³Ό κ²°ν•©ν•˜μ—¬ 예츑 집합(`클래슀 λ ˆμ΄λΈ”`, `마슀크 예츑`)을 μƒμ„±ν•©λ‹ˆλ‹€. λ””μ½”λ”μ˜ 은닉 μƒνƒœλŠ” μ„ ν˜• λ ˆμ΄μ–΄λ‘œ μ „λ‹¬λ˜μ–΄ 클래슀 λ ˆμ΄λΈ”μ— λŒ€ν•œ λ‘œμ§“μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. λ‘œμ§“κ³Ό 클래슀 λ ˆμ΄λΈ” μ‚¬μ΄μ˜ ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀을 κ³„μ‚°ν•˜μ—¬ κ°€μž₯ κ°€λŠ₯성이 높은 것을 μ°ΎμŠ΅λ‹ˆλ‹€.

    마슀크 μ˜ˆμΈ‘μ€ ν”½μ…€ μž„λ² λ”©κ³Ό μ΅œμ’… 디코더 은닉 μƒνƒœλ₯Ό κ²°ν•©ν•˜μ—¬ μƒμ„±λ©λ‹ˆλ‹€. μ‹œκ·Έλͺ¨μ΄λ“œ ꡐ차 μ—”νŠΈλ‘œν”Ό 및 Dice 손싀은 λ‘œμ§“κ³Ό μ‹€μ œ μ •λ‹΅ 마슀크(ground truth mask) μ‚¬μ΄μ—μ„œ κ³„μ‚°λ˜μ–΄ κ°€μž₯ κ°€λŠ₯성이 높은 마슀크λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

이미지 뢄할에 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [이미지 λΆ„ν•  κ°€μ΄λ“œ](tasks/semantic_segmentation)λ₯Ό ν™•μΈν•˜μ—¬ SegFormerλ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

### 깊이 μΆ”μ •[[depth-estimation]]

[GLPN](model_doc/glpn), *Global-Local Path Network*λŠ” [SegFormer](model_doc/segformer) 인코더와 κ²½λŸ‰ 디코더λ₯Ό κ²°ν•©ν•œ 깊이 좔정을 μœ„ν•œ Transformerμž…λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/glpn_architecture.jpg"/>
</div>

1. ViT와 같이, μ΄λ―Έμ§€λŠ” 패치 μ‹œν€€μŠ€λ‘œ λΆ„ν• λ˜μ§€λ§Œ, 이미지 νŒ¨μΉ˜κ°€ 더 μž‘λ‹€λŠ” 점이 λ‹€λ¦…λ‹ˆλ‹€. μ΄λŠ” μ„Έκ·Έλ©˜ν…Œμ΄μ…˜μ΄λ‚˜ 깊이 μΆ”μ •κ³Ό 같은 밀도 예츑 μž‘μ—…μ— 더 μ ν•©ν•©λ‹ˆλ‹€. 이미지 νŒ¨μΉ˜λŠ” 패치 μž„λ² λ”©μœΌλ‘œ λ³€ν™˜λ˜μ–΄(패치 μž„λ² λ”©μ΄ μƒμ„±λ˜λŠ” 방법은 [이미지 λΆ„λ₯˜](#image-classification) μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”), μΈμ½”λ”λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.

2. μΈμ½”λ”λŠ” 패치 μž„λ² λ”©μ„ λ°›μ•„, μ—¬λŸ¬ 인코더 블둝에 μ „λ‹¬ν•©λ‹ˆλ‹€. 각 블둝은 μ–΄ν…μ…˜ 및 Mix-FFN λ ˆμ΄μ–΄λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. ν›„μžμ˜ λͺ©μ μ€ μœ„μΉ˜ 정보λ₯Ό μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 각 인코더 λΈ”λ‘μ˜ λμ—λŠ” 계측적 ν‘œν˜„μ„ μƒμ„±ν•˜κΈ° μœ„ν•œ *패치 병합(patch merging)* λ ˆμ΄μ–΄κ°€ μžˆμŠ΅λ‹ˆλ‹€. 각 μΈμ ‘ν•œ 패치 그룹의 νŠΉμ§•μ€ μ—°κ²°λ˜κ³ , μ—°κ²°λœ νŠΉμ§•μ— μ„ ν˜• λ ˆμ΄μ–΄κ°€ μ μš©λ˜μ–΄ 패치 수λ₯Ό 1/4의 ν•΄μƒλ„λ‘œ μ€„μž…λ‹ˆλ‹€. μ΄λŠ” λ‹€μŒ 인코더 λΈ”λ‘μ˜ μž…λ ₯이 되며, μ΄λŸ¬ν•œ 전체 ν”„λ‘œμ„ΈμŠ€λŠ” 1/8, 1/16, 1/32 ν•΄μƒλ„μ˜ 이미지 νŠΉμ§•μ„ κ°€μ§ˆ λ•ŒκΉŒμ§€ λ°˜λ³΅λ©λ‹ˆλ‹€.

3. κ²½λŸ‰ λ””μ½”λ”λŠ” μΈμ½”λ”μ—μ„œ λ§ˆμ§€λ§‰ νŠΉμ§• 맡(1/32 크기)을 가져와 1/16 크기둜 μ—…μƒ˜ν”Œλ§ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ, νŠΉμ§•μ€ *선택적 νŠΉμ§• μœ΅ν•©(SFF, Selective Feature Fusion)* λͺ¨λ“ˆλ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. 이 λͺ¨λ“ˆμ€ 각 νŠΉμ§•μ— λŒ€ν•΄ μ–΄ν…μ…˜ λ§΅μ—μ„œ 둜컬 및 μ „μ—­ νŠΉμ§•μ„ μ„ νƒν•˜κ³  κ²°ν•©ν•œ λ‹€μŒ, 1/8둜 μ—…μƒ˜ν”Œλ§ν•©λ‹ˆλ‹€. 이 ν”„λ‘œμ„ΈμŠ€λŠ” λ””μ½”λ”©λœ νŠΉμ„±μ΄ 원본 이미지와 λ™μΌν•œ 크기가 될 λ•ŒκΉŒμ§€ λ°˜λ³΅λ©λ‹ˆλ‹€. 좜λ ₯은 두 개의 ν•©μ„±κ³± λ ˆμ΄μ–΄λ₯Ό 거친 λ‹€μŒ, μ‹œκ·Έλͺ¨μ΄λ“œ ν™œμ„±ν™”κ°€ μ μš©λ˜μ–΄ 각 ν”½μ…€μ˜ 깊이λ₯Ό μ˜ˆμΈ‘ν•©λ‹ˆλ‹€.

## μžμ—°μ–΄μ²˜λ¦¬[[natural-language-processing]]

TransformerλŠ” μ΄ˆκΈ°μ— 기계 λ²ˆμ—­μ„ μœ„ν•΄ μ„€κ³„λ˜μ—ˆκ³ , κ·Έ μ΄ν›„λ‘œλŠ” 사싀상 λͺ¨λ“  NLP μž‘μ—…μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ μ•„ν‚€ν…μ²˜κ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ–΄λ–€ μž‘μ—…μ€ Transformer의 인코더 ꡬ쑰에 μ ν•©ν•˜λ©°, λ‹€λ₯Έ μž‘μ—…μ€ 디코더에 더 μ ν•©ν•©λ‹ˆλ‹€. 또 λ‹€λ₯Έ μž‘μ—…μ€ Transformer의 인코더-디코더 ꡬ쑰λ₯Ό λͺ¨λ‘ ν™œμš©ν•©λ‹ˆλ‹€.

### ν…μŠ€νŠΈ λΆ„λ₯˜[[text-classification]]

[BERT](model_doc/bert)λŠ” 인코더 μ „μš© λͺ¨λΈμ΄λ©°, ν…μŠ€νŠΈμ˜ ν’λΆ€ν•œ ν‘œν˜„μ„ ν•™μŠ΅ν•˜κΈ° μœ„ν•΄ μ–‘λ°©ν–₯의 단어에 μ£Όλͺ©ν•¨μœΌλ‘œμ¨ 심측 μ–‘λ°©ν–₯μ„±(deep bidirectionality)을 효과적으둜 κ΅¬ν˜„ν•œ 졜초의 λͺ¨λΈμž…λ‹ˆλ‹€.

1. BERTλŠ” [WordPiece](tokenizer_summary#wordpiece) 토큰화λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμž₯의 토큰 μž„λ² λ”©μ„ μƒμ„±ν•©λ‹ˆλ‹€. 단일 λ¬Έμž₯κ³Ό ν•œ 쌍의 λ¬Έμž₯을 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ νŠΉμˆ˜ν•œ `[SEP]` 토큰이 μΆ”κ°€λ©λ‹ˆλ‹€. λͺ¨λ“  ν…μŠ€νŠΈ μ‹œν€€μŠ€μ˜ μ‹œμž‘ λΆ€λΆ„μ—λŠ” νŠΉμˆ˜ν•œ `[CLS]` 토큰이 μΆ”κ°€λ©λ‹ˆλ‹€. `[CLS]` 토큰이 μžˆλŠ” μ΅œμ’… 좜λ ₯은 λΆ„λ₯˜ μž‘μ—…μ„ μœ„ν•œ λΆ„λ₯˜ ν—€λ“œλ‘œ μž…λ ₯에 μ‚¬μš©λ©λ‹ˆλ‹€. BERTλŠ” λ˜ν•œ ν•œ 쌍의 λ¬Έμž₯μ—μ„œ 각 토큰이 첫 번째 λ¬Έμž₯인지 두 번째 λ¬Έμž₯에 μ†ν•˜λŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” μ„Έκ·Έλ¨ΌνŠΈ μž„λ² λ”©(segment embedding)을 μΆ”κ°€ν•©λ‹ˆλ‹€.

2. BERTλŠ” λ§ˆμŠ€ν¬λ“œ μ–Έμ–΄ λͺ¨λΈλ§κ³Ό λ‹€μŒ λ¬Έμž₯ 예츑, 두 가지 λͺ©μ μœΌλ‘œ μ‚¬μ „ν›ˆλ ¨λ©λ‹ˆλ‹€. λ§ˆμŠ€ν¬λ“œ μ–Έμ–΄ λͺ¨λΈλ§μ—μ„œλŠ” μž…λ ₯ ν† ν°μ˜ 일뢀가 λ¬΄μž‘μœ„λ‘œ λ§ˆμŠ€ν‚Ήλ˜κ³ , λͺ¨λΈμ€ 이λ₯Ό μ˜ˆμΈ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” λͺ¨λΈμ΄ λͺ¨λ“  단어λ₯Ό 보고 λ‹€μŒ 단어λ₯Ό "예츑"ν•  수 μžˆλŠ” μ–‘λ°©ν–₯μ„± 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€. 예츑된 마슀크 ν† ν°μ˜ μ΅œμ’… 은닉 μƒνƒœλŠ” μ–΄νœ˜μ— λŒ€ν•œ μ†Œν”„νŠΈλ§₯μŠ€κ°€ μžˆλŠ” 순방ν–₯ λ„€νŠΈμ›Œν¬λ‘œ μ „λ‹¬λ˜μ–΄ 마슀크된 단어λ₯Ό μ˜ˆμΈ‘ν•©λ‹ˆλ‹€.

    두 번째 μ‚¬μ „ν›ˆλ ¨ λŒ€μƒμ€ λ‹€μŒ λ¬Έμž₯ μ˜ˆμΈ‘μž…λ‹ˆλ‹€. λͺ¨λΈμ€ λ¬Έμž₯ Bκ°€ λ¬Έμž₯ A λ‹€μŒμ— μ˜€λŠ”μ§€ μ˜ˆμΈ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ¬Έμž₯ Bκ°€ λ‹€μŒ λ¬Έμž₯인 κ²½μš°μ™€ λ¬΄μž‘μœ„ λ¬Έμž₯인 경우 각각 50%의 ν™•λ₯ λ‘œ λ°œμƒν•©λ‹ˆλ‹€. λ‹€μŒ λ¬Έμž₯인지 μ•„λ‹Œμ§€μ— λŒ€ν•œ μ˜ˆμΈ‘μ€ 두 개의 클래슀(`IsNext` 및 `NotNext`)에 λŒ€ν•œ μ†Œν”„νŠΈλ§₯μŠ€κ°€ μžˆλŠ” 순방ν–₯ λ„€νŠΈμ›Œν¬λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.

3. μž…λ ₯ μž„λ² λ”©μ€ μ—¬λŸ¬ 인코더 λ ˆμ΄μ–΄λ₯Ό κ±°μ³μ„œ μ΅œμ’… 은닉 μƒνƒœλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μ‚¬μ „ν›ˆλ ¨λœ λͺ¨λΈμ„ ν…μŠ€νŠΈ λΆ„λ₯˜μ— μ‚¬μš©ν•˜λ €λ©΄, κΈ°λ³Έ BERT λͺ¨λΈ 상단에 μ‹œν€€μŠ€ λΆ„λ₯˜ ν—€λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. μ‹œν€€μŠ€ λΆ„λ₯˜ ν—€λ“œλŠ” μ΅œμ’… 은닉 μƒνƒœλ₯Ό λ°›λŠ” μ„ ν˜• λ ˆμ΄μ–΄μ΄λ©°, λ‘œμ§“μœΌλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ„ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀은 λ‘œμ§“κ³Ό νƒ€κ²Ÿ 간에 κ³„μ‚°λ˜μ–΄ κ°€μž₯ κ°€λŠ₯성이 높은 λ ˆμ΄λΈ”μ„ μ°ΎμŠ΅λ‹ˆλ‹€. 

ν…μŠ€νŠΈ λΆ„λ₯˜μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [ν…μŠ€νŠΈ λΆ„λ₯˜ κ°€μ΄λ“œ](tasks/sequence_classification)λ₯Ό ν™•μΈν•˜μ—¬ DistilBERTλ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

### 토큰 λΆ„λ₯˜[[token-classification]]

개체λͺ… 인식(Named Entity Recognition, NER)κ³Ό 같은 토큰 λΆ„λ₯˜ μž‘μ—…μ— BERTλ₯Ό μ‚¬μš©ν•˜λ €λ©΄, κΈ°λ³Έ BERT λͺ¨λΈ 상단에 토큰 λΆ„λ₯˜ ν—€λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. 토큰 λΆ„λ₯˜ ν—€λ“œλŠ” μ΅œμ’… 은닉 μƒνƒœλ₯Ό λ°›λŠ” μ„ ν˜• λ ˆμ΄μ–΄μ΄λ©°, λ‘œμ§“μœΌλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ„ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀은 λ‘œμ§“κ³Ό 각 토큰 간에 κ³„μ‚°λ˜μ–΄ κ°€μž₯ κ°€λŠ₯성이 높은 λ ˆμ΄λΈ”μ„ μ°ΎμŠ΅λ‹ˆλ‹€. 

토큰 λΆ„λ₯˜μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [토큰 λΆ„λ₯˜ κ°€μ΄λ“œ](tasks/token_classification)λ₯Ό ν™•μΈν•˜μ—¬ DistilBERTλ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

### μ§ˆμ˜μ‘λ‹΅[[question-answering]]

μ§ˆμ˜μ‘λ‹΅μ— BERTλ₯Ό μ‚¬μš©ν•˜λ €λ©΄, κΈ°λ³Έ BERT λͺ¨λΈ μœ„μ— 슀팬(span) λΆ„λ₯˜ ν—€λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. 이 μ„ ν˜• λ ˆμ΄μ–΄λŠ” μ΅œμ’… 은닉 μƒνƒœλ₯Ό λ°›κ³ , 닡변에 λŒ€μ‘ν•˜λŠ” `슀팬`의 μ‹œμž‘κ³Ό 끝 둜그λ₯Ό κ³„μ‚°ν•˜κΈ° μœ„ν•΄ μ„ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀은 λ‘œμ§“κ³Ό 각 λ ˆμ΄λΈ” μœ„μΉ˜ 간에 κ³„μ‚°λ˜μ–΄ 닡변에 λŒ€μ‘ν•˜λŠ” κ°€μž₯ κ°€λŠ₯성이 높은 ν…μŠ€νŠΈμ˜ μŠ€νŒ¬μ„ μ°ΎμŠ΅λ‹ˆλ‹€. 

μ§ˆμ˜μ‘λ‹΅μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [μ§ˆμ˜μ‘λ‹΅ κ°€μ΄λ“œ](tasks/question_answering)λ₯Ό ν™•μΈν•˜μ—¬ DistilBERTλ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

<Tip>

πŸ’‘ μ‚¬μ „ν›ˆλ ¨λœ BERTλ₯Ό λ‹€μ–‘ν•œ μž‘μ—…μ— μ‚¬μš©ν•˜λŠ” 것이 μ–Όλ§ˆλ‚˜ μ‰¬μš΄μ§€ μ£Όλͺ©ν•˜μ„Έμš”. μ‚¬μ „ν›ˆλ ¨λœ λͺ¨λΈμ— νŠΉμ • ν—€λ“œλ₯Ό μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ 은닉 μƒνƒœλ₯Ό μ›ν•˜λŠ” 좜λ ₯으둜 μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

</Tip>

### ν…μŠ€νŠΈ 생성[[text-generation]]

[GPT-2](model_doc/gpt2)λŠ” λŒ€λŸ‰μ˜ ν…μŠ€νŠΈμ— λŒ€ν•΄ μ‚¬μ „ν›ˆλ ¨λœ λ””μ½”λ”© μ „μš© λͺ¨λΈμž…λ‹ˆλ‹€. ν”„λ‘¬ν”„νŠΈλ₯Ό 주어지면 섀득λ ₯ μžˆλŠ” (항상 사싀은 μ•„λ‹ˆμ§€λ§Œ!) ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  λͺ…μ‹œμ μœΌλ‘œ ν›ˆλ ¨λ˜μ§€ μ•Šμ•˜μŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ§ˆμ˜μ‘λ‹΅κ³Ό 같은 λ‹€λ₯Έ NLP μž‘μ—…μ„ μ™„μˆ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/gpt2_architecture.png"/>
</div>

1. GPT-2λŠ” 단어λ₯Ό ν† ν°ν™”ν•˜κ³  토큰 μž„λ² λ”©μ„ μƒμ„±ν•˜κΈ° μœ„ν•΄ [λ°”μ΄νŠΈ νŽ˜μ–΄ 인코딩(BPE, byte pair encoding)](tokenizer_summary#bytepair-encoding-bpe)을 μ‚¬μš©ν•©λ‹ˆλ‹€. μœ„μΉ˜ 인코딩은 μ‹œν€€μŠ€μ—μ„œ 각 ν† ν°μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ 토큰 μž„λ² λ”©μ— μΆ”κ°€λ©λ‹ˆλ‹€. μž…λ ₯ μž„λ² λ”©μ€ μ—¬λŸ¬ 디코더 블둝을 거쳐 일뢀 μ΅œμ’… 은닉 μƒνƒœλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 각 디코더 블둝 λ‚΄μ—μ„œ GPT-2λŠ” *λ§ˆμŠ€ν¬λ“œ μ…€ν”„ μ–΄ν…μ…˜(masked self-attention)* λ ˆμ΄μ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” GPT-2κ°€ 이후 토큰(future tokens)에 주의λ₯Ό 기울일 수 없도둝 ν•©λ‹ˆλ‹€. μ™Όμͺ½μ— μžˆλŠ” ν† ν°μ—λ§Œ 주의λ₯Ό 기울일 수 μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμŠ€ν¬λ“œ μ…€ν”„ μ–΄ν…μ…˜μ—μ„œλŠ” μ–΄ν…μ…˜ 마슀크λ₯Ό μ‚¬μš©ν•˜μ—¬ 이후 토큰에 λŒ€ν•œ 점수(score)λ₯Ό `0`으둜 μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— BERT의 [`mask`] 토큰과 λ‹€λ¦…λ‹ˆλ‹€.

2. λ””μ½”λ”μ˜ 좜λ ₯은 μ–Έμ–΄ λͺ¨λΈλ§ ν—€λ“œμ— μ „λ‹¬λ˜λ©°, μ–Έμ–΄ λͺ¨λΈλ§ ν—€λ“œλŠ” 은닉 μƒνƒœλ₯Ό λ‘œμ§“μœΌλ‘œ μ„ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ ˆμ΄λΈ”μ€ μ‹œν€€μŠ€μ˜ λ‹€μŒ ν† ν°μœΌλ‘œ, λ‘œμ§“μ„ 였λ₯Έμͺ½μœΌλ‘œ ν•˜λ‚˜μ”© μ΄λ™ν•˜μ—¬ μƒμ„±λ©λ‹ˆλ‹€. ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀은 μ΄λ™λœ λ‘œμ§“κ³Ό λ ˆμ΄λΈ” 간에 κ³„μ‚°λ˜μ–΄ κ°€μž₯ κ°€λŠ₯성이 높은 λ‹€μŒ 토큰을 좜λ ₯ν•©λ‹ˆλ‹€.

GPT-2의 μ‚¬μ „ν›ˆλ ¨ λͺ©μ μ€ μ „μ μœΌλ‘œ [인과적 μ–Έμ–΄ λͺ¨λΈλ§](glossary#causal-language-modeling)에 κΈ°λ°˜ν•˜μ—¬, μ‹œν€€μŠ€μ—μ„œ λ‹€μŒ 단어λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” GPT-2κ°€ ν…μŠ€νŠΈ 생성에 κ΄€λ ¨λœ μž‘μ—…μ— 특히 μš°μˆ˜ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

ν…μŠ€νŠΈ 생성에 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [인과적 μ–Έμ–΄ λͺ¨λΈλ§ κ°€μ΄λ“œ](tasks/language_modeling#causal-language-modeling)λ₯Ό ν™•μΈν•˜μ—¬ DistilGPT-2λ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

<Tip>

ν…μŠ€νŠΈ 생성에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [ν…μŠ€νŠΈ 생성 μ „λž΅](generation_strategies) κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”!

</Tip>

### μš”μ•½[[summarization]]

[BART](model_doc/bart) 및 [T5](model_doc/t5)와 같은 인코더-디코더 λͺ¨λΈμ€ μš”μ•½ μž‘μ—…μ˜ μ‹œν€€μŠ€-투-μ‹œν€€μŠ€ νŒ¨ν„΄μ„ μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 μ„Ήμ…˜μ—μ„œ BART의 μž‘λ™ 방법을 μ„€λͺ…ν•œ λ‹€μŒ, λ§ˆμ§€λ§‰μ— T5λ₯Ό λ―Έμ„Έ μ‘°μ •ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 

<div class="flex justify-center">
    <img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bart_architecture.png"/>
</div>

1. BART의 인코더 μ•„ν‚€ν…μ²˜λŠ” BERT와 맀우 μœ μ‚¬ν•˜λ©° ν…μŠ€νŠΈμ˜ 토큰 및 μœ„μΉ˜ μž„λ² λ”©μ„ λ°›μŠ΅λ‹ˆλ‹€. BARTλŠ” μž…λ ₯을 λ³€ν˜•μ‹œν‚€κ³  λ””μ½”λ”λ‘œ μž¬κ΅¬μ„±ν•˜μ—¬ μ‚¬μ „ν›ˆλ ¨λ©λ‹ˆλ‹€. νŠΉμ • λ³€ν˜• 기법이 μžˆλŠ” λ‹€λ₯Έ μΈμ½”λ”μ™€λŠ” 달리, BARTλŠ” λͺ¨λ“  μœ ν˜•μ˜ λ³€ν˜•μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ *text infilling* λ³€ν˜• 기법이 κ°€μž₯ 잘 μž‘λ™ν•©λ‹ˆλ‹€. Text Infilingμ—μ„œλŠ” μ—¬λŸ¬ ν…μŠ€νŠΈ μŠ€νŒ¬μ„ **단일** [`mask`] ν† ν°μœΌλ‘œ λŒ€μ²΄ν•©λ‹ˆλ‹€. μ΄λŠ” λͺ¨λΈμ΄ 마슀크된 토큰을 μ˜ˆμΈ‘ν•΄μ•Ό ν•˜κ³ , λͺ¨λΈμ— λˆ„λ½λœ ν† ν°μ˜ 수λ₯Ό μ˜ˆμΈ‘ν•˜λ„λ‘ κ°€λ₯΄μΉ˜κΈ° λ•Œλ¬Έμ— μ€‘μš”ν•©λ‹ˆλ‹€. μž…λ ₯ μž„λ² λ”©κ³Ό 마슀크된 슀팬이 인코더λ₯Ό 거쳐 μ΅œμ’… 은닉 μƒνƒœλ₯Ό 좜λ ₯ν•˜μ§€λ§Œ, BERT와 달리 BARTλŠ” λ§ˆμ§€λ§‰μ— 단어λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 순방ν–₯ λ„€νŠΈμ›Œν¬λ₯Ό μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. μΈμ½”λ”μ˜ 좜λ ₯은 λ””μ½”λ”λ‘œ μ „λ‹¬λ˜λ©°, λ””μ½”λ”λŠ” μΈμ½”λ”μ˜ 좜λ ₯μ—μ„œ 마슀크 토큰과 λ³€ν˜•λ˜μ§€ μ•Šμ€ 토큰을 μ˜ˆμΈ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” 디코더가 원본 ν…μŠ€νŠΈλ₯Ό λ³΅μ›ν•˜λŠ” 데 도움이 λ˜λŠ” 좔가적인 λ¬Έλ§₯을 얻도둝 ν•©λ‹ˆλ‹€. λ””μ½”λ”μ˜ 좜λ ₯은 μ–Έμ–΄ λͺ¨λΈλ§ ν—€λ“œμ— μ „λ‹¬λ˜λ©°, μ–Έμ–΄ λͺ¨λΈλ§ ν—€λ“œλŠ” 은닉 μƒνƒœλ₯Ό λ‘œμ§“μœΌλ‘œ μ„ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. ꡐ차 μ—”νŠΈλ‘œν”Ό 손싀은 λ‘œμ§“κ³Ό 토큰이 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™λœ λ ˆμ΄λΈ” 간에 κ³„μ‚°λ©λ‹ˆλ‹€.

μš”μ•½μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [μš”μ•½ κ°€μ΄λ“œ](tasks/summarization)λ₯Ό ν™•μΈν•˜μ—¬ T5λ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

<Tip>

ν…μŠ€νŠΈ 생성에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [ν…μŠ€νŠΈ 생성 μ „λž΅](generation_strategies) κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”!

</Tip>

### λ²ˆμ—­[[translation]]

λ²ˆμ—­μ€ μ‹œν€€μŠ€-투-μ‹œν€€μŠ€ μž‘μ—…μ˜ 또 λ‹€λ₯Έ 예둜, [BART](model_doc/bart) λ˜λŠ” [T5](model_doc/t5)와 같은 인코더-디코더 λͺ¨λΈμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ„Ήμ…˜μ—μ„œ BART의 μž‘λ™ 방법을 μ„€λͺ…ν•œ λ‹€μŒ, λ§ˆμ§€λ§‰μ— T5λ₯Ό λ―Έμ„Έ μ‘°μ •ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 

BARTλŠ” μ›μ²œ μ–Έμ–΄λ₯Ό νƒ€κ²Ÿ μ–Έμ–΄λ‘œ λ””μ½”λ”©ν•  수 μžˆλŠ” μž…λ ₯에 λ§€ν•‘ν•˜κΈ° μœ„ν•΄ λ¬΄μž‘μœ„λ‘œ μ΄ˆκΈ°ν™”λœ λ³„λ„μ˜ 인코더λ₯Ό μΆ”κ°€ν•˜μ—¬ λ²ˆμ—­μ— μ μš©ν•©λ‹ˆλ‹€. 이 μƒˆλ‘œμš΄ μΈμ½”λ”μ˜ μž„λ² λ”©μ€ 원본 단어 μž„λ² λ”© λŒ€μ‹  μ‚¬μ „ν›ˆλ ¨λœ μΈμ½”λ”λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. μ›μ²œ μΈμ½”λ”λŠ” λͺ¨λΈ 좜λ ₯의 ꡐ차 μ—”νŠΈλ‘œν”Ό μ†μ‹€λ‘œλΆ€ν„° μ›μ²œ 인코더, μœ„μΉ˜ μž„λ² λ”©, μž…λ ₯ μž„λ² λ”©μ„ κ°±μ‹ ν•˜μ—¬ ν›ˆλ ¨λ©λ‹ˆλ‹€. 첫 번째 λ‹¨κ³„μ—μ„œλŠ” λͺ¨λΈ νŒŒλΌλ―Έν„°κ°€ κ³ μ •λ˜κ³ , 두 번째 λ‹¨κ³„μ—μ„œλŠ” λͺ¨λ“  λͺ¨λΈ νŒŒλΌλ―Έν„°κ°€ ν•¨κ»˜ ν›ˆλ ¨λ©λ‹ˆλ‹€.

BARTλŠ” 이후 λ²ˆμ—­μ„ μœ„ν•΄ λ‹€μ–‘ν•œ μ–Έμ–΄λ‘œ μ‚¬μ „ν›ˆλ ¨λœ λ‹€κ΅­μ–΄ λ²„μ „μ˜ mBART둜 ν™•μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ²ˆμ—­μ— 직접 도전할 μ€€λΉ„κ°€ λ˜μ…¨λ‚˜μš”? μ™„μ „ν•œ [λ²ˆμ—­ κ°€μ΄λ“œ](tasks/summarization)λ₯Ό ν™•μΈν•˜μ—¬ T5λ₯Ό λ―Έμ„Έ μ‘°μ •ν•˜κ³  좔둠에 μ‚¬μš©ν•˜λŠ” 방법을 ν•™μŠ΅ν•˜μ„Έμš”!

<Tip>

ν…μŠ€νŠΈ 생성에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [ν…μŠ€νŠΈ 생성 μ „λž΅](generation_strategies) κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”!

</Tip>