๐Ÿ›ธ ๋”ฅ๋Ÿฌ๋‹(Deep Learning) ๊ธฐ์ดˆ: ANN๊ณผ CNN์œผ๋กœ ๋ฐ์ดํ„ฐ์™€ ์ด๋ฏธ์ง€๋ฅผ ํ•™์Šตํ•˜๊ธฐ

okorionยท2025๋…„ 10์›” 29์ผ

1๏ธโƒฃ ๋”ฅ๋Ÿฌ๋‹์ด๋ž€?

๋”ฅ๋Ÿฌ๋‹(Deep Learning) ์€ ์ธ๊ฐ„ ๋‡Œ์˜ ๋‰ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฐฉํ•œ ์ธ๊ณต์‹ ๊ฒฝ๋ง(Artificial Neural Network, ANN) ์„ ๋‹ค์ธต์œผ๋กœ ์—ฐ๊ฒฐํ•ด
๋ฐ์ดํ„ฐ์—์„œ ํŠน์ง•(feature)์„ ์Šค์Šค๋กœ ํ•™์Šตํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๊ตฌ๋ถ„์ „ํ†ต์  ๋จธ์‹ ๋Ÿฌ๋‹๋”ฅ๋Ÿฌ๋‹
ํŠน์ง• ์ถ”์ถœ์‚ฌ๋žŒ์ด ์ง์ ‘ ์„ค๊ณ„๋„คํŠธ์›Œํฌ๊ฐ€ ์ž๋™ ์ถ”์ถœ
๋ฐ์ดํ„ฐ ์š”๊ตฌ๋Ÿ‰์ ์Œ๋งŽ์Œ
์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฐฉ๋ฒ•ํŠน์ง•๊ณตํ•™(Feature Engineering)์ธต(Layer)๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์žฅ
๋Œ€ํ‘œ ๋ชจ๋ธSVM, Random ForestANN, CNN, RNN, Transformer

๋”ฅ๋Ÿฌ๋‹์€ ๋น„์„ ํ˜•์ ยท๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํŒจํ„ด์„ ์Šค์Šค๋กœ ํ•™์Šตํ•ด,
์Œ์„ฑยท์ด๋ฏธ์ง€ยทํ…์ŠคํŠธ ์˜์—ญ์—์„œ ์ธ๊ฐ„ ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ–ˆ๋‹ค.


2๏ธโƒฃ ๋‰ด๋Ÿฐ(Neuron)๊ณผ ์‹ ๊ฒฝ๋ง์˜ ์ž‘๋™ ์›๋ฆฌ

โš™๏ธ ๋‰ด๋Ÿฐ ๊ตฌ์กฐ

ํ•˜๋‚˜์˜ ๋‰ด๋Ÿฐ์€ ์—ฌ๋Ÿฌ ์ž…๋ ฅ์„ ๋ฐ›์•„, ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•˜๊ณ  ํ•ฉํ•œ ๋’ค ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•œ๋‹ค.

y=f(w1x1+w2x2+b)y = f(w_1x_1 + w_2x_2 + b)
  • xix_i: ์ž…๋ ฅ๊ฐ’
  • wiw_i: ๊ฐ€์ค‘์น˜(weight)
  • bb: ํŽธํ–ฅ(bias)
  • ff: ํ™œ์„ฑํ™” ํ•จ์ˆ˜(activation function)

โšก ๋‹ค์ธต ์‹ ๊ฒฝ๋ง(MLP)

  • ์ž…๋ ฅ์ธต(Input Layer): ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
  • ์€๋‹‰์ธต(Hidden Layer): ํŒจํ„ด ํ•™์Šต
  • ์ถœ๋ ฅ์ธต(Output Layer): ์˜ˆ์ธก ๊ฒฐ๊ณผ

3๏ธโƒฃ ํ™œ์„ฑํ™” ํ•จ์ˆ˜ (Activation Function)

