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.

 


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

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

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

 


東洋経済

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

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

 

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

 


日本経済新聞

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

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

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

 

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

 


日本経済新聞

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

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

 


 

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

 

PRMU企画セッション2018の資料が深層学習入門編としてとてもわかりやすい

電子情報通信学会の総合大会@東京電機大学に参加してきました。

同時開催されたPRMU企画セッション『人工知能・深層学習の実世界応用』にてご講演されたシモラセ・エドガーさん@早稲田大学の資料が非常にわかりやすかったので備忘録としてまとめます。

まとめますというか、一般公開されているのでリンク先を見てもらえればいいのですが。

シモセラ・エドガーさんによるpdf資料

企画セッションのサイト

 


セッション中に”イイネ!!” と思った発言集

・ディープラーニングは万能ではない、問題を選ぶ必要あり

・パラメータは学習で決まるもの、ハイパーパラメータは人間が経験で決めるもの

・深層学習による自動的な特徴量抽出によってヒューリスティックを避けられる

・非線形の活性化関数をはさむことであらゆる計算式が近似できる(↓↓ 例えばこれ Wikipediaより)

・Adadeltaとバッチ正規化はとてもオススメ

・モデルや学習では解像度を下げることが重要

・TensorFlowは静的と動的なグラフが可能で、生産に焦点をあててる (←そうなの!?と驚いたけど、いつの間にか動的ネットワーク生成に対応したTensorFlowFoldってのが登場してたようです)

 


資料中で引用されていたAlec Radfordさんによる学習率の違いを示したアニメーションが面白かったです

 

PAC学習とVC理論

お久しぶりです、ロードローラーです。最近は7月のICMLに参加すべく勉強の日々を過ごしています。

ディープラーニングをあれこれとやって知ったつもりになっていましたが、ディープラーニングは機械学習の一部でしかなく(さらに言うならニューラルネットワーク手法の1つでしかない)、まだまだ勉強することは山のようにあります。

そんな中で、本日は機会学習のPAC学習とVC理論を調べました


PAC学習

参考サイト:朱鷺の杜Wiki

パラメータ:入力の誤差 ϵ,信頼度 δ,学習する概念の複雑さの上限 s

学習する概念についてのエラーがたかだか ϵ である確率が 1δ より大きくなるような仮説を出力できるアルゴリズムが存在するとき PAC学習可能 (probably approximately correct learnable). こうした学習問題を扱うのがPAC学習 (probably approximately correct learning)

さらに,1/ϵ1/δs について,計算時間が多項式時間で抑えられるとき,多項式時間PAC学習可能であるという.


こちらでもわかりやすくまとめられています

 

~要約~

PAC学習のモチベーションは『 まぁまぁ良い学習をするためにどの程度学習データが必要か見定めたい 』こと。

仮説集合𝐻(≒分類モデル)において『汎化誤差が𝜖より大きい,かつ,ℓ個の訓練データ に無矛盾な仮説を選択してしまう確率を𝛿以下に抑 えたい』とき、すなわち危険率𝛿以下で汎化誤差が 高々𝜖の仮説を学習するために必要な訓練デー タは次の式で求められる

問題点が2つあり、1つ目は思った以上に非常に大きい数値が算出されてしまうこと、2つ目は仮説集合𝐻(≒分類モデル)が無限の場合に対応できないこと。

実際問題、パラメータ数次第で分類モデルの構築方法は無限に考えられるので(だからパラメータチューニングが難しい)、仮説集合Hが有限となるシチュエーションは限られています。


VC次元による問題解決

仮説集合Hが有限でなければ先ほどの計算式のうち|H|が∞となり、必要な訓練データ数ℓも∞に発散してしまいます。そこでVC次元という考えを導入して、仮説集合HではなくVC次元数dによって下記式から必要な訓練データ数にあたりをつけます。

さて、それではVC次元とは何なのか??朱鷺の杜Wikiに再登場して頂きましょう。勝手に私が要約した内容が以下です。

・shatterするとは,点集合のそれぞれの点にどのようにラベルをつけても,それらの点を分離するような関数(≒分類モデル)がその仮説集合𝐻に含まれること.

・n個の点に対して,任意の配置とラベルであってもshatterできるような関数があり、それ以上点を増やすとshatterできなくなるとき,その関数(≒分類モデル)のVC次元は n.


ICML2017でも研究対象に

パラメータ再利用の転移学習時のリスクを算出するために、PAC学習やVC次元が利用された研究があったようです。

