FC2ブログ

子供の落書き帳 Remix

15/4/13:ひと月に一度更新するブログになってしまっている

スポンサーサイト
--/--/--(--) --:--:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

scikit-learnとTensorFlowによる実践機械学習 輪読会4章
2018/06/24(日) 00:40:00

2018/06/15(金)に、scikit-learnとTensorFlowによる実践機械学習輪読会#4で発表してきた。

scikit-learnとTensorFlowによる実践機械学習/原題:Hands-On Machine Learning with Scikit-Learn and TensorFlow」の4.1 - 4.2の説明を担当した。資料はこちら!



勾配降下法の3つの方式:バッチ勾配降下法、確率的勾配降下法、ミニバッチ勾配降下法



この本では4.2.1でバッチ勾配降下法、4.2.2で確率的勾配降下法を扱い、その後の4.2.3でミニバッチ勾配降下法を取り扱っている。

scikit-learn_42.jpg

この順序で話が進むので、3種類の方法の関連性や相違点を把握しやすかった。

「関連性や相違点」を具体的に挙げると、「ミニバッチ勾配降下法はバッチと確率的の中間の特徴を持つ」という点である。また、ミニバッチでバッチサイズが1の特殊な場合が確率的勾配降下法であり、バッチサイズが全体の特殊な場合がバッチ学習である、という見かたもできると気づいた。

今までの理解では、「どうやら通常はミニバッチを使うらしい」ということは分かっていた。しかし、すべてのインスタンスについて勾配を計算して学習するバッチ学習と比べて、どう違うのかがきちんと理解できていなかった。

scikit-learnとTensorFlowによる実践機械学習」ではまずバッチ勾配降下法を説明して、その後で確率的勾配降下法が出てくる。その中で確率的の方は
・1回のイテレーションが高速
・アウトオブコア(=メモリに乗りきらないデータ)に対応している
・最適解で止まることがない
といった特徴があることに触れている。
また、4.2節の最後にはアルゴリズムの比較表があり、4.1と4.2の全体を見渡して概要をつかむことができる。全体的に説明の流れが上手いと感じた。

インスタンスの選ぶ方法による収束速度の違いについて


輪読の最中に「本に書いてある内容が分からない」と話題になった箇所がある。

P.120
(筆者補足:確率的勾配降下法では)インスタンスが無作為に選ばれるため、一部のインスタンスはエポックの中で複数回選ばれることがあるのに対し、ほかのインスタンスは全然選ばれないことがあることに注意しよう。各インスタンスですべてのインスタンスを処理するようにしたければ、訓練セットをシャッフルしてからインスタンスを逐次的に取り出し、終わったら再びシャッフルするという方法もある。しかし、この方法は、一般に収束まで余分に時間がかかる。
(※太字は筆者による)



本では、確率的勾配降下法でインスタンスを選ぶとき、2通りの選び方があるよ、と言っている。
1つ目は、毎回ランダムに選ぶ方法である。例えばインスタンスが5個で、1~5の番号がついているとしよう。(普通はもっと多いが、説明のため簡単にする。)選び方の例は以下のようになる。毎回、1~5の中からランダムで1つの数を選んでいる。

3, 5, 4, 3, 4, 2, 4, 1, 3, 4, 4, 3, 1, 2, 4, ……

2つ目は、インスタンスの集合を一度シャッフルして取り出して、終わったら再度シャッフルする、という方法である。さっきの例でいえば、選び方の例は以下のようになる。分かりやすいように5つごとにカッコでまとめた。カッコの中が1~5の並び替えになっている。

[2, 3, 1, 4, 5], [3, 5, 4, 1, 2], [1, 4, 2, 3, 5], ……

この2つの選び方では収束の速度に差があり、前者が速くて後者が遅いらしい。何でだろう?
直感的には、ランダムで選ぶ限り、どのような選び方だろうと収束速度に差は無いように思える。
輪読会に来ている方が知っているかなと思ったが、誰もその理由を知らないようだった。重要な箇所ではないからそれほど気に留めなくても良いとは思うが、ちょっと気になる。

GitHub上のサンプルコードについて



ありがたいことに、本に掲載されているコードはGitHub(下記)に上がっている。
GitHub - ageron/handson-ml: A series of Jupyter notebooks that walk you through the fundamentals of Machine Learning and Deep Learning in python using Scikit-Learn and TensorFlow.

残念ながら、スライドを作る方で手一杯だったので、
GitHub上のコードを見たりダウンロード・実行するところまで手が回らなかった。反省である。

ソースコードは全体的に平易であり、本の内容が理解できていればそれを素直にコードに直したものである。
とはいえ、コードが書けなきゃ実際の機械学習処理ができないので手を動かさなきゃいけない。
俺はコーディングよりも理論の方についつい寄ってしまうので、気をつけなければ……

それでは。
  1. 2018/06/24(日) 00:40:00|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

コメント


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://luvtome.blog5.fc2.com/tb.php/645-935d4eaa
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。