ํ•จ์ˆ˜์ˆ˜์‹/๊ทธ๋ž˜ํ”„ ํŠน์ง•์‚ฌ์šฉ ๋ชฉ์ 
Sigmoidf(x)=1/(1+eโˆ’x)f(x)=1/(1+e^{-x})ํ™•๋ฅ  ์ถœ๋ ฅ (0~1), ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ํ˜• ๋ฌธ์ œ
Tanh[โˆ’1,1][-1,1] ๋ฒ”์œ„, ์ค‘์‹ฌ 0๋Œ€์นญํ˜• ํ™œ์„ฑํ™”
ReLUf(x)=max(0,x)f(x)=max(0,x)CNNยทANN ๋Œ€๋ถ€๋ถ„์˜ ์€๋‹‰์ธต์—์„œ ์‚ฌ์šฉ
Softmaxํด๋ž˜์Šค ํ™•๋ฅ  ๋ถ„ํฌ ์ƒ์„ฑ๋‹ค์ค‘ ๋ถ„๋ฅ˜ (output layer)

๐Ÿ’ก ReLU๋Š” ๊ณ„์‚ฐ๋Ÿ‰์ด ์ž‘๊ณ  ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค(vanishing gradient) ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•œ๋‹ค.


4๏ธโƒฃ ์‹ ๊ฒฝ๋ง ํ•™์Šต ์›๋ฆฌ

๐Ÿ’ก ์ˆœ์ „ํŒŒ (Forward Propagation)

์ž…๋ ฅ โ†’ ๊ฐ€์ค‘์น˜ โ†’ ํ™œ์„ฑํ™” โ†’ ์ถœ๋ ฅ ์˜ˆ์ธก.

๐Ÿ’ก ์—ญ์ „ํŒŒ (Backpropagation)

์ถœ๋ ฅ๊ณผ ์‹ค์ œ๊ฐ’ ์ฐจ์ด(์˜ค์ฐจ)๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ,
๊ฐ€์ค‘์น˜๋ฅผ ๋ฏธ์„ธ ์กฐ์ •(Gradient Descent) ์œผ๋กœ ํ•™์Šต.

w=wโˆ’ฮทโˆ‚Lโˆ‚ww = w - \eta \frac{\partial L}{\partial w}
  • LL: ์†์‹ค ํ•จ์ˆ˜(loss)
  • ฮท\eta: ํ•™์Šต๋ฅ (learning rate)

5๏ธโƒฃ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• (Gradient Descent)

์œ ํ˜•์„ค๋ช…ํŠน์ง•
Batch GD์ „์ฒด ๋ฐ์ดํ„ฐ๋กœ ํ•œ ๋ฒˆ ์—…๋ฐ์ดํŠธ์•ˆ์ •์ , ๋А๋ฆผ
Stochastic (SGD)์ƒ˜ํ”Œ 1๊ฐœ์”ฉ ์—…๋ฐ์ดํŠธ๋น ๋ฅด์ง€๋งŒ ๋…ธ์ด์ฆˆ ํผ
Mini-Batch์ผ์ • ํฌ๊ธฐ ์ƒ˜ํ”Œ๋กœ ์—…๋ฐ์ดํŠธ๋Œ€๋ถ€๋ถ„์˜ ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ณธ ์„ค์ •

6๏ธโƒฃ Python ์‹ค์Šต โ€” ์ธ๊ณต์‹ ๊ฒฝ๋ง (ANN)

๐Ÿ“˜ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ

์ด์ง„ ๋ถ„๋ฅ˜ (์˜ˆ: ๊ณ ๊ฐ์˜ ์€ํ–‰ ์„œ๋น„์Šค ํƒˆํ‡ด ์—ฌ๋ถ€)


๐Ÿงช Python ์ฝ”๋“œ

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# ๋ชจ๋ธ ์ •์˜
model = Sequential()
model.add(Dense(units=6, activation='relu', input_dim=11))
model.add(Dense(units=6, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))

# ์ปดํŒŒ์ผ
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# ํ•™์Šต
model.fit(X_train, y_train, batch_size=32, epochs=100)

# ์˜ˆ์ธก
y_pred = (model.predict(X_test) > 0.5)

๐Ÿ’ก ๊ตฌ์กฐ ์š”์•ฝ:

  • ์ž…๋ ฅ์ธต: 11๊ฐœ ํŠน์„ฑ
  • ์€๋‹‰์ธต: 2๊ฐœ (๊ฐ 6 ๋‰ด๋Ÿฐ)
  • ์ถœ๋ ฅ์ธต: Sigmoid โ†’ ์ด์ง„ ๋ถ„๋ฅ˜ ํ™•๋ฅ 
  • ์†์‹คํ•จ์ˆ˜: Binary Cross-Entropy

