10. 人工知能(AI)の仕組みと能力(機械学習、ニューラルネットワーク、ディープラーニング)

前回「人工知能技術(AI)の発展の歴史」と言う観点で、3つの方向の技術を紹介しましたが、まず「技術の概要」という観点で、その復習をしましょう。

「知的な活動」の(機械での)模倣には、大きく分け、3つの方法(技術)があります。

  1. 知的に見える(賢く見える)処理を行ための、「答えの出し方を人間が、プログラムという形で、直接与える」(アルゴリズムによるAI)。
  2. 学習等により「知識」を得て、それを蓄え、「機械が自分で知識を組み合わせて、未知の命題に対して推論を行う」(知識ベースと推論エンジン)。
  3. 神経回路網(脳)を模倣し、「神経回路網に知識(データ)を与えて神経回路網を発達させ(学習)」、構築された「神経回路網により、答えを出す」(ニューラルネットワーク(NN))。

いずれの手法も「学習」という技術と組み合わせることにより真価を発揮します。学習とは、過去の経験により行動が変化していくことを言いますが、機械の場合には、過去の経験=入力と読み替えても良いでしょう。ただし、結果(出力)を入力に戻す(帰還:フィードバック、ループ)こともありますし、ある時期学習をしてそれ以後は学習しないことや、常に(処理をしながら)学習を進めることなどもあります。機械に学習させる技法についても、今回「簡単に」紹介しておきますが、実際には様々な方法があります。なお「機械に学習させる技術」のことを「機械学習」と呼びます。機械学習自体は、記号論理とアルゴリズムによるAI(答えの出し方を直接人間がプログラムと言う形で指示する)でも、知識ベースと推論エンジンによるAIでも、ありうるのですが、現在では「機械学習を使うなら、ニューラルネット技術でAIを作る方が、技術的に、圧倒的に簡単で高性能なものが作れる」という事情があますので、ここでは、主として「ニューラルネットにおける、機械学習の話」を紹介していきます。


10-1. 「機械学習」とは?

機械学習とは、文字通り「機械に学習させること」であり、「学習能力のある機械を作ること」でもあります。

学習とは、様々な知識や経験を自分のものにして、その後の行動(動作)などに反映させることですから、まあ「知識や経験によって、自分自身(内部状態)が変化すること」と言っても良いかもしれません。コンピュータの場合には「内部状態」は「格納してあるデータ(数値の塊)」ですから、知識や経験に基づき、「パラメタ(数値)」を変更する、最適なパラメタを求める、と言うことが「学習」にあたります。

例えば「かな漢字変換」の学習の場合、「読み」から「候補となる単語」を単語帳(データベース)からひっぱってきますが、一般に同じ読みの単語は数多くありますから、どれがふさわしいかわかりません。しかし、候補の単語に「優先度」というパラメタを付加しておいて、その単語が使われる毎に「その単語の優先度を上げる」という処理を行うと、「よく使う単語が、最初の方に並ぶ」という結果になります。この機能を搭載している現在のかな漢字変換は「過去の入力を学習し、使い込めば、よく使う単語は一発で出てくる」ように進化していきます。このように「パラメタを適切な方に変更して、最適なものに近づける」というのが、「機械学習」のイメージです。

後で紹介するように、ニューラルネットでは、ニューロン(神経細胞)の繋がりの強さ(「重み」)が、パラメタであり、これを適切に設定できれば、ニューラルネットは様々な処理能力を獲得しますので、これらのパラメタ(ニューロンの結合の重み)の値をを、データ(知識や経験)から決めるということが「機械学習」にあたります。

10-2. ニューラルネットワークのしくみ

まず、シナプスで繋がった、神経細胞(=ニューロン)の働きを数学的にモデル化します。数学的にモデル化しますので数式も出てきますが、この授業では、あまり数式にこだわらず「イメージ」をつかむようにしてください。

1つのニューロンに入力 \(x_j\)があると、その入力にニューロンを繋ぐシナプスの結合の強さ(=重み\(W_j\))を掛けたものが伝わり、その総和がある値(閾値\(θ\))を超えた場合にそのニューロンが活性化し、信号\(y\)を出力します。入力の総和とニューロンの活性化の特性を関数\(f()\)と書けば、\(f( \sum_{j=1}^N W_{j}x_j - θ) =y\)と表すことができます。 これは、入力層(\(x_j\))出力層(\(y\))からなる「2層ニューラルネットワーク(出力1つ)」の一番簡単なものです。このNNを特徴づけるパラメタは「重み\(W_j\)と閾値\(θ\)」であり、その個数は「入力の個数+1個」です。つまり、図の線の本数

同じように複数のニューロン(添え字\(i\)で区別)を考えれば、それは\(f( \sum_{j=1}^N W_{i,j}x_j - θ_i) =y_i\)となります。ここで、\(W_{i,j}\)はニューロンの繋がり具合(重みと呼びます)、\(θ_i\)はその細胞の活性化のしやすさ(バイアスと呼びます)です。 これは、入力層(\(x_j\))と複数の出力を持つ出力層(\(y_i\))の「2層ニューラルネットワーク」です。このNNを特徴づけるパラメタは「重み\(W_{i,j}\)と閾値\(θ_i\)」であり、その個数は「入力の個数×出力の個数+出力の個数」です。

