๊ณผ์ ํฉ(Overfitting)?
๋ชจ๋ธ์ด ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ถํ์ํ ์ ๋๋ก ๊ณผํ๊ฒ ์๊ธฐํ์ฌ ํ๋ จ ๋ฐ์ดํฐ์ ํฌํจ๋ ๋ ธ์ด์ฆ๊น์ง ํ์ตํ ์ํ
ํ๋ จ ๋ฐ์ดํฐ์ ๋ํ ์ ํ๋๋ ๋์๋, ์๋ก์ด ๋ฐ์ดํฐ(๊ฒ์ฆ ๋ฐ์ดํฐ๋ ํ ์คํธ ๋ฐ์ดํฐ)์ ๋ํด์๋ ์ ๋๋ก ๋์ํ์ง ์์
1. ๋ฐ์ดํฐ์ ์์ ๋๋ฆฌ๊ธฐ
๋ฐ์ดํฐ์ ์์ ๋๋ฆด ์๋ก ๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ์ผ๋ฐ์ ์ธ ํจํด์ ํ์ตํ์ฌ ๊ณผ์ ํฉ์ ๋ฐฉ์ง
๋ฐ์ดํฐ ์ฆ์ ๋๋ ์ฆ๊ฐ(Data Augmentation) : ๋ฐ์ดํฐ์ ์์ด ์ ์ ๊ฒฝ์ฐ ์๋์ ์ผ๋ก ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ธ์ฉ ๋ณํํ๊ณ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ์ ์์ ๋๋ฆผ
- ์ด๋ฏธ์ง ๋ฐ์ดํฐ : ์ด๋ฏธ์ง๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ๋ ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ๊ณ , ์ผ๋ถ๋ถ์ ์์
- ํ ์คํธ ๋ฐ์ดํฐ : ๋ฒ์ญ ํ ์ฌ๋ฒ์ญ์ ํตํด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ (=์ญ๋ฒ์ญ(Back Translation))
2. ๋ชจ๋ธ์ ๋ณต์ก๋ ์ค์ด๊ธฐ
์ธ๊ณต ์ ๊ฒฝ๋ง์ ๋ณต์ก๋๋ ์๋์ธต(hidden layer)์ ์๋ ๋งค๊ฐ๋ณ์์ ์ ๋ฑ์ผ๋ก ๊ฒฐ์
* ์์ฉ๋ ฅ(capacity) : ๋ชจ๋ธ ๋ด ๋งค๊ฐ๋ณ์๋ค์ ์
3. ๊ฐ์ค์น ๊ท์ (Regularization) ์ ์ฉํ๊ธฐ
* ์ ๊ทํ(Normalization) : ๋ฐฐ์น ์ ๊ทํ, ์ธต ์ ๊ทํ
4. ๋๋กญ์์(Dropout)
ํ์ต ๊ณผ์ ์์ ์ ๊ฒฝ๋ง์ ์ผ๋ถ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ
์ ๊ฒฝ๋ง ํ์ต ์์๋ง ์ฌ์ฉํ๊ณ , ์์ธก ์์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ผ๋ฐ์
ex) ๋๋กญ์์์ ๋น์จ์ 0.5๋ก ํ๋ค๋ฉด ํ์ต ๊ณผ์ ๋ง๋ค ๋๋ค์ผ๋ก ์ ๋ฐ์ ๋ด๋ฐ์ ์ฌ์ฉํ์ง ์๊ณ , ์ ๋ฐ์ ๋ด๋ฐ๋ง์ ์ฌ์ฉ
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense
max_words = 10000
num_classes = 46
model = Sequential()
model.add(Dense(256, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5)) # ๋๋กญ์์ ์ถ๊ฐ. ๋น์จ์ 50%
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # ๋๋กญ์์ ์ถ๊ฐ. ๋น์จ์ 50%
model.add(Dense(num_classes, activation='softmax'))
๊ธฐ์ธ๊ธฐ ์์ค(Gradient Vanishing), ํญ์ฃผ(Exploding)
๊ธฐ์ธ๊ธฐ ์์ค
์ญ์ ํ ๊ณผ์ ์์ ์ ๋ ฅ์ธต์ผ๋ก ๊ฐ ์๋ก ๊ธฐ์ธ๊ธฐ(Gradient)๊ฐ ์ ์ฐจ์ ์ผ๋ก ์์์ง๋ ํ์
์ ๋ ฅ์ธต์ ๊ฐ๊น์ด ์ธต๋ค์์ ๊ฐ์ค์น๋ค์ด ์ ๋ฐ์ดํธ๊ฐ ์ ๋๋ก ๋์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ ์ต์ ์ ๋ชจ๋ธ์ ์ฐพ์ ์ ์๊ฒ ๋จ
ํญ์ฃผ
๊ธฐ์ธ๊ธฐ ์์ค์ ๋ฐ๋
๊ธฐ์ธ๊ธฐ๊ฐ ์ ์ฐจ ์ปค์ง๋ค๊ฐ ๊ฐ์ค์น๋ค์ด ๋น์ ์์ ์ผ๋ก ํฐ ๊ฐ์ด ๋๋ฉด์ ๊ฒฐ๊ตญ ๋ฐ์ฐํ๋ ํ์
ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ReLU์ ReLU์ ๋ณํ๋ค
์๋์ธต์ ํ์ฑํ ํจ์๋ก ์๊ทธ๋ชจ์ด๋๋ ํ์ดํผ๋ณผ๋ฆญํ์ ํธ ๋์ , ReLU๋ ReLU์ ๋ณํ ํจ์์ ๊ฐ์ Leaky ReLU๋ฅผ ์ฌ์ฉ
- ์๋์ธต์์๋ ์๊ทธ๋ชจ์ด๋ ํจ์ ์ฌ์ฉX
- Leaky ReLU๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ ๋ ฅ๊ฐ์ ๋ํด์ ๊ธฐ์ธ๊ธฐ๊ฐ 0์ ์๋ ดํ์ง ์์ ์ฃฝ์ ReLU ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- ์๋์ธต์์๋ ReLU๋ Leaky ReLU์ ๊ฐ์ ReLU ํจ์์ ๋ณํ๋ค์ ์ฌ์ฉ
2. ๊ทธ๋๋์ธํธ ํด๋ฆฌํ(Gradient Clipping)
๊ธฐ์ธ๊ธฐ ๊ฐ์ ์๋ฅด๋ ๊ฒ (=์๊ณ์น๋งํผ ํฌ๊ธฐ๋ฅผ ๊ฐ์)
RNN์์ ์ ์ฉ (RNN์ ์ญ์ ํ ๊ณผ์ ์์ ์์ ์ ์ญํํ๋ฉด์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ๋๋ฐ, ์ด๋ ๊ธฐ์ธ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ง ์ ์๊ธฐ ๋๋ฌธ)
from tensorflow.keras import optimizers
Adam = optimizers.Adam(lr=0.0001, clipnorm=1.)
3. ๊ฐ์ค์น ์ด๊ธฐํ(Weight initialization)
๊ฐ์ค์น ์ด๊ธฐํ๋ฅผ ์ ์ ํ๊ฒ ํจ์ผ๋ก์จ ๊ธฐ์ธ๊ธฐ ์์ค ๋ฌธ์ ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ํ
1) ์ธ์ด๋น์ด ์ด๊ธฐํ(Xavier Initialization)
ReLU์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ์ด ์ข์ง ์์
2) He ์ด๊ธฐํ(He initialization)
ReLU ํจ์ ๋๋ ReLU์ ๋ณํ ํจ์๋ค์ ํ์ฑํ ํจ์๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ์ด๊ธฐํ ๋ฐฉ๋ฒ
ReLU + He ์ด๊ธฐํ ๋ฐฉ๋ฒ์ด ์ข ๋ ๋ณดํธ์
4. ๋ฐฐ์น ์ ๊ทํ(Batch Normalization)
์ธ๊ณต ์ ๊ฒฝ๋ง์ ๊ฐ ์ธต์ ๋ค์ด๊ฐ๋ ์ ๋ ฅ์ ํ๊ท ๊ณผ ๋ถ์ฐ์ผ๋ก ์ ๊ทํ
1) ๋ด๋ถ ๊ณต๋ณ๋ ๋ณํ(Internal Covariate Shift)
ํ์ต ๊ณผ์ ์์ ์ธต ๋ณ๋ก ์ ๋ ฅ ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๋ฌ๋ผ์ง๋ ํ์
2) ๋ฐฐ์น ์ ๊ทํ(Batch Normalization)
ํ ๋ฒ์ ๋ค์ด์ค๋ ๋ฐฐ์น ๋จ์๋ก ์ ๊ทํ
3) ๋ฐฐ์น ์ ๊ทํ์ ํ๊ณ
- ๋ฏธ๋ ๋ฐฐ์น ํฌ๊ธฐ์ ์์กด์
- RNN์ ์ ์ฉํ๊ธฐ ์ด๋ ค์
5. ์ธต ์ ๊ทํ(Layer Normalization)
๋ฐฐ์น ํฌ๊ธฐ์๋ ์์กด์ ์ด์ง ์์ผ๋ฉฐ, RNN์๋ ์ ์ฉํ๋ ๊ฒ์ด ์์
'๊ฐ์ธ๊ณต๋ถ > Tensorflow' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
93. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (5)๋ฅ๋ฌ๋ ํ์ต ๋ฐฉ๋ฒ (0) | 2021.12.30 |
---|---|
92. Tensorflow Selenium Crawling ํผ์ํด๋ณด๊ธฐ Google PlayStore ์ฌ์ฉ์ ๋ฆฌ๋ทฐ ๊ฐ์ ธ์ค๊ธฐ (0) | 2021.12.29 |
91. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (4)ํผ์ ํธ๋ก , ์ ๊ฒฝ๋ง (0) | 2021.12.27 |
90. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (3)ํ์ฑํํจ์ (0) | 2021.12.25 |
89. ๋ฅ๋ฌ๋ ๊ธฐ์ด ์ด๋ก (2)ํ๊ท์ ๋ถ๋ฅ (0) | 2021.12.24 |