๐Ÿงช R ์‹ค์Šต

library(h2o)
h2o.init()

model = h2o.deeplearning(
  y = "Exited",
  training_frame = train_h2o,
  hidden = c(6,6),
  activation = "Rectifier",
  epochs = 100
)

pred = h2o.predict(model, test_h2o)

7๏ธโƒฃ CNN (Convolutional Neural Network)

๐Ÿ’ก ๊ฐœ๋…

์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์—์„œ ๊ณต๊ฐ„์  ํŒจํ„ด(ํ”ฝ์…€ ๊ด€๊ณ„) ์„ ํ•™์Šตํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ.
ํŠน์ง•(feature)์„ ์‚ฌ๋žŒ์ด ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์ปจ๋ณผ๋ฃจ์…˜(Convolution) ์—ฐ์‚ฐ์œผ๋กœ ์ž๋™ ์ถ”์ถœํ•œ๋‹ค.


โš™๏ธ ๊ตฌ์กฐ ๋‹จ๊ณ„

๋‹จ๊ณ„์—ญํ• ์—ฐ์‚ฐ ๋ฐฉ์‹
1๋‹จ๊ณ„: ConvolutionํŠน์ง• ์ถ”์ถœํ•„ํ„ฐ(kernel)๋กœ ์ด๋ฏธ์ง€ ์Šค์บ”
2๋‹จ๊ณ„: ReLU๋น„์„ ํ˜•์„ฑ ์ถ”๊ฐ€์Œ์ˆ˜ ์ œ๊ฑฐ
3๋‹จ๊ณ„: Pooling์ฐจ์› ์ถ•์†ŒMax Pooling / Average Pooling
4๋‹จ๊ณ„: Flattening2D โ†’ 1D ๋ณ€ํ™˜Fully Connected ์ธต ์ž…๋ ฅ
5๋‹จ๊ณ„: Full Connection์ตœ์ข… ๋ถ„๋ฅ˜Softmax๋กœ ํด๋ž˜์Šค ํ™•๋ฅ  ๊ณ„์‚ฐ

๐Ÿงฉ Convolution ์˜ˆ์‹œ

ํ•„ํ„ฐ(kernel)์ด ์ด๋ฏธ์ง€ ์ผ๋ถ€๋ฅผ ์Šฌ๋ผ์ด๋”ฉํ•˜๋ฉฐ ํŒจํ„ด(๋ชจ์„œ๋ฆฌ, ์œค๊ณฝ)์„ ๊ฐ์ง€.

์ž…๋ ฅ์ปค๋„์ถœ๋ ฅ(ํŠน์ง•๋งต)
์ด๋ฏธ์ง€ 5ร—53ร—33ร—3

๐Ÿงช Python CNN ์‹ค์Šต

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# ๋ชจ๋ธ ์ดˆ๊ธฐํ™”
cnn = Sequential()

# 1. Convolution
cnn.add(Conv2D(32, (3,3), activation='relu', input_shape=(64,64,3)))

# 2. Pooling
cnn.add(MaxPooling2D(pool_size=(2,2)))

# 3. ์ถ”๊ฐ€ Convolution + Pooling
cnn.add(Conv2D(32, (3,3), activation='relu'))
cnn.add(MaxPooling2D(pool_size=(2,2)))

# 4. Flattening
cnn.add(Flatten())

# 5. Fully Connected
cnn.add(Dense(units=128, activation='relu'))
cnn.add(Dense(units=1, activation='sigmoid'))

# 6. Compile
cnn.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# ํ•™์Šต
cnn.fit(X_train, y_train, epochs=25, batch_size=32)

๐Ÿ’ก CNN์˜ ํ•ต์‹ฌ:
ํ”ฝ์…€ ๊ฐ„ โ€œ์ง€์—ญ์  ํŒจํ„ดโ€์„ ์ž๋™ ํ•™์Šตํ•˜์—ฌ
์ด๋ฏธ์ง€ ๋‚ด ํ˜•ํƒœยท์œค๊ณฝยท์ƒ‰์ƒ ํŠน์ง•์„ ๊ณ„์ธต์ ์œผ๋กœ ์ถ”์ถœํ•œ๋‹ค.


๐Ÿงช R CNN ์‹ค์Šต

