순차 모델 구축
Dense 층을 쌓고 활성화 함수를 적용하며 손실 함수와 최적화 알고리즘으로 컴파일합니다.
순차 모델 구축은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
순차 모델
순차 모델은 각 계층이 정확히 하나의 입력 텐서와 하나의 출력 텐서를 가지는 계층의 선형 스택입니다. 가장 단순한 Keras 모델 유형이며 피드포워드 분류기, 회귀 모델, 기본 CNN/RNN 등 대부분의 실용적인 사용 사례를 다룹니다.
library(keras)
# An empty sequential model
model <- keras_model_sequential()
print(model)
# Or specify the input shape upfront
model <- keras_model_sequential(input_shape = c(20))
print(model)layer_dense() — 완전 연결 계층
layer_dense(units, activation)은 모든 입력 뉴런이 모든 출력 뉴런에 연결되는 완전 연결(밀집) 계층을 추가합니다. units 인수는 출력 차원을 설정합니다. activation은 비선형성을 적용하며, 'relu'는 은닉 계층에서 표준적으로 사용됩니다.
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(units = 128, activation = 'relu') |>
layer_dense(units = 64, activation = 'relu') |>
layer_dense(units = 1, activation = 'sigmoid')
# Print architecture
summary(model)출력 계층 활성화 함수
마지막 계층의 활성화 함수는 작업에 따라 달라집니다.
'sigmoid': 이진 분류(0~1 확률 출력)'softmax': 다중 클래스 분류(합계가 1인 확률 출력)'linear'또는 활성화 함수 없음: 회귀(실수값 예측 출력)
# Binary classification
binary_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'sigmoid') # P(class=1)
# Multi-class (10 classes)
multi_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(10, activation = 'softmax') # P per class
# Regression
reg_model <- keras_model_sequential(input_shape = c(20)) |>
layer_dense(64, activation = 'relu') |>
layer_dense(1, activation = 'linear') # raw valuecompile() — 손실, 옵티마이저, 지표
compile(loss, optimizer, metrics)는 학습 과정을 구성합니다. 일반적인 조합은 다음과 같습니다.
- 이진 분류:
loss = 'binary_crossentropy',metrics = 'accuracy' - 다중 클래스 분류:
loss = 'categorical_crossentropy' - 회귀:
loss = 'mse',metrics = 'mae'
model |> compile(
loss = 'binary_crossentropy',
optimizer = optimizer_adam(learning_rate = 0.001),
metrics = c('accuracy')
)
# Check configuration
model$loss
model$optimizer$get_config()optimizer_adam()
Adam(Adaptive Moment Estimation)은 대부분의 딥러닝 작업에서 기본 옵티마이저로 사용됩니다. 그래디언트의 1차 및 2차 모멘트 추정값을 사용해 매개변수별 학습률을 조정합니다. 기본 학습률 0.001은 대부분의 문제에서 좋은 시작점입니다.
# Adam with default settings
model |> compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
# Customised Adam
model |> compile(
optimizer = optimizer_adam(
learning_rate = 0.0005,
beta_1 = 0.9,
beta_2 = 0.999,
epsilon = 1e-7
),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)fit() — 모델 학습
fit(model, x, y, epochs, batch_size, validation_split)은 모델을 학습시킵니다. 각 에포크는 학습 데이터를 처음부터 끝까지 한 번 처리하는 과정입니다. 배치 크기는 각 가중치 업데이트 전에 처리할 샘플 수를 결정합니다. 이 함수는 기록 객체를 반환합니다.
# Prepare example data
x_train <- matrix(rnorm(1000 * 20), nrow = 1000)
y_train <- sample(c(0, 1), 1000, replace = TRUE)
history <- model |> fit(
x = x_train,
y = y_train,
epochs = 20,
batch_size = 32,
validation_split = 0.2, # reserve 20% for validation
verbose = 1
)
plot(history)계층 정규화 — 드롭아웃
layer_dropout(rate)은 학습 중 입력 단위의 rate 비율을 무작위로 0으로 설정합니다. 이를 통해 뉴런이 서로 지나치게 밀접하게 공동 적응하는 것을 방지하여 강력한 정규화 효과를 냅니다. 드롭아웃은 추론 중이 아니라 학습 중에만 활성화됩니다.
model <- keras_model_sequential(input_shape = c(784)) |>
layer_dense(512, activation = 'relu') |>
layer_dropout(rate = 0.4) |>
layer_dense(256, activation = 'relu') |>
layer_dropout(rate = 0.3) |>
layer_dense(10, activation = 'softmax')
summary(model)L1 및 L2 가중치 정규화
kernel_regularizer를 사용해 개별 계층을 정규화하고 큰 가중치에 페널티를 부여합니다. L2(릿지)는 가중치 제곱합에 페널티를 주고, L1(라쏘)은 절댓값에 페널티를 주어 희소성을 유도합니다. 둘 다 regularizer_l2()와 regularizer_l1()을 통해 사용할 수 있습니다.
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(
units = 64,
activation = 'relu',
kernel_regularizer = regularizer_l2(l = 0.01)
) |>
layer_dense(
units = 32,
activation = 'relu',
kernel_regularizer = regularizer_l1_l2(l1 = 1e-4, l2 = 1e-3)
) |>
layer_dense(1, activation = 'sigmoid')
summary(model)배치 정규화
layer_batch_normalization()은 각 미니배치에 대해 이전 계층의 활성화 값을 정규화합니다. 이를 통해 학습을 안정화하고 더 높은 학습률을 사용할 수 있으며, 약한 정규화 효과도 얻을 수 있습니다. layer_dense() 다음이자 활성화 함수 앞에 배치하거나 활성화 함수 뒤에 배치할 수 있으며, 두 방식 모두 실제로 사용됩니다.
model <- keras_model_sequential(input_shape = c(100)) |>
layer_dense(256, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(128, use_bias = FALSE) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dense(1, activation = 'sigmoid')
summary(model)evaluate()와 predict()
evaluate(model, x_test, y_test)는 테스트 데이터에서 손실과 평가지표를 계산합니다. predict(model, x_new)는 원시 예측값, 즉 분류 문제에서는 확률을 생성합니다. 두 함수 모두 숫자 행렬을 입력으로 받고 일관된 R 네이티브 값을 반환합니다.
x_test <- matrix(rnorm(200 * 20), nrow = 200)
y_test <- sample(c(0, 1), 200, replace = TRUE)
# Evaluate on test set
test_metrics <- model |> evaluate(x_test, y_test, verbose = 0)
cat('Test Loss:', test_metrics['loss'])
cat('Test Accuracy:', test_metrics['accuracy'])
# Generate predictions
prob_preds <- model |> predict(x_test)
class_preds <- ifelse(prob_preds > 0.5, 1, 0)
table(class_preds, y_test)모델 저장 및 불러오기
save_model_tf(model, 'path')를 사용하면 컴파일하고 훈련한 모델을 저장할 수 있습니다(TF SavedModel 형식, 권장). 또는 save_model_hdf5(model, 'model.h5')를 사용할 수 있습니다. load_model_tf() 또는 load_model_hdf5()로 다시 불러옵니다. 불러온 모델에는 컴파일 설정이 유지되므로 즉시 예측하거나 훈련을 계속할 수 있습니다.
# Save in TensorFlow SavedModel format (recommended)
save_model_tf(model, '/tmp/my_dense_model')
# Reload
loaded <- load_model_tf('/tmp/my_dense_model')
# Confirm predictions match
new_preds <- loaded |> predict(x_test)
all.equal(prob_preds, new_preds) # TRUE빠른 확인
5개 클래스 분류 문제를 위한 순차 모델을 만들 때, 출력 레이어에는 어떤 활성화 함수와 유닛 수를 사용해야 합니까?
순차 모델 요약
순차 모델 만들기의 핵심 내용:
keras_model_sequential()은 레이어를 선형으로 쌓은 구조를 만듭니다.layer_dense(units, activation)은 핵심 완전 연결 레이어입니다.- 출력 활성화:
'sigmoid'(이진),'softmax'(다중 클래스),'linear'(회귀). compile(loss, optimizer, metrics)는 학습 과정을 설정합니다.fit(model, x, y, epochs, batch_size, validation_split)은 모델을 훈련합니다.- 정규화:
layer_dropout(rate),regularizer_l2(),layer_batch_normalization(). save_model_tf()로 저장하고load_model_tf()로 불러옵니다.
library(keras)
model <- keras_model_sequential(input_shape = c(30)) |>
layer_dense(128, activation = 'relu') |>
layer_dropout(0.4) |>
layer_dense(64, activation = 'relu') |>
layer_dropout(0.3) |>
layer_dense(1, activation = 'sigmoid')
model |> compile(
optimizer = optimizer_adam(0.001),
loss = 'binary_crossentropy',
metrics = 'accuracy'
)
history <- model |> fit(
x_train, y_train,
epochs = 30, batch_size = 64,
validation_split = 0.2, verbose = 0
)
plot(history)자주 묻는 질문
“순차 모델 구축” 강의는 무료인가요?
네 — “순차 모델 구축” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“순차 모델 구축”에서 뭘 배우나요?
Dense 층을 쌓고 활성화 함수를 적용하며 손실 함수와 최적화 알고리즘으로 컴파일합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“순차 모델 구축” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.