Help us understand the problem. What is going on with this article?

Webアプリケーションエンジニアがディープラーニングに挑戦する際にやったこと(Coursera Week10)

More than 1 year has passed since last update.

Coursera Week10

はじめに

CourseraのWeek10を実施しましたので、私のメモを公開します。
Courseraってなんだ?という方はWeek1から御覧ください。

Learning With Large Datasets

m=1億を超えるようなデータセットの扱いについて。
まずは1億の中から1000件取り出してトレーニングしてみるのも一つの手である。
その判断にクロスバリデーション誤差が使える。

確率的最急降下法 Stochastic Gradient Descent

確率的最急降下法を使用すると巨大なトレーニングセットに対してスケールできるようになる。
今まで学習してきた最急降下法の場合、数億のトレーニングセットがある場合でも全件に対して処理を実行するため高コストである。
これをバッチ最急降下法という呼び方をしている。(機械学習屋界隈では。)

復習として線形回帰のコスト関数とバッチ最急降下法の式を示す。
線形回帰のコスト関数
$$
J_{train}(\theta) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})^2
$$
バッチ最急降下法
j=0,,,,,n
$$
\theta_j = \theta_j - \alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)}
$$

線形回帰のコスト関数の見方を変更する。
$$
J_{train}(\theta) = \frac{1}{m}\sum_{i=1}^m cost(\theta,(x^{(i)},y^{(i)}))
$$
$$
cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2
$$

次に確率的最急降下法の手順を示す。
1.データセットをランダムにシャッフルする。
2.m回のforloopの中で以下の処理を実施する。
$\theta_j = \theta_j - \alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
特徴としては数億件のレコードを全てなめてから結果を出すのではなく、1つずつグローバル最小に進めて行くことになる。
そうすることでバッチ最急降下法より精度が低く、グローバル最小にたどり着いてとどまらずに近くをうろうろすることになる。
ただし、グローバル最小に極めて近い値がわかるので特に問題ではない。

ミニバッチ最急降下法 Mini-Batch Gradient Descent

バッチ最急降下法は$m$件すべてをなめる。
確率的最急降下法は1件ずつ処理する。
ミニバッチ最急降下法は任意の$b$件のデータをなめる。($b$は大体2~100程度。)
つまりミニバッチ最急降下法はバッチ最急降下法と確率的最急降下法の間を狙う方法である。
$b=10$の場合、10件ずつ増えるforloopの中で以下のような処理を実行する。
$\theta_j = \theta_j - \alpha\frac{1}{10}\sum_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)}$

確率的最急降下法の収束のチェック

線形回帰の最急降下法の場合、$\theta$をプロットすることで収束しているかチェックすることができたが、巨大なトレーニングセットではそれはできない。
確率的最急降下法では$cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2$の値をプロットすることで収束しているか判断する。
プロットしてグラフ化した際に$\theta$が下がってきていればOK。
あまり変化がない場合でも件数を増やすことで実は$\theta$が下がっている場合もある。
明らかに$\theta$が増えている場合は分散しているので$\alpha$を小さくすることで調整する。

もし確率的最急降下法で明確なグローバル最小を求めたい場合、$\alpha$を少しずつ小さくすることで可能である。(少しずつ小さくするチューニングは大変なのであまりやらない。)

MapReduce

最急降下法を分割して計算する方法。
分割して求めた$\theta$の和とバッチ最急降下法で求めた値は等価である。
分割するメリットは複数のコンピュータに分散して計算することができることである。
複数のコンピュータだけでなく、1つのコンピュータの複数のCPUコアで分割するのもアリ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした