一読難解、二読誤解、三読不可解の典型例じゃないかと思うくらい人工知能周りの話は難しい。。 それでもずっといろんな本や記事を読んだり、自分でもコードを書いたらなんとなく全体像が見えてきて、人工知能の話題が出たときでも、それがどのレイヤーの話をしているのか理解できるようになってきた気がします。
人工知能について調べるのが初めて、またはなんらかの誤解をしている方、つまり昔の自分が読んで腑に落ちるように整理をしているため、正確性や網羅性はあまりないかもしれませんが、まとめてみました。
人工知能
人工知能の定義は様々あり、宗教論争になりがちなので詳細は避けたいのですが、私は人工知能は人間が行なっているさまざまな行動をシステム化させるものだと考えています。
例えば弊社では英語学習サービスを提供しているのですが、外国人講師が返信をしたり、添削をしたり、会話をしたりしています。これを人力ではなくシステムで行うことができれば、人工知能がユーザーに価値を提供している、と言えるのではないでしょうか。
人工知能には汎用型(強いAI)と特化型(弱いAI)があり、汎用型AIは人間と同等またはそれ以上のことができることが期待されていますが、この実現はまだまだ先になると言われています。現時点で実装されているのは特化型AIであり、特定の領域においてタスクを実行したり問題を解決したりしてくれます。特定領域とは、例えば画像認識、自然言語処理、音声認識などがあります。
機械学習
機械学習とは、人工知能を実現するための手法の1つです。通常プログラミングする場合、入力データに対して望ましいデータが出力されるように処理(ロジック)を記述します。そのロジックは、条件分岐だったり繰り返しだったりいろいろです。
ただ、この入力に対する出力のルールを設定するというというアプローチは、人間がルールを全て明示する(=ロジックを全て書く)のに限界があるため、ルールを記述していない例外に弱いというデメリットがあります。また、ルールというものは社会状況などに合わせて変化する可能性があり、その変化に合わせて毎回ルールを書き換えるのは煩雑です。
よって、ロジックを全て最初から実装するのではなく、機械学習により大量のデータからパターンや特徴を分析して、その分析して得られたロジック(アルゴリズム)を元に未知のデータに対しても精度の高い予測を自律的に割り出す手法が編み出されました。
プログラムは主に「入力」「処理」「出力」から成り立っていますが、通常のプログラムは「入力」に対し望ましい「出力」がなされるようにルールを記述して「処理」していますが、機械学習では「入力」と「出力」のデータを大量に読み込ませることで自発的にルールを見い出し、「処理」を行ってくれます。
そして、機械学習には大まかに教師あり学習と教師なし学習があります。先ほど「入力」と「出力」のデータを大量に読み込ませるとしましたが、教師あり学習は入力と出力のセットでデータ、教師なし学習は入力データのみを読み込ませます。
教師あり学習の場合は、入出力のデータをセットで持っていますので、未知の入力データがあってもセットデータの規則性を元に分類などを行い出力を割り出します。一方、教師なし学習の場合は、入力データのみを持っているため、未知の入力データがあった場合、その入力データを読み込み済の入力データと比較してクラスタリングしたり、異常検知をしたりして出力を割り出します。
このように教師あり学習と教師なし学習は読み込ませるデータが異なることから学習方法に違いがあり、適用できるシーンも変わってきます。どのシーンにおいてどの学習方法を選択するかが重要です。
ディープラーニング(深層学習)
ディープラーニングとは、機械学習を実装するための1つの手法です。繰り返しになりますが、機械学習では「入力」と「出力」のデータを大量に読み込ませることで自発的にルールを見い出し、「処理」を行ってくれます。しかし、「処理」を一段階で行うと、複雑なデータを正しく処理することが難しいという問題点があります。そこで、最初の処理の結果をさらに処理することで階層的に処理を行う手法であるディープラーニングが編み出されました。
ディープラーニングでは、ニューラルネットワークという計算アルゴリズムを活用します。ニューラルネットワークとは、人間の脳の神経回路の仕組みを模倣したアルゴリズムであり、大きく入力層、中間層(隠れ層)、出力層の3層に分類されます。「入力」されたデータを「処理」してデータを「出力」するのがプログラムの一連の流れでしたが、中間層(隠れ層)を何層も重ねることで、ニューラルネットワークの精度を向上させることができます。この中間層が2層以上になっている多層構造のニューラルネットワークを機械学習させることをディープラーニングといいます。
そして、ニューラルネットワークの中間層を多層にする手法として、畳み込みニューラルネットワーク (Convolutional Neural Network: CNN)や再帰型ニューラルネットワーク (Recurrent Neural Network: RNN) があります。CNNとは、畳み込み層(フィルタリングをして特徴量を取り出す層)とプーリング層(フィルタの結果から選択する層)を交互に繰り返すことでデータの特徴を抽出し、最後に全結合層で認識を行う手法です。一方RNNとは、中間層において、中間層の結果を自ら再度入力に用いることで、文脈理解を可能にする手法です。単純化すると、CNNが順次処理、RNNが再帰処理ということになるでしょうか。
まとめ
人工知能には汎用型(強いAI)と特化型(弱いAI)があり、現在実現されているのは特化型(弱いAI)です。
機械学習とは人工知能を実現するための手法の1つであり、大まかに教師あり学習と教師なし学習があります。教師あり学習では入力と出力のセットデータ、教師なし学習では入力データを読み込ませます。
ディープラーニングとは、機械学習を実装するための1つの手法であり、多層構造のニューラルネットワークを機械学習させることです。多重構造にする方法として、CNNやRNNがあります。
こう整理すると、全体像が見えて、個別の理解がしやすくなった気がします。