library(keras)
model <- keras_model_sequential() %>%
  layer_conv_2d(filters=32, kernel_size=c(3,3), activation='relu', input_shape=c(64,64,3)) %>%
  layer_max_pooling_2d(pool_size=c(2,2)) %>%
  layer_flatten() %>%
  layer_dense(units=128, activation='relu') %>%
  layer_dense(units=1, activation='sigmoid')

model %>% compile(optimizer='adam', loss='binary_crossentropy', metrics='accuracy')
model %>% fit(X_train, y_train, epochs=25, batch_size=32)

8๏ธโƒฃ Softmax์™€ ๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ

๐Ÿ’ก Softmax

๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ์‹œ ๊ฐ ํด๋ž˜์Šค์˜ ํ™•๋ฅ ์„ ๊ณ„์‚ฐ.

P(yi)=eziโˆ‘j=1KezjP(y_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}

๐Ÿ’ก Cross-Entropy Loss

์˜ˆ์ธก ํ™•๋ฅ ์ด ์‹ค์ œ ๋ ˆ์ด๋ธ”๊ณผ ์–ผ๋งˆ๋‚˜ ์ฐจ์ด๋‚˜๋Š”์ง€ ๊ณ„์‚ฐ.

L=โˆ’โˆ‘yilogโก(yi^)L = -\sum y_i \log(\hat{y_i})

CNN์˜ ์ถœ๋ ฅ์ธต์—์„œ Softmax + CrossEntropy ์กฐํ•ฉ์€
์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด๋‹ค.


9๏ธโƒฃ ANN vs CNN ๋น„๊ต

ํ•ญ๋ชฉANNCNN
์ž…๋ ฅ ํ˜•ํƒœ1์ฐจ์› (ํƒญํ˜• ๋ฐ์ดํ„ฐ)2D/3D (์ด๋ฏธ์ง€, ์˜์ƒ)
ํŠน์ง• ์ถ”์ถœ์ˆ˜๋™ ์ž…๋ ฅ์ž๋™ (ํ•„ํ„ฐ ๊ธฐ๋ฐ˜)
ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜๋งŽ์Œ๊ณต์œ ๋กœ ๊ฐ์†Œ
์ ์šฉ ๋ถ„์•ผํ‘œํ˜• ๋ฐ์ดํ„ฐ, ์˜ˆ์ธก์ด๋ฏธ์ง€, ๋น„์ „

๐Ÿ”Ÿ ๊ฒฐ๋ก 

๋”ฅ๋Ÿฌ๋‹์€ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ์—์„œ ์Šค์Šค๋กœ ํŒจํ„ด์„ ํ•™์Šตํ•˜๋Š” ๊ธฐ์ˆ ๋กœ,
ANN์€ ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ ์˜ˆ์ธก, CNN์€ ์ด๋ฏธ์ง€ ์ธ์‹์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค.

๐Ÿ“˜ ํ•ต์‹ฌ ์š”์•ฝ

๋ชจ๋ธ์ž…๋ ฅ ํ˜•ํƒœํŠน์ง•์ฃผ์š” ์‘์šฉ
ANN์ˆซ์žํ˜•, ํ‘œํ˜• ๋ฐ์ดํ„ฐ๋‹ค์ธต ํผ์…‰ํŠธ๋ก  ๊ตฌ์กฐ๊ณ ๊ฐ์ดํƒˆ, ์˜ˆ์ธก
CNN์ด๋ฏธ์ง€, ๋น„๋””์˜ค์ง€์—ญ ํŒจํ„ด ์ž๋™ ํ•™์Šต์–ผ๊ตด์ธ์‹, ์˜๋ฃŒ์˜์ƒ
ํ™œ์„ฑํ™” ํ•จ์ˆ˜ReLU / Sigmoid / Softmax๋น„์„ ํ˜•์„ฑ ๋ถ€์—ฌ๋Œ€๋ถ€๋ถ„์˜ ๋”ฅ๋Ÿฌ๋‹ ๊ณตํ†ต
ํ•™์Šต ๋ฐฉ์‹๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• + ์—ญ์ „ํŒŒ์†์‹ค ์ตœ์†Œํ™”๋ฐ˜๋ณต์  ํ•™์Šต์œผ๋กœ ์ˆ˜๋ ด
profile
Tech Archive 2026

0๊ฐœ์˜ ๋Œ“๊ธ€