Deep Learningと音声認識

preferred

2015-07-16 13:00:10

西鳥羽です。こんにちは。

本日セミナーで「Deep Learningと音声認識」という内容で(ustreamで公開されているけども)社内セミナーで紹介させて頂きました。タイトルは前回の「Deep Learningと自然言語処理」に被せてます。

Broadcast live streaming video on Ustream

こちらがその資料になります。尚、セミナーでは「話し言葉コーパス」とすべきところを「書き言葉コーパス」としてしまっていました。資料では訂正してあります。

また、個々の参照は以下の通りです。

CTC関数に関しては以下が詳しいです。Chainerで実装してますがちゃんと動くようになったら公開したいですね。

分散深層強化学習でロボット制御

mattya

2015-06-10 16:50:33

新入社員の松元です。はじめまして。

“分散深層強化学習”の技術デモを作成し、公開いたしました。ロボットカーが0から動作を学習していきます!
まずはこの動画を御覧ください。

以下で、動画の見どころと、使っている技術を紹介します。

動画の見どころ

Screen Shot 2015-06-10 at 1.09.41 PM
Car 0(○の付いている車)が右折カーブの手前で減速する様子(右画面の白いバーのところが、ブレーキのところで赤くなっている。ニューラルネットはブレーキが最も多く報酬が得られると推測していることがわかる)。速い速度ほど報酬は大きいが、カーブを曲がりきれず壁にぶつかってしまうので学習が進むとカーブ手前でのみ減速するようになる。

Screen Shot 2015-06-10 at 1.18.49 PM
目の前に車がいるときは一時停止して、いなくなってから加速する。
エチオピアには本当にこのような交差点があるらしい。

Screen Shot 2015-06-10 at 1.22.24 PM
ぎりぎりですれ違う2台。学習途中ではすれ違いきれずにぶつかって倒れてしまうこともある(早送りシーン中に人が写っているのは、倒れたり詰んだりするたびに起こしていたためです)。

この動画で使われている技術について少し解説をしたいと思います。

強化学習

このデモにおけるロボットは、強化学習という手法で学習しました。
よくあるロボットの制御では、ある状況でどの行動をとるべきかのルールを人間が作り、そのルールに従って制御を行ったり、ロボットの取るべき軌道を予め人間が設計しておいて、その目標とのズレが最小になるように制御を行います。しかし、あらゆるシチュエーションに対してとるべき行動を設計するのはとても大変です。それに、臨機応変に軌道を変更することができません。
そこで、強化学習では、目標とするロボットの最適な動きを正解として与える代わりに、ロボットの各行動に対して報酬を与えます。今回の課題では、道にそって速い速度で進んだときにプラスの報酬を、壁や他の車にぶつかったり、道を逆走したときにマイナスの報酬(罰)を与えています。
ロボットはどのように行動するとどれくらいの報酬が得られそうかを学習していき、最も多くの報酬が得られそうな行動を選択することで、結果的に最適な行動をとることができるという仕組みです。これによって、「障害物が何mの位置に来たら、ハンドルを何度に回す」みたいなルールを人間が設計しなくても、自然とそのような行動を獲得してくれるわけです。

センサー

ロボットはセンサーを使って自分の今の状態を認識します。
Screen Shot 2015-06-10 at 10.45.28 AM
このデモでは、車は周囲32方向に仮想的なセンサビームを飛ばしていて、壁、他車、道路の中心線までの距離と角度を取得しています(図のcar 0が出している黄色い線がビームを表している。正確には遠距離センサ16本と近距離センサ16本に分かれている)。現実の自動運転車に搭載されているレーザー距離センサーをイメージしています。
そのセンサ情報に現在速度とハンドル位置、直近3ステップの自車の行動を加えて、合わせて273個の数を入力として受け取ります。右上のグラフにそれが可視化されていますが、車はこの情報だけから、今どの行動(アクセル、ブレーキ、左右ハンドル、バック)を取るべきかを決定しなければなりません。このような多様かつ多数のセンサ情報をうまく統合して適切な判断を行う問題はセンサフュージョンと呼ばれていて、これからのスマートデバイスや機械制御などに必須となる技術と考えられています。

ちなみに、学習開始時点では、ロボットはどのセンサ入力が何の入力を表しているのか、どの行動がどういう結果をもたらすのかを全く分かっていない状態から始まります。人間は「壁との距離」とか「アクセル」とか言われればその意味を理解できますが、ロボットは、まずはそこから学んでいかないといけないというハードな問題設定です。

Q-learning

強化学習には様々なアルゴリズムがありますが、今回はQ-learning + ε-greedyというベーシックな手法を使いました。
Q-learningでは、ある状態sである行動aをとったときに、将来にわたってどのくらいの報酬が得られそうかを表す関数Q(s, a)を学習します。
もし、Qが完全にわかっていたなら、状態sで取るべき行動は次のようにして決定できます。
行動の候補a1, a2, …があったとして、Q(s, a1), Q(s, a2), …を求め、最もQが大きくなったaを選ぶ。
Q関数は将来に渡る報酬の期待値をあらわすので、その行動が最も多くの報酬を生むことになります。

しかし、学習の開始時点では、Q関数は全くわかっていません。そのような状況では、Qが最大になるaを選んだとしても、それが最適な行動である保証は全くありません。Q関数を学習するためには、いろいろなシチュエーションを体験して、ある行動がどのくらいの報酬に結びつくのかを学ぶ必要があります。そのために、最初はランダムに動いて経験を貯めます。ある程度学習が進むと、(学習中の)Q関数が最大になるような行動が、そこそこ良い行動を表すようになっていきます。
そこで、ある割合εでランダムな行動を、1-εでQが最大になるような行動を選択します。これをε-greedy法といいます。「基本的には現在把握している最善の行動をとって、ときどき違うことも試してみる」というイメージです。

Deep Reinforcement Learning

Q-learningは古くから使われている手法ですが、昔は小さいサイズの問題にしか適用できていませんでした。例えばロボットが直面する状態が100通りしかなくて、行動も5通りしかないとしたら、Q関数は、100*5の表を埋めていくことで学習できます。Q(s, a)は表のs行a列目になるわけです。
ここで、状態1番のときに行動3番をとったら、10点の報酬がもらえて、状態が20番に移ったとしましょう。このとき、Q(1, 3) (状態1で行動3をとったときに将来得られそうな報酬の期待値)は、10 + max{ Q(20, a) }と考えることができます。10は今得られた報酬で、max{ Q(20, a) }は次の状態20のときに、現在わかっている最善の行動をとったときに得られる将来の報酬期待値になります。そこで、Q関数をあらわす表の1行3列目の値を10 + max{ Q(20, a) }に近づけます。この操作を繰り返すことで、この表は次第に正しいQ(s, a)に近づいていきます。

さて、今回のロボットは273成分の入力を受け取ります。これがロボットの認識する状態になるわけですが、各センサの値が0か1だとしても、2^273 ~ 10の82乗もの状態数になります。Q関数を表で表すならこれだけの数の行数が必要になりますが、とても不可能です。

そこで、表を使う代わりに、状態sを与えたら各aに対するQ(s, a)を出力するようなニューラルネットワークを使います。近年のDeep Learning(深層学習)技術の発展により、画像データのような数万成分の入力から、数千成分の出力を出すような巨大なニューラルネットが学習可能になりました。強化学習分野にDeep Learningを適用して有名になったのが、DeepMind社の発表したAtariのゲームをプレイする”DQN”(Deep Q-Network)です。
参考:昨夏のインターンでDQNの再現と改良に取り組んだ。
http://www.ustream.tv/recorded/53153399

今回の問題では273成分から5成分への7層(273-600-400-200-100-50-5)のニューラルネットを用いました。図の左下の白と赤のバーが、ニューラルネットの出力したQ(s, a)になります。

Screen Shot 2015-06-10 at 12.57.37 PM

学習には、もちろん、昨日発表したあの、Chainerが使われています!!!Chainerサイコー!!