論文:
Risk Bounds for Transferring Representations With and Without Fine-Tuning

ちょっと理解するのが難しそうなので、これはまた今度で・・・・←

 

AIとは?? ~正しい理解のために過去のブームを振り返りながら解説~

「AIってなんかすごいんでしょ!」

「AIを使って何か提案してよ!」

そんな声を聴くたびに嘆かわしく思っていた私ですが、そもそも何故近年AIブームが過熱しているのか?今までと何が変わったのか?正しい理解をしている人が何人いるでしょうか?

という気持ちから、簡単にまとめてみました。

 

さぁ、勉強したところでAIビジネスを始めましょう。

 

NVIDIAが教師無しのImage Translationを提案 ~Unsupervised Image-to-Image Translation Networks~

Unsupervised Image-to-Image Translation Networks
Ming-Yu Liu, Thomas Breuel, Jan Kautz(NVIDIA)

PDF NVIDIAサイトでの紹介 Git


概要

image-to-image translationによりドメイン間の転送を学習する。ここでいうドメインとは写真だと晴、雨、夏、冬など、顔画像だと眼鏡、金髪、笑顔、など

次の図では晴れの画像(左下)から雨の画像(右下)を生成している


特徴、すごい点

Unsupervised で image-to-image translation を実現

従来のSupervised image-to-imageでは
・画像ペア(X1, X2)が得られた
・そこから同時分布(Joint distribution)を推定可能だった
・つまりペア画像の差分がイコールでドメインの異なりによる成分だった

今回のUnsupervised image-to-imageでは
・画像ペア(X1, X2)が得られない
・そのため周辺分布(marginal distribution)しかわからない
・画像間の差分には被写体の異なりによる成分と、ドメインの異なりによる成分が含まれる


アイデア

共通の潜在空間 Z が存在すると仮定(Shared-latent space assumption)。異なるドメイン間の対応する画像は、同じ潜在変数Zから生成されるとした。

潜在空間Zの仮定により、ネットワーク各部の役割を以下のように解釈できる

E1 – G1, E2 – G2    : Variational auto encoder

E1 – G1 – D1, E2 – G2 – D2 : GAN

E1 – G2, E2 – G1     :  ドメイン間の画像変換


工夫①~重み共有~

ドメイン変換したときに、対応したペア画像が生成できるよう重み共有を部分的に行う。(E1とE2、G1とG2における一部のLayerが対象)。

重みを共有した部分が物体の構造を理解・再現する(hに相当)

重み共有されていない部分がドメイン固有の特徴を再現する(Lに相当)

 


工夫②~Loss関数の設計~

潜在空間Zの過程からcycle-consistency-assumptionという仮定を導く。

仮定:
「x1」「x1から変換したx2」それぞれから算出される潜在空間zの分布は一致する(Loss関数における項Lcc1)

仮定:
「x2」「x2から変換したx1」それぞれから算出される潜在空間zの分布は一致する(Loss関数における 項Lcc2)

2つに分けることで「ドメイン1⇒2への変換だけ得意」などと能力が偏らないようになる。(※なお、VAEとGANは従来のようにLoss関数を設計して学習)


所感

Loss関数の設計工夫はシビレましたね。ちゃんと潜在空間Zがそれっぽくなるような制約を加えることで結果が出ています。また、重み共有でドメイン間の事なりによる差分成分を分離できた点も、予想以上に直感通りの挙動を示したという驚きです。

lddでは”not found”にならないのにmakeすると”No such file or directory”になる(LINUX)

特に買ったばかりのRaspberyyPiなどでよくある話

makeしてプログラム実行しようとすると

“error while loading shared libraries: ****.so.0: cannot open shared object file: No such file or directory”

となってしまう。ライブラリがリンクされていないのかと思ってlddで確認すると”not found”とならない。

 

リンクが出来ているのか出来てないのかどっちやねん!

これは”/etc/ld.so.cache”がアップデートされていないことが原因らしい。次のコマンドでアップデートとしてやると良い。

これで解決

レベルを上げて物理で殴る!?最新モデルよりもチューニングをちゃんとしたLSTMが最教説~On the State of the Art of Evaluation in Neural Language Models~

DeepMind社から面白い論文が発表されています。その名も「On the State of the Art of Evaluation in Neural Language Models」で、内容としてはチューニングをきちんとしたLSTMは、近年のstate-of-the-artを上回るというもの。

論文サイト:https://arxiv.org/abs/1707.05589

