ICML@Stockholmに参加しました(DAY1 チュートリアル)

ICMLとは


正式名称は『International Conference on Machine Learning』。毎年開催される機会学習のトップカンファレンスです。2018年は水の都ストックホルムで開催され、全日程参加してきました。

まずは初日のTutorialについて振り返ります。

 

①Learning with Temporal Point Processes


まずは1発目のセッション。が、初日ということもありRegistrationに長蛇の列が・・・

 

結局、列に50分ほど待たされてTutorial会場には入れた頃には半分が過ぎていました、悲しい。資料公開されてるので後で読んでおこう(たぶん)

Tutorialの資料: http://learning.mpi-sws.org/tpp-icml18/



↑内容的にはこんな感じ(資料の一部を転載)

②Toward theoretical understanding of deep learning


2発目のセッション。なんとも思い切りのいいタイトルを付けたもんだなぁと思いつつ参加。

theoretical understandingっていうくらいなので、どんなものかと思っていたら序盤はDeepLearningの入門編的な話ばかりでした。そのせいでついついウトウト・・・

としてたらこのスライドで目が覚めました

まてまて、こんな式が成り立つのか・・・?続きのスライドに証明も書いてましたが私には理解が追い付きませんでした。というか『VC  dimension,  Rademacher』がわかっていない。気になった人は是非ご自身の目でお確かめください。

Tutorialの資料: http://unsupervised.cs.princeton.edu/deeplearningtutorial.html

 

③Variational Bayes and Beyond: Bayesian Inference for Big Data


そして最後のセッションは変分ベイズ!! なんというか、変分ベイズって宗教色が濃いイメージあるんですよね(暴言)。とか言いながらかなり楽しいセッションでした。

 

ベイズ推定の基本の枠組みとしては『このデータが観測されたということは、もともとの分布はどういうものだっただろう?』と推定することです。このとき、観測値を適切に選ぶとベイズ推定の効率と精度、つまり少ないデータで高精度に分布を推定できるという話が非常に面白かったです。


↑Tutorialの資料。境界付近などデータを上手にサンプルしながら推定している。

Tutorialの資料: http://www.tamarabroderick.com/tutorial_2018_icml.html

 

おまけ


企業ブースには相変わらずGoogleやFacebookなどが出店していました。Microsoftのブースにて『Write your University』という企画がなされており、Kyoto Universityと書こうと思ったら誰かに先を越されていました。悔しい。

 

などと呟いていたら記入したご本人様からご連絡が(笑)

 

ということで(?)加筆などしてきました

ICML@Stockholmに参加しました(開催概要)

ICMLとは


正式名称は『International Conference on Machine Learning』。毎年開催される機会学習のトップカンファレンスです。

 

開催地:Stockholm smassan


2018年は北欧のスウェーデンにて開催されました。メタルとギターポップの国ですね(偏見)。水の都ストックホルムということで心躍らせた人もいたのではないでしょうか?

会場はStockholmsmassan。ストックホルム中央駅から3駅のÄlvsjö駅からすぐの場所です。

周辺に施設が少なくランチに不便する場所でした。昼休憩には大量の昼めし難民が出現、ストックホルム中央駅まで昼食のために電車移動せざるえなくなり、そのまま午後のカンファレンスに遅刻した人も多かったとか。

 

スケジュール


2018年は”7月10~7月15日”の5日間で開催されました。初日がTutorial、それから3日間の本会議、最後に2日間のWorkshopです。

学会前にはスケジュール管理アプリなども配布されます、これが本当に良く出来てました。

 

Reception


最終日にはReceptionが行われました、場所はSkansenMuseum。どんなパーティーだろうと思って参加したらなんと屋外ステージ付きで4つ打ちの低音をズンズン響かせながらビールをあおるという最高仕様でした、パリピ感がすごかったです。

日付が変わるころまで日が沈まないまま明るいので22時頃まで屋外でReceptionは続きました。ところで学会会場からReception会場が遠すぎません???

参加登録


ICMLの開催は7月中旬ですが、Registrationは3カ月前の4月中旬に始まります。NIPSほど速攻ではなかったにせよ、今回もSOLD OUTによって参加できなくなった人が多数出たようです。