ニューラルネットが入力をどのように変換していくのかを解析することは容易でないですが、出現しない状態を見ないようにしたり、よく似た状態をひとまとめにするなどして効率的に情報処理を行っていると考えられます。この性質により、見たことがない状態に直面しても、そこそこ適切な答えを返すことが出来るという力(汎化能力)を持ちます。
動画中で突然現れた障害物にも対応できているのは、この能力のおかげと言えます。
Screen Shot 2015-06-10 at 1.29.09 PM
四角い小さな障害物がランダムに存在していた環境で学習したら、丸い大きな障害物が突然現れる環境にも汎化して適応することが出来る。

Deep Learning のフレームワーク Chainer を公開しました

beam2d
リサーチャー

2015-06-09 15:09:35

こんにちは、得居です。最近は毎晩イカになって戦場を駆けまわっています。

本日、Deep Learning の新しいフレームワークである Chainer を公開しました。

Chainer 公式サイト
GitHub – pfnet/chainer
Chainer Documentation

Chainer は、ニューラルネットを誤差逆伝播法で学習するためのフレームワークです。以下のような特徴を持っています。

  • Python のライブラリとして提供(要 Python 2.7+)
  • あらゆるニューラルネットの構造に柔軟に対応
  • 動的な計算グラフ構築による直感的なコード
  • GPU をサポートし、複数 GPU をつかった学習も直感的に記述可能

ニューラルネットをどのように書けるか

次のコードは多層パーセプトロンの勾配を計算する例です。

from chainer import FunctionSet, Variable
import chainer.functions as F

# 多層パーセプトロンの定義
model = FunctionSet(l1=F.Linear( 784, 1000),
                    l2=F.Linear(1000, 1000),
                    l3=F.Linear(1000, 10))
def forward(x_data, y_data):
    x, t = Variable(x_data), Variable(y_data)
    h1 = F.relu(model.l1(x))
    h2 = F.relu(model.l2(h1))
    y  = model.l3(h2)
    return F.softmax_cross_entropy(y, t)

# 勾配計算
x_data, y_data = ...            # ミニバッチを初期化
loss = forward(x_data, y_data)  # 順伝播
loss.backward()                 # 逆伝播

ここで x_datay_data はともに NumPy または PyCUDA の配列です。順伝播の処理をそのまま書けば、あとは最終的な結果に対して backward 関数を実行することで、それまでに行った処理と逆順で誤差逆伝播が実行されます。この例はもっとも単純な例なので現れませんでしたが、順伝播の処理には分岐やループなど Python の制御構造を自由に含めることができます。

なぜ今新しいフレームワーク?

Deep Learning のフレームワークとしては Caffe, Theano/Pylearn2, Torch7 の 3 つが人気です。これらはフィードフォワードなネットワークを書くことが基本的な目標として開発されています。ですが、最近では Deep Learning の進展に伴い、より複雑なネットワークを柔軟に書けることの必要性が高まっています。そこで、この中でも特に自由度が高い Theano をベースに、新しいフレームワークがたくさん模索されています(例:Blocks, Keras, Lasagne, deepy など)。

これらのフレームワークを含め、既存の実装のほとんどは、一度ニューラルネット全体の構造をメモリ上に展開して、その処理を順に見てその通りに順伝播・逆伝播を実行するというアプローチを取っています。これは、独自のミニ言語に対するインタープリタを実装しているようなものです。例えば Caffe ならば Protocol Buffer で定義されたスキーマがミニ言語に対応します。Torch7 の場合には、コンテナと呼ばれる特殊なモジュールが制御構造の役割を果たします。Theano はより柔軟な定義が可能ですが、ループを書くために scan と呼ばれる特殊な機能を使います。このアプローチにおいて、より複雑な計算フローをサポートしようと思ったら、基本的にはこのミニ言語を拡充していく必要があり、学習コストや記述コストは高くなっていきます。基本的には今後、ニューラルネットの構造はさらに複雑化していくことを考えると、この展開は好ましくありません。

Chainer はこれとは異なるアプローチを取ります。Python をベースとしていますが、Theano は使いません。制御構造はすべて Python のものがそのままつかえます。Chainer は、実際に Python のコードを用いて入力配列に何の処理が適用されたかだけを記憶しておき、それを誤差逆伝播の実行に使います。このアプローチは、複雑化していく Deep Learning の研究・開発速度を保つために必要だと考えており、私たちが新しいフレームワークの開発に乗り出した理由です。

