classic style

論文読んで見た系: 他-> http://gabdro.hatenablog.com/

"MULTI-AGENT COOPERATION AND THE EMERGENCE OF (NATURAL) LANGUAGE" について読んでみた.

久々の更新

論文紹介する機会があったのでついでにその論文についてブログで整理したいと思います.
紹介するのはICLR2017で発表された [1612.07182] Multi-Agent Cooperation and the Emergence of (Natural) Language です.
この研究分野は, Google DeepMindやFacebook AI Research 等多くの研究所や大学がここ数ヶ月立て続けにマルチエージェントによる記号創発?の研究成果を発表しています.

続きを読む

"Distillation as a Defense to Adversarial Perturbations against Deep Neural Networks"について読みます

はじめに

機械学習と情報セキュリティ2016 - ももいろテクノロジー の記事を読んで
Distillation as a Defense to Adversarial Perturbations against Deep Neural Networks』(https://arxiv.org/abs/1511.04508)という論文を知りました.
蒸留を取り入れたアイデアと言われ,確かに上手くいきそうとタイトルからもわかる.

ということで本論文について紹介したいと思う.解釈が間違っているかもしれないがその場合指摘していただければ幸いです. よろしくおねがいします. 

※記事における図の一部は本論文を引用しました. 

 

本論の概要

Deep Neural Networkは意図的に作られた摂動(Adversarial Perturbation)を用いて作られた画像(→Adversarial Sample/Adversarial Examples)に対して脆弱性がある.

この脆弱性を防ぐために「defensive distillation」という防御機構(→蒸留モデル)を導入した.

導入した結果,元のDNNの精度を維持しながらMNISTから作成しながら,MNISTモデルでは蒸留モデルの有無でAdversarial Sampleの生成率が95%から0.5%未満になった.CIFAR10では87.8%から5.11%になった.

詳細について

続きを読む

Adversarial Examples を試してみた

この投稿は Deep Learning Advent Calendar 2016 - Adventar 13日目の記事です.

f:id:planetaria:20161207161359p:plain

[1412.6572] Explaining and Harnessing Adversarial Examples 

 

元画像(左)パンダにテナガザル成分を混ぜ込んだ画像(右)

分類器は左の画像をパンダ 右の画像テナガザル と認識した.

右のような画像をAdversarial Exampleという.パンダのやつね

はじめに

私は学部4年のときにAdversarial Example の研究?をしていたので、その時調べたAdversarial Exampleのメモ代わりに残します.
私がAdversarial Exampleについて知ったのはkivantiumさんの資料を見ていて

画像認識に関する 機械学習技術 / kivantium さん - ニコナレ

「これ面白い」と思って,とりあえず検索したら日本語でまとめていたSotetsu Kさんのブログがヒット

Adversarial exampleについて - sotetsuk's tech blog

その後はSotetsu Kさんのブログに書いてある論文をつまみ食いしながらAdversarial Exampleについて調べた感じです.Sotetsu Kさんの記事わかりやすいです.

なんで研究題材にしたかはわからないけど多分「分類器騙せるとか面白いwww」と思ったからじゃないですかね。具体的にどういう研究してたかはまた今度.

Adversarial Example とは

 分類器を騙すための人工データと私は解釈しています。

[1312.6199] Intriguing properties of neural networks 
この論文では下記のことをAdversarial Exampleと定義している.

The second property is concerned with the stability of neural networks with respect to small perturbations to their inputs.
Consider a state-of-the-art deep neural network that generalizes well on an object recognition task.
We expect such network to be robust to small perturbations of its input, because small perturbation cannot change the object category of an image.
However, we find that applying an imperceptible non-random perturbation to a test image, it is possible to arbitrarily change the network’s prediction (see figure 5).
These perturbations are found by optimizing the input to maximize the prediction error.We term the so perturbed examples “adversarial examples”.

本来 画像において小さな摂動は元のラベルに対して影響がないと考えられていたが,分類器(ニューラルネット)は小さな摂動がある画像にもロバスト(頑健)であると言われている。だけれど対象の画像に(知覚できない)人工的に作った(意図的に作った)摂動を加えるとニューラルネットの予測を任意に変更することが可能である。これらの摂動は予測誤差を最大にするよう入力を最適化することによって見つけることができる。そして,このような画像をAdversarial Examplesと呼ぶ.

ノイズ=摂動だと思っていただければ.

ちなみにこの論文[Intriguing properties of neural networks]ではニューラルネットワーク二つの反直感的な特性について述べている.(カレンダー的にはこっちのほうが..)


実際に作ってみた

画像データセットはCIFAR-10

@仕組み

ある元画像の正しいラベルから騙したいラベルにするような摂動を画像分類器を用いて求める.

  1. input:Image X,true label T,adversarial label A,pertubation r
  2. output:pertubation table p
  3.  
  4. predict() :#入力画像に対する分類器の各ラベルの予測結果の数値をニューロン(ラベル)別に返す
  5. X ←{x_1+x_2+...x_i+x_{i+1}+...+x_n}
  6.  \psi ← predict(X)
  7.  
  8. for each pixel  x_i ∈ X
  9.     X' ←{x_1+x_2+...x_i+r+x_{i+1}+...+x_n}
  10.     \psi ' ← predict(X')
  11.     p_i ← sign((\psi_T ' - \psi_A ' )-(\psi_T - \psi_A) )
  12. end for 

pertubation table pを求めたら元画像にε倍したpした値がadversarial example

pertubation tableの導出式が多少異なるが[1412.6572] Explaining and Harnessing Adversarial Examples とほぼ同じである.  論文の手法では識別関数の騙したいラベルの出力値のみを用いて元画像の各画素ごとに微分してる.

