๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
๋ชจ๋ธ ๋งค๊ฐ๋ณ์ ์ต์ ํ [์ตํฐ๋ง์ด์ , ์์คํจ์, ํ์ดํผํ๋ผ๋ฏธํฐ] ๋ณธ๋ฌธ
๋ชจ๋ธ ๋งค๊ฐ๋ณ์ ์ต์ ํ [์ตํฐ๋ง์ด์ , ์์คํจ์, ํ์ดํผํ๋ผ๋ฏธํฐ]
์ง์ง์ํ์นด 2022. 9. 22. 14:42220922 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ pytorch, sswwd ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-) >
https://tutorials.pytorch.kr/beginner/basics/optimization_tutorial.html
๋ชจ๋ธ ๋งค๊ฐ๋ณ์ ์ต์ ํํ๊ธฐ
ํ์ดํ ์น(PyTorch) ๊ธฐ๋ณธ ์ตํ๊ธฐ|| ๋น ๋ฅธ ์์|| ํ ์(Tensor)|| Dataset๊ณผ Dataloader|| ๋ณํ(Transform)|| ์ ๊ฒฝ๋ง ๋ชจ๋ธ ๊ตฌ์ฑํ๊ธฐ|| Autograd|| ์ต์ ํ(Optimization)|| ๋ชจ๋ธ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ ์ด์ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ค๋น
tutorials.pytorch.kr
ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์ด๋?(1)
๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ๋์ด ์กฐ์ ํด์ผ ํ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌํ๋ค. ์ด๋ฅผ ํ์ดํผํ๋ผ๋ฏธํฐ๋ผ๊ณ ํ๋ค. ํ์ดํผํ๋ผ๋ฏธํฐ : - ์๋์ธต ์, ์๋์ธต์ ์ฑ๋ ์ → ์ : model.add(Dense(128)) - drop out ๋น์จ - ํ์ฑ
sswwd.tistory.com
๋ชจ๋ธ์ด ์ค๋น๋์์ผ๋ฉด! ๋ฐ์ดํฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ต์ ํ ํด์ผ ํ๋ค!
๊ทธ๋ฐ๋ค์ ๋ชจ๋ธ ํ์ต -> ๊ฒ์ฆ -> ํ ์คํธ
์ด ๋
์ํญ(epoch) ๊ฐ ๋ฐ๋ณต ๋จ๊ณ์์ ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์ถ์ธกํ๊ณ , ์ถ์ธก๊ณผ ์ ๋ต ์ฌ์ด์ ์ค๋ฅ(์์ค(loss))๋ฅผ ๊ณ์ฐ
๋งค๊ฐ๋ณ์์ ๋ํ ์ค๋ฅ์ ๋ํจ์(derivative)๋ฅผ ์์งํ ๋ค,
๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด ํ๋ผ๋ฏธํฐ๋ค์ ์ต์ ํ(optimize)
๐ ํ์ดํผํ๋ผ๋ฏธํฐ(Hyperparameter)
: ๋ชจ๋ธ ์ต์ ํ ๊ณผ์ ์ ์ ์ดํ ์ ์๋ ์กฐ์ ๊ฐ๋ฅํ ๋งค๊ฐ๋ณ์
- ์ํญ(epoch) ์ : ๋ฐ์ดํฐ์ ์ ๋ฐ๋ณตํ๋ ํ์
- ๋ฐฐ์น ํฌ๊ธฐ(batch size) : ๋งค๊ฐ๋ณ์๊ฐ ๊ฐฑ์ ๋๊ธฐ ์ ์ ๊ฒฝ๋ง์ ํตํด ์ ํ๋ ๋ฐ์ดํฐ ์ํ์ ์
- ํ์ต๋ฅ (learning rate) : ๊ฐ ๋ฐฐ์น/์ํญ์์ ๋ชจ๋ธ์ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๋น์จ
- ๊ฐ์ด ์์์๋ก ํ์ต ์๋๊ฐ ๋๋ ค์ง
- ๊ฐ์ด ํฌ๋ฉด ํ์ต ์ค ์์ธกํ ์ ์๋ ๋์์ด ๋ฐ์
๐ ์์ค ํจ์(loss function)
: ํ๋ํ ๊ฒฐ๊ณผ์ ์ค์ ๊ฐ ์ฌ์ด์ ํ๋ฆฐ ์ ๋(degree of dissimilarity)๋ฅผ ์ธก์ , ํ์ต ์ค์ ์ด ๊ฐ์ ์ต์ํ
: ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ํ์ ์ ๋ ฅ์ผ๋ก ๊ณ์ฐํ ์์ธก๊ณผ ์ ๋ต(label)์ ๋น๊ตํ์ฌ ์์ค(loss)์ ๊ณ์ฐ
- ํ๊ท ๋ฌธ์ (regression task)
- nn.MSELoss(ํ๊ท ์ ๊ณฑ ์ค์ฐจ(MSE; Mean Square Error))
- ๋ถ๋ฅ(classification)
- nn.NLLLoss (์์ ๋ก๊ทธ ์ฐ๋(Negative Log Likelihood))
- nn.LogSoftmax์ nn.NLLLoss๋ฅผ ํฉ์น nn.CrossEntropyLoss
๐ ์ตํฐ๋ง์ด์ (Optimizer)
: ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ํ์ต ๋จ๊ณ์์ ๋ชจ๋ธ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ชจ๋ธ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์
: ๋ชจ๋ ์ต์ ํ ์ ์ฐจ(logic)๋ optimizer ๊ฐ์ฒด์ ์บก์ํ(encapsulate)
: PyTorch์๋ ADAM์ด๋ RMSProp ๋ฑ
- optimizer.zero_grad() : ๋ชจ๋ธ ๋งค๊ฐ๋ณ์์ ๋ณํ๋๋ฅผ ์ฌ์ค์
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณํ๋๋ ๋ํด์ง๊ธฐ ๋๋ฌธ์ ์ค๋ณต ๊ณ์ฐ์ ๋ง๊ธฐ ์ํด ๋ฐ๋ณตํ ๋๋ง๋ค ๋ช ์์ ์ผ๋ก 0์ผ๋ก ์ค์
- loss.backwards() : ์์ธก ์์ค(prediction loss)์ ์ญ์ ํ
- PyTorch๋ ๊ฐ ๋งค๊ฐ๋ณ์์ ๋ํ ์์ค์ ๋ณํ๋๋ฅผ ์ ์ฅ
- optimizer.step() : ์ญ์ ํ ๋จ๊ณ์์ ์์ง๋ ๋ณํ๋๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์
๐ ์๋์ธต
: ๋คํธ์ํฌ ๊ตฌ์กฐ(์๋์ธต ์, ์๋์ธต์ ์ ๋ ์)๋ ์์ ๋กญ๊ฒ ์ค์
: ์๋ฅผ ๋ง๊ฒ ํ๋ฉด ๋ค์ํ ํจ์๋ฅผ ํํํ ์ ์์
BUT, ์ ๋ ฅ์ธต์ ๊ฐ๊น์ด ๊ฐ์ค์น๋ฅผ ์ ์ ํ๊ฒ ๊ฐฑ์ ํ๊ธฐ ์ด๋ ต๊ณ ํ์ต์ด ์ข์ฒ๋ผ ์งํ๋์ง ์์
์ค์์ฑ์ด ๋ฎ์ ํน์ง๋์ ์ถ์ถํด๋ฒ๋ ค ๊ณผํ์ตํ๊ธฐ ์ฌ์์ง
๐ Drop out
: ๊ณผํ์ต์ ๋ฐฉ์งํ์ฌ ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ ์ค ํ๋
: ์ ๋์ ์ผ๋ถ๊ฐ ํ์ตํ ๋๋ง๋ค 0์ผ๋ก ๋ฎ์ด์ฐ๊ธฐ ๋์ด ๋ฌด์์๋ก ์ ๊ฑฐ๋
: ์ ๊ฒฝ๋ง์ ํน์ ๋ด๋ฐ์ ์กด์ฌ์ ์์กดํ ์ ์๊ฒ ๋์ด train data์ธ์๋ ํต์ฉ๋๊ธฐ ์ฌ์ด ํน์ง์ ํ์ต
: ๋๋กญ์์์ ์ฌ์ฉํ๋ ์์น, ์ธ์ rate๋ ๋ชจ๋ ํ์ดํผํ๋ผ๋ฏธํฐ๋ค.
: drop out์ ํ๋ จํ๋ ๋์์๋ง ํ์ฑํ๋๋ฏ๋ก ํ๋ จ ์์ค๊ณผ ๊ฒ์ฆ ์์ค์ ๋น๊ตํ๋ฉด ์คํด๋ฅผ ์ผ์ผํค๊ธฐ ์ฌ์
=> drop out์ ๋นผ๊ณ ํ๋ จ ์์ค์ ํ๊ฐ
๐Activation(ํ์ฑํ ํจ์)
: ์ ๊ฒฐํฉ์ธต ๋ค์ ์ ์ฉํ๋ ํจ์๋ก, ๋ด๋ฐ์ ๋ฐํ์ ํด๋น
: ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ๋จ์ผ ์ง์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๋(์ ํ ๋ถ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ) ๋ฐ์ดํฐ๋ ๋ถ๋ฅํ ์ ์์
=> ๋ชจ๋ธ์ ๋น์ ํ์ฑ์ ๊ฐ๊ฒ ํ์ฌ ์ ํ ๋ถ๋ฆฌ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ๋์ํ๊ธฐ ์ํด activation์ ์ฌ์ฉ
โถ Sigmoid
- ์๊ทธ๋ชจ์ด๋ ํจ์๋ ๋ฐ๋์ 0๊ณผ 1์ฌ์ด์ ๊ตฌ๊ฐ์ ๊ฐ์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ทน๋จ์ ์ธ ์ถ๋ ฅ๊ฐ์ด ์ ์
- ๋ฆฌํด ๊ฐ์ด ํ๋ฅ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฅ ๋ก ํด์ํ ๋ ์ ์ฉ
- ์
๋ ฅ๊ฐ์ด ๋ชจ๋ ์์์ผ ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ์ ๋ชจ๋ ๋ถํธ๋ ๊ฐ์
- gradient descent์ ์ ํํ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ง ๋ชปํ๊ณ ์ง๊ทธ์ฌ๊ทธ๋ก ๋ฐ์ฐํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์(= ํ์ต์ด ๋๋ ค์ง)
- ์์ ๊ฐ์ 0์ ๊ฐ๊น๊ฒ ํํํ๊ธฐ ๋๋ฌธ์ ์
๋ ฅ ๊ฐ์ด ์ต์ข
๋ ์ด์ด์์ ๋ฏธ์น๋ ์ํฅ์ด ์ ์ด์ง๋ Vanishing Gradient Problem์ด ๋ฐ์
- x์ ์ ๋๊ฐ์ด ์ปค์ง์๋ก ๋ฏธ๋ถ ๊ฐ์ด ์์ค๋ ๊ฐ๋ฅ์ฑ์ด ํถ
โถ Tanh
- ์ถ๋ ฅ์ -1์์ 1์ฌ์ด ๊ตฌ๊ฐ์ผ๋ก ์ ํ
- ์ค์ฌ์ ์ 0์ผ๋ก ์ฎ๊ฒจ sigmoid๊ฐ ๊ฐ๊ณ ์๋ ์ต์ ํ ๊ณผ์ ์์ ๋๋ ค์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- BUT Vanishing Gradient Problem์ ์ฌ์ ํ ๋จ์์์
- RNN, LSTM ๋ฑ์ ํ์ต์ํฌ ๋ ์ฌ์ฉ
โถ ReLU(Rectified Linear Unit)
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ activation
- ์ถ๋ ฅ์ด ์ด๋ค ๊ตฌ๊ฐ์๋ ์๋ ด๋์ง ์๊ณ , ๊ทน๋จ์ ์ธ ์ถ๋ ฅ๊ฐ์ด ์์ฑ๋ ๊ฐ๋ฅ์ฑ์ด ์์
- Vanishing Gradient Problem ํด๊ฒฐํ๊ธฐ ์ํ ํจ์
- sigmoid๋ tanh์ ๋น๊ตํ์ ๋ SGD์ optimization ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ
- relu๋ ๋ฏธ๋ถ๊ฐ์ด 0 ์๋๋ฉด 1์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ๋น์ฉ์ด ๋ค์ง ์์
- BUT, ๋คํธ์ํฌ๋ฅผ ํ์ต์ํฌ ๋ ๋ด๋ฐ๋ค์ด ์ฃฝ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
- ์ ๋ ฅ๊ฐ์ด 0๋ณด๋ค ์์ผ๋ฉด ๋ด๋ฐ์ด ์ฃฝ์ด ๋ ์ด์ ๊ฐ์ ์ ๋ฐ์ดํธ๊ฐ ์ํ๋์ง ์์
- ํ๋ฒ 0 ํ์ฑํ ๊ฐ์ ๋ค์ ๋ ์ด์ด์ ์ ๋ฌํ๋ฉด ์ดํ์ ๋ด๋ฐ๋ค์ ์ถ๋ ฅ๊ฐ์ด ๋ชจ๋ 0์ด ๋๋ ํ์์ด ๋ฐ์
โถ softmax
- ์ ๋ ฅ๋ฐ์ ๊ฐ์ 0์์ 1์ฌ์ด์ ๊ฐ์ผ๋ก ๋ชจ๋ ์ ๊ทํ(normalized)ํ๋ฉฐ, ์ถ๋ ฅ ๊ฐ์ด ์ฌ๋ฌ๊ฐ
- ๋ค์ค ํด๋์ค ๋ฌธ์ ์ ์ ์ฉ
- ์ ๊ทํ ๊ธฐ๋ฅ์ ๊ฐ์ง
โถ Leaky ReLU
- relu์ ์ฃฝ๋ ๋ด๋ฐ ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด ์ ์๋ ํจ์
- ์์ ๊ธฐ์ธ๊ธฐ(0.01๊ณผ ๊ฐ์ ๋งค์ฐ ์์ ๊ฐ)๋ฅผ ๋ถ์ฌ
- ์ ๋ ฅ ๊ฐ์ด ์์์ผ ๋ ์๋งํ ์ ํ ํจ์๋ฅผ ๊ทธ๋ ค์ค
โถ PReLU
- Leaky ReLU์ ๊ฑฐ์ ์ ์ฌํ์ง๋ง ์๋ก์ด ํ๋ผ๋ฏธํฐ α ๋ฅผ ์ถ๊ฐํด x๊ฐ ์์์ธ ์์ญ์์๋ ๊ธฐ์ธ๊ธฐ๋ฅผ ํ์ต
- ์์์ ๋ํ gradient๋ฅผ ๋ณ์๋ก ๋๊ณ ํ์ต์ ํตํ์ฌ ์ ๋ฐ์ดํธ
โถ ELU(Exponential Linear Unit)
- ReLU์ ๋ชจ๋ ์ฅ์ ์ ํฌํจํ๋ฉฐ Dying ReLU ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- ์ถ๋ ฅ ๊ฐ์ด ๊ฑฐ์ zero-centered์ ๊ฐ๊น์ฐ๋ฉฐ, ์ผ๋ฐ์ ์ธ ReLU์ ๋ค๋ฅด๊ฒ exp ํจ์๋ฅผ ๊ณ์ฐํ๋ ๋น์ฉ์ด ๋ฐ์
โถ SELU(Scaled ELU)
- ELU ํ์ฑํ ํจ์์ ๋ณ์ข
- ์์ ์ฐ๊ฒฐ ์ธต๋ง ์์์ ์ ๊ฒฝ๋ง ๋ง๋ค๊ณ ๋ชจ๋ ์๋์ธต์ด SELU ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ๊ฐ ์๊ธฐ ์ ๊ทํ๊ฐ ๋จ
- ํ๋ จํ๋ ๋์ ๊ฐ ์ธต์ ์ถ๋ ฅ์ด ํ๊ท 0, ํ์คํธ์ฐจ 1์ ์ ์ง
- ์ ๋ ฅ ํน์ฑ ๋ฐ๋์ ํ์คํ ์ถ๋ ฅ์ด ํ๊ท 0, ํ์คํธ์ฐจ 1
- ๋ชจ๋ ์๋์ธต์ ๊ฐ์ค์น๋ lecun_normal ์ ๊ท๋ถํฌ ์ด๊ธฐํ
- ๋คํธ์ํฌ๋ ์ผ๋ ฌ๋ก ์์ ์ธต์ผ๋ก ๊ตฌ์ฑ
โถ Maxout
- ReLU์ ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ง๊ณ , Dying ReLU์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- ๊ณ์ฐ์ด ๋ณต์ก
โถ Swish
- 2017๋ ๊ตฌ๊ธ์์ ๋ง๋ ํจ์
- ์๊ทธ๋ชจ์ด๋ ํจ์์ x๋ฅผ ๊ณฑํ ์์ฃผ ๊ฐ๋จํ ํํ
- ๊น์ ๋ ์ด์ด๋ฅผ ํ์ต์ํฌ ๋ ReLU๋ณด๋ค ๋ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์
- ReLU์ ๋ฌ๋ฆฌ Swish๋ ๊ฐ์์ค๋ฌ์ด ๋์ ๋๋ ์ ์ ๋ณ๊ฒฝ์ด ์์
โถ GELU(Gaussian Error Linear Unit)
- 2018๋ ๋์ ๋์
- ๋น์ ํ ํจ์
- ๋คํธ์ํฌ๊ฐ ๊น์ด์ง์๋ก ์ ์๋
- GELU๋ BERT, ROBERTa, ALBERT ๋ฐ ๊ธฐํ ์์ NLP ๋ชจ๋ธ๊ณผ ํธํ
'๐ฉโ๐ป ์ปดํจํฐ ๊ตฌ์กฐ > etc' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ฌ pandas ์ฌ๋ฌ ํด๋ ๋ด csv ๋ถ๋ฌ์ค๊ธฐ (0) | 2022.12.05 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ slice๋ก ๋ฐฐ์ด 10์นธ์ฉ ์ฎ๊ธฐ๊ธฐ with ์ค์ผ์ค๋ง (0) | 2022.11.18 |
"Ctrl + Shift + R " & "Ctrl + F5" & "F5" ์ฐจ์ด์ (0) | 2022.09.15 |
๋์ค์ ์ฐธ๊ณ ํ ์ฝ๋ ์์ค (0) | 2022.09.14 |
windows Ubuntu(Linux)์ Anaconda ์ฐ๋ํ๊ธฐ (0) | 2022.09.02 |