使い方

ドキュメントも同時に公開しました。チュートリアルとリファレンスを提供しています。チュートリアルでは、基本的な多層パーセプトロンの書き方から、リカレントネットの書き方、GPGPU の利用法などを紹介しています。今のところドキュメントはすべて英語のみとなっていますが、要望が大きければ日本語への翻訳も検討します。

また、公式リポジトリ内の examples ディレクトリの中にサンプルがいくつか入っています。こちらは、実際にデータの読み込みから学習までを Chainer で書く方法を知るのに適しています。

質問やバグ報告

Chainer はまだ公開されたばかりのフレームワークで、機能面ではまだまだ足りない部分もあります。PFI/PFN の Chainer 開発チームでは、これから継続的に開発を行い、定期的に新しいバージョンをリリースしていく予定です。プルリクエストも受け付けます(今のところ Contribution Guide のような文書はありませんが、今後用意する予定です)。

使用法やバグについての報告も随時受け付けます。使用法の質問については、Google Groupsを開設しましたので、こちらに投稿してください。また、バグの報告や修正については、GitHub の Issue やプルリクエストを登録していただければと思います。GitHub のアカウントをお持ちでない場合は、Google Groups へ投稿していただいても構いませんし、Twitter アカウント (@ChainerOfficial)にメンションを送って頂いても対応可能です。

オンライン機械学習(機械学習プロフェッショナルシリーズ第1期)発売のお知らせ

preferred

2015-04-06 19:01:44

お久しぶりです。徳永です。

講談社からオンライン機械学習というタイトルの本が出版されます。著者はPreferred Infrastructure/Preferred Networksの海野, 岡野原, 得居, 徳永の4人です。

続きを読む »

NIPS2014読み会を開催しました

大野 健太
エンジニア

2015-01-23 19:33:15

大野です。
先日2015年1月20日に、NIPS2014読み会を開催しました。

当日に関する情報はこちらをご覧ください:connpass, togetter
当日の発表タイトルとインターネット上で入手可能な資料は記事の最後に掲載します(connpassからも入手可能です)。

昨年と同時期、同場所での開催にも関わらず、前回の1.5倍以上の方に参加いただきました。また、正確な統計はありませんが、機械学習に限らず様々なバックグラウンド方がいらっしゃったようです。ビジネス系メディアで特集で組まれるなど、機械学習・人工知能への注目度が高まっておりますが、それと並行して機械学習を専門に研究されている方や、最先端の機械学習研究に関心を持つ方の層が広がっているのではないかと思います。このような勉強会で交流が増えて分野の発展につながれば、今回の勉強会を開催したかいがあったと考えています。

改めまして、発表者の皆様、参加者の皆様、そして会場をご提供いただいた東京大学の武田先生・中川先生にお礼を申し上げます。

会議に関する所感

会議全体を見ると、最適化の理論解析もあれば特定の業界への実応用もあり、また特定のトピックについて基礎から応用まで垂直に扱われているワークショップがいくつも開催されました。参加人数からみても、KDDなど他の機械学習・データマイニング系の研究集会と同様に、NIPSもここ数年の規模の拡大が顕著なようです。
個別のトピックで言えば、Deep Learning/Deep Neural Networkが依然として関心を集めているようです。DLを主題としたワークショップが少なくとも2件あり、主題ではなくても、DLに関連と予想される発表が多くのワークショップで散見します。今回の読み会でも7件中2件(山本さん、得居さん)がDL関連でした。
大岩さんに発表していただきましたが、今回のNIPSではのレビュープロセスについての実験的な企画が行われました。同じ投稿論文を独立した2グループ両方に査読してもらいその相関を調べたもので、1つ目のグループでAcceptされた論文のうち57%が2つ目のグループではRejectされたという結果が話題になりました。例えば「NIPS review experiment」などで検索すると、より詳細にこれらを論じた記事がいくつも見つかり、レビュープロセスに関しては多くの方が問題意識や関心を持っているのだと感じました。