参加費用はEarly Registrationでworkshopとtutorialも全て含めると900ドル。

ICML2018 概要 Categoryを一覧にまとめてざっと眺めてみた

ICML2018@スウェーデン https://icml.cc/

言わずと知れた機械学習のトップカンファレンス。

どんな研究が発表され、どんなトレンドにあるのか、カテゴリを一覧化して、ざっと眺めてまとめました。


■Supervised Learning
教師あり学習。
DeepLearningとカテゴリが分かれているので、それ以外の手法があると思ったが、やはり深層学習中心。
Noisyなデータを扱う研究が多く見られる。

■Clustering
クラスタリング
集合を意味ある部分集合に分割すること
教師なし手法の代表例

■Unsupervised Learning
教師なし学習。
正解データ無しでデータ集合の意味ある分類や属性推定をする。
Clustering、NearestNeighbor、TopologyEstimationなどが今回は取り上げられる様子。

■Transfer and Multi-Task Learning
マルチタスク学習。
1つのモデルで複数タスクの学習をさせることで、共通構造部分が効率よく本質的な特徴抽出機能を習得する。
ドメイン変換。
ドメイン不変の特徴量を抽出したり、ドメイン特徴を把握して学習済みのデータを転用させたりする。

■Deep Learning (Bayesian)
ベイジアンディープラーニング。
学習によって、ネットワークの重みWの値そのものではなく、重みWの事前分布p(w)を求めるニューラルネットワーク。
参考:http://deeplearning.jp/bayesian-deep-learning/

■Deep Learning (Neural Network Architectures)
深層学習の構造の研究。
学習の安定化、学習の高速化、性能向上、時系列の認識など、目的は様々。

■Deep Learning (Theory)
深層学習。
学習率や評価関数による影響や、最適化手法の研究が中心。

■Deep Learning (Adversarial)
学習モデルが誤認識するパターンを見つけ出して「ハッキング」する手法(Adversarial Attack)。
AdversarialAttackされない頑健なモデル提案や、AdversarialAttackによる判断根拠の理解などの研究がある。

■Generative Models
画像生成で流行っているGANなどが中心。
生成するだけでなく、ドメイン変換や、教師データが少なくて済むような工夫が研究されている。

■Online Learning
オンライン学習
機械学習における学習の枠組みの一つ。
全データを一気に用いず、逐次的に与えられる一部のデータからモデルを逐次的に改良する。
確率的最適化手法など、モデル更新アルゴリズムやが研究されている。

■Active Learning
教師あり学習にて、少ないデータで分類器をつくるときに学習データを増やす手法。
重要なデータのみに人間がラベルをつけて学習データに取り込む。
識別結果の自信があるものを正しいと仮定してラベルにするのが半教師あり学習で、
識別結果に自信がないものにラベルを手動付与して学習データに追加するのがActiveLearning。

■Reinforcement Learning
強化学習。
DQNが主流。
状態遷移確率や行動価値が未知の場合が多いため探索によって取得する。
レア事象を探索できるような手法や、難しい事象に対してマルチタスクから知識を得る手法や、タスク非依存のパラメータの最適化手法などが研究されている。

■Optimization (Bayesian)
ベイズ的最適化。
最適化関数が不明のときに事前分布を仮定して事後分布を元に最適化をする。
次にどの点を探索するのか、どこに最適解があるのか、といったことを計算する。
実験計画を効率的に定めるときなどに活用される。

■Optimization (Combinatorial)
組み合わせ最適化
変数、目的関数、制約条件から最適解を求めるアルゴリズムの研究

■Optimization (Convex)
凸最適化
コスト関数と不等式制約が全て凸関数
局所最適解=大域的最適解

■Optimization (Non-convex)
非凸最適化
局所解に陥らないためのアルゴリズムやパラメータの決め方、解空間の調査など。

■Multi-Agent Learning
マルチエージェント学習。
複数のエージェントが並列に学習する自律分散型の学習アルゴリズムなどの研究が多い。
応用編としてマルチエージェント強化学習などもある。

■Statistical Learning Theory
NearestNeighbors、ベイズ、ランダムフォレストなどの統計的手法の研究。