(アブスト。LSTMが最もよいと書かれています。)

様々な学会であれこれと創意工夫がこなされている中、まさかレベルを上げて物理で殴れば最強と言わんばかりの論文が登場するとは思いませんでした。

比較相手にされているのはRecurrent Highway Network(2016)とNAS(2016)のようです。

ちなみに「ちゃんと」チューニングとのことですが、具体的にはGoogle Vizierを用いたようです。こちらはGoogle社によるブラックボックス最適化のためのサービスです。っていわれてもなんのこっちゃですがハイパーパラメータなどをイイ感じに最適化するツールとでも解釈してください。

Google Vizier
https://research.google.com/pubs/pub46180.html
http://itpro.nikkeibp.co.jp/atcl/idg/17/100200076/100200002/?P=2

しかし、チューニングにGoogle Vizierを使ったとなると、Google Vizierの信頼性も気になるところですよね。一般的なモデルになりつつLSTMだからこそGoogle Vizierによるパラメタチューニングが上手くっただけで、state-of-the-artの手法にGoogle Vizierが対応できなくて性能が出なかったという可能性もありません。

まぁそれを差し置いてもLSTMで最高性能を達成したというだけでGoogle Vizierの価値が高いのは間違いないのですが。

個人的にはDeepMind社によるGoogle Vizierの宣伝じゃないかと懐疑的にもなりつつ、このようなシンプルに強力な結果を出す研究は大好きなので楽しく読ませて頂きました。

JDLA ディープラーニングG検定 内容・難易度・試験対策まとめ

2017年12月16日、JDLAディープラーニングG検定を受講しました。

受験を検討している方のために内容をまとめておきます。





問題数と試験時間

問題数:233問
試験時間:120分

試験時間に対して問題数が膨大ですが、「画像認識タスクには特定物体を矩形領域で抽出する(ア)や、ピクセル領域ごとに認識する(イ)がある。」といった具合に、1つの文章に対して穴埋め問題が複数設定されていたりするので、試験を受けた感じでは問題数が多すぎるといった感覚はなく、実質120問程度といった感覚でした。

 


出題範囲と難易度

ディープラーニングに関する出題は簡単なものばかりでした。
学習率の大小によって学習の進み方がどう変わるか、ドロップアウトは何の役に立つか、正規化や正則化はどんな処理をしてどんな効果が出るか、CNN・RNNの特徴は何か、、、、せいぜいそんなところです。ディープラーニング関連の設問が最も簡単で点の稼ぎ所だったのではないでしょうか。

重回帰分析、主成分分析、SVMについて問う出題もありました。
特にSVMはカーネルトリックなどがどんな手法でどんな効果を生むのか、マージン最大化手法ですという以上に正確な知識を問われました。このあたりは推薦図書を読んだだけでは解けない問題だったので、多くの受験生が苦戦したのではないでしょうか。

人工知能の開発の歴史を問う問題も多かったです。
第1次AIブームから現代にいたるまで、どんな技術でどんな課題が解決されブームが加速し、どんな課題に直面してブームが終焉したのか。シンボルグラウンディング問題やフレーム問題、抽象化の難しさやエキスパートシステムの問題点などを問う設問が多かったです。AlexNet、GoogleNet、VGG、ResNetなどディープラーニングの進化をたどる設問もありました。これらは推薦図書にあるAI白書や松尾先生の本を読めば対応できます。

人工知能開発の世間動向を問う設問もありました。
ここが最も厄介で、シンギュラリティに対してイーロン・マスクがとっている姿勢として最も適切なものを選べとか、「そんなの知らんわ」という設問が多かったです。自動運転の開発状況や各レベルの意味、さらには法規制の整備状況も問われました。人工知能をビジネスに活用しようとする人向けの試験であるということを強く感じさせる設問です。AI白書をよく読めば書いているのですが、カンペなしにはきつい設問が続きます。ここでうっかりググって時間を使ってしまって最後までたどり着けなかった受験生も多かったのではないでしょうか?


まとめ

ディープラーニング検定というよりも人工知能検定でした。試験名は改めた方がいいでしょう。

網羅性が高く、「バズワードに踊らされることなく、こういうことをきちんと理解してほしい」という協会からの強い意志を感じる試験でした。

ディープラーニング関連は岡谷先生の本を1度読めば十分です。それ以外の設問は推薦図書を1通り読んだだけでは対応できないでしょう。2~3回繰り返して読んで歴史や経緯を辿った知識定着をさせないと合格困難な試験と思われます。