同じように、もう一層加えると、「入力層」「中間層」「出力層」からなる「3層のニューラルネット」になります。式は省略しますが、このNNを特徴づけるパラメタの個数は、「◯で表されるニューロンの個数+線で表されるシナプスの個数」になります。各層のニューロン数が少なければ対した個数でないですが、ニューロン数が増えると、シナプス数はその組み合わせですから、とても沢山になります。例えば、各層100個の全結合なら、100×100+100×100=20,000=2万個、各層1000個なら2百万個、各層10000個(例えば100x100ドットの画像)なら2億個です。そして、これだけの「沢山のパラメタの値が、そのニューラルネットの動作を決めている」ことになります。なお、具体的にパラメタの値が決まったものを「モデル」と呼んでいます。

つまり、「望ましい動作をする」ニューラルネットを作るということは、そのように動作するように「これだけ沢山の、パラメタの値を決めること(=AIモデルを作る)」になります。とても大変ですね(^^;

そこで、これらのパラメタ決めるのに「望ましい動作をするように、機械学習の手法で決めていく」ということが行われます。得られたものを「学習済みモデル」と呼びます。

なお、ここでは「単純な3層のニューラルネット」を紹介しましたが、実際には、数十層~数百層のものもありますし、また、層状を基本にしながらも、上位と下位が部分的に逆転する「ループ状の」ものもあります。たとえば、

「あるニューロンの出力を保持して、もう一回同じネットワークで処理するときに、保持していた1回前の出力にループ構造を持たせて、入力に加える」ことにより、「動かすごとに、前回の情報を反映した動作をする(=短期記憶の能力を獲得する)」ようになります(Recurrent Neural Network: RNN)。

また、現在の汎用的なAIの原型である「Transformer」は、

のような構造をしています。単純そうに「四角で書いている部分」が、実は複雑なニューラルネットで、それらのニューラルネットをさらに複雑に組み合わせて全体が作られていますので、実際はとても階層の深いかなり複雑な構造です。そのため、短期記憶だけでなく長期記憶に相当する能力も獲得するようになります。このような複雑なニューラルネットワークは、そこに含まれるパラメタも多くなり、 数百億個~数千億個以上になります。



10-3. ニューラルネットワークにおける、機械学習

単純なニューラルネットの場合でも、その結合の強さのパラメタの個数は、膨大になり、本格的なChatGPTのようなAIだと、パラメタの個数は「数千億個」にもなります。その、膨大な個数のパラメタは、どのようにして決める(求める)のでしょうか? それが膨大なデータを用いた「機械学習」です。

ニューラルネットの機械学習の技術は、大きく分けて次の3つに分けられます。

なお、学習済みモデルを流用して、さらに機械学習をさせる方法もいろいろ開発されています(転移学習)。全体を流用したり、部分的に切り取ってそこに新たなネットを繋げて学習させたり、微調整(ファインチューニング)したり...

これだけでは、イメージしにくいと思いますので、次回、イメージを掴むために、ちょっと説明が長くなり高度になりますが、もう少し具体的に説明します。

10-4. ニューラルネットワークのデモ(実際のニューラルネット)

この辺で、ニューラルネットワークの「実物」を見てみましょう。対面授業では、実物のデモで説明します。遠隔で受講される方は....  それを動画にするくらいなら、YouTubeの動画を紹介した方が早いですね。

最初の動画は、約20分ありますが、わからなくても一度目を通しておくと良いでしょう。

「2020年、Deep Learningをはじめよう!(SONY)約20分」

https://www.youtube.com/watch?v=9gXB7MvyKJ8


もう少し詳しく知りたいかたは、以下の動画も見てください(以下の動画は、興味がなければ飛ばしても構いません)。

「Deep Learning入門:Deep Learningとは?(SONY)約10分」

 https://www.youtube.com/watch?v=W92VcivhoBs

「Deep Learning入門:Deep Learningでできること(SONY)約10分」

  https://www.youtube.com/watch?v=FwuBbj8F6cI

「Deep Learning入門:ニューラルネットワーク設計の基礎(SONY)約10分」

  https://www.youtube.com/watch?v=O3qm6qZooP0


また、実際に使ってみたい、作ってみたい(体験してみたい)と言う方は、以下の動画を見てください。

Deep Learningの統合開発環境 Neural Network Consoleの特長 (2019/02)

 https://www.youtube.com/watch?v=y_KGyxAwAic

Windows版チュートリアル:簡単!画像認識プロジェクトの作成 ~2層のニューラルネットワークで画像認識~

 https://www.youtube.com/watch?v=vncZ43udec8

ここで使っている開発ソフト[neural network console]は、https://dl.sony.com/ja/ にて、Windows版は無料でダウンロード&インストール&利用できますし、クラウド版も一定量までは無料(その後は有料)で利用できます。クラウド版は、安価で低性能なパソコンでも、SONYの高速なGPU搭載のサーバ(買うととても高価)を使った開発がリーズナブルな価格で行えますので、ちょっとマジで本格的なAI作ってみようかな、と言う時には便利かと思います。なおこのソフトは、「SONYが実際にAIの開発に用いているもの(本物)」であり、それを無料で使って学べるのは、素晴らしいことと思います。興味のある方は、簡単なものから実際的なものまで、サンプルと説明動画が多数ありますので、(自学自習で)チャレンジしてみるのも面白いでしょう。


では、今回はこのへんで終わりにし、次回は、そのようなことを踏まえて、「現代的な」AIの技術と、その利用方法や注意点、また、将来のAIとして期待できることやAIとの付き合い方(使い方・心構え)などを、の話に進みます。また「学習」は、「いかに質の良いデータを収集して、質の良いデータを効果的に加工し、それをどのように利用するか」という話と直接的に関わりますので、そのような「データサイエンスとしての視点」も含め、(AIの技術を知らない人が)見落としやすい「AIを作る時点での問題や課題(役に立つ信頼できるAIか、役に立たないデタラメAIか」についても、簡単に紹介していきます。