無限不可能性ドライブ

『ニューラルネットワーク自作入門』に刺激されてExcelVBAでニューラルネットワークを作ってみたものの、やっぱり数学やらなきゃと思い少しずつやってきたのもあって、自分の知識の整理とかそういった感じです。

2018-01-01から1年間の記事一覧

【VBA編】(順伝播)隠れ層の作成

レイヤークラス 前回はユニットクラスを作成しました。今回からはユニットを管理するレイヤークラスを作成していきます。 入力層は以前こちらで作成しました。 celaeno42.hatenablog.com隠れ層と出力層がありますが、若干機能が異なるので今回は別々に実装し…

【VBA編】(順伝播)ユニットの作成

ユニット ニューラルネットワークの基本となる単位です。隠れ層、出力層のユニットは基本的には同じ機能を持つので、共通して使える「classUnit(ユニットクラス)」として定義します。まずは順伝播の機能を作ります。 各ユニットは次のような機能を持つよう…

【VBA編】入力層の作成

入力層の作成? まず手始めに入力層のコードを書いていきます。 が、、実は入力層はデータを受け取って隠れ層1層めに渡しているだけなので、なくても大丈夫です。 もし、入力層の作成が面倒だったり、計算資源を無駄にしたくない>< 場合などは、入力層の…

【VBA編】設計

前回まででデータの読み込み処理の作成が完了しました。 今回からは実際にニューラルネットワークを作るフェーズに移っていきます。 その前に、どのように実装するかを簡単に見ていきましょう。以前の記事もあわせて参考にしてください。 celaeno42.hatenabl…

【VBA】VBAからPythonのコードを実行してみる(2)【Python】

VBAにないなら Python のを使えばいいじゃない…の続き 前回は VBA から Python のコードを呼び出して、セルの値を取得→加工→書き込むという処理をみてみました。 今回は os.walk を使ってファイル一覧を取得する処理を実装してみましょう。celaeno42.hatenab…

【VBA】VBAからPythonのコードを実行してみる(1)【Python】

VBAにないなら Python のを使えばいいじゃない Excel で VBAを書いていて「この処理 Python で書けば楽なのに…」とか思うことってないでしょうか。 例えば、 サブフォルダを含めてファイルの一覧を取得したいけどVBAでどう書いたっけ? Python なら os.walk …

【VBA編】データの標準化

前回はそれぞれのシートにCSVデータを読み込む処理を作成しました。 今回は読み込んだデータを標準化する処理を書いていきます。 標準化 「標準化」とは、データを「平均が0、分散が1になるように変換する」ことです。 標準化を行うことで、学習の効率がよく…

【VBA編】データの読み込み

必要なシート、モジュールの追加 前回は読み込むデータのパスを取得するまでの処理を作りましたので、今回はそのデータを読み込む処理を作ります。 訓練データ、テストデータはそれぞれ別のシートに読み込ませたいので、「訓練データ」と「テストデータ」の…

【VBA編】メイン画面の作成

メイン画面の作成 メイン画面を下記のように作成します。シート名は「ws_Main」としておきます。 また、「G」という名前で標準モジュールを作成しておきましょう。 ここにはグローバルで使用する定数や変数をまとめておきます。 定数の宣言 パスを格納するセ…

【VBA】文字列検索【GAS】

某所でのお題を若干改変して「スプレッドシートから特定の文字列を検索してそのアドレスを出力する処理」としてみました。 この表の中から「Excel」という文字列を探して、アドレスを出力します。 GASの勉強という側面もあるので、Findとかは使わずに地味に …

【VBA編】(準備)クラスについて(2)

VBA

クラスについて その2 前回に引き続きクラスについてもう少し見ていきましょう。 インスタンス(オブジェクト) クラスを使うにあたっての利点の一つは1つのクラスから複数のインスタンス(実体)を作れることではないでしょうか。 特に同じようで若干異な…

【VBA編】(準備)クラスについて(1)

VBA

準備 VBAでニューラルネットワークを実装するにあたり、(ここでの実装では)クラスの概念が必要になります。 とはいえ、VBAでクラスを使うのはあまりなじみがないと思いますので、ここでは準備段階として簡単に説明しようと思います。 オブジェクト指向 オ…

【VBA編】どんなものを作っていくか

今回作るニューラルネットワーク 入力:4 出力:3 隠れ層の活性化関数:ReLU 出力層の活性化関数:Softmax 損失関数:クロスエントロピー 学習方法:教師あり学習 教師データ:one-hot 表現 扱う問題:分類問題 データセット:アイリス データセット さん…

【数式編】(逆伝播)のまとめ 2

逆伝播の更新式を一覧でまとめたものを載せておきます。 VBA編ではこれを元に実装していきます。

【数式編】(逆伝播)のまとめ 1

逆伝播についてはそれぞれの重みとバイアスの (勾配)の部分を載せます。 重みやバイアスは、 (勾配)に学習率を掛け、現在の重みやバイアスの値から引くことで更新していきます。 出力層 出力層についても共通部分を で表すことにしましょう。 ユニットo1…

【数式編】(順伝播)のまとめ、あと(損失関数)

いままでに求めた順伝播の式をまとめておきます。 隠れ層1層め ユニットh11 ユニットh12 ユニットh13 隠れ層2層め ユニットh21 ユニットh22 ユニットh23 ユニットh24 出力層 ユニットo11 ユニットo12 ユニットo13 損失関数(クロスエントロピーエラー)

