したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

CS 20SI: Tensorflow for Deep Learning Research

1karino2:2017/03/12(日) 20:15:17
http://web.stanford.edu/class/cs20si/index.html

TensorFlowのがっつりとした入門コースだが、そのまま結構新しめの機械学習の問題にも取り組む。
TensorFlowの入門が凄くしっかりと出来ていて、TensorFlowがどういう物か凄く良く分かる。

動画は無くて講義資料としてスライドとコードのみ公開だが、二日目くらいまで見た範囲ではこれだけで十分に思う。

2karino2:2017/03/12(日) 20:25:29
githubのコードを眺めていて気づいたが、

例えば 03_logistic_regression_mnist_starter.py が穴あきの問題文であり、
03_logistic_regression_mnist_sol.pyが回答のようだ。

3karino2:2017/03/12(日) 20:28:23
最初variableとplaceholderの違いが良く分からなかったが、variableは次のイテレーションまで値を維持したりトレーニング用の変数を表したりするものか。
PlaceHolderは単純に値を代入して実行する何かっぽいな。

4karino2:2017/03/12(日) 20:35:48
4日目のword2vecを見始め。
negative samplingとかnoise constrastive estimationとか知らない…

5karino2:2017/03/12(日) 22:19:09
この辺からは自分で書いてみたいなぁ、と思うが、環境作るのがかったるいのでとりあえず先に進む。

nn.embedding_lookupって単なる行列の掛け算じゃないの?と思いドキュメントを読む。
https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup

なるほど、indexで分散される感じかしらね。
この辺はどっかでもうちょっと下の方勉強したいなぁ。

6karino2:2017/03/12(日) 22:39:39
word2vecは元論文を軽く読んだ事あるが、このスライドだけじゃ何やってるか良く分からんなぁ。
そしてコードも何を計算しているのか良く分からない。

せめてcenterとtargetが何か教えてくれよ、という気がする。
この辺は別の所で勉強して、コード例と割り切るくらいが良いかもなぁ。

7karino2:2017/03/13(月) 00:36:56
せっかくなのでword2vecの別のサイトも見るか、という事でまずdeeplearning4jを見てみる。
https://deeplearning4j.org/word2vec.html

そのあと深層学習の本も読んだが、けっきょくのところskip-gramを前提とすると、

1. 単語を適当な行列にかけてベクトルにする
2. ターゲットとなる教師データは前後n個の単語、その一つをzと置く
3. xとzの内積をソフトマックスしたものがzの表現確率となるとして、この値を最大化

という感じかなぁ(p237)。
xとzを得る所がばしっと書いて無いのがなんか不安になる所だが、元論文を読んでも隠れ層が無いニューラルネット、という書き方でバシっと式が書いて無い。
自分の理解では単に行列かけるだけ、と思う。

8karino2:2017/03/13(月) 00:41:05
お、lecture noteが良くかけているな。読んでみよう。

9karino2:2017/03/13(月) 00:47:55
そこからリンクされてたこのスライドがword2vecの入門には良いね。

http://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture2.pdf

これにはcenterとかの定義が書いてある。なるほど。xがcenterでzがcontext wordね。

10karino2:2017/03/13(月) 01:17:13
このスライドのp19が素晴らしいな。これこそ自分の知りたかったバシッとした表現だ。
それにしてもこれはどの位大きなタブレット使っているのだろう?

11karino2:2017/03/13(月) 04:09:18
講義notesに戻って、そこからnegative samplingとかについてのリンクがあったので見ている。
http://sebastianruder.com/word-embeddings-softmax/index.html

うわぁ、これは全然知らない奴だ。
Importance Samplingとかを見てるが、こういうの見る時はMCMCやっててよかったって感じだね。
この手のサンプリングベースのやり方は、機械学習を真面目にやるなら、どこかで習熟する必要があるよなぁ。

12karino2:2017/03/13(月) 22:02:18
NCEが良く分からないので元論文を読む事に。