f:id:planetaria:20161212164100p:plain

※論文ではpertubation tableのことをoptimal max-norm constrained pertubationと表記

@結果

本実験では猫の画像を飛行機と認識するようなpertubation tableを作成してどの程度のepsilonから飛行機と分類器が認識するようになったか.

f:id:planetaria:20161212184348j:plain

本実験ではepsilon=0.05で飛行機と認識するようになった.猫でない他のラベルにはepsilon=0.01から認識した.
他の画像でも試した結果 テストデータではepsilon=0.05以上であればほぼ確実に一応分類器は騙すことに成功した.
一方epsilonの値が小さいと騙せない画像もある(当然か)

パッと見,epsilon=0.02あたりまではoriginalと同じ画像に見える?

いやよーく見ると(見なくても)少し人間の目には違和感感じるけど.
originalを見なかったとしたらどこまで自然に見えるんだろう...
ちなみにあまりにも小さいepsilonだとoriginalと同じカテゴリと認識します.
画像ごとにどのepsilon値が良いのかはまだわからず法則もいまいち.

 

まとめとか思うこと

実験する時に小さい画素数のデータセットでやらずもっと大きい画素数でやるべきだったのでやります... 

また分類器などの境界面の精度を上げるためにAdversarial Examplesを用いるVirtual Adversarial Trainingとかあります[5]

作成していてAdversarial Examplesには二種類あると思った
・分類器を騙せる画像

・分類器も騙せる画像かつ人間の目も騙せる

下記の画像において上記の前者は真ん中の画像(分類器は蛙と認識)で後者は右の画像(分類器は猫と認識、人間の目には鳥に見えるよ..ね)

f:id:planetaria:20161212190429j:plain

 

私は後者のAdversarial Exmapleに対して人間の目で見て自然かどうか,画像に対して人間が違和感を覚えるかどうか,人間が見て騙せる画像に対する脅威に興味があるらしいよ.

特にまとまってないがおわり。最近 "Adversarial"多い

 

最近読んでるやつ

[1610.08401] Universal adversarial perturbations

この論文では異なる分類器を用いても画像のラベルを欺くことができる小さく普遍的,万能的な摂動の存在を提示した. まだ読み途中ですが面白そう

参考/引用/読んだ(る)

  1. Adversarial exampleについて - sotetsuk's tech blog
  2. 画像認識に関する 機械学習技術 / kivantium さん - ニコナレ
  3. [1312.6199] Intriguing properties of neural networks 
  4. [1412.6572] Explaining and Harnessing Adversarial Examples
  5. [1507.00677] Distributional Smoothing with Virtual Adversarial Training
  6. [1610.08401] Universal adversarial perturbations
  7. Breaking Linear Classifiers on ImageNet

Pythonでニコニコ動画のコメントを取得する方法

Python3用に少し書き直しました.
python3系でニコニコ動画のコメントを取得してみた. - Qiita

はじめに

本記事ではニコニコ動画のコメントを取得してみます
取得するコメントの動画は『ご注文はうさぎですか? 第1羽「ひと目で、尋常でないもふもふだと見抜いたよ」』です
自分の取得したい動画にする場合は"1397552685"の値を公式ならば数字,ユーザ動画ならsmを付けた番号に変えてください
※執筆以降,仕様が変更されていて下の通りできない場合はご了承ください

取得方法

動画のコメントを取得するには{thread_id,user_id,threadkey,force_184}が必要

まず,ニコニコ動画にログイン(ログイン済みのセッションでないと以下の情報が取得できないため)

次に以下のURL(api/getflv)にアクセスして{thread_id ,user_id},そしてメッセージ鯖のURLを取得
http://flapi.nicovideo.jp/api/getflv/1397552685

公式動画(smなし)のコメントを取得するため以下のURLにアクセスして{threadkey,force_184}を取得
http://flapi.nicovideo.jp/api/getthreadkey?thread=1397552685

メッセージサーバ{nmsg.nicovide.jp/api}に以下xmlをPOSTする

<thread thread="1397552685" version="20090904" res_from="-100" user_id="ユーザID" threadkey="スレッドキー" force_184="1"/>

コメントは現在から最大1000件遡って取得することができる

画像は取得例
f:id:planetaria:20161116130445p:plain

コード

解析するのに1000件って少なくない?

どうやら過去ログを取得することもできるらしいのでやってみたいと思います
こちらはプレミアム会員限定?
xmlに{when , waybackkey}を加えれば良い

以下のURLにアクセスして{waybackkey}を取得
http://flapi.nicovideo.jp/api/getwaybackkey?thread=1397552685

whenは取得したい日時をUNIX秒で指定

<thread thread="1397552685" version="20090904" res_from="1000" user_id="ユーザID" threadkey="スレッドキー" force_184="1" when="1429066800" waybackkey="" />

指定時刻から1000コメントではなく,指定時刻から遡って最大1000コメント?取得っぽい
またthreadkey , waybackkeyは一定時刻で更新される(前のやつが使えなくなる?)

取得したxmlの"no"がコメント番号なので,ここを指定して1000コメずつ取得できないかな..
(TwitterのツイートID指定みたいに)

まとめ

探してみたけど公式が動画のコメントに関するAPIの情報を提供しているのかよくわからない

ニコニコ動画のコメント解析をするならば公式が提供しているデータセットを使う方が良い
▶︎情報学研究データリポジトリ ニコニコデータセット
ただし2012年11月初旬までに投稿された動画のデータだけなのでそれ以降の動画のコメントに対する解析には向かない

大変参考になった記事一覧