[改良版]KerasでVAT(Virtual Adversarial Training)を使ってMNISTをやってみる

はじめに

遅まきながら、VAT(Virtual Adversarial Training)という学習方法を知ったのですが、Kerasでの実装が見つからなかったので実装してみました。

VATは簡単にいうと、「通常の入力X→出力Y」と「なるべく結果が異なるように入力Xに微小なノイズdを入力に加えた入力(X+d)→出力Y’」から「KL-Divergence(Y, Y’)」を損失関数に余分に加えて学習をする手法です。

これだけだと何言ってるかわからないと思うので、詳しくは元の論文か、この方の解説をご覧になると良いかと思います。

VATは学習における位置づけとしては「正則化」に近いという話で、DropoutやNoiseを加える代わりになる可能性があります。Dropoutとかのパラメータを調整するのも面倒なので、VATで代用できると嬉しい気がします。

Kerasだとコスト関数や正則化関数に入力Xを使うようにするのが少し厄介なのですが、そこさえなんとかなれば、ChainerやTheanoでの実装があるので移植すればOKです。

先日、KerasでVAT(Virtual Adversarial Training)を使ってMNISTをやってみるを投稿したのですが、もう少しマシっぽい実装ができたので共有します。

Version

  • Python: 3.5.3
  • Keras: 1.2.2
  • Theano: 0.8.2

実装

前回からの違いは、

  • 損失関数をカスタマイズするのではなく、Model.losses に VATのLossを付けるようにし、学習時に妙な変換をしなくてよくした(これが大きい違い)
  • 通常の予測値に K.stop_gradient() を付けており、VAT計算から発生する余分な(?)差分の伝播を止めた(ということになると思う)(あまり結果は変わらないけど…)

というところです。
続きを読む

KerasでBEGAN(Boundary Equilibrium Generative Adversarial Networks)を実装する

はじめに

GAN(Generative Adversarial Networks: 敵対的生成ネットワーク)という生成モデルの中でも面白い構造の仕組みを最近よく見かけます。Generator(生成者)とDiscriminator(識別者)が互いに競い合って精度を上げていく構造は、美術界での贋作者(=Generator)と鑑定士(Discriminator)の勝負のようでギャラリーフェイクのような世界を彷彿とさせます。仕組み自体に浪漫を感じます。さらにそれで精度良い生成ができるのだから本当に不思議です。

ただ、GANは学習が難しいというのが課題だったようなのですが、この BEGAN というのは二者の対立のバランスを取りながら学習することでこの課題を解決するとのこと。BEGANは結構内容がシンプルで理解しやすかったので、Kerasで実装してみました。 続きを読む

マーケターだけでなく経営者にも届けたい!「いちばんやさしいコンバージョン最適化の教本」が目指したこと

「いちばんやさしいコンバージョン最適化の教本」が発売されて早1ヶ月。紀伊国屋書店新宿店でビジネス書ランキング3位に輝くなど、売れ行きも好調です。著者の深田浩嗣に本書についての思いを聞いてみました。

Amazonで購入

一緒に頑張ろう!と著者の深田浩嗣
一緒に頑張ろう!と著者の深田浩嗣

続きを読む

Sprocket新年会を開催しました

2017年1月13日に、日頃お世話になっているパートナー様をご招待し、「Sprocketパートナー新年会」を開催しました。Sprocketの導入企業様は、昨年比で5倍に増えていますが、急成長はパートナー企業様があってこそ。日頃の感謝をお伝えするとともに、今後のSprocketの戦略や現在の活動などを紹介しました。

たくさんの方にご来場いただきました
たくさんの方にご来場いただきました

続きを読む

目指すは世界!Sprocket×人工知能でマーケティングの常識を変える

Sprocketにデータサイエンティストとして入社した森下健。深田とは同世代で大学院時代の同期でもある。今回は、2人の対談を通して、ウェブ接客ツールSprocket(スプロケット)が人工知能、機械学習の要素を取り入れて、どのように進化するのか、今後の展望について探っていく。

機械学習ならプログラマーの設計を超えるアウトプットがある

深田:先日のインタビューで賢いコンピュータについての興味があるという話がありましたが、どういうきかっけがあって興味を持ったんですか?

森下:子どものときに、テーブルトークRPGのゲームマスターに憧れがありました。テーブルトークRPGというのは、コンピュータを使わず、紙とペン、ルールブックでストーリーを進めるRPGで、ゲームマスターはそのゲームの進行やルールを決める人。ゲームがおもしろくなるかどうかは、ゲームマスターの腕次第というわけです。このゲームマスターをコンピュータで作れないか、そういう思いがありましたね。

深田:子どもの頃からコンピュータに興味があったんですか?

森下:小学1−2年生のとき、Basicのプログラミングができる小さいコンピュータが家にあって、ちょっとしたコードを書けたんですよね。自分の思った通りに作れるのがおもしろくて、それが最初のきっかけかもしれないです。

深田:機械学習に興味を持ったのはいつですか?

森下:初めて機械学習という言葉を聞いたのは、大学院にいた2000年ごろ。プログラムは、プログラマーが設計した通りの動きをするもので、言われた以上のことをやる道具ではありません。しかし、機械学習は、機械がプログラムされていないことを自分で学習していく。そこに興味を持ちましたね。

深田:機械学習に取り組み始めたのは?

続きを読む