https://www.cs.toronto.edu/~amnih/papers/ncelm.pdf
A fast and simple algorithm for training neural probabilistic
language models

13karino2:2017/03/13(月) 22:46:25
途中まで論文を読んだあと、>>11 のブログ記事に戻ると、NCEがなんとなくわかった気がする。
ノーマライズを真面目に計算すると大変だから、勝手にノーマライズされるようにパラメータのトレーニングを細工する。

その為の細工の方法。
ユニグラムからサンプルされるノイズ単語とトレーニングセットで出てきた単語を混ぜて、それらを分類するロジスティック回帰を作る。
混ぜる比は1:k。
で、実際にこのロジスティック回帰を学習する時のコスト関数の期待値のうち、ノイズ側をkのサンプル結果の平均で近似する。

そしてこのロジスティック回帰を最大化するようにパラメータを学習すると、ちょうど都合よく最後のアウトプットの層がノーマライズされた値に近くなる。

感覚的にはImportance Samplingと似たように、ユニグラムからサンプリングしつつ
その重みを少し調整する訳だ。
その調整の具合はユニグラムの単語k個と実際のトレーニングデータ1個を見比べて、重みを調整していく。
この調整具合をロジスティック回帰で判断させるのだろうなぁ。

あんまりしっかりとは理解出来てないが、雰囲気は分かった。

14karino2:2017/03/13(月) 23:16:11
negative samplingの解釈はこっちの論文もどうぞ、とブログにあったので読んでみた。

https://arxiv.org/abs/1402.3722
word2vec Explained: deriving Mikolov et al.'s negative-sampling word-embedding method

こっちはすっきり分かる。大変わかりやすくて良いね。
そして自分の感覚的な解釈はかなりいい線いってた。よしよし。

15karino2:2017/03/13(月) 23:39:04
Noise Contrastive Estimationを理解したので、もう一度講義のコードを見てみる。

https://github.com/chiphuyen/tf-stanford-tutorials/blob/master/examples/04_word2vec_no_frills.py

おー、すげーよく分かるようになっている!
nce_weightとnce_biasが良く分からんが、inputをembedした物にこれらを掛けるとhになるのかなぁ。
どっちにせよ最終的にはこれ使わないんだよね、たぶん。

まぁこの位分かってブラックボックス感無く使えれば十分だろう。

16karino2:2017/03/13(月) 23:42:19
nce_lossのコードを読む。

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_impl.py#L1154

>>15 の理解であってそうね>nce_weightsとnce_loss

17karino2:2017/03/15(水) 03:33:19
とりあえずCNNまでスライド見終わり。
スライドは良く出てきて大変わかりやすいが、ここからはさすがにコード書いて動かしてみないとなぁ。

どうしよっかなぁ。一応最後まで目は通しておくかなぁ。

18karino2:2017/03/15(水) 18:43:56
RNNを途中まで見たが、これはスライド見るだけではいまいち良く分からないな。
この辺でこのコースは終わりにするか。

19karino2:2017/03/16(木) 01:11:18
word2vecはこっちもいいぜ、と言われて、軽く読んでみた。

http://www-personal.umich.edu/~ronxin/pdf/w2vexp.pdf
word2vec Parameter Learning Explained

Skip GramやNegative Samplingの説明はいまいちだが、one-word contextの説明が詳しくて、入門には良いですね。
one-word contextだけ読んで他の文書に行くのが良い気がした。

20karino2:2017/05/23(火) 08:20:25
CS231nの課題を一通り終えたので、せっかくだからCS 20SIの課題も幾つかやってみようかな。

21karino2:2017/05/23(火) 10:05:59
一通りassignments/exerciseをipynb形式で終えた。良いね。
次はstyle transferでもやってみようかと思ったが、ちょっと大変そうなのでその前にexamplesの方のdeepdreamをやってみたい。

https://github.com/chiphuyen/tf-stanford-tutorials


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板