TensorFlow機械学習クックブックを読む

はじめに

p338-341の遺伝的アルゴリズムを実装するコードを読んでいて知った単語や関数などをまとめた

用語

機械学習

  • インスタンス: とりあえず用意した箱みたいな
  • データセット: インスタンスの集まり
  • ハイパーパラメータ :
    • 数値的に決定できないパラメータ
    • ex) 最適化手法に何を使うかなど
  • 活性化関数:
    • 出力を正規化するためにかける関数
    • ex) ある値以上で確率80%として出力する。など
  • モデル: ネットワークそのもの
  • レーニングセット ⇔ テストセット
    • レーニングセット: モデルのトレーニングに使用
    • テストセット: バリデーションに使う
  • プレースホルダー: 空の配列とか
  • 損失関数: CNNの場合は(y_actual - y_pred)^2とか
  • バッチトレーニング ⇔ 確率的トレーニン
    • 使ってる最適化手法による違い
    • バッチ: 普通の勾配法。ゆっくり下がってく。
      • バッチサイズ: 観測データの数?
    • 確率的: SGDってやつ。めっちゃ振れる。
  • L1損失 ⇔ L2損失
    • |y_actual - y_pred| ⇔ |y_actual - y_pred|^2
    • L2は目的値の近くでとがった急なカーブを描いていることが特徴

遺伝的アルゴリズム

  • crossover: 交叉
    • 親を組み合わせて子を作る
    • 一点交叉、二点交叉などがある(バイナリコーディングと実数値コーディングで違う)
  • mutation: 突然変異
    • 変なのも親に入れてみる的な
  • features: 特徴量の数
    • 設計パラメータの数とも言える
  • generations: 世代数
  • selection: 淘汰(の割合)

一般的

  • スライス
    • Python用語。配列の一部を切り取る
    • ex) s = "Python"とすれば、s[2:5] → "ytho"

関数

TensorFlow

  • tf.Variable(tensor)
  • tf.square(x)
    • x2
  • tf.subtract(x, y)
    • x-y
  • tf.reduce_mean(tensor, axis)
    • tensorの要素から平均を求め、axisの次元に圧縮する
    • すべての評価関数に関して同じ重み付けにするためと思われる
  • tf.reduce_min(tensor, axis)
    • tensorの要素から最小値を求め、axisの次元に圧縮する
  • tf.nn.top_k(input, k)
    • inputの中からトップkまでの値を取り出す
    • つまりソートからのスライス
    • return 取り出した値, 取り出した値のinputの中でのインデックス
  • tf.arg_min(input, dimension)
    • inputの中の最小値(のインデックス)を求めて返す
    • ベクトルから選ぶならdimensionは0
  • tf.gather(param, indices)
    • param配列の中から、インデックス(複数)に対応したものを取り出す
  • tf.slice(input, begin, size)
    • テンソルは配列0~i番目までの配列の集合だとすると、
    • begin=[k, x, y]とすると、k番目の配列の(x,y)座標を始点とする、という意味になる。
    • size=[a, b, c]とすると、beginから配列方向にa, x方向にb, y方向にc広がった部分をスライスする、という意味になる。
    • 分かりずらいけどを見たら分かるはず。
  • tf.concat(values, axis)
    • values=[x, y]をaxisの部分で連結する。
    • axis=0ならxとyの境目が無くなる
    • axis=1ならxの中、yの中で境目が無くなる
    • そんな感じ

Numpy

  • np.arrange(start, stop, step, dtype)
    • startからstopまで等差stepの数列を作成する。
    • stepを省略したら等差1
    • startを省略したらstopの数だけ
    • dtypeは自動選択されるが、int, float32のように指定することも可
  • np.linspace(start, stop, num)
    • startからstopまでnum個の数列を作成する。
  • np.random.randn(size)
    • 平均0, 分散1の正規分布(標準正規分布)に従う乱数行列作成
    • sizeに行列のサイズを指定。ex) np.random.randn(3, 3)
  • np.random.normal(loc, scale, size)
    • 平均loc, 分散scaleの正規分布に従う乱数発生
  • np.random.choice(a, size)
    • 配列からsizeぶんランダムに選んで、そのインデックスを返す