■Natural Language and Speech Processing
自然言語処理。
音声生成。
LSTMやRNNが中心。

 


Feature Selection
Kernel Methods
Parallel and Distributed Learning
Time-Series Analysis
Gaussian Processes
Approximate Inference
Monte Carlo Methods
Graphical Models
Sparsity and Compressed Sensing
Ranking and Preference Learning
Networks and Relational Learning
Structured Prediction
Causal Inference
Privacy, Anonymity, and Security
Society Impacts of Machine Learning
Other Models and Methods
Representation Learning
Other Applications
Computer Vision
Dimensionality Reduction
Large Scale Learning and Big Data
Matrix Factorization
Spectral Methods

Self-Attentionの良記事 “Attention Is All You Need (Transformer)”

Encoder-Decoderで主に使われていて、GANなどにも応用されているAttention構造を勉強しようと思って見つけた良記事です。

論文解説 Attention Is All You Need (Transformer)

 

元論文 Attention Is All You Need (Transformer)

 

個人的に詰まった点はSelf-Attentionについてです。

『自己注意 (Self-Attention) では Query,Key,Valueは全て同じ場所 (Self) から来る.例えばエンコーダの Query,Key,Valueはすべて下の隠れ層から来る.自己注意はある位置の出力を求めるのに下の隠れ層の全ての位置を参照できる』の部分を誤解していました。

つまり、n番目のLayerでは、i<nについて総当たりでi番目Layerとn番目Layerとの間でAttentionを取得するということみたいです。

Attentionの取得方法は内積がメインとのこと。手前の層でどこに特徴が強く出ているのか(≒注目すべき箇所がどこにあるのか)のヒントをもらうわけですね。

 

DCGANについて元論文を読みながら再整理

 

2年ほど前からブーム真っ最中のGANについて、丁寧に振り返りを使用というのが本記事の目的です。まとめサイトからの引用ではなくちゃんと元論文を読むことをポリシーとします。

 


そもそもDCGANとは

DCGAN(Deep Convolutional Generative Adversarial Networks)

簡単にいうと畳み込みニューラルネットワークを適用したGAN。論文ではネットワーク設計の注意点や特徴が細かく定義されている。

(論文)
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (2015) https://arxiv.org/abs/1511.06434

 


DCGANのネットワーク構造の特徴

pooling層をConvolutions層(strideあり)に置き換える

  • pooling層をConvolutions層に置き換える(stride数をうまく調整。poolingが2×2で実施されるなら、stride=2とすれば出力のサイズは等しくなる)。
  • replaces deterministic spatial pooling functions (such as maxpooling) with strided convolutions, allowing the network to learn its own spatial downsampling.

  • Generatorではzから画像サイズと同等サイズの出力にアップサンプリングしないといけないのでDeconvolution(正式名称:fractionally-strided convolutions)をする。これは元となる特徴マップを拡大してから畳み込むことでサイズを大きくする処理。

バッチノルムを使用

  • バッチノルムを挟んだ方が、初期値問題や購買消失問題が生じにくく、学習がスムーズになる
  • This helps deal with training problems that arise due to poor initialization and helps gradient flow in deeper models

  • ただし、全層に適用するとモデルが不安定になった。
  • GeneratorのINPUTとDiscriminatorのOUTPUTには適用しいようにしたら解決したとのこと(Why?)
  • Directly applying batchnorm to all layers however, resulted in sample oscillation and model instability. This was avoided by not applying batchnorm to the generator output layer and the discriminator input layer.

