日本語プログラミング言語「プロデル」で機械学習と自然言語処理をするためのコード群
サポートベクタマシン
使い方
サポートベクタマシン.rdr
を参照します。- 何らかのカーネル関数となる種類のインスタンスを作ります。今のところ,線形カーネルが実装されています。
- サポートベクタマシン種類のインスタンスを作ります。この際に,先に作ったカーネル関数のインスタンスを引数に設定します。
[サポートベクタマシン種類のインスタンス]が【訓練用データ】と【正解ラベル】を【{閾値,学習率}】で学習する
を実行して学習します。[サポートベクタマシン種類のインスタンス]が【推定したいデータ】を推定する
を実行して推定します。
種類と手順
サポートベクタマシン種類
手順
コンストラクタ
- 引数:カーネル関数のインスタンス
- 戻り値:なし
自分が【データ:行列】と【正解:行列】を【引数:配列】で学習する手順
サポートベクタマシンを訓練します。最急降下法を使って,パラメータを探索します。
- 引数(と):訓練データです。行列型です。1つのデータが1行に対応します。例えば,784次元のデータが60000個ある場合は,60000行784列の行列を作ります。
- 引数(を):正解ラベルです。行列型です。1つのラベルが1行に対応します。ラベルは,1または-1の値を取ります。データが60000個ある場合は,60000行1列の行列を作ります。
- 引数(で):閾値と学習率をこの順で配列型にしてください。最急降下法の勾配が閾値以下になるとイテレーションを終了します。学習率×勾配の値がパラメータの更新に使われます。大きすぎると勾配が振動・発散します。
- 戻り値:なし
自分が【データ:行列】を推定する手順
訓練したサポートベクタマシンを使ってデータからラベルを推定します。
- 引数(を):データです。行列型です。1つのデータが1行に対応します。例えば,784次元のデータが10000個ある場合は,10000行784列の行列を作ります。
- 戻り値:推定したラベルが行列型で返されます。縦ベクトルです。データが10000個ある場合は,10000行1列の行列が返ります。
パラメータ
サポートベクタマシンの訓練時に計算されたパラメータにアクセスできます。行列型で,1行につき1つのデータが対応します。これはラグランジュ未定乗数法の係数です。
線形カーネル種類
コンストラクタ
- 引数:訓練用のデータです。行列型です。
- 戻り値:なし
自分で【推定用データ:行列】を計算する手順
- 引数(を):データです。行列型です。
- 戻り値:カーネル関数の計算結果を返します。行列型です。
全部
訓練時に使用するカーネル関数の計算結果です。
ニューラルネットワーク
1行が1つのデータに対応します。10次元のデータを100個ならべたミニバッチは,100行10列の行列で表されます。テンソルには対応しません。
種類と手順
全結合層種類
コンストラクタ
- 引数:隠れ層のパラメータとバイアスをこの順で指定します。いずれも行列型です。バイアスは横ベクトル(1行N列の行列)です。
- 戻り値:なし
自分が【X:行列】を順伝播させる手順
- 引数(を):入力となるデータを行列型で指定します。
- 戻り値:XW+Bを返します。行列型です。
自分が【入力:行列】を逆伝播させる手順
- 引数(を):出力層側から来るデータを指定します。行列型です。
- 戻り値:微分の結果を返します。行列型です。
行列dW
行列dB
ソフトマックスに損失関数もくっつけたやつ種類
コンストラクタ
何もしません
自分が【X:行列】を【T:行列】で順伝播させる手順
- 引数(を):入力となるデータを行列型で指定します。
- 引数(で):正解ラベルです。正解ラベルは,one-hotベクトルでなければなりません。1つのデータにつき1行が対応します。100個のデータがある場合は,100行の行列です。
- 戻り値:損失関数の値が1行1列の行列型で返されます。
【自分】が逆伝播させる手順
- 戻り値:微分の結果を返します。行列型です。
ランプ関数種類
いわゆるReLUです。
自分が【X:行列】を順伝播させる手順
- 引数(を):入力となるデータを行列型で指定します。
- 戻り値:ReLUの計算結果を返します。行列型です。
自分が【入力:行列】を逆伝播させる手順
- 引数(を):出力層側から来るデータを指定します。行列型です。
- 戻り値:微分の結果を返します。行列型です。
行列
使い方
行列の加算乗算
計算後は,行列Aを行列Bに加算する。 ’A+B
計算後は,行列Aから行列Bを引く。 ’A-B
計算後は,行列Aを行列Bに左からかける。 ’A・B
計算後は,行列Aを行列Bに右からかける。 ’B・A
行列Aに行列Bを破壊的に足す ’行列Aの値が変わる
行列Aから行列Bを破壊的に引く ’行列Aの値が変わる
行列の成分の計算
行列Bは,1行n列またはm行1列でなければなりません(この時,行列Aはm行n列)。
計算後は,行列Aに行列Bを全部足す ’A+(B...B)またはA+(B...B)'
計算後は,行列Aに行列Bを全部引く ’A-(B...B)またはA-(B...B)'
計算後は,行列Aに行列Bを全部かける ’Aの成分にBの成分をかける
計算後は,行列Aを行列Bで全部割る ’Aの成分をBの成分で割る
なお,全部~は,行列Bだけでなく,単なる数値も指定できます。
計算後は,行列Aに1.5を全部足す
その他
以下は全て戻り値は行列型です。
計算後は,行列Aを転置したもの ’行列Aの転置を取得します。
計算後は,行列Aの各列の和 ’ 各列の合計を計算します。
計算後は,行列Aの各行の和 ’各行の合計を計算します。
計算後は,行列Aの最大値 ’各行の最大値を返します。
計算後は,行列Aの最小値 ’各行の最小値を返します。
計算後は,行列Aの最大値となる添字 ’各行で最大値となる添字を返します。