読み会発表タイトル一覧

  • 山本浩司さん , Learning Generative Models with Visual Attention : Proceeding arXiv
  • 大岩秀和さん,  Partition-wise Linear Models : Proceeding arXiv
  • 楠本充さん,  Advances in Learning Bayesian Networks of Bounded Treewidth : Proceeding arXiv
  • Quasi_quant2010さん,  Analysis of Learning from Positive and Unlabeled Data : Proceeding
  • 得居誠也さん , Semi-supervised Learning with Deep Generative Models : Proceeding arXiv
  • 加藤公一さん , A Safe Screening Rule for Sparse Logistic Regression : Proceeding arXiv
  • 関喜史さん , Content-based recommendations with Poisson factorization Proceeding

 

発表資料

続きを読む »

Deep Learningと自然言語処理

preferred

2014-12-26 11:22:09

クリスマスイブの夜は男三人しかいないオフィスで関数型言語の素晴らしさについて語っていた西鳥羽です。こんにちは。

昨日のPFIセミナーで「Deep Learningと自然言語処理」というタイトルで発表させていただきました。以下がその時の資料です。


この辺りに興味を持たれた方は今度の1月20日に「NIPS 2014 読み会」http://connpass.com/event/10568/ もどうぞ。残り枠数少ないので申し込みはお早めに。

続きを読む »

EMNLP2014読み会を開催しました

海野 裕也
リサーチャー

2014-11-25 13:04:44

海野です。
先週末の11/22(土)に、PFIオフィスにてEMNLP2014読み会を開催しました。7月に行ったACL2014読み会の続編です。EMNLPとは、自然言語処理の国際会議で最もメジャーとされるものの1つで、10月に今年の会議が開催されたので、気になる論文をみんなで紹介しました。

続きを読む »

PyData Tokyo Meetup #1でCaffeとmafについて発表しました

大野 健太
エンジニア

2014-11-07 12:04:37

10月30日のPyData Tokyo MeetUp #1にて「Caffeとmafを用いたディープラーニング開発・実験方法」というタイトルで発表を行いました。

当日の発表に関する情報はconnpassにまとめられています(私以外の発表の資料へのリンクや当日のUstreamでの配信へのリンクもあります)。また、当日までのtwitterの反応はtogetterにもまとめられています。

 

発表資料はSlideShareで公開しています(当日きちんと答えられなかった質問の回答を資料の最後に追記しました)。

Development and Experiment of Deep Learning with Caffe and maf from Kenta Oono

 

今回はディープラーニングライブラリの中でも特に開発が活発に行われているCaffeと、PFI/PFNで開発している実験ビルドツールのmafをそれぞれ紹介しました。発起人の柴田さんから、Caffeを用いて自分で何か作れるようになるとうれしい人が集まっていると事前に聞いておりましたので、デモを通じてmafとCaffeを用いて実験を行う具体的な方法の紹介を意識したつもりです。

勉強会主催の方々が標榜しているようにとても濃い勉強会でした。勉強会の立ち上げ会での発表で恐れ多かったですが、多くの方に興味を持っていただきました。発表の機会をくださった発起人の皆様、発表を聞いてくださった方々に改めてお礼を申し上げます。今後も微力ながら活動を応援をさせていただければと考えております。

技術と時機

岡野原 大輔

2014-10-21 09:55:34