【数式編】(逆伝播)1つめの隠れ層の重みとバイアスを更新する 3-(3)

ユニットh12 の重みとバイアスの更新式 もう一度、前回までで求めた更新式を見てみましょう。(再掲) よく見ると、 という構造になっていることがわかります。 それを踏まえると以下のようになると思います。 今回の共通部は としましょう。 ユニットh13 の…

【数式編】(逆伝播)1つめの隠れ層の重みとバイアスを更新する 3-(2)

ユニットh11 の残りの重みとバイアスの更新式 では、残りの の更新式についてみていきましょう。 ・まずは の更新式 前回求めた の更新式と見比べると、 の部分が共通していることがわかると思います。 (再掲) なので、 の部分だけ計算すればいいですね。 …

【数式編】(逆伝播)1つめの隠れ層の重みとバイアスを更新する 3-(1)

隠れ層1層めの重みの更新式 さて、いよいよ隠れ層1層めの重みとバイアスの更新式についてみていきましょう。 今回は、隠れ層1層めの1つめのユニット ユニットh11 の重み についてみていきます。 隠れ層1層めともなると、その出力が影響を及ぼした値はか…

【VBA】FizzBuzzをクラスを使って書いてみる【GAS】

最近GAS(Google Apps Script)の勉強を始めたので、 某所のお題であったFizzBuzz問題をVBAとGASでクラスを使って(GASというかJavaScriptではクラスという言い方はしないらしい…)書いてみました。 VBAはコンストラクタ(Class_Initialize())で引数をとれ…

【数式編】(逆伝播)2つめの隠れ層の重みとバイアスを更新する 2-(3)

おさらい 前回までで ユニットh21 と ユニットh22 についての必要な更新式が求まりました。 以下に再掲してみます。 ・ユニットh21 ・ユニットh22 見比べてみると以下のことがわかると思います。 かっこの部分はユニットごとに共通 最後に掛け合わされている…

【数式編】(逆伝播)2つめの隠れ層の重みとバイアスを更新する 2-(2)

前回のおさらい 前回求めた の更新式は以下の通りです。 今回はその他の重み とバイアス の更新部分の式(勾配)を求めていきます。 それぞれの更新式 それぞれの更新式を並べてみます。 ・・・(1) ・・・(2) ・・・(3) それぞれで の部分は同じこ…

【数式編】(逆伝播)2つめの隠れ層の重みとバイアスを更新する 2-(1)

重みの更新式 大まかなところは1つめのユニットと変わりません。 今回は2つめのユニット(ユニットh22)なので、 が になっていることに注意してください。 連鎖率(チェインルール) ユニットh21 と同様の考え方で、 を求める式を立ててみます。 (再掲)…

【数式編】(逆伝播)2つめの隠れ層の重みとバイアスを更新する 1-(2)

前回のおさらい 前回求めた の更新式は以下の通りです。 今回はその他の重み とバイアス の更新部分の式(勾配)を求めていきます。 まずは2つめの重み について については以下の式を求めます。 ただ、 の式と見比べると、 の部分は同じことがわかります。…

【数式編】(逆伝播)2つめの隠れ層の重みとバイアスを更新する 1-(1)

隠れ層の重みの更新式 今回から、隠れ層の重みとバイアスの更新式についてみていきます。 今回は、2層目の隠れ層の1つめのユニット ユニットh21 の重み についてみていきましょう。 隠れ層でも重みの更新式は以下のようにあらわすことができます。 連鎖率…

【数式編】(逆伝播)出力層の重みとバイアスを更新する 3

前回までのおさらい 前回までで、ユニットo11 と ユニットo12 の更新部分の式(勾配)を求めました。 ユニットo11 の重みとバイアスの勾配() ユニットo12 の重みとバイアスの勾配() 見比べてみると、(そのユニットの出力 - 該当する教師データ(ラベル…

【数式編】(逆伝播)出力層の重みとバイアスを更新する 2-(2)

前回のおさらい 前回求めた の更新式はこのようなものでした。 今回はその他の重み とバイアス の更新式を求めていきます。 まずは2つめの重み については以下の式を求めます。 の式と見比べると の部分は同じことがわかります。なので、 についてのみ考え…

【数式編】(逆伝播)出力層の重みとバイアスを更新する 2-(1)

ユニットo12 の重みの更新式 今回は ユニットo12 の重み の更新式を見ていきます。 以前求めた の更新式を参考にすると… となることがわかると思います。 今回は ユニットo12 を対象としているので、 となっていることに注意してください。 計算手順は ユニ…

【数式編】(逆伝播)出力層の重みとバイアスを更新する 1-(2)

前回のおさらい 前回求めた の更新式はこのようなものでした。 今回はその他の重み とバイアス の更新式を求めていきます。 まずは2つめの重み まずは について見ていきましょう。 更新式は次のようになります。 の式と見比べると の部分は同じことがわかり…

【数式編】(逆伝播)出力層の重みとバイアスを更新する 1-(1)

誤差逆伝播(バックプロパゲーション) ニューラルネットワークが正しい出力を得るようになるには、重みやバイアスなどのパラメータを調整する必要があります。 誤差逆伝播(バックプロパゲーション)という手法を使うことで、パラメータを調整することがで…