0Pricing
R Academy · レッスン

Sequential モデルの構築

Dense レイヤーを積み重ね、活性化関数を適用し、損失関数とオプティマイザーを設定してコンパイルします。

「Sequential モデルの構築」はCoddyKit上の無料R Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

Sequentialモデル

Sequentialモデルは、各レイヤーが入力テンソルを1つ、出力テンソルを1つだけ持つ、レイヤーの線形スタックです。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)は、すべての入力ニューロンがすべての出力ニューロンに接続する全結合(dense)層を追加します。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 value

compile() — 損失関数、オプティマイザー、指標

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)はモデルを学習させます。各エポックは、学習データ全体を1回処理することを意味します。バッチサイズは、各重み更新の前に処理するサンプル数を決定します。この関数は履歴オブジェクトを返します。

# 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)

レイヤーの正則化 — Dropout

layer_dropout(rate)は、学習中に入力ユニットのうち割合rate分をランダムに0に設定します。これによりニューロン同士の過度な相互適応を防ぎ、強力な正則化として機能します。Dropoutは学習中だけ有効で、推論中は無効です。

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クラス分類問題のsequentialモデルを構築する場合、出力層ではどの活性化関数を使用し、ユニット数はいくつにすべきでしょうか。

Sequentialモデルのまとめ

Sequentialモデルの構築における重要なポイント:

  • 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)

よくある質問

「Sequential モデルの構築」レッスンは無料ですか?

はい。「Sequential モデルの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「Sequential モデルの構築」で何を学びますか?

Dense レイヤーを積み重ね、活性化関数を適用し、損失関数とオプティマイザーを設定してコンパイルします。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Sequential モデルの構築」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. R で Keras と TensorFlow をセットアップする
  2. Sequential モデルの構築
  3. 畳み込みニューラルネットワークの基礎
  4. 学習、検証、過学習の防止
← R Academyに戻る