noteのタイトル画像

モデルとレイヤー(TensorFlow.js)

目次
・前回からの続き
・モデルとは
・レイヤーとは

●前回からの続き

のコンセプトの「モデルとレイヤー」から始めます。

モデルとレイヤーを一度に処理するとややこしいので、まずはモデルから攻略しましょう。

●モデル とは

「概念的には、モデルは、ある入力が与えられた時に出力を生成する関数」

とのこと。
インプットからアウトプットに変換するプロセスを指しているようです。

例えば

a × X^2 + b × X + c

という式があったとしましょう。
それをモデルで書くと

// モデル
function predict(input) {
  // y = a * x ^ 2 + b * x + c
  return tf.tidy(() => {
    const x = tf.scalar(input);

    const ax2 = a.mul(x.square());
    const bx = b.mul(x);
    const y = ax2.add(bx).add(c);

    return y;
  });
}

tf.tidyという謎のメソッドはひとまず置いておいて、

const x = tf.scalar(input)

にて、引数のスカラ値を生成し変数Xとします。(この辺りもちょっと冗長ですけど、仕方ないですね)

そして、定数「a」にXの二乗を乗じて、定数「b」にXを乗じて、最後に定数「c」を含め全部を足し合わせます(ax2.add(bx).add(c)の部分)

本来ならこの後、このモデルで実際のデータを用いて機械学習を行い、定数「a」「b」「c」を推定しないとならないので、a,b,cは値の変更が可能な「変数」に格納することになります。
(学習結果を格納する場所が必要)

しかし、今のチュートリアルでは「a」「b」「c」をそのまま定数として定義をして、モデルが動作するかだけ確認しています。

// Define constants: y = 2x^2 + 4x + 8
const a = tf.scalar(2);
const b = tf.scalar(4);
const c = tf.scalar(8);

このまま、モデルを適用すると

// Predict output for input of 2
const result = predict(2);
result.print() // Output: 24

という結果となり、2 × 2 ^ 2 + 4 × 2 + 8 = 24 という答えが戻されます。

多項式をそのまま演算しただけなので、特に問題はないでしょう。
機械学習に触れるまでにはかなり色々な概念を掴んでおく必要がありそうです。

●レイヤーとは

さて、次はレイヤーのお話です。

チュートリアルには

「高レベルのAPIである「tf.model」を使用して、レイヤーからモデルを構築することもできます。これは、深い学習の一般的な抽象化です。」

と書かれています。

うーん。どうやらmodelメソッドがあって、そこからもっと高レベルなモデルの生成が可能と言っています。

例として

const model = tf.sequential();
model.add(
  tf.layers.simpleRNN({
    units: 20,
    recurrentInitializer: 'GlorotNormal',
    inputShape: [80, 4]
  })
);

const optimizer = tf.train.sgd(LEARNING_RATE);
model.compile({optimizer, loss: 'categoricalCrossentropy'});
model.fit({x: data, y: labels});

が記述されていました。
どうやら「sequential」モデルを構築する例のようですが、これだけではさっぱり理解できないです。

また他のレイヤーはtf.layersネームスペースに配置されていて、tf.layers.XXXX の「XXXX」に多数のレイヤーが用意されているようです。

すぐには理解が進まないので、もう少し他の例題を解きつつ、理解が進んだらもう一回レイヤーに戻ってきて進めていきたいと思います。

レイヤーについてはちょっと消化不良ですが、モデルについてはなんとなく概念がわかった気がします。

次回は実際にtensorflowを用いて、あるデータから多項式のモデルを学習するサンプルを進めてみます。

モデルが構築できたら、仮想通貨の売買データやOHLCVデータから、なんらかの関係性が導き出せるのではないか?と期待が膨らみますね。

それでは、今回はこの辺で。

ソフトウェア・エンジニアを40年以上やってます。 「Botを作りたいけど敷居が高い」と思われている方にも「わかる」「できる」を感じてもらえるように頑張ります。 よろしくお願い致します。