人工知能は人間を超えるかを読んだ。 たまたまお仕事で、尾原和啓さんとのMTGに同席する機会があり、 最後にオススメの本とのことで、おすすめされた本は24時間以内に必ず購入して読んで読書感想文を投稿するポリシーの自分としては即購入。 読書感想文は盛りました。 東大の松尾研究室の松尾さんの書籍で、2015年に発行。よく見るとKindleで1位なんですね。休日にKindleランキングの上から順に本でも読んでみようかと思いました。

身近だけど理解している人が少ないAI

飲み会の席でも、「将来的にどの職業がAIでなくなるのか論争」なども皆さんも1度は経験したことがあるかと存じます。 元上司も、「学習アルゴリズム売買の時代がすぐに来る。時期にメジャーなマーケットプレースもできる。」と再三言ってはいたものの、 まぁそうだろう、くらいしか自分の中でイメージ湧いていなかった。

Tech系のブログでも定期的にディープラーニングで画像認識系のネタがあがったり、ニューラルネットワークや機械学習の個別の仕組みはぼんやり知ってはいるものの、 大局的な所をそもそも理解していない負い目もあった。という訳で早速読了。結論、読んでよかった。

書物のポイントとしては下記の通り。

  • 「特徴表現の学習」という問題が人工知能の本質だ。
  • 今までこの学習自体が結局人間が職人技でやっていた。
  • ディープラーニングの登場で、特徴表現の学習自体をコンピュータができるようになりブレークスルーが一個起きた。

年収を予想してみる

特徴量表現というのが重要。例として「属性情報からその人の年収の予想」という問題があったとする。 簡単にこれを表現するために、伝説の式を記載する。

y = f(x)

何かをInputすると、違うOutputが出てくるという、世の中だいたいなんでも当てはまるモデルだ。プログラミング言語でもFunctionというという名前で表現されている。これを今回の問題に当てはめると以下ということになる。

変数 種類 説明
y Output 年収
x Input 性別、誕生日、居住地域、職種、血液型・・・・・・などの属性項目
f Function 年収のアウトプットへ変換するロジック

プログラミングでいうとこういうことである。

$income = incomePrediction($input, $input2, ...)

function incomePrediction() {
  ...
}

すなわち年収yを出すためには、変数xと関数fをどうやって決定するかが重要ということである。 例えば、血液型と身長から年収の算出ロジックを考えるより、職種や居住地域から年収算出ロジックを出したほうが遥かに精度も良さそうだ。

ここの問題でややこしいのが以下の2点。

  • この変数xの値が何が良いか分からない
  • 変数xの値が決まらないと、f(変換ロジック)も決まってこない

システム開発案件の初期フェーズの仕様決めのようで、大変な気持ちが分かります。 さて、今まではこのキーポイントである変数xを人間が設計していたということです

例えば変数xを、それっぽい「居住地域」「職種」などと決めてみて、実際の「年収」の答えから、関数fを導き出すロジックを考える・・・という訳である。ただし、ここの設計に結局人間が介在するので、本質的な課題だ・・・・というのがポイント。

そんな中、この課題を別アプローチで解決できるであろう可能性を持ったテクニックが、ディープラーニングだということである。

ディープラーニング

アウトプットを出す方法として、人間の脳の回路を真似たニューラルネットワークという手法があるが、 これの応用編がディープラーニングである。ニューラルネットワークにおける隠れ層をどんどん深くしていく手法だが、 ここが面白い。インプットとアウトプットに同じデータを使って、正しいかどうかを学習させていく。

画像認識で例えると、「手書きの3」のデータを入れて、最終的な答えのデータにも同じ「手書きの3」を入れる。 一度、情報をギュッと圧縮させて、それを同じように複合できないか・・・チャレンジさせる。 (高音質CDから、サイズの小さいmp3を作って、また高音質CDに戻す感じである)

「一旦ギュッと情報を圧縮させても、また同じ情報を再現できる」ということはすなわち、その情報が本質的な特徴量だ!というロジックである。

「教師あり学習的な方法による教師なし学習」で特徴量を作り、最後に分類したいときは「教師あり学習」になる

ズバリ本でも上のように表現していてとても分かりやすい。概念の答えは自分自身なのである。

  1. 元データから特徴データの抽出する。(1層目)
  2. 1層目でできた特徴データ自体を1回目と同様に回答データとして、また特徴量を抽出する (2層目)
  3. 繰り返し …

これを何度か繰り返すことで、最終的に出てくる「3」という概念までたどり着く。 層が厚くなればなるほど、抽象的な情報になっていくイメージである。 さらに繰り返していくと、「文字」だったりもっと抽象的になっていく。

訓練させる

実はこの「教師あり的学習で教師なし学習」アイディアは数十年前ら存在していたが、研究者が気づいていなかったポイントがあった。 それが、データには訓練を必要とするということだった。

例えば、天気予報でいえば、「たまたま元データの別々の県の天気が同じだったときに、それを相関と勘違いしてしまう」ということである。 サンプル数が少なければ少ないほど発生しそうだ。ただ、ここでこれを解決するために、さらに単純にリアルなサンプルを増やす訳ではなく、以下の方法を取るのが面白い。

  1. 天気データに適当にノイズを加えてみて、人工的に適当なデータを作り、天気データを作ってみる。100件の元データから1万件作ってみる。
  2. ニューロンの隠れ層を50%くらい消してみて、それでも同じ答えが出るかどうか

人間ごときがデータに多少ノイズを加えても、すでに出した答えのやり方を使えなくしたとしても、正しそうな答えが出る特徴量を出すべし!ということだ。 こうやって何事にも影響を受けないような特徴量を出す訳である。面白い。

実際に、ノイズを入れて爆発的にデータを増やして学習させてみると、演算処理は大変になる。

過去にグーグルではネコ画像識別のための特徴量抽出をやるために、1000台のサーバを利用して1億円ほどかけた。 (その後、GPUをうまく利用して、少ないマシンなどでもできるようになった)

2016年では、クラウド技術も発達し、このデータ訓練のために気軽にコンピューティング能力を利用できるようになったというのがポイントです。

人工知能が長年できなかった理由

本の途中面白い一節があります。(意訳)

人工知能が長年できなかった理由は、コンピュータが概念を獲得しないまま、記号を単なる記号表現としてのみ扱ってなかった。 記号を「概念と記号表現がセットになったもの」として扱ってなかった。

ようするに、語学学習でいえば、日本語と英語の横への文字変換だけをして翻訳マシン作ろうとしていた、という感じでしょうか。 これでは、日本語と英語ができたとしても、じゃぁスペイン語にすぐ横展開できるのかいというと、また個別に作り直しですね。 そこに一つ概念が入れば、中国語だろうと、なんでも変換できそうです。

とはいえ、コンピュータが概念を獲得できるというのは、結局特徴量というただのデータな訳ですが、ワクワクしてくるものがあります。

最後に

全部まとめると長くなりそうなのでこのあたりで一旦終了。 概念のみで、細かいロジックなどは個別に理解していくことは必要だなという印象。とはいえ、冒頭にも記載した通り、読んでよかった。 久しぶりにマッチ箱と脳でもまた読み返そうかなと思います。

そういえば、学部生時代に山口高平先生の研究室を応募して、落ちたことを思い出した。定員8名、応募9人のうちの記念すべき1人だった記憶がある笑。 流石に当時はチャランポランすぎたと今さら反省。真面目に頑張ります。