2018-01-01から1年間の記事一覧
レイヤークラス 前回はユニットクラスを作成しました。今回からはユニットを管理するレイヤークラスを作成していきます。 入力層は以前こちらで作成しました。 celaeno42.hatenablog.com隠れ層と出力層がありますが、若干機能が異なるので今回は別々に実装し…
ユニット ニューラルネットワークの基本となる単位です。隠れ層、出力層のユニットは基本的には同じ機能を持つので、共通して使える「classUnit(ユニットクラス)」として定義します。まずは順伝播の機能を作ります。 各ユニットは次のような機能を持つよう…
入力層の作成? まず手始めに入力層のコードを書いていきます。 が、、実は入力層はデータを受け取って隠れ層1層めに渡しているだけなので、なくても大丈夫です。 もし、入力層の作成が面倒だったり、計算資源を無駄にしたくない>< 場合などは、入力層の…
前回まででデータの読み込み処理の作成が完了しました。 今回からは実際にニューラルネットワークを作るフェーズに移っていきます。 その前に、どのように実装するかを簡単に見ていきましょう。以前の記事もあわせて参考にしてください。 celaeno42.hatenabl…
VBAにないなら Python のを使えばいいじゃない…の続き 前回は VBA から Python のコードを呼び出して、セルの値を取得→加工→書き込むという処理をみてみました。 今回は os.walk を使ってファイル一覧を取得する処理を実装してみましょう。celaeno42.hatenab…
VBAにないなら Python のを使えばいいじゃない Excel で VBAを書いていて「この処理 Python で書けば楽なのに…」とか思うことってないでしょうか。 例えば、 サブフォルダを含めてファイルの一覧を取得したいけどVBAでどう書いたっけ? Python なら os.walk …
前回はそれぞれのシートにCSVデータを読み込む処理を作成しました。 今回は読み込んだデータを標準化する処理を書いていきます。 標準化 「標準化」とは、データを「平均が0、分散が1になるように変換する」ことです。 標準化を行うことで、学習の効率がよく…
必要なシート、モジュールの追加 前回は読み込むデータのパスを取得するまでの処理を作りましたので、今回はそのデータを読み込む処理を作ります。 訓練データ、テストデータはそれぞれ別のシートに読み込ませたいので、「訓練データ」と「テストデータ」の…
メイン画面の作成 メイン画面を下記のように作成します。シート名は「ws_Main」としておきます。 また、「G」という名前で標準モジュールを作成しておきましょう。 ここにはグローバルで使用する定数や変数をまとめておきます。 定数の宣言 パスを格納するセ…
某所でのお題を若干改変して「スプレッドシートから特定の文字列を検索してそのアドレスを出力する処理」としてみました。 この表の中から「Excel」という文字列を探して、アドレスを出力します。 GASの勉強という側面もあるので、Findとかは使わずに地味に …
クラスについて その2 前回に引き続きクラスについてもう少し見ていきましょう。 インスタンス(オブジェクト) クラスを使うにあたっての利点の一つは1つのクラスから複数のインスタンス(実体)を作れることではないでしょうか。 特に同じようで若干異な…
準備 VBAでニューラルネットワークを実装するにあたり、(ここでの実装では)クラスの概念が必要になります。 とはいえ、VBAでクラスを使うのはあまりなじみがないと思いますので、ここでは準備段階として簡単に説明しようと思います。 オブジェクト指向 オ…
今回作るニューラルネットワーク 入力:4 出力:3 隠れ層の活性化関数:ReLU 出力層の活性化関数:Softmax 損失関数:クロスエントロピー 学習方法:教師あり学習 教師データ:one-hot 表現 扱う問題:分類問題 データセット:アイリス データセット さん…
逆伝播の更新式を一覧でまとめたものを載せておきます。 VBA編ではこれを元に実装していきます。
逆伝播についてはそれぞれの重みとバイアスの (勾配)の部分を載せます。 重みやバイアスは、 (勾配)に学習率を掛け、現在の重みやバイアスの値から引くことで更新していきます。 出力層 出力層についても共通部分を で表すことにしましょう。 ユニットo1…
いままでに求めた順伝播の式をまとめておきます。 隠れ層1層め ユニットh11 ユニットh12 ユニットh13 隠れ層2層め ユニットh21 ユニットh22 ユニットh23 ユニットh24 出力層 ユニットo11 ユニットo12 ユニットo13 損失関数(クロスエントロピーエラー)
ユニットh12 の重みとバイアスの更新式 もう一度、前回までで求めた更新式を見てみましょう。(再掲) よく見ると、 という構造になっていることがわかります。 それを踏まえると以下のようになると思います。 今回の共通部は としましょう。 ユニットh13 の…
ユニットh11 の残りの重みとバイアスの更新式 では、残りの の更新式についてみていきましょう。 ・まずは の更新式 前回求めた の更新式と見比べると、 の部分が共通していることがわかると思います。 (再掲) なので、 の部分だけ計算すればいいですね。 …
隠れ層1層めの重みの更新式 さて、いよいよ隠れ層1層めの重みとバイアスの更新式についてみていきましょう。 今回は、隠れ層1層めの1つめのユニット ユニットh11 の重み についてみていきます。 隠れ層1層めともなると、その出力が影響を及ぼした値はか…
最近GAS(Google Apps Script)の勉強を始めたので、 某所のお題であったFizzBuzz問題をVBAとGASでクラスを使って(GASというかJavaScriptではクラスという言い方はしないらしい…)書いてみました。 VBAはコンストラクタ(Class_Initialize())で引数をとれ…
おさらい 前回までで ユニットh21 と ユニットh22 についての必要な更新式が求まりました。 以下に再掲してみます。 ・ユニットh21 ・ユニットh22 見比べてみると以下のことがわかると思います。 かっこの部分はユニットごとに共通 最後に掛け合わされている…
前回のおさらい 前回求めた の更新式は以下の通りです。 今回はその他の重み とバイアス の更新部分の式(勾配)を求めていきます。 それぞれの更新式 それぞれの更新式を並べてみます。 ・・・(1) ・・・(2) ・・・(3) それぞれで の部分は同じこ…
重みの更新式 大まかなところは1つめのユニットと変わりません。 今回は2つめのユニット(ユニットh22)なので、 が になっていることに注意してください。 連鎖率(チェインルール) ユニットh21 と同様の考え方で、 を求める式を立ててみます。 (再掲)…
前回のおさらい 前回求めた の更新式は以下の通りです。 今回はその他の重み とバイアス の更新部分の式(勾配)を求めていきます。 まずは2つめの重み について については以下の式を求めます。 ただ、 の式と見比べると、 の部分は同じことがわかります。…
隠れ層の重みの更新式 今回から、隠れ層の重みとバイアスの更新式についてみていきます。 今回は、2層目の隠れ層の1つめのユニット ユニットh21 の重み についてみていきましょう。 隠れ層でも重みの更新式は以下のようにあらわすことができます。 連鎖率…
前回までのおさらい 前回までで、ユニットo11 と ユニットo12 の更新部分の式(勾配)を求めました。 ユニットo11 の重みとバイアスの勾配() ユニットo12 の重みとバイアスの勾配() 見比べてみると、(そのユニットの出力 - 該当する教師データ(ラベル…
前回のおさらい 前回求めた の更新式はこのようなものでした。 今回はその他の重み とバイアス の更新式を求めていきます。 まずは2つめの重み については以下の式を求めます。 の式と見比べると の部分は同じことがわかります。なので、 についてのみ考え…
ユニットo12 の重みの更新式 今回は ユニットo12 の重み の更新式を見ていきます。 以前求めた の更新式を参考にすると… となることがわかると思います。 今回は ユニットo12 を対象としているので、 となっていることに注意してください。 計算手順は ユニ…
前回のおさらい 前回求めた の更新式はこのようなものでした。 今回はその他の重み とバイアス の更新式を求めていきます。 まずは2つめの重み まずは について見ていきましょう。 更新式は次のようになります。 の式と見比べると の部分は同じことがわかり…
誤差逆伝播(バックプロパゲーション) ニューラルネットワークが正しい出力を得るようになるには、重みやバイアスなどのパラメータを調整する必要があります。 誤差逆伝播(バックプロパゲーション)という手法を使うことで、パラメータを調整することがで…