AI を知り、脳を知ることの楽しみ
ぼくが「AIスタートアップ」と呼ばれる会社のソフトウェア・エンジニアとして働きはじめて,丸 5 年が経ちました。2017 年。人生 2 回目の転職です。
2017 年といえば,AI 囲碁プログラム「AlphaGo」のニュース [1] が世間の話題をさらったことが記憶に新しく,ディープラーニングという言葉をよく聞くようになったのもちょうどその頃だった気がします。[2]
そこから AI 技術の進歩は凄まじく,活用事例も増えて,2022 年の今では社会に身近な存在になったように思います。機械翻訳の質は大幅に向上し,写真アルバムは自動的に分類されますし,スマートスピーカーや定額制動画視聴サービスなどでも AI が活躍しています。[3]
転職直後を振り返ってみると,当時は AI の技術的背景もろくに知らず「凄そうだけどよくわからない」程度の認識でした。不安や困難もありましたが,同僚たちの助けもあり,AI を扱うソフトウェア・エンジニアとしてなんとか 5 年間やってこれました。[4]
この連載では,そんなソフトウェア・エンジニアが『カンデル神経科学』を読んで感じたこと・面白かったことを紹介していきます。
しかし,ここで疑問に思う読者もいるでしょう。なぜ,脳科学については門外漢のソフトウェア・エンジニアが『カンデル神経科学』に興味をもつのでしょうか?
その理由を理解してもらうために,個人的にソフトウェア・エンジニアにとって大切な資質だと思うふたつの欲求について説明したいと思います。
ソフトウェア・エンジニアの欲求「抽象化」
ソフトウェア・エンジニア(というかエンジニア全般)は相反するふたつの欲求を持っています。
ひとつは抽象化への欲求です。
抽象化という言葉はわかりづらいので,部品化といった方がイメージしやすいかもしれません。ぼくたちエンジニアは複雑に絡みあったチップと配線をきれいな箱に押し込めて,詳細な仕組みを隠してしまうのが大好きです。そして,その箱にはスイッチをひとつだけつけるのです。こうすることで,利用者はスイッチを押すだけでこの部品を使うことができ,動作原理や仕組みを理解する必要がありません。いわゆるブラックボックスです。
ぼく自身,抽象化が大好きです。
自分がソフトウェアを書くときはできるだけ,利用者が中身を知らなくても簡単に使えるように腐心します。抽象化がうまくいくときも,あまりうまくいかないときもあり,抽象化がうまくいったときには「美しさ」「きれいさ」を感じます。逆に,うまくいかなかったときは「不恰好」に感じます。少々詩的な表現ですが,この欲求は美学と言い換えてもいいと思います。
さらに,抽象化でできた「箱」とは部品であり,別の箱と組み合わせて,もっと大きなことを成し遂げることができます。ふたつの箱をすこしだけ大きな箱に入れてやりましょう。もっと便利な箱ができます。ぼくたちがエンジンの仕組みを知らなくても車を運転できるのも,TCP/IP の知識がなくても Web ブラウザでニュースが読めるのも,すべては絶え間ない抽象化のおかげだと言えます。[5]
ソフトウェア・エンジニアの欲求「仕組み・原理の理解」
次に,ふたつめの欲求です。相反するふたつの欲求といったとおり,抽象化とは真逆です。
エンジニアはブラックボックスを好みません。
ブラックボックスを見つけたら,その中身を知りたくなるのがエンジニアです。きれいにネジ止めされた箱をわざわざ分解して,中身を調べ,仕組みや原理を知ろうとするわけですね。なぜそんなことをするのでしょうか?
ひとつは職業的理由,仕事上それが必要な知識だからです。
どんなにうまく構築された抽象化でも,何か不具合が起きるときがあります。それは単に,埃などで端子の接触が悪くなっているのかもしれません。しかし,中身の仕組みを知らなければ,そもそも原因に思い当たることすらないでしょう。そして,問題を早急に解決する必要がある場合(残念なことに多くの場合はそうです),自分でボンネットを開けて直す必要があるのです。 [6]
もうひとつの理由はもっと個人的なもので,わからないものを知りたい・理解したいという欲求,知的好奇心です。
周囲のエンジニアと話をしていると「オモチャや電子機器を分解して遊んだ」という逸話を聞くことがたまにあります。このような分解癖も,大本は知的好奇心が理由でしょう(とはいえ,ぼくの場合,お気に入りのカセットレコーダーを分解して元に戻せなくなって以来,この癖が再発することはありませんでしたが……)。
このように,既製品の仕組みや原理を理解するために,分解・分析することをリバースエンジニアリングと呼びます。一度ブラックボックス化したプロセスを逆行させるエンジニアリング。この言葉自体もなんだかワクワクしませんか? [7]
もちろん,仕組みや原理を理解するためにできることは,リバースエンジニアリングだけではありません。
たとえば,製品の設計図が手に入っていたらどうでしょう? 分解せずとも設計図から中身を窺うことができます。ソフトウェアの場合,設計図に当たるのがソースコードです。ソースコードを丁寧に解読していけば,そのソフトウェアの仕組みや原理を理解することができるのです。[8]
AI とソフトウェア・エンジニア
前のセクションでは,ソフトウェア・エンジニアの欲求について書き,それらは以下のふたつでした。
抽象化
仕組み・原理の理解
ここからは,話を AI 関連の技術に絞りましょう。
AI を実装する技術としては機械学習,その中でも特にニューラルネットワークが使われます。
どちらも AI を説明するときに頻出する単語なので,聞いたことがある方も多いと思いますが,ニューラルネットワークとは神経細胞をモデルにした,コンピュータ上のネットワークのことを指します。このネットワークが,実行したいタスクのデータを学習することでだんだんと成長し,正解に近い答えを出せるようになる。そんなイメージを持っていただければ十分です。
さて,このニューラルネットワークの分野でも,世のソフトウェア・エンジニアが進める抽象化の成果は数多く出ています。
たとえば,ニューラルネットワークを構築するためのライブラリです。多くのライブラリが提供されており,これらを利用すれば,数式と睨めっこしてゼロからネットワークを構築する必要はありません。ライブラリの用意する部品を組み合わせるだけです。
ライブラリだけではありません。たとえば「写真の中に写っている人物を検出する」「音声ファイルから日本語を書き起こす」といったような特定のタスクでは,学習済みのニューラルネットワークを簡単に利用できる Web サービスがいくつも提供されています。ここまで来ると,利用者はニューラルネットワークの仕組みについてすら知る必要がありません。まさに,スイッチを押すだけの感覚で AI を使いはじめることができます。これらは完全なブラックボックスです。
出ましたね。ブラックボックス。ブラックボックスを見ると,中身の仕組みや原理を理解したくなるのがエンジニアでした。
当然,ニューラルネットワークを含む AI 技術の仕組みについて知りたくなります。
幸いにして今はインターネットの時代です。最新の研究成果も含めた AI の仕組みや原理について,論文や多くの解説記事,場合によってはプログラムのソースコードにアクセスすることさえできます。[9]
もちろん,時間は有限なので,すべてを追いかけることはできません。また,ぼくのように数学的バックグラウンドを持たないソフトウェア・エンジニアには理解が追いつかない研究も数多くあります。それでも,自分が仕事で使う技術くらいは理解しておきたい,という気持ちがあります。これは職業的理由や知的好奇心という動機もありますが,もしかすると半分くらいは意地かもしれません笑。
神経科学への興味
ニューラルネットワークとは神経細胞をモデルにした,コンピュータ上のネットワークでした。
ソフトウェア・エンジニアの視点で見てみると,神経科学は高度に抽象化された脳のリバースエンジニアリングに見えます。
これはまさに,先に説明した,ソフトウェア・エンジニアの二大欲求そのものであり,しかも,AI の現場で働いているともなれば,神経科学に俄然興味が湧いてきます。『カンデル神経科学』を,ニューラルネットワークと対比しながら読むことで,新たな気づきや洞察を得られる気がします。なにより脳の仕組みを知ることは楽しく,知的好奇心を思う存分満たせそうです。[10]
たとえば,ニューラルネットワークの基礎でもある神経細胞間の情報伝達について見てみましょう。
『カンデル神経科学』によると,ある神経細胞から別の神経細胞への情報伝達は化学物質を介して行われます。そして,この化学物質の放出は,軸索からその終末に向けて伝わっていく活動電位によって引き起こされます。[11]
この活動電位には発生する条件があり,軸索の初節(トリガー帯)において,入力シグナルの総和がある閾値に達した場合のみ活動電位が発生します。同様に,ニューラルネットワークでも,バイアスや活性化関数という類似の仕組みが存在しており,このあたりからニューラルネットワークと神経細胞の類似点(または相違点)を考えてみるのも面白そうです。[12]
最後に
最後になりましたが,この連載記事では,記事の最後にすこし長めの脚注を載せることにしました。脚注では,補足や,本筋とは直接関係のない専門的な話題,雑談などを書いていく予定です。
これまで,段落末にところどころ [1] や [2] という括弧つきの数字が書かれた箇所がありましたよね? これらは参照する脚注の番号を表しています。まずは本文を読んでみて,興味があれば脚注もお楽しみください。
今後の連載でも『カンデル神経科学』を読んで感じたこと・面白かったことに,AI やエンジニアリングの話題を絡めて書いていきます。
※この連載の記事の内容は筆者個人の見解に基づくものであり,所属組織を代表するものではありません。
脚注
[1]AlphaGo とは,米 Alphabet (Google) 社傘下の DeepMind 社が,2015 年に開発した AI 囲碁プログラムの名前です。2016 年に AlphaGo が,AI 囲碁プログラムとしてははじめて,世界トップレベルのプロ棋士を破ったことで世界的なニュースになりました。
総務省の情報通信白書平成 28 年 (西暦 2016 年) 版では,AI 研究の大きなブレイクスルーの事例として紹介されており(「第2節 人工知能(AI)の現状と未来」),日本でも大きな注目を集めていたことが窺えます。
また,この顛末を描いたドキュメンタリー映画が,Youtube で無料公開されています(2022 年現在)。英語音声・字幕のみでの公開ですが,Youtube の自動翻訳機能による日本語字幕を表示することもできます。
[2] ニューラルネットワーク もともと,AI の研究では,生物の神経回路網を模倣したニューラルネットワークが研究されてきました。ディープラーニング(日本語で「深層学習」と書かれることもあります)とは,多層のニューラルネットワークを用いて,生の入力からより高次の特徴を段階的に抽出する手法です。画像処理を例にとると,一番下位の層は輪郭を識別し,ひとつ上の層は数字や文字,さらに上の層は顔など人間に関連する概念を識別する…というふうに段階的に認識が進みます。
[3]定額制動画視聴サービス Netflix では,ユーザーの視聴体験を向上させるために,さまざまな局面で機械学習や統計モデルが使われています。
同様に,Amazon Prime Video でも,ビデオの映像/音声の欠陥を検出するために機械学習(特にディープラーニング)が用いられています。また,事例の少ない欠陥のデータを自動生成するためにも使われているそうです。
また,視聴体験改善以外にも,ユーザーの好みに合わせたコンテンツの推薦など,さまざまな用途で AI の技術が使われています。
[4]AI 開発における「ソフトウェア・エンジニア」 AI 開発における「ソフトウェア・エンジニア」は,担当する分野や役割によって仕事内容は多岐に渡ります。ぼくの主な職業的専門分野は,機械学習のモデル(プログラムのようなもの)を IT システムに組み込み,長期的に運用・保守することです。
[5] 抽象化 特に,ソフトウェア・エンジニアリングにおいては抽象化の威力は絶大です。ソフトウェアではコピーが実質タダなので,抽象化された部品を自由にコピーして組み合わせることができます。これが莫大な生産性の向上をもたらすのです。
[6]ボンネットを開けて直す これは「漏れのある抽象化の法則 (The Law of Leaky Abstractions) 」として,ソフトウェア・エンジニアのあいだでは古くから知られている法則です。日本語訳は『Joel on Software』(Joel Spolsky 著 / 青木靖 訳 オーム社 2005年)で読むことができます。
[7]リバースエンジニアリング この記事で紹介する他の AI 技術同様,テクノロジーはその使われ方によっては社会に良い影響も悪い影響も及ぼすことができます。この記事は,他者の知的財産権を侵害する類のリバースエンジニアリングについて推奨するものではありません。
[8]ソースコード プログラムの「設計図」や「指示書」にあたるのがソースコードです。しかし,ソースコードが手に入っても,すべてが理解できるとは限らないこともあります。その場合はやはり,逆アセンブルやバイトコード解析といった「分解」をしてみたり,ソフトウェアに与える入力を変えることで動作がどのように変化するかを観察することで得られる洞察も多いです。
[9] AlphaGo の論文 前述の AlphaGo の実装については元論文に詳しく解説されていますが,現実問題へのディープラーニングの適用として非常に面白い例なので,以下に要点をかいつまんで紹介します。
まず,AlphaGo のような AI 囲碁プログラムでは,ゲームの先を読んで次の一手を決めています。
もちろん,すべての局面においてあらゆる可能性を網羅的に調べていくことができれば,常に最適の一手を打つことができます。しかし,囲碁においてはこの「あらゆる可能性の数」が膨大であり,網羅的な探索は現実的に不可能でした。そこで,考慮すべき可能性を減らしつつ,できるだけ正確な判断をすることが重要になってきます。
先行する他の AI 囲碁プログラムでは,モンテカルロ木探索アルゴリズムが使われていました。このアルゴリズムでは,次の一手を選択するポリシー関数と,その手が有望かどうかを判定する評価関数を組み合わせることで,良い手のみを効率良く探索できます。そして,AlphaGo でも同様にモンテカルロ木探索アルゴリズムが使われています。
それでは,なぜ,AlphaGo が,先行する他の AI 囲碁プログラムを大きく上回る性能を叩き出せたのでしょうか? それは,ポリシー関数と価値関数に多層ニューラルネットワークを用いたことにあります。
当時,画像分類や顔認識など画像処理で大きな性能を達成していた深層畳み込みニューラルネットワークというアーキテクチャを採用し,碁盤の位置を 19×19 の画像として扱うことで構築しました。そして,囲碁の上級プレイヤーの棋譜を教師データとして(次の一手を選択する)ポリシーネットワークを学習させ,さらにットワーク同士を闘わせる強化学習を組み合わせることで進化させました。その手が有望かどうかを判定する評価ネットワークは,先のポリシーネットワーク同士の対戦結果を教師データとして学習させました。
これら二種類のネットワーク(実際には,同じ種類で複数のネットワークが使い分けられています)をモンテカルロ木探索にうまく組み込むことで,あの脅威的な性能を達成したわけです。
その後,AlphaGo はさらに進化し,人間の棋譜から学ぶことなく完全なランダムプレイから始めて,自分自身と対局することのみで AlphaGo を凌駕する性能を達成した AlphaGo Zero,囲碁だけでなくチェス,将棋にも対応した AlphaZero が登場しています。
[10] 知的好奇心 [9] で紹介した AlphaGo の論文でも出てくるのですが,ニューラルネットワークの学習過程や性能を上げるための試行錯誤を見ると,人間が学習するときと同じような傾向が見てとれる(あるいはそのように錯覚する)ことがあり面白いです。
[11] 活動電位 この活動電位が発生する化学的プロセスについても『カンデル神経科学』では詳細に解説されています。
[12]ニューラルネットワークと神経細胞 活動電位は「全か無」です。つまり,閾値以下の入力シグナルでは発生せず,一度閾値を超えた場合はそれぞれの活動電位の振幅と持続時間は同じ。ただし,入力シグナルの大きさは活動電位の発生頻度に影響します。言い換えると,閾値を超えた入力シグナルが大きいだけ,より多くの活動電位がシナプスの終端に到達し,放出される伝達物質の量が多くなる(つまり,出力シグナルが大きく)なるわけです。
この仕組みを,ニューラルネットワークに当てはめて考えてみると,初期の活性化関数(ステップ関数,シグモイド関数)が思い浮かびます。
しかし,活性化関数についてはその後,上記ふたつ以外にも多くの関数が考案されており,その振る舞いはすでに神経細胞とは乖離したものとなっています。ニューラルネットワークというものがあくまで「神経細胞にヒントを得たもの」であり,完全なシミュレーションを目指しているわけではないことがわかります。
2022.6.27 石川 尊教(@takanori_is)