๐ก ์ฐธ๊ณ ํ ๋งํ ๋งํฌ๋ค
But what is a neural network? | Chapter 1, Deep learning
์์ตํด๋ ๋ชจ๋ฅด๊ฒ ๋ แแ
ตแธแ
แ
ฅแแ
ตแผ, ๋จธ๋ฆฌ์์ ์ธ์คํจ ์์ผ๋๋ฆฝ๋๋ค.
๐ก ๋ณดํต ์ ํ๋ฐ์ดํฐ์์๋ ๋จธ์ ๋ฌ๋์ด ์ข ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๊ธฐ๋ ํ๋ค.
Fully Connected Network == Deep Neural Network (DNN)
๐ค Fully Connected Network์๋ ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์ ํํ๋ก ์ฃผ์
ํด์ผ ํ๋๋ฐ ์ด๋ป๊ฒ ๋น์ ํ ๋ฐ์ดํฐ(ํํํ๊ฐ ์๋๋ผ ์ด๋ฏธ์ง, ์์ฑ, ํ
์คํธ ๋ฑ)๋ฅผ ๋ค๋ฃฐ๊น?
Fully Connected Network์๋ ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์ ํํ๋ก๋ง ์ฃผ์
์ด ๊ฐ๋ฅํ๋ค.
์ ์ฒ๋ฆฌ ๋ ์ด์ด์์ ์ด๋ฏธ์ง, ์์ฑ, ํ
์คํธ ๋ฑ์ ์ ์ฒ๋ฆฌ ํ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ ๊ณตํ๋ค.
CNN, RNN ์์ ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ๋ง์ง๋ง์๋ Fully Connected Network ๋ฅผ ํต๊ณผํ๊ฒ ๋๋ค.
๐ก ์ค๋ช ๊ฐ๋ฅํ ์ธ๊ณต์ง๋ฅ ๋๊ตฌ ์ค ํ๋: https://wandb.ai/site
๐ค dropout์ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ ๊น?
์ผ๋ถ ๋
ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฉฐ ๊ณผ๋์ ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ
https://www.tensorflow.org/tutorials/quickstart/beginner
๐ค Dense layer๋?
output = activation(dot(input, kernel) + bias)
์ถ๋ ฅ = ํ์ฑํํจ์(ํ๋ ฌ๊ณฑ(input, kernel) + ํธํฅ)
tf.keras.layers.Dense(units=128, activation='relu')
๐ก units(๋ ธ๋) ๊ฐ์, ์ธต(๋ ์ด์ด)์๋ ํ์ดํผํ๋ผ๋ฏธํฐ
# ์ค์ต
units == nodes ==
# ์
๋ ฅ - ์๋์ธต - ์ถ๋ ฅ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ๋คํธ์ํฌ ๋ชจ๋ธ
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)), # ์
๋ ฅ์ธต
tf.keras.layers.Dense(units=128, activation='relu'),
tf.keras.layers.Dropout(0.2), # ์ผ๋ถ ๋
ธ๋ ์ ๊ฑฐ (overfitting ๋ฐฉ์ง)
# ํ์ฑํ ํจ์. softmax๋ ํ๋ฅ ๊ฐ ๋ฐํ
tf.keras.layers.Dense(10, activation='softmax')
])
# ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ๋ง๋ค๋ ค๋ฉด ๋ชจ๋ธ์ ์ธต์ ๊ตฌ์ฑํ ๋ค์ ๋ชจ๋ธ์ ์ปดํ์ผํด์ผ ํจ.
model.compile(optimizer='adam', # optimizer: ์ต์ ํ ํจ์
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
๐ก epoch๋ ํ์ต ํ์๋ฅผ ์๋ฏธํ๊ณ epoch ํ ๋ฒ๋น ์์ ํ์ ์ญ์ ํ๋ฅผ ํ ๋ฒ์ฉ ๋๋ฉด์ loss๊ฐ ์ถ๋ ฅ
๋ถ๋ฅ์์๋ ๋ณดํต ์๋์ ๊ฐ์ด ์ฌ์ฉ:
- optimizer='adam'
- loss='sparse_categorical_crossentropy',
์ถ์ฒ: https://gombru.github.io/2018/05/23/cross_entropy_loss/
โ
Cross entropy
: ๋ถ๋ฅ ๊ฒฐ๊ณผ์ ํ์ง์ ์ธก์ ํ๊ธฐ ์ํ Loss function
์ถ์ฒ: ๋ฉ์์ด ์ฌ์์ฒ๋ผ AI SCHOOL ๋ฐ์กฐ์ ๊ฐ์ฌ๋ ์์ ์๋ฃ 15๋ฒ์งธ ppt, p.69
๐ค ํน์ ํด๋์ค์ ๋ํ ์ถ๋ ฅ์ด [0.1, 0.05, 0.7, 0.15] ์ด๋ ๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค๋ฉด ์ฌ๊ธฐ์์ ์์ธก๊ฐ์ ๋ต์ ๋ฌด์์ผ๋ก ํ๋ฉด ๋ ๊น?
A: 2, softmax๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํ๋๋ฐ 2๋ฒ ์ธ๋ฑ์ค (0.7)๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ด๊ธฐ ๋๋ฌธ
๐ค ํน์ ํด๋์ค์ ๋ํ ์ถ๋ ฅ์ด [0.1, 0.05, 0.7, 0.15] ์ด๋ ๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค๋ฉด ์ด ์ ๋ต ํด๋์ค์ ์ข
๋ฅ์ ๊ฐ์๋ ๋ช๊ฐ์ผ๊น?
A: 4, 4๊ฐ ์ค์ ํ๋๋ฅผ ๋ถ๋ฅํ๋ ๋ชจ๋ธ์ด๊ธฐ ๋๋ฌธ
์ถ์ฒ: https://jjeongil.tistory.com/977
: ์์ค ํจ์๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๊ฐฑ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ
: ๋ชจ๋ธ์ด ์ธ์ํ๋ ๋ฐ์ดํฐ์ ํด๋น ์์ค ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ธ์ด ์
๋ฐ์ดํธ๋๋ ๋ฐฉ์
๐ค Optimizer๋ฅผ ์ฌ์ฉํ๋ ์ด์ ?
Local minimum์ ๋น ์ ธ global minimum๋ฅผ ์ฐพ์ง ๋ชปํ๋ ๊ฒ์ ๋ฐฉ์ง ํ๊ธฐ ์ํด ์ฌ์ฉ (= loss์ ์ต์๊ฐ ์ฐพ๊ธฐ)
Optimizer๋ ๊ฒฝ์ฌํ๊ฐ๋ฒ ์ธ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์ง์ ํ ์๋ ์์ง๋ง adam์ ๋นํด ๋๋ถ๋ถ ์๋๊ฐ ๋๋ฆฐ ํธ. ๋์ฒด์ ์ผ๋ก adam์ ์ฌ์ฉํ๋ฉด ์๋๋ ๋น ๋ฅด๊ณ ํ์ต๋ ์ ํ๋ ํธ์ด๋ค.
์ถ์ฒ: https://www.slideshare.net/yongho/ss-79607172/49
https://www.tensorflow.org/tutorials/keras/classification
๐ก plt.imshow(train_images[0])
: sns.heatmap๊ณผ ๊ฐ์ด matplotlib์ ์๊ฐํ ๊ธฐ๋ฅ
# ๋ชจ๋ธ ํ์ต
model.fit(train_images, train_labels, epochs=10)
์ถ์ฒ: ๋ฉ์์ด ์ฌ์์ฒ๋ผ AI SCHOOL ๋ฐ์กฐ์ ๊ฐ์ฌ๋ ์์ ์๋ฃ 15๋ฒ์งธ ppt, p.81
loss ๊ฐ์ ๋ณด๊ณ label ์ด ์ด๋ค ํํ์ธ์ง ์ ์ ์๋ค. label ๊ฐ์ด binary, one-hot, oridinal encoding ์ด ๋์ด์๋์ ๋ฐ๋ผ loss๊ฐ์ ์ง์ ํด์ผ ํ๋ค.
1) ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ ์ฉํ๋ค๋ฉด ์ธต ๊ตฌ์ฑ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?
์
๋ ฅ-์๋-์ถ๋ ฅ์ธต์ผ๋ก ๊ตฌ์ฑ
2) ์์ธกํ๊ณ ์ ํ๋ ๊ฐ์ด ๋ถ๋ฅ(์ด์ง, ๋ฉํฐํด๋์ค), ํ๊ท์ธ์ง์ ๋ฐ๋ผ ์ถ๋ ฅ์ธต ๊ตฌ์ฑ, loss ์ค์ ์ด ๋ฌ๋ผ์ง๋ค.
3) ๋ถ๋ฅ, ํ๊ท์ ๋ฐ๋ผ ์ธก์ ์งํ ์ ํ๊ธฐ
4) ํ์ฑํํจ์๋ ReLU๋ฅผ ์ฌ์ฉ, optimizer๋ก๋ adam์ ์ฌ์ฉํ๋ฉด baseline ์ ๋์ ์ค์ฝ์ด๊ฐ ๋์จ๋ค.
5) fit์ ํ ๋ epoch๋ฅผ ํตํด ์ฌ๋ฌ ๋ฒ ํ์ต์ ์งํ
์ด ๋,
- epoch ์๊ฐ ๋ง์ ์๋ก ๋์ฒด์ ์ผ๋ก ์ข์ ์ฑ๋ฅ์ ๋ด์ง๋ง overfitting์ด ๋ ์๋ ์๋ค.
- epoch ์๊ฐ ๋๋ฌด ์ ๋ค๋ฉด underfitting์ด ๋ ์๋ ์๋ค.
๐ก ํ
์ํ๋ก VS ํ์ดํ ์น์ ์ฐจ์ด
: seaborn VS plotnine ์ฒ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๊ตฌ์ API ์ฐจ์ด ์
๋๋ค.
์๊ฐํ ํ ๋๋ data, x, y, color(hue) ์ด๋ฐ ์ฉ์ด๋ฅผ ์๊ณ ์๋ค๋ฉด API ๊ฐ ๋ฌ๋ผ์ง๋๋ผ๋ ๋น์ทํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒ๊ณผ ์ ์ฌํฉ๋๋ค.
์ง์ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์ง์ ๊ตฌํํ ์๋ ์์ง๋ง, ๊ธฐ๋ฅ๋ค์ ํจ์๋ ๋ฉ์๋๋ก ๊ฐ์ธ์ ์ฝ๋ ์ฌ๋ฌ ์ค์ ํ ๋์ค์ API ๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด ๋์ ๋๊ตฌ ์ ๋๋ค.
๐ก ๋จธ์ ๋ฌ๋ ์์ ์์ ์ค์ต ํ๋ ๋น๋จ๋ณ ๋ฐ์ดํฐ์ ์ ๋ฅ๋ฌ๋์ผ๋ก ์ค์ตํด๋ณด๊ธฐ
1) ์ธต ์ค์
2) Dense Layer
3) ์ถ๋ ฅ์ธต
tf.keras.layers.Dense(n, activation='softmax')
tf.keras.layers.Dense(1, activation='sigmoid')
# tf.keras.models.Sequential ๋ก ์
๋ ฅ-ํ๋ -์ถ๋ ฅ(sigmoid) ๋ ์ด์ด๋ก ๊ตฌ์ฑ
model = tf.keras.models.Sequential([
# ๐ค ์ถ๋ ฅ์ธต์ flatten ๋์ dense๋ฅผ ์ฌ์ฉํ ์ด์ ?
# flatten ์ 2์ฐจ์์ 1์ฐจ์์ผ๋ก ๋ง๋ค์ด ์ฃผ๊ธฐ ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
# 1์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ํด๋น ์ค์ต์์๋ dense๋ฅผ ์ฌ์ฉ
tf.keras.layers.**Dense**(units=128, input_shape=[input_shape]), # ์
๋ ฅ์ธต
tf.keras.layers.Dense(128, activation='relu'), # ํ๋ ๋ ์ด์ด
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(1, activation='sigmoid') # ์ถ๋ ฅ์ธต
])
๐ค ์ถ๋ ฅ์ธต์ flatten ๋์ dense๋ฅผ ์ฌ์ฉํ ์ด์ ?
flatten ์ 2์ฐจ์์ 1์ฐจ์์ผ๋ก ๋ง๋ค์ด ์ฃผ๊ธฐ ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ
: ๋ชจ๋ธ์ ํ๋ จํ๊ธฐ ์ ์ ํ์ํ ๋ช ๊ฐ์ง ์ค์ ์ถ๊ฐํ๋ ๋จ๊ณ
# ๋ชจ๋ธ ์ปดํ์ผ
model.compile(optimizer='adam',
loss='binary_crossentropy', # ๋น๋จ๋ณ ์ฌ๋ถ
metrics=['accuracy']) # ๋ถ๋ฅ์ธก์ ์งํ
# early_stop ์ค์
class PrintDot(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
if epoch % 100 == 0: print('')
print('.', end='')
# val_loss ๊ธฐ์ค์ผ๋ก ๊ฐ์ด ๋์์ง์ง ์์ผ๋ฉด ๋ฉ์ถ๊ฒ ํ๋ค.
early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss',
patience=10)
Q: 28x28 ์ด๋ฏธ์ง๋ก ํ์ต์ ํ๋๋ฐ ์ ์
๋ ฅ์ 784๊ฐ๊ฐ ๋ค์ด๊ฐ๊น์?
A: 28 * 28 = 784
Fully Connected Network์๋ 2์ฐจ์ ํํ๋ฅผ ๊ทธ๋๋ก ๋ฃ์ ์ ์๊ธฐ ๋๋ฌธ์ 1์ฐจ์์ผ๋ก ํํ๋ฅผ ๋ณํ(ํํํ)ํด์ผ ํ๋ค.
Q: MNIST ์ค์ต๊ณผ FMNIST ์ค์ต์ ์ฐจ์ด์ ?
A: MNIST๋ dropout์ ํด์คฌ๊ณ , FMNIST์์๋ ์ถ๋ ฅ์ธต์์ softmax ์์จ์ฃผ๊ณ 10๋ง ์จ์คฌ๋ค. FMNIST๋ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํด์ ๋ณด๊ธฐ๊ฐ ์ข์๋ค. ํ๋ฅ ๊ฐ๋ ์๊ฐํํด์ ์ง๊ด์ ์ด์๋ค.
Q: ๋น๋จ๋ณ ์ฌ๋ถ ์์ธก ๋ฌธ์ ์์๋ ์ถ๋ ฅ์ธต์ ์ด๋ป๊ฒ ๊ตฌ์ฑํด์ผ ํ ๊น์?
A: ์๊ทธ๋ชจ์ด๋ (๋น๋จ๋ณ ์ฌ๋ถ)
Q: bias๊ฐ ์๊ณ๊ฐ ์กฐ์ ์ด ๋ง๋์?
A: ์๊ณ๊ฐ์ ํ์ฑํ ํจ์ == activation function ์ ์ถ๋ ฅ ๊ธฐ์ค์ด ๋ฉ๋๋ค.
Q: bias๋ฅผ ์ ๋ํด์ฃผ๋์?
A: weight๋ ๋๋ฒ์งธ ๋ ์ด์ด๊ฐ ์ ํํ๋ ค๋ ๋ด๋ฐ์ ํฝ์
ํจํด์ ์๋ ค์ฃผ๋ฉฐ bias๋ ๋ด๋ฐ์ด ํ์ฑํ๋๋ ค๋ฉด ๊ฐ์ค์น์ ํฉ์ด ์ผ๋ง๋ ๋ ๋์์ผ ํ๋์ง๋ฅผ ์๋ ค์ค๋๋ค.
Q: Tanh๋ ๊ธฐ์ธ๊ธฐ์์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ์ฑํ ํจ์์ธ๊ฐ์?
A: sigmoid[0, 1]์ ๋น์ทํ๊ฒ tanh[-1, 1] ๋ก ๋ฒ์๊ฐ ์ข๋ ๋์ต๋๋ค. ๊ธฐ์ธ๊ธฐ ์์ค๋ฌธ์ ๋ ์์ง๋ง ์ข๋ ๋น ๋ฆ
๋๋ค.
Q: tf.keras.layers.Dropout(0.2)
์ฌ๊ธฐ์๋ ๋ฑ 0.2 ๋ง ๋๋์์์ ํ๋ ๊ฑด๊ฐ์? ์๋๋ฉด ๊ทธ ์๋๊ฐ๋ ๋ค dropout ํ๋ ๊ฑด๊ฐ์?
A: ๋
ธ๋์ ๊ฐ์ * 0.2 ๋งํผ (20%)์ ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๊ทธ ์๋ ๊ฐ์ ์ถ๋ ฅ์ธต์ด๋ผ ์๊ด ์์ด์. ํด๋น ์ธต์ ์๋ ๋
ธ๋(units)๋ง ์ ๊ฑฐํฉ๋๋ค.
Q: ๋ชจ๋ธ์ ์ปดํ์ผ ํด์ค ๋ ๋ง๋ค ์ ๋ตํด๋์ค๊ฐ ๋ค๋ฅด๊ฒ ๋์ค๋๋ฐ ๋ชจ๋ธ ์ฑ๋ฅ์ด ์์ข์์์ผ๊น์?
A: ํ ๋ฒ๋ง ํ์ต์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฌ๋ฌ๋ฒ ํ์ตํ๋ฉด ์ฑ๋ฅ์ด ๋ ์ข์์ง๋๋ค.
์ฌ๋ฌ ๋ฒ ํ์ตํ๋ฉด ํ์ต์ ํ๋ฉฐ weight์ bias๊ฐ์ ์ ๋ฐ์ดํธ ํ๊ธฐ ๋๋ฌธ์ loss๊ฐ ์ ์ ์ค์ด๋ญ๋๋ค.
Q: ์ถ๋ ฅ์ธต ์ฝ๋์ ์ํํธ ๋งฅ์ค๊ฐ ์๋๋ฐ ๋ํดํธ๊ฐ ์ํํธ๋งฅ์ค์ธ๊ฐ์?
A: ๋ค. 2๊ฐ๋ผ๋ ๊ธฐ๋ณธ์ด softmax ์ด๊ณ ์ค์ตํ ๋๋ ๋ฐ์ด๋๋ฆฌ ๋ถ๋ฅ๋ฅผ ํ ์์ ์ด๋ผ sigmoid ๋ก ์ง์ ํ ์์ ์
๋๋ค.