Full-Conectionをなるべく省く。

  • 学習安定性の観点でFull-ConectionよりもGlobal-Average-Poolingが広く使われているのと同じ考え方
  • Global-Average-Poolingについてはコチラを参照(https://qiita.com/mine820/items/1e49bca6d215ce88594a)
  • Second is the trend towards eliminating fully connected layers on top of convolutional features. The strongest example of this is global average pooling which has been utilized in state of the art image classification models (Mordvintsev et al.).

  • ただし、Generatorとzをinputする部分と、Discriminatorの判定結果0..1を出力する部分では全結合した方が良い結果が得られた。
  • A middle ground of directly connecting the highest convolutional features to the input and output respectively of the generator and discriminator worked well.

GeneratorではReLUを活性化関数として使用。ただし出力層のみtanh。

  • 学習が早いということで、出力層では有界の活性化関数を推奨している。
  • We observed that using a bounded activation allowed the model to learn more quickly to saturate and cover the color space of the training distribution.

  • そもそも画像(例:RGBの場合は0~255)を出力するのだから活性化関数が有界じゃないと面倒でしょ?という気もする

DiscriminatorではLeakyReLUを使用。

  • 理由には「従来手法がそれでうまくいってるから」程度しか書かれていない
  • Within the discriminator we found the leaky rectified activation (Maas et al., 2013) (Xu et al., 2015) to work well, especially for higher resolution modeling.

 


やー、なかなか直感的には「なるほど」と思っても、うまく説明しきれないですね。

Jupyterでpickleを読み込み過ぎてメモリエラー

pickleは便利ですが、ついつい巨大ファイルを読み込みすぎるとメモリエラーが発生します。

Jupyterでは画面上では [*] のままですが、実はメモリ問題で停止しているという場面が珍しくありません。

対策は多々有りますが、簡単にできるのは次の2つが挙げられます。

①変数名を使いまわして上書きするようにする

②dtype=np.float32 で読み込む

試してみてください。

 

 

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

 

TensorFlowの1.5以降などを使うときに、CUDAのバージョンが9.0でないと次のようなエラーが出ます

 

私はCUDA6.0だったので、おとなしくTensorFlowを1.4に戻して解決させました

Python2で生成した.pklをPython3で読み込む時のエラー ’ascii’ codec can’t decode byte 0x9b

python2とpython3ではちょいちょい互換性のない場面がります

PKLファイルの生成と読込もその1つ

入手したPKLファイルを読み込むとき、

python2ではうまくいっても、python3では次のエラーが出ることが有ります

この場合は次のようにすればOK

 

史上初の自動運転による死亡事故 2018年3月18日@アリゾナ

2018年3月18日にアリゾナで史上初の自動運転による死亡事故が発生。自動運転界隈にとってショッキングな事件とされており、今もかなり話題になっているので内容を調べてみた。

 


東洋経済

アメリカ現地時間の3月18日夜、ライドシェアリング大手の米ウーバー(Uber)がアリゾナ州テンピで行っていた完全自動運転の実証試験中に歩行者の女性をはねた。女性は病院に搬送されたが死亡が確認された。

これを受けてウーバーは、アリゾナ州、カリフォルニア州、そしてオハイオ州で実施してきた公道での完全自動運転の走行テストを中止したと発表した。

 

今回の事故を受けて『開発途上の自動運転技術で公道を走らせるのはやっぱり危ない!』という声が大きくなりそうですし、まず最初に予想された展開がこれですね。もちろん必要な対応ですが、ここまでは形式的・儀式的な対応とも解釈できます。

 


日本経済新聞

地元警察は歩行者が急に飛び出し、人間でも避けるのが難しい事故だったとみている。

車両は時速64キロメートル以下で自動走行していたとみられ、衝突直前に減速した形跡はなかった。雨や雪は降っておらず、走行が難しい気象条件でもなかった。

運転はかなり安全重視だ。法定速度内で走るようプログラムされており、スピード違反はありえない。基本的には常に道を譲る設定となっている。

 

このあたりからずいぶんと擁護的になっています。つまり『自動運転の特別な事故』ではなく『ただの事故』にするための論に見えます。『自動運転だから』ではなく『歩行者が飛び出したから』というロジックを成立させることで、事故過失割合を自動運転側から取り除こうというストーリーですね。

 


日本経済新聞

自動運転機能が作動中で、運転席には監督者も乗っていた。

自動運転機能+監督者があったにもかかわらず事故が起きたとなると、誰の過失なのか本当にわからなくなってきますね。監督者という登場人物の追加によって、さらなる擁護の予防線として歩行者の過失でもなく自動運転技術の過失でもなく、同乗していた監督者の過失になるというストーリー展開の可能性も浮上します。

 


 

誰がどの立場をとるのか今は不明ですが、自動運転は操縦技術以外にも倫理と責任の問題に必ずぶつかると言われています。今回の事故によってどのように話が進んでいくのか注目です。