2000年前後、クラウドという言葉が立ち上がった時、クラウドビジネスを立ち上げた企業の多くは失敗しました。
(例:opsware 彼らはその後システム運用ツール提供で生き残ることができました)。
クラウドという言葉はそれ以降あまり聞くことはなくなりました。2006年GoogleのErick Schmidtがクラウドという言葉を再登場させ、AmazonがAWSを提供開始します。それ移行クラウドは爆発的に普及し、ITの戦場は全てクラウドに移行しつつあります。
(IBMですら、半導体部門を売却しクラウドに移行できるかに社運をかけています link
自社運用やDC運用をしている企業もまだ多く存在しますが、パブリック・クラウドを利用している企業の競争力は増すため、今後10年ぐらいを考えるとパプリッククラウドの影響力はさらに増していくと考えられます。

IoTという言葉も1999年から存在します。私自身も何回かIoTパネルディスカッションに参加したことがありますが、皆、口を揃えて、概念は分かるが、まだ時期尚早だし、そもそもどのように儲けるのか分からないと話していました。私もその一人でした。弊社の西川も今年の講演会でIoTに注力するといった時、いまさらIoTか?と言われたといいます。
しかし今年に入りIntel, Cisco, Google, Apple, MicrosoftらITの巨人たちが急速にIoTに舵を変えてきています。この波はスマホの時と同様のものになるかもしれません。

私自身も過去に何度か「時機」というものを痛く経験しました。

2010年にPFIは電通とXappyというサービスを始めました。ウェブをザッピングして視聴するというサービスであり最適なニュースやウェブを見つけ出しすというサービスです。その当時はiphoneが普及し始め、ipadが出始めた頃で、今がタイミングだろうとサービスをローンチしました。Xappyはウェブ先読みをしたり、ニュースのコンテンツやユーザーの視聴行動を解析し(機械学習も使って)ユーザーに配信するというサービスでした。
コアなユーザーはそこそこいたが一般に普及することはなくサービスは離陸しませんでした。スマホが爆発的に普及したのはその1年後でした。一方で今のSmartNews, Gunosyはここしかないというタイミングで離陸し爆発しました。それより前、後に出たサービスはこの二社に追いつくには相当な努力が必要だと思われます(SmartNewsの浜本さんはその頃crowsnestを提供し、その後スマホ向け&マスに情報提供すべきだということでsmartnewsに舵を切ります)

ニューラルネットという技術は1960年頃からありました。しかし機械学習の世界はSVMやCRFといった”実用的”な技術が中心となりニューラルネットはどちらかというと素人が触れてはいけない技術でした。
しかし、2006年以降の深層学習の波は、機械学習の考え方をほぼ変えてしまいました。マルチタスク、マルチモーダル、スケーラビリティ、様々な部分で深層学習は既存の手法を凌駕しています。
そしてその波に乗った人たちは他の人達が追いつけないところまで進んでいます。

数年前、モバイルサービスで非常に好調な企業の方と話す機会がありました。その当時はガラケーが主流で、「スマホ対応しないんですか」と聞くと「そうだと思うんですが、今の殆どのユーザーがガラケーなので、ガラケーに注力しています。スマホのユーザーが増えてきてから考えます」と話していました。その企業はスマホの波に乗り遅れ、苦戦を強いられ続けています。

====

「私達もあの技術を持っていた。技術では負けていない」
「彼らは運がよかったんだ」
「そうだとは思うんだが、今の顧客に聞くと○○なので、、」
「私達もxxを始めました」

タイミングが早すぎたか遅すぎたかどうかを見極めるのは専門家ですら困難です。しかし十分確度が高い情報を集めている間に勝負が始まることがあります。
一方で気づかないうちに勝負が始まっていることがあります。例えばAWSは、実際にビジネスを始める前に彼ら自身でAWSインフラを利用しクラウドサービスを洗練させていました。市場に投入した後、他のプレイヤーも追従したが追いつくことはできていません。また、突然成功した技術もよくよく聞いてみるとその数年前から試行錯誤していることが分かります。

まとめ

(1)時機を見極めるのは専門家でも難しい。しかし勝負をしないと舞台に上がることすらできない。

(2)成功してからの後追いは自分でゲームを変えられるぐらいでないと難しい。しかも成功している方は
100倍ぐらいの差はあっという間につけることはできる

(3)成功する時機のスイートスポットは半年〜1年である。それより前より後でも成功することは難しい

(4)一方で準備は数年前からはじめていなければならない

100倍で考える

岡野原 大輔

2014-10-06 15:21:11

私が最近強く印象に残った言葉が10倍で物事を考えるです[wired]。
これが私の記憶の中で拡大解釈され、今は100倍で物事を考えるようになっています。

「100倍」というのは一見すると不可能なことの例えのように思えますが、決してそんなことはありません。

どの程度現実的か例をあげて考えてみましょう。

DWH(DBと考えても良いです)という分野を考えてみます*1。

*1 この分野は専門家ではないのであくまで外から見ている素人の意見です。

2014年10月現在 Google BigQueryは1GBの保存に月あたり 約3円、クエリ時1TBスキャンあたり500円という価格設定です。基本的なDBの操作は全部できて、その上でユーザーが自由に関数を定義できて、画面とつながって結果が数十秒で返ってきてです。これはこの分野を知る人にとっては衝撃的な価格です。

1昔前、DWHの世界では製品が数千万から数億円という範囲で売られていました。別に価格を不当に高く設定しているわけではなく、提供するためにそれだけのコスト(研究開発費、ソフトウェア開発費、サポート費など・・)をかけているため、このような高価格にベンダーは設定し、また他にできる製品もないためこの値段設定でもどんどん売れていました。

その後、Hadoopをはじめとして様々なOSSやそれを元にしたサービスが登場し、DWHの価格は急速に下がっていきます。Amazon Redshift(名前からして、高価格な赤色の製品を意識していると思います)がでてきた時、これはすごいのがでてきたと思った記憶があります。しかし現在のGoogle BigQueryはそんなRedshiftさえ一昔のものと思わせてしまうような機能、価格、先見性(配列を自然に扱えたり、許可さえあれば違うユーザーのテーブルとJoinできたりするなど)があります。

このDWHという世界では10年ぐらいのスパンでみれば1万倍以上の価格性能比の改善がみられました。おそらく今後もAmazonとGoogleの巨人たちが競争する限りコストは下がり機能は向上し続けるとみられます(囲い込むため殆ど無料に近いところまでいくのではないかとも思います。)

では、なぜ100倍のようなスケールでの変化が可能なのかを考えてみましょう。

ビジョナリー・カンパニー2という本で弾み車の例がでてきます。
弾み車は一度回し始めると惰性である程度は回るような車です。なので小さな力を同じ方向に与え続けると時間はかかりますが巨大で重い弾み車であっても高速に回すことができます。
企業や製品の中でも全く同じことが言えます。同じ方向に小さくても力を継続的に与え続けることで、外からみるといつの間にか革新的な変化が起きているように見えるのです。100倍という差も小さな変化の積み重ねで達成されるのです。

それでは、具体的にどのくらいの改善を積み重ねられれば100倍を達成できるかを定量的に見積もってみましょう。目標としている性能を1日あたり1%向上できるとします。1日目には1.01倍、2日目には1.01 * 1.01 = 1.0201倍です。1%を加えるのではなく、掛けるところに注意してください。

このペースで100倍の性能向上を達成するにはどれだけの時間が必要になるでしょうか。これは私自身計算して驚いたのですが、たったの460日です。週5日でやったとして約2年です。毎日1%改善すれば、2年後には100倍の差になって現れます。(この別な説明として収穫加速もありますが、ややこしくなるのでこれはまた別の機会に)

方向を明確に定めてそこに集中して弾み車を回し続けることで加速的に改善することで100倍のスケールで改善することができます。ここにコツコツ努力を積み重ねる大切さがあります。

この事実を受け入れたとして、いくつかの話題を考えてみましょう。

(1) 人、組織について

まずは改善し続ける人、組織とそうではない人、組織との差についてです。改善がもし達成できるのであれば最初のパフォーマンスというのはそれほど重要ではなく、改善し続けられるのかが重要なように思えます。改善できる場合、そのような人、組織は指数的に改善していきます。

(2) 改善と結果の関係

改善するといっても、方向が間違っているといくら改善しても役に立たないものができます。
これが特に難しいのは、最初は改善が顧客の満足度に直結していたのが、ある時点から改善が顧客にとって改善が許容できる誤差になってしまう点です。いわゆるイノベーションのジレンマの根っこもここにあります。

改善による差別化ができなくなると、改善を必要としない(例えば研究開発部門を持たない)企業が低コストで真似できるようになり、いわゆるコモディティ化が起きます。その結果、差別化が価格面でしかできなくなり利益が急速に悪化します。このような現象は過去より繰り返されてきました。昔は繊維、今は家電、PC、そして直近ではスマホなどでしょうか。

基本的に「大きくなるだけ」しか差別化できなくなるようになったら、その分野はコモディティ化しはじめていると思います。

(3) スケールメリット

この話は少し長くなります。

0から1を生み出す発明とは違って、改善の場合は(人的)資源を投入すれば達成できる場合が多く、いわゆるスケールメリットが効くという特徴がみられます。

国内だけや特定の業種向けの製品・サービスが最初は成功していたのが、(参入障壁が無い限り)時間をかけてみれば必ず巨大な資源を持つ企業がやってきて、最初は見劣るいけていない製品をスピード重視で出して宣戦布告をし、これならまだ気にする必要はないと思っているうちに、ものすごい勢いで改善を繰り返しあっという間に追い抜いて駆逐されるというのを見てきました

そのため、中小企業は(大企業からは魅力的にはみえない)ニッチな市場を狙っていない限り、生き残ることができません。

具体例を出してみましょう。

1990年代後半から2000年代はじめにかけてMicrosoftはPCの世界の覇権を握っていました。新しい市場が生まれ、そこで生まれ育った企業がでてきて次のMicrosoftになるのではと期待されるたびに、ものすごい速さでMicrosoftはそこに資源を投入し(ある場合は有力企業を買収した上でそれを起点とし)、中小企業では太刀打ちできない改善スピードを持ってしてそうした脅威を早いうちに叩いていきました。
このへんの話は例えばNetscapeがどのようにMicrosoftに徹底的に壊滅させられたかはその当時のNetscapeの中心人物だったHorowitzのにその時の様子が載っています。また、Internetの可能性に気づいたゲイツがいかに素早く対策をとったかについても現在は広く知られています。
実際2000年前半の頃までは、Microsoftにかなう企業はもうでてこないだろうと思われました。それほどMicrosoftは巨大でありかつ俊敏であったのです。

しかし、1998年にGoogleが誕生しMicrosoftからは(その当時は)魅力的ではないウェブ検索という分野で成長し始めます。GoogleにはMicrosoftに叩き潰されて来た人たちが多くいたので、どのようにしたら勝てるのかを考え抜いていました。Googleは検索連動型広告、コンテンツ連動型広告が莫大な収益をあげることをIPOするまで隠し続け、その間に自社の基盤や組織を育てあげ、想定されるMicrosoftからの強烈な攻撃を跳ね返すことができるほどまで成長することができました。

その後どうなったかについてはみなさんご存知の通りです。
一方でGoogle自身もその後FacebookにSNS、AmazonにCloudの分野では資源を投資しても追いつかない状況まで許しています。当時Google CEOだったシュミットは、なぜ対策を打てなかったのかを「忙しかったから」と答えています。実際大企業で巨大なビジネスを動かしながら、新しい芽に目をくばることは想像以上に難しいことだとは思います。

このようにスケールメリットが成立する世界で勝つには、成長する市場の中で大企業が気づかないうちに育ち、後で大企業が資本を投下して猛攻してきても追いつかないようにぶっちぎらなければなりません。

ぶっちぎることができなければ、ある程度大きくなってもその後全てとられてしまいます。ほどほどで生きるということができないwinner-take-allの世界です。

今は、Google, Amazon, Appleの巨人達が世界をつぶさに見張っています。しかし、歴史は一時期の覇者は次の覇者になることはできないことが多いことを示唆しています。大型コンピュータ、ミニコン、PC、スマホ(クラウド)へ。そのたびにプレイヤーは変わってきます。チャンスが無いわけではありません。彼らに勝つには彼らに気付かれないように次の市場でぶっちぎる必要があります。

(そして私達はPreferred Networksという会社をこっそり作りました。)

=======

この変化が激しい世界では10%の改善ではなく10倍、できれば100倍の改善を目指し、そして100倍になった世界はどのようになるのかを想像することがとても大切です。今のデータセンターがチップ一つに収まるとしたらどうなるのか、カメラが人よりも高精度に人や物を認識できたらどうなるのか、プログラマの人口が今の100倍になり、Word, Excelを書いている人がみなGoやSwiftを書くようになったらどうなるのか(その先には機械がプログラミングをするようになる世界がありますが)、そうした世界を想定し、その方向に向かって進めていけるかどうかが重要となります。

10年後の世界を考える人はクレイジーと思われるぐらいがちょうど良いぐらいなんだと思います。

...23456...