論文読んだ記録の記録 5
100年以上前に提案された主成分分析を含めて,多変量解析は長いことたくさん研究されてきました.もはや訳がわからんくらいいろいろな手法がありますが,やってることは割と単純です.最近読んだarXiv記事で良さげなのがありました.
最近流行ってる高次元なんたらを除いて,多くの多変量解析の手法は基本的に似たような行列の二次形式の最適化問題に落とせるので割と統一的な理解ができます.でも意外とちゃんと書いてる論文が無く,修論書く時にヒーコラいいながらまとめて勉強した記憶があるんですが,↑のやつには非常によくまとまっていたので勉強したことない人はパラパラ見てみると良いかもしれないです.Andersonを読む気にはならなくても↑くらいなら読む気になりそう.
論文読んだ記録の記録 4
skip-gramモデル*1をwikipediaなり小説なり大量の文章に当てはめて,パラメータを最尤推定することで文章中の各単語にベクトル表現を与えることができます.skip-gramを用いて単語のベクトル表現を得る手法はword2vecとも呼ばれていて,数年前に一世を風靡しました*2. 色んな人が解説してるので興味ある人はこことかこことか見てください.
word2vecで得られた単語ベクトルでは加法演算ができるとかなんとかいう話があります.意味不明ですね.各単語のベクトルの加減算"King"-"Man"+"Woman"を計算したら"Queen"という単語が近傍に出て来るみたいな話は有名です.なんか足し算できるみたいな話がずっとされつつもその理屈はよく分かってなくて,途中でナレッジグラフを使ってsupervisedに足し算を学習しようぜみたいな話も出てきました
これくらい明示的にsupervisedで学習すればそりゃ足し算できるのかな,という気持ちにもなりますが,word2vecはunsupervisedなのでなんで単語の足し算できるんやみたいなのは長年謎のままで,ACL2017で(それなりに強い仮定をおいた場合に)ちゃんと単語で足し算できるようになるよ,という話が出ていました.
(この文献は先輩に教えてもらいました,ありがとうございます)
私的には,word2vec自体には興味ないし*3足し算がどうこういう意味不明な話が解明されればもう満足なんですが,word2vecをグラフの表現学習に利用しようという話が出てきて無視できないという状況です.
グラフのノードとそのエッジが得られているときに,グラフ上でランダムウォークすることでノードの系列
を作ります.ノード一つ一つを,例えば文章「I have a pen」の各単語I, have, a, penに対応付けることができ,word2vecと全く同様に各単語(各ノード)にベクトル表現を付与できるので,各ノードのベクトル表現を得ることができる,という仕組みです.この手法はDeepWalk*4と呼ばれています.ランダムウォークで系列を作ると,グラフの一部のノードにのみ集中して系列が作成されてしまうので,それを回避するためにランダムなノードからランダムウォークを何度も繰り返したDeepWalkの亜種がnode2vec*5として知られています.
Twitterなどでも何度か書いてますが,DeepWalkという名前には少し違和感があります.DeepWalkで用いられるskip-gramは1層のニューラルネットワークを使っているとみなすことができる*6ので,そこからDeep Learningを連想してDeepという名前という付けたのだと思いますが,流石に3層以下のものをDeepと呼ぶ人は極めて少ないだろうし,言葉の使い方としてあまりよろしくない.NeuralWalkなら(ちょっと気持ち悪いけど)まぁなんとか許容範囲に入っていなくもない・・・.
つまり,DeepWalkの名前の由来になっていたDeep Learning + Random Walkという2つの属性のうち,Deepのほうは詐称ということになります.最近は更に意味不明で,残ったRandom walk部分をグラフの隣接行列を使っての行列分解で近似しようみたいなのが出てきました
これは単にNeural Matrix Factorizationでは・・・という気がするのですが,Deep Matrix Factorizationも出ているので名前は今更変えられない
Yang et al. (2015)は一応タイトルにはDeepWalkという単語を使わず苦心した結果が見える*7のですが,2016に出ている方はもうタイトルで思いっきりDeepWalkと言っています.
Deepでもないし,Random walkでもない,これはDeepWalkと読んでよいのか????というモヤモヤした気持ちが募るばかりです.このあたりの話は名前の使いあkたが本当は雑で,Deep Matrix Factorizationなんて行列分解せずにneural network使ってますからね.行列分解してる人がDeepとか言っていて,ニューラルネット使ってる人がMatrix Factorizationとか言っている.ややこしいので名前はちゃんと付けて欲しいです・・・・・.
追記: word2vecの研究の時系列についてはフォローしきれてないので,どれが最初とかどの時点でこれが言及されてたとかはよく知りません・・・.上で書いたやつ以外にも色々論文は出てるので興味ある人は自分でサーベイしてください
*1:Mikolov, Tomas, et al. "Distributed representations of words and phrases and their compositionality." Advances in neural information processing systems. 2013.
*2:伝聞です
*3:あと怖いオジサンがいっぱいいそうで迂闊なことが書けない
*4:Perozzi, Bryan, Rami Al-Rfou, and Steven Skiena. "Deepwalk: Online learning of social representations." Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014.
*5:Grover, Aditya, and Jure Leskovec. "node2vec: Scalable feature learning for networks." Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2016.
*6:より正確には,"できなくもない"
論文読んだ記録の記録 3
最近、Machine teachingという分野の論文を読んだ.
機械学習(ここではと書く)とは、究極まで突き詰めれば、あるデータを使ってモデルのパラメータを推定する写像
とみなすことができる. Machine teachingとは、(多分他にも定義とか使い方があるんだろうけれど), 最高のパラメータを知っている「先生」が、「生徒」たる機械学習アルゴリズムがパラメータをうまく推定できるようにデータを作ることを目的にしている.要するに, となるようなDを求める逆問題
をうまいこと解けないだろうか? という問題である. 当然ながら大量にデータを与えればうまく学習できるだろうと思われるので、可能な限りデータ数を小さくなるようにする. ただ、この論文(AAAI2015)ではデータを一回渡しただけで終わってしまっていたので、一回データを渡して、学習の成果を見て、その成果を見つつまた良さげな学習データを渡して、という操作を繰り返そう、というのがICML2017でIterative Machine Teachingとして提案されていた.
問題設定などはまぁわからなくもないのだが、いったいどういう場面で使われるのだろうか? 機械学習で真のパラメータを知っててデータを生成するシチュエーションなんてあるか? なんかhigh-dimのデータがどうとか言ってたので、簡単な場合に結果がわかってるデータでモデルを弱く学習させてから本気でトレーニングするとか、そういう初期化の部分で使われる、というのならわかるのだが・・・.
この話には続きがあって、AAAI2015にはof Humansというセクションがある. 学校などで人間に何かを教えるときに教材を作れないか、みたいな話らしい. まぁ人間にそんなにうまいことパラメータがあるわけはないのだが、非常に理解しやすい話だし、博物館にいる猿に芸を仕込むとかそういうシチュエーションで使えたりしないのかなぁとか妄想してしまった.