Hello there, ('ω')ノ
📌 1. ニューラルネットワークとは?
ニューラルネットワーク(NN) とは、
「複数の層(レイヤー)で構成されたノード(ニューロン)が、データのパターンを学習するモデル」 です。
✅ 入力層(Input Layer) → データを受け取る層
✅ 隠れ層(Hidden Layer) → 特徴量を抽出し、パターンを学習
✅ 出力層(Output Layer) → 予測結果を出す層
📌 基本構造
入力層 → 隠れ層 → 出力層 [Input] → [Hidden] → [Output]
➡ 「層が増えれば増えるほど、より複雑なパターンが学習できる!」
➡ これが「ディープラーニング(Deep Learning)」の基本概念!
📌 2. ニューラルネットワークの仕組み
✅ ① 順伝播(フォワードプロパゲーション)
順伝播(Forward Propagation)は、入力から出力までの計算の流れ です。
📌 数式での説明
[ z = W \times X + b ]
[ a = \sigma(z) ]
記号 | 説明 |
---|---|
(W) | 重み(weights) |
(X) | 入力データ |
(b) | バイアス(bias) |
(z) | 線形変換結果 |
(a) | 活性化関数の出力 |
➡ 「入力 × 重み + バイアス」を計算し、活性化関数で変換して次の層へ!
✅ ② 活性化関数(Activation Function)
活性化関数は、次の層への出力を制御する関数 です。
📌 代表的な活性化関数
関数 | 数式 | 特徴 |
---|---|---|
シグモイド(Sigmoid) | ( \sigma(z) = \frac{1}{1 + e^{-z}} ) | 0〜1に変換(確率モデル) |
ReLU(Rectified Linear Unit) | ( f(z) = \max(0, z) ) | 負の値をゼロにする(高速・主流) |
ソフトマックス(Softmax) | ( \frac{e^{z_i}}{\sum_j e^{z_j}} ) | 多クラス分類向き |
➡ 最近の主流は「ReLU」! シンプルで学習が早い!
✅ ③ 誤差逆伝播(バックプロパゲーション)
誤差逆伝播(Backpropagation)は、出力層での誤差を隠れ層まで逆方向に伝播し、重みとバイアスを更新する手法 です。
📌 勾配降下法(Gradient Descent)
[ W_{\text{new}} = W - \eta \frac{\partial L}{\partial W} ]
記号 | 説明 |
---|---|
(W) | 重み |
(\eta) | 学習率(learning rate) |
(L) | 損失関数(Loss) |
➡ 「誤差を最小化する方向に重みを調整」するのが勾配降下法!
➡ 学習率が大きすぎると収束しない、小さすぎると時間がかかる!
📌 3. Pythonでニューラルネットワークを実装
✅ 手作りニューラルネットワーク
シンプルなニューラルネットワーク(1層の隠れ層)をNumPyで手作りしてみましょう!
import numpy as np # シグモイド関数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # シグモイドの微分 def sigmoid_derivative(x): return x * (1 - x) # データの準備 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # 入力(ANDゲート) y = np.array([[0], [0], [0], [1]]) # 出力 # パラメータの初期化 np.random.seed(42) input_dim, hidden_dim, output_dim = 2, 3, 1 W1 = np.random.rand(input_dim, hidden_dim) W2 = np.random.rand(hidden_dim, output_dim) b1 = np.zeros((1, hidden_dim)) b2 = np.zeros((1, output_dim)) # 学習のパラメータ learning_rate = 0.1 epochs = 10000 # 学習ループ for epoch in range(epochs): # 順伝播 hidden_input = np.dot(X, W1) + b1 hidden_output = sigmoid(hidden_input) output_input = np.dot(hidden_output, W2) + b2 output = sigmoid(output_input) # 誤差の計算 error = y - output loss = np.mean(np.square(error)) # 逆伝播 d_output = error * sigmoid_derivative(output) d_hidden = d_output.dot(W2.T) * sigmoid_derivative(hidden_output) # パラメータの更新 W2 += hidden_output.T.dot(d_output) * learning_rate b2 += np.sum(d_output, axis=0, keepdims=True) * learning_rate W1 += X.T.dot(d_hidden) * learning_rate b1 += np.sum(d_hidden, axis=0, keepdims=True) * learning_rate # 1000回ごとに誤差を表示 if epoch % 1000 == 0: print(f"Epoch {epoch}, Loss: {loss:.4f}") # 最終的な出力 print("Final Predictions:") print(output)
✅ シンプルなNN(ANDゲートの学習)を実装!
✅ 順伝播・逆伝播・パラメータ更新の仕組みを理解!
✅ Kerasで簡単にニューラルネットワークを作成
より高度なモデルは、Keras(TensorFlow) を使うと簡単に作れます。
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # モデルの定義 model = Sequential() model.add(Dense(64, input_dim=2, activation="relu")) model.add(Dense(32, activation="relu")) model.add(Dense(1, activation="sigmoid")) # モデルのコンパイル model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]) # モデルの学習 model.fit(X, y, epochs=100, batch_size=4) # 予測 predictions = model.predict(X) print("Predictions:", predictions)
✅ Kerasで簡単に多層ニューラルネットワークを作成!
✅ 最先端のモデル構築もKerasなら手軽に実装可能!
📌 4. ニューラルネットワークの活用例
✅ 画像分類(CNN)
✅ ResNet, EfficientNet などのCNNモデルを使って画像分類
✅ Kaggleの画像コンペで大活躍!
✅ 自然言語処理(NLP)
✅ BERT, GPT などのTransformerモデルを活用
✅ 感情分析、文章生成、機械翻訳などに応用
✅ 医療・金融・自動運転
✅ 病気の予測・画像診断
✅ クレジットスコアの予測、詐欺検出
✅ 自動運転システムの判断基盤
➡ ディープラーニングの応用範囲は無限大!
🎯 まとめ
✅ ニューラルネットワークは「入力 → 隠れ層 → 出力」で構成!
✅ 順伝播で出力を計算し、逆伝播で重みを調整する!
✅ Kerasを使うと、簡単に高性能なNNを作成可能!
✅ Kaggleや実務で、画像・NLP・金融分野に応用しよう!
Best regards, (^^ゞ