2020年
2020年の目標(もう元日は過ぎ去ってますが……)
- 内定を取る(か、D進への覚悟を決める)
進学か就職かで迷ってますが、おそらく就職をすると思うので 、内定を取りたいです。
どうしたら内定が降ってくるのでしょうか……(本気でわからない)
今受けてる会社がいくつかあるので、そこの結果とか次第ですね……
- 研究をする
研究をします。といいつつも、就活をしていたら研究ができないんですよね(実話)
なんの研究しようかなぁ……化学系のやろうかな、今のやつやろうかな……
と思いながらAAAI20のAccepted Papersを眺めています。
- Web開発する
よく考えたらフロントエンドの開発やったことないので、やってみようかなと思います。友人も興味持ってるっぽいので、チーム開発とかしたいなぁ。
- 旅行をする(あわよくば全都道府県制覇)
未踏都道府県はいくつかあるのですが、その中でも、香川以外行ったことが無い四国にでも行こうかなと思っています。後は山陰や北陸、九州に行きたいなぁ。
とりあえず、行ってない都道府県は
新潟、福井、三重、奈良、和歌山、鳥取、島根、徳島、愛媛、高知、長崎、宮崎
の12個。社畜になったら自由に行けないし今のうちに潰しておくぞ。
- TetrisのSprint 60s切り
実はテトリスが好きです。と言いつつあんまり強くないので頑張ってSprint(いわゆる40LINE)のタイムを縮めたいです。今は74sくらい。(1/8追記: これ書き終わった後ちょっとやったら67sになりました、天才か?)
最近寝る前にちょっとずつやってます。
38.41 Puyo Puyo Tetris Sprint - Wumbo
自分では「ホールド回数が多いから辛いんだろうなぁ……」と思ってるんですが、この動画を見てるとそうでもなくて、おそらく無駄な積み込みをへらす(理論上は100個のミノだけでよい)のが良いのかなと。(今は120ミノくらい積み込みしてしまってるので……)
ということで、今年はTetris Yearにします。
- 断捨離をする
部屋が辛いことになっている & 今年限りで家を出るので、部屋を片付けるために断捨離をしようと思います。後、部屋がきれいだとおそらく精神が安定すると思うので()
なお、これらは適応的に変化します(は?)
Attention in Deep Learning
を読んだ(ICML2019のTutorial)
スライド: http://alex.smola.org/talks/ICML19-attention.pdf
1.Watson Nadaraya Estimator
- Alex Smolaのスライド、好きです
- まず最初Watson Nadaraya Estimatorってのを導入してた
- Key Query ValueっていうAttentionの基本的な仕組みを導入するためかな
2. Pooling
- まずDeep Setsを導入(SmolaもAuthorやんけ!)
- Deep Setsは集合に対するニューラルネットワーク
- 集合上の任意の関数は、各要素にφを適用したものの総和を取って、何らかの関数に突っ込んだもので表現できる
- んで、Multiple Instance Problemっていう問題について考えてみる
- これは、ある望ましい性質を持つ(薬理効果みたいな)要素を持つ集合を同定してほしいって問題
- んで、さっきのφの部分の関数の値に、Attentionを導入して要素に重み付けを行って上記の問題へアプローチしてる
- 次はBag of WordsとWord2vec
- こいつも、文章(集合)中の各単語(要素)に対する関数みたいなものを求めたいって気持ち
- WordレベルのAttentionとかSentenceレベルのAttentionがあったりする
- あとはILSVRC 2017でトップだった(たしか)Squeeze Excitation Networksとか、GAT(Graph Attention Networks)とかもAttentionだよなぁっていう
- Squeeze Excitation Networksはよくわかってないのでちょっと解説記事を読む
まとめると、集合に対し
- Pooling
- Attention付きPooling
- Attention関数(単位重みに正規化)
って感じ、Attentionの重みってのはクエリwがどれくらいコンテクストに依存するかって感じ
この辺はよくある話かなぁといったところ
3. Iterative Attention
- Question Answeringを考える。○○はどこにある?っていう時に、単純なAttentionだと、○○って入ってる部分しか考慮できない
- なのでIterative Attentionを導入 その名の通りAttention部分を複数個用意してる
- さっきみたく書くと
- 繰り返しAttentionやってるのは初めて聞いた(無知無知のムチ)
4. Iterative Output
- Seq2Seqとかwith AttentionとかPointer Networkの話(この辺は軽く調べた)
- Improvementとして、Transformerを使ったりとか、Graph Neural Networksによる局所的交互情報の導入とか
- Neural Turing Machineとか(これは内部にメモリを持っていて、Attentionの重みを使ってそのメモリを読み書きするっていうやつ)
5. Multiple Heads
- まあ出てきましたTransformer
- self-attentionは、QueryとKeyとValueが一致する時
- でもなんでSelf-Attentionがいいんだろ……(よくわかっていない)
- まあ、よしなにQueryやKey、Valueに変換する操作が入ってるからまあ……わかるかも……?
- まあ出てきましたBERT
- word2vecは系列情報を完全に無視してしまう
6. Sparse Structured Lightweight
- 疎なAttentionとかもあるっぽい(計算量大きくなるからね)
雑感
- なんとなくAttentionがわかった(気になった)
- Pointer Networkに対してのTransformerは筋が悪いわけではなかったんだ(とICLR2019のAttention, Learn to〜を読んで思いました)
- GATも実装しようかなぁ
Seventeen Feels
テトラルキア / Seventeen Feels を聞きましょう。
将来とか、大人になるとかって色々不安だったりするわけなんですよね。
そんな気持ちを歌っている曲です。
追いかけた未来の残像は Just like seventeen feels
僕が死ぬほど好きなフレーズです(石川慧さんは神)
結局17歳って、若いとはいえ現実とかをわかってくる年齢でもあるんですよね。
そんな中で、夢をひたすら追いかけるとか、そういうのが難しくなってきてしまって、時々こんなセンチメンタルな気分になっちゃう時があるわけなんですよね。
だけど、一歩一歩進んでいく、それしか無いんですよね。
だって、今は今なんですから。
失ったつもりの感情も 消えそうに思えた約束も
大切な物から順番に また探しに行こう
Hypergraph Neural Networks
読んだ。
ハイパーグラフに対するニューラルネットワークを提案してる
(けど、どっちかって言うとHeterogeneous Graphっぽい?わからん)
まあ畳み込みが問題になるけど、そこでやってることは、
- ノードのEmbeddingを、ハイパーグラフ上のエッジを元に集約、ハイパーエッジEmbeddingを生成
- 生成された上記Embeddingを元に、各ノードのEmbeddingを更新
というだけ。
このモチベーションとして、Graph Convolutional Networksの、Spectralな畳み込みが、グラフ上の近傍ノード集約で近似できるということを利用して、Hypergraph上の畳み込みを定義、その近似として上記畳み込みが得られることを導いている。
で、使ってるデータセットはいつものCitation Networksと、Visual Object認識(?)
普通に1近傍をまとめたものをハイパーエッジとしたり(なのでN個のハイパーノードが得られる)、後者はノードの近さで作ってる。んで、どっちもいい感じの結果が出てる。
以下、雑感
- Hypergraph上のConvolutionとしては妥当な気がするけど、如何せんデータセットがGraph由来だからなんとも言えんなぁという
- あと、これはNode Classification向けなので、どうしようといったところ(僕はHypergraph上のEdge Predictionがやりたいので……)
- GCNもそうだけど、Spectralな畳み込みと、ノード集約の畳み込みの繋がりの部分ちゃんと理解しないとなぁと思っている
- 上記は、「今時点ではチェビシェフ多項式が云々……位はわかるけど論文が無いと論理が追えないので、人に説明できるくらいにならないとまずい」という意味(は?)
この論文を飛行機で読みました。(普段は寝ている)
Solving NP-Hard Problems on Graphs by Reinforcement Learning without Domain Knowledge
読んだ。
グラフ上のNP-hardな問題に対して、MCTSを適用してみたよというお話。
まず、グラフ上のNP-hardな問題をMarkov Decision Processに落とし込む。んで、MCTSを使ってpolicyを学習したいんやが、Inputサイズが可変なので、GNNを使って固定長のGraph Embeddingを生成することで解決してる。あとはAlphaGo Zeroと同じ
結果としてはまあまあといったところ(Supervisedな手法やB&Bには負けるけど、S2V-DQNには勝ってる感じ)
以下、雑感
- Reinforcement Learningは流行ってるのかなぁと思いぱっと読んでみた
- 実際精度も悪くないし、いいのかなぁと思ったり(Unsupervisedっていう点を考えるといいと思う?)
- MDPに落とし込むアイデア自体は [Li et al. 2018] 由来なんだろうなぁ(なんとなく思った
- そこまで学習に時間かかってないのも「いいね〜」となった(なんだかんだこんなもん?)
- ただ、MIS自体がタスクとして簡単な可能性が十分あるんだよなぁ……
- MISはたしかFPT的な計算量クラス(W[1]-hardness的なやつ)だと簡単な部類だったような、違うような(曖昧なのでちゃんと調べる)
- ん〜〜〜でも CPNGNN の論文だと、MISは難しい(正確に言うと、CPNGNNではTrivialなGreedy Algorithmより良いものを学習できない)らしいし……
- GINを使ってるので、自明な貪欲Algorithm(なにがTrivialだ?)を使った結果と比較したいなぁ
- もし、自明な貪欲より良い解だったら、CPNGNNの論文再考する必要あるし(Aggregation、Combine、Readoutの仕組みが思ったより複雑ってこと?かも
- 自明な貪欲と同じくらいだったら、自明な貪欲くらいしか学習できないってことだし(まあそれもそれで面白いような……なんでかって言うと、よくわかってないNP-hard問題に対する貪欲アルゴリズム構築に役立ちそう)(そんな問題なさそうやけど)
強化学習の勉強を……します。(緑の本が研究室にあったので読み始めました)
一応演習やら自分でもやった記憶はあるけどちゃんと理解してない……
Pのイ同期の論文なので読んでいる最中に顔が思い浮かんでしまった(?)
LSTMってなんだ?
A. Long-Short Term Memory(こなみ)
最近LSTMをブラックボックスとして使ったので最低限何してるかくらいは把握したく
なんでつかう
- 時系列ならRNNでいいじゃんわかりやすいし
- でも、近くの情報ばかり見ちゃって言語処理タスク辛い時ある……
- 長短期記憶持たせて強い時系列モデル作っちゃうよん
核になる部分
- Cell Stateが重要、こいつはずっと系列の情報流し続けてるって感じ
- なんでかっていうと、こいつ自体はadd or multiply操作しかされないので
- じゃ、multiply操作の部分で何してるかっていうと、「どの情報を流しますか?」マスクをかけてる
- add部分では「どの情報を追加しますか」を制御している
こんな感じでLSTMはCell Stateをうまく制御して長短期記憶をいい感じにしています
入力情報に対して適応的に、
- 忘れたり
- 情報を記憶させたり
- 記憶情報から引き出したり
をしているのが特徴なんすねぇ……
っていうことがこちらに書かれていて素晴らしいです。
僕はムチムチの実の能力者だったので、Gated Recurrent Unitの中身を知らなかったのですが、これってLSTMの変種だったんですね……
でもこれ複雑すぎん?