マガジンのカバー画像

機械学習ライブラリつくってみる

8
勉強のために機械学習のライブラリを自分で作ってみることにしました。 使えるものを作るというよりはコンセプトを理解するために作るのが目的です。 コードを読みたい方はこちらから。 詳…
運営しているクリエイター

#プログラミング

機械学習ライブラリ進捗7 - MNIST手書きデータで学習

機械学習ライブラリ進捗7 - MNIST手書きデータで学習

このバージョンの時点

MNIST手書き数字データで学習及び成果テストをした。
結果はだいたい80〜90%正解。
(記事公開時は70〜80%と記載してましたが、いろいろ修正調整して90%まできた)
機械学習モデルとしてはダメダメだけど、根本的にやってることが間違ってるってことはなさそうでちょっとホッとした。

自分でいろいろ調整しつつ、

学習データもテストデータも毎回全部通すと時間かかるからラン

もっとみる
機械学習ライブラリ進捗6 - ソフトマックスクロスエントロピー

機械学習ライブラリ進捗6 - ソフトマックスクロスエントロピー

このバージョンの時点

ソフトマックス層を実装しようと思っていたが、正準連結関数というものを使えば逆伝播させる誤差までまとめて楽に計算できるようなので(一応手計算で確かめはした)それを利用した。

いい感じに動いているように見えるが、いかんせん確信が持てないのが辛い。

次あたりMNIST食わせてみよう。

そろそろ全体像が把握できてきた気がするので、Tensorfowなりなんなりデファクトなライ

もっとみる
機械学習ライブラリ進捗5 - 畳み込み層の逆誤差伝播

機械学習ライブラリ進捗5 - 畳み込み層の逆誤差伝播

このバージョンの時点

※あまり期待通りに動いていないため、多分何かミスしてます

畳み込み層のバックプロパゲーションを実装した。
ついでにReLUとMaxPoolingも。
結果はこんな感じ。

(畳み込み層の誤差伝播が間違ってるのにさっき気づいたけど、いまの構成だとそれより前に層がないので動作には影響ないはず。)

いまは各クラスに教師データはひとつで、繰り返し学習させるという動作になっている

もっとみる
機械学習ライブラリ進捗4 - 逆誤差伝播法

機械学習ライブラリ進捗4 - 逆誤差伝播法

このバージョンの時点

バックプロパゲーション(逆誤差伝播法)が実装できた。

できたといっても、伝播していく枠組みを作って、実装はとりあえず全結合層でのみやったというだけだけど。
期待通り動いてそうに見える。

とにかくいくつも解説してあるブログ記事を読んだけど、わかったと思って実装してみようとするとできない。
- 順伝播の導関数ってどうやって実装するの?
- 出力層から「何を」受け取って「何を

もっとみる

機械学習ライブラリ進捗3 - Armadillo導入

このバージョンの時点

前回の

Matrix(二次元配列)でもMatrixArray(三次元配列)でも同じ型で扱えるように修正をするつもりでいる。

これを実装した。
具体的には代数を扱うライブラリをEigenからArmadilloへ変更した。
機能は増えてないし、動作も変わってない。

Armadilloを選定した理由としては、前回も書いた通りEigenでは三次元配列が扱えないからだ。
正確に

もっとみる

機械学習ライブラリを作ってみよう

Machine Learningについて勉強したかったけど本を読むのが苦手なので、作ってみることにしました。
とりあえず興味の湧いたCNN(Convolutional Neural Network)を。

「よしわかった!作ってみよう」じゃなくて「わからん!作ってみよう」なので何か間違ってる可能性は多分にあります。
また、実用に耐えるものを作ることは目的ではなくあくまで勉強のためなので、世にある他

もっとみる

機械学習ライブラリ進捗1

このバージョンの時点

このビデオを見ながら作っている。

とりあえず教師画像を入れるといくつかのフィルタを通って分類器が作られて、入力画像とそれぞれの教師画像との類似度を計算するところまでできた。

これからバックプロパゲーションの処理を作っていきます。

学習する部分はまだ作ってないので分類器としての精度はもちろんぜんぜんなんだけど、本やブログを読んでなんとなくわかった気になってた部分が一気に

もっとみる

機械学習ライブラリ進捗2 - 調べ物

このバージョンの時点(前回から更新なし)

バックプロパゲーション(逆誤差伝播法)を実装しようといろいろ調べてた。

- 勾配法というものがあるらしい。今回は実装しない。

- 学習において、CNN層(畳み込み層?)と全結合層は別物として考える必要があるのかと思っていたのだけど、どうやら共通のインターフェースで扱えそうなことがわかった。

- 共通インターフェースで表せそうだということがわかったの

もっとみる