๐ ์ค๋ ํ ์ผ
- ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- ๋ฉํ ๋ง
- ๊ฐ์ ์๊ฐ ๋ฐ ํด์ฆ
- [PyTorch 6๊ฐ]
- ๊ธฐ๋ณธ ๊ณผ์ 1 ์๋ฃ
- ๊ธฐ๋ณธ ๊ณผ์ 2
- ์ฝ๋ฉํ ์คํธ ๋๋น
๐ฅ ํผ์ด์ธ์ ์์ฝ
- Further Question (PyTorch 4๊ฐ)
- 1 epoch์์ ์ด๋ค์ง๋ ๋ชจ๋ธ ํ์ต ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๊ณ ์ฑ๋ฅ์ ์ฌ๋ฆฌ๊ธฐ ์ํด์ ์ด๋ค ๋ถ๋ถ์ ๋จผ์ ๊ณ ๋ คํ๋ฉด ์ข์์ง ๊ฐ์ด ๋
ผ์ํด๋ณด์ธ์.
- loss๋ฅผ ๋ฐ๊พผ๋ค. (GAN์์ ํ์คํ ๋ง์ด ์ฐ์ธ๋ค.)
- model์ ๋ฐ๊ฟ ์๋ ์๋ค. (๋ฌธ์ ์ ์๋๋ ์๋ ๊ฒ ๊ฐ๋ค.)
- epoch ๋ง๋ค data shuffle์ ํด๋ณธ๋ค. (์ค์ ์๋น์ค์์๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์๋ฐ, ๋ํ์์๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.)
optimizer.zero_grad()
๋ฅผ ์ํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง ๊ทธ๋ฆฌ๊ณ ๋งค batch step๋ง๋ค ํญ์ ํ์ํ์ง ๊ฐ์ด ๋ ผ์ํด๋ณด์ธ์.- step๋ง๋ค ์ด๊ธฐํ๋ฅผ ํ์ง ์์ผ๋ฉด ๋ถํธ์ ๋ฌธ์ ๋๋ฌธ์ gradient์ ๋ฐฉํฅ, ์ฆ ํ์ต์ ๋ฐฉํฅ์ด ์๋ชป ๋ ์ ์๋ค.
no_grad()
,eval()
๋ ์ฃผ์ํด์ ๊ธฐ์ตํ๋ฉด ์ข๋ค.
- 1 epoch์์ ์ด๋ค์ง๋ ๋ชจ๋ธ ํ์ต ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๊ณ ์ฑ๋ฅ์ ์ฌ๋ฆฌ๊ธฐ ์ํด์ ์ด๋ค ๋ถ๋ถ์ ๋จผ์ ๊ณ ๋ คํ๋ฉด ์ข์์ง ๊ฐ์ด ๋
ผ์ํด๋ณด์ธ์.
- ๊ฐ์์์ ์ธ๊ธ๋ stepping freezing(?)์ ์ ํํ ๋ช
์นญ์?
- adaptive fine-tuning, SpotTune ์ธ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. (https://openaccess.thecvf.com/content_CVPR_2019/papers/Guo_SpotTune_Transfer_Learning_Through_Adaptive_Fine-Tuning_CVPR_2019_paper.pdf)
๐ซ ๋ฉํ ๋ง ์์ฝ
Gather
- ์ํ๋ index์ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํจ์ด๋ค.
- matrix๊ฐ sparseํ ๊ฒฝ์ฐ์, training ๋ด๋ถ์์ ๋ค์ด์ค๋ data์ shpae๋ฅผ ๋ง์ถฐ์ฃผ๋ ๊ฒ์ด ๋ณ๋ ฌํ์ ํธํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
๋ชจ๋ธ์ ๋ด๋ถ๋ณด๋ค ํ์ฒ๋ฆฌ ํ ๋ ๋ ๋ง์ด ์ฐ๋ ๊ฒ ๊ฐ๋ค.
โ ํ์ง๋ง ๋์ฒด์ ๊ฐ ์กด์ฌํ๋ค. (ex. index masking ํ๋ฉด ๋น์ทํ ํจ๊ณผ)
Q.backward(gradient=โฆ) ์ด๋์์ ์ธ๊น?
- loss์ backward๋ฅผ ํ๋ฉด ๋ชจ๋ param ๋ง๋ค gradient๊ฐ ๋ฌ๋ฆฐ๋ค.
์ฌ๊ธฐ์์ gradient๋ฅผ ์ด๊ธฐํํ์ง ์๊ณ backward ํ ๋ฒ ๋ ํ๋ฉด ํ์ต์ ๋ฐฉํฅ์ด ์๋ชป ๋ ์ ์๋ค.
โzero_grad()
์ํ๋ฉด ๋์ฐธ์ฌ๊ฐ ์ผ์ด๋ ์ ์๋ค.loss๋ vector๊ฐ ์๋๊ณ scalar ๊ฐ์ด๋ค. โ
loss.backward()
ํจ์๋ scalar ๊ฐ์ backward๊ฐ ์ ์ฉ๋๋ฏ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.- ํ์ง๋ง,
Q.backward()
vector/tensor์ backward๋ฅผ ์ ์ฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.- loss๋ฅผ scalar ๊ฐ์ด๋ผ๊ณ ์ ํด๋์๊ธฐ ๋๋ฌธ์ธ ๊ฒ ๊ฐ๋ค.
- ๋ฐ๋ผ์ scalar์ธ ์ฑ๋ถ๋ง ๋ผ์ด์
Q[0].backward()
๋ก backward๋ฅผ ์ ์ฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- vector/tensor์ธ ๊ฒฝ์ฐ, scalar ๊ฐ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ต์ข
loss๋ก ์๊ฐํ์ง ์๊ณ , backprop ์ค๊ฐ์ ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ฐ๋ผ์ chain rule์ ์ํด ์์์ ๊ฐ์ด ์ ๋ฌ๋์ด ์จ๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด
Q.backward(gradient=external_gradient)
๋ก gradient๋ฅผ ์ง์ ํด ์ฃผ๋ ๊ฒ ๊ฐ๋ค. - ๋ชจ๋ธ์ด ์ปค์ backprop ์ค ์ค๊ฐ์์ ๋ฉ์ถ ๋ค์ ๋ค์ ์ด์ด์ ๊ณ์ฐํ ๋๋ ์ฐ์ง ์์๊น ์ถ๋ค.
loss์ ๋ํด์
loss = loss1 + loss2
์ผ ๋, ๋ค์์ ๋ ์ฝ๋์ ๊ฒฐ๊ณผ๋? โ ๊ฐ๋ค.
loss.backward()
loss1.backward()
,loss2.backward()
epoch
๋ด ๊ณผ์
- grad ์ด๊ธฐํ
- param์ grad ์์
- optim
- param update
- gradient clipping
- gradient์ norm(ํฌ๊ธฐ)์ ์ด๋์ ๋ ์ดํ๋ก ์ ํํด๋๊ธฐ ์ํจ์ด๋ค.
- loss backprop ์ gradient๊ฐ ์์ฌ ๋งค์ฐ ์ปค์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- freeze
- freeze ์ํค๊ณ ์ถ์ ๊ฒ์๋ง freeze ํ ์ ์๋ค.
freeze ๋์ , freeze ์ํค๊ณ ์ถ์ ๊ฒ์ grad๋ฅผ 0์ผ๋ก ์ค์ ํ๋ฉด update๊ฐ ๋์ง ์์ ๊ฐ์ ๋์์ ํ๊ฒ ๋๋ค.
1 2 3
loss.backward() a.grad = 0.0 optim.step()
- ์ด๋ $a = a-\text{lr}*\text{grad}$ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด 0.1 ์ ๋๋ง ํ์ต๋๊ฒ๋ ์ง์ ์ด ๊ฐ๋ฅํ๋ค.
1
a.grad *= 0.1
โ ์ด๋ ๊ฒ customizing ํ ์ ์๋ค๋ ๊ฒ์ด PyTorch์ ์ฅ์ ์ด๋ค.
๊ธฐํ
prefetch
- loader ์ฑ๋ฅ์ด ๋งค์ฐ ์ข์์ง๋ค.- TensorBoard
- TensorFlow๋ ๋ฐฐํฌ ์์ ์ข๋ค.
๐ ๊ณผ์ ๋ด์ฉ ์ ๋ฆฌ
๋ฐ๋ก Notion์ ์ ๋ฆฌ ์ค์ด๋ค.
๐พ ์ผ์ผ ํ๊ณ
์ด๋ฒ์ฃผ๋ ๊ณผ์ ์ ๋ฐ๋๋ผ์ธ์ด ๋ชฉ์์ผ ์ค์ ์ด๋ค. ํ์ง๋ง ์ฒ์๋ถํฐ ๊ฐ์์ ๊ณผ์ ์ ์ ๋ฆฌ์ ์ง์คํ๋ค๋ณด๋ ์๊ฐ ๊ด๋ฆฌ๋ฅผ ์ ๋ชปํ ๊ฒ ๊ฐ๋ค. ์ด์ ์ผ ๊ธฐ๋ณธ ๊ณผ์ 1์ ๋ง์ณค๊ณ , ๊ธฐ๋ณธ ๊ณผ์ 2๋ ์ค๋ ๋ฐค์ ์์ ํด์ผํ ๊ฒ ๊ฐ๋ค. ๐ญ ๋ค์๋ถํฐ๋ ์ผ์ ๊ณผ ์๊ฐ์ ๋ฏธ๋ฆฌ ํ์ธํ์ฌ ์ด๋ฐ ์ผ์ด ์๋๋ก ํด์ผํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋๋ถํฐ๋ ํผ์ด์ธ์ ์์ ๊ฐ์์ ๋ฌ๋ ค์๋ Further Question์ ๋ํด์๋ ์ด์ผ๊ธฐ๋ฅผ ๋๋๊ธฐ๋ก ํ์๋ค. (ํ์คํ ํผ์ ๋ณต์ตํ ๋ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐ๋ง ํ๋ฉด ๊ณ์ ๋ฏธ๋ฃจ๊ฒ ๋๋ค.) ์์ง์ ๋ชจ๋๋ ์ดํฐ๋ก์๋ ๋๋ฌด๋๋ ๋ฏธ์ํ์ง๋ง, ํ์๋ถ๋ค์ ๋์์ ๋ฐ์ ํผ์ด์ธ์ ์๊ฐ์ด ์ ์ ์๋ฆฌ๋ฅผ ์ก์๊ฐ๋ ๊ฒ ๊ฐ๋ค! ๋ํ, ์ค๋์ ๋ฉํ ๋ง์ด ์๊ธฐ๋ ํ๋๋ฐ, ์ ๋ง ์ ์ตํ๋ค. ํผ์ด์ธ์ ์์ ์๋ฒฝํ ํด๊ฒฐํ์ง ๋ชปํ๋ PyTorch์ backward ํจ์์ ๋ํ ์ง๋ฌธ์ ๋ฉํ ๋ง ์๊ฐ์๋ ๋ค๋ฃจ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉํ ๋๊ป์ ์ค์ ์ฝ๋๋ฅผ ์จ๋ด๋ ค๊ฐ๋ฉด์ ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์ จ๊ณ ๋๋ถ์ ์ฝ๊ฒ ์ดํด๋ฅผ ํ ์ ์์๋ค. ๋ค์ ๋ฉํ ๋ง๋ถํฐ๋ ๋ ผ๋ฌธ ๋ฆฌ๋ฉ๋ ๋ณํํ๊ธฐ๋ก ํ์๋ค!
์์ง๊น์ง๋ ๊ฒจ์ฐ๊ฒจ์ฐ ๋ฐ๋ผ๊ฐ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ฒ ์ฐฌ ๋๋์ด ๋ค์ง๋ง ํ๋ฃจํ๋ฃจ ์ป์ด๊ฐ๋ ๊ฒ์ด ๋ง์ ๋ฟ๋ฏํ๋ค. ์ฐ์ ์ ์ ๋ฐ ๊ธฐ๋ณธ ๊ณผ์ 2๋ฅผ ์์ฑํ๊ณ ์ ์ถํ์..
๐ ๋ด์ผ ํ ์ผ
- ๊ธฐ๋ณธ ๊ณผ์ 1, 2 ์ ์ถํ๊ธฐ
- ๊ฐ์ ์๊ฐ & ํด์ฆ
- [PyTorch 7๊ฐ]
- [PyTorch 8๊ฐ]
- ๋ง์คํฐ ํด๋์ค