≪【前の記事】ニューラルネットワークによる回帰分析 減衰振動曲線の学習 Output_layer_cクラスを少し改造して Output_layer クラスを設計し、他の必要なコードもまとめて以下のリストに載せておきます。 # In[1] # モジュールをインポート import numpy as np import matplotlib.pyplot as plt # 2乗和誤差RSS def rss(y, t): f = 0.5 * np.sum((y - t)**2) / y.shape[0] return f # 平均交差エントロピー誤差関数 def cross_entrop […]
≪【前の記事】Irisの品種分類 今回からニューラルネットワークを用いた回帰分析を扱います。 回帰分析とは入力値に対して連続的な数値を予測する手法です。 ・身長を入力して体重を予測する」 ・サイトへのアクセス数を入力して広告収入額を予測する などが回帰分析の対象となります。分類問題では正解値 (目標変数) は 0 か 1 の値しかとりませんでしたが、回帰分析における出力値はモデルに応じて様々な値をとります。 残差平方和(RSS) 回帰分析では 残差平方和 または 二乗和誤差 とよばれる \[E=\frac{1}{2}\sum_{j […]
≪【前の記事】Iris データセット Irisの品種分類 前回記事で作成した Iris のデータセットを使ってニューラルネットワークに 品種分類 を学習させます。今回構築するネットワークのスペックは以下の通りです。 ・入力層のユニット数 : 4 ・中間層 1 のユニット数 : 10 ・中間層 1 の活性化関数 : ReLU ・中間層 2 のユニット数 : 15 ・中間層 2 の活性化関数 : ReLU ・出力層のユニット数 : 3 ・バッチサイズ : 15 以下のコードを実行すると、エポックごとに交差エントロピー誤差を計算しながら、300 エ […]
≪【前の記事】確率的勾配降下法 Irisデータセット 機械学習用ライブラリ scikit-learn には練習用データセットがいくつか用意されています。その中の 1 つ、Iris flower data set には、Iris (アヤメ属) に属する 3 品種、setosa (セトサ)、versicolor (バージカラー)、versinica (バージニカ) の特徴量測定値とクラスデータ(品種データ)が収められています。 [画像はアイキャッチも含めて Wikipedia から引用しています] 今後しばらくは、この Irisデータを使ってニ […]
≪【前の記事】学習用データの作成 ニューラルネットワークの構築と稼働 下図のように、入力層、中間層、出力層がそれぞれ 1 層ずつからなるニューラルネットワークを構築します。 中間層の活性化関数は ReLU を採用します。 すでに部品は揃っているので、ネットワークの構築は簡単な作業です。 以下のように記述するだけで、ニューロン 5 個の中間層とニューロン 2 個の出力層が用意されます mid = Middle_layer(2, 5, ReLU) out = Output_layer_c(5, 2) ネットワークの稼働も簡単です。入力データ x が用意されているとして、 mid.f […]
≪【前の記事】Middle_layerクラス 学習用データの作成 ニューラルネットワーク を 試験運用 するための簡単な 学習用データ を作成しておきます。入力データは $xy$ 平面の座標とします。正解値(目標変数)は、放物線 $y=x^2-4$ の上側にある点と下側にある点を、それぞれ 1 と 0 で表した 1 of K 表記のデータです。 # In[7] # ★★★ 座標データを作成 ★★★ x = np.linspace(-6, 6, 17) y = np.linspace(-6, 6, 17) xx, yy = np.meshgrid(x, y) XX, YY = np. […]
≪【前の記事】Output_layerクラス Middle_layer クラス 活性化関数クラスの実装 今回設計する中間層(Middle_layer クラス)では、メソッドに活性化関数と、その導関数を渡す必要があります。これらの関数を別々に設定して渡すのは煩わしいので、あらかじめクラスの属性値としてまとめておくことにします。たとえば、Sigmoid クラスは属性 y でシグモイド関数値を、属性 dy でシグモイド関数の微分係数を取得できるようにします。 Middle_layer クラスでは、ReLU、$\tanh(x)$、シグモイド関数 の中から活性化関数を選択できる […]
≪【前の記事】重み更新式の意味 Output_layer_cクラス バックプロパゲーション機能 を持つ ニューラルネットワーク の実装を始めます。 今回は 出力層 をインスタンスとして生成する Output_layer_c クラスを設計します (Python におけるクラスの設計の基本についてはこちらの記事を参照してください)。末尾に添えた _c は classify (分類) 用の出力層であることを意味します。以下に Output_layer_cクラスが備えておくべき機能をまとめておきます。 基本機能 ・重みの初期値を生成してデータを保持しておく。 順伝播 (For […]
≪【前の記事】バックプロパゲーション 重みの更新式の意味 今回は前回記事で得たバックプロパゲーションにおける 重みの更新式 の意味を考えます。 出力層の重み更新式 $d-1$ 層 $i$ 番ニューロンから $d$ 層 $j$ 番ニューロンに入力される信号に掛かる重み $w_{ji}^{(d)}$ は以下の規則で更新されます。 \[w_{ji}^{(d)}(t+1)=w_{ji}^{(d)}(t)-\alpha\delta_jy_i^{(d-1)}\tag{1}\] $\delta_j$ は出力値 $y_j$ と正解値(目標変数)$t_j$ の誤差 $y_j […]
≪【前の記事】平均誤差の計算 損失関数の勾配 ニューラルネットワークは、ある層の出力値の線形結合を次の層に渡すことを繰り返すので、ネットワークからの出力ベクトル $\boldsymbol{y}$ には、入力ベクトル $\boldsymbol{x}$ と使用されたすべての重み情報が含まれることになります。損失関数 $E$ は出力値 $\boldsymbol{y}$ と正解値 $\boldsymbol{t}$ を使って計算します。ネットワークは $E$ が最小になるように重みを調整することで学習を進めます。十分に学習(訓練)を重ねたネットワークは、未知のデータが入力されたときに信頼 […]