ディープラーニングの概要と全体像

作成日: 2021/08/18 更新日: 2023/04/26 サイトの紹介と使い方

初めに

① y=ax という関数を考えます。
② x を説明変数と呼びます。
③ y を目的変数と呼びます。
④ a をパラメータと呼びます。
⑤ aとxが決まればyも決定されます。
⑥ 人工知能の目的は、パラメータa を求めることです。
⑦ x は世の中にたくさん存在するするので、そのxからyを予測しようというのが、人工知能の基本です。
⑧ この記事は、PYTHONのkarasパッケージを参考にして記述します。
kerasのドキュメントはこちらkeras Documentationを参照してください。

説明変数

① 説明変数xは、人工知能が学習するために多くのデータを必要とします。
② 説明変数xは、プログラムコードで配列という形を取ります。
③ 説明変数xを使って、パラメータaを後述する方法によって求めます。
④ 説明変数は、別名入力変数などと呼ばれます。

目的変数

① 目的変数yは、予測値になります。
② 目的変数yは、説明変数xと対になります。
目的変数yは、基本的に1次元の配列になります。
③ 目的変数yは、あらかじめ設定されるか、パラメータaが決定しないと求められません。
④ 目的変数yは、別名出力変数などと呼ばれます。

人工知能について

① 現在の人工知能は、第3次ブームと一般的に言われています。
② 第3次ブームの根幹は、ディープラーニングです。
③ 人工知能の目的は、既存のデータから未知のデータを予測することです。
④ 人工知能は、後述する損失関数の戻り値をできるだけゼロに近づけるように学習します。

量子コンピュータ

人工知能と量子コンピュータの違いは次の通りです。
① 理論の根底が違います。
② 実用化の点で人工知能の方が圧倒的に進んでいます。
③ 量子コンピュータの方が指数的な違いで高速です(実用化された時の期待値)。
④ 人間の思考に近いのは人工知能です。
⑤類似点は双方とも確率的に解を算出するところです。
⑥将来的に、厳密解の手法が発見されるかもしれません。

人工知能の種類

次の3つに分類されます。
① 教師あり学習:実値として、説明変数と目的変数を与えて学習させます。
② 教師なし学習:実値として、説明変数しか持ちません。
③ 強化学習:詳しいことは分かりませんが、将棋や囲碁のAIソフトとして実現されています。

強いAIと弱いAI

① 強いAIとは、人間と同等の知能を持つAIです。
② 第3次ブームの人工知能の技術では実現されていません。
③ 弱いAIとは、何らかの学習能力を持つAIです。
④ 第3次ブームのAIは、弱いAIです。

機械学習

機械学習は、コンピュータに既知のデータを学習させる手法のことです。
① 単回帰、重回帰分析などの多くの処理方法があります。
そして、基になる数学理論は「最小二乗法」です。
② 決定木などのアルゴリズムによる学習手法もあります。
③ ニューラルネットワーク(CNN)そのものも機械学習の1つです。
④ この記事は、③だけを記述します。

ニューラルネットワーク

①説明変数に特徴量を設定します。
②活性化関数で学習を収束させます。
③第2次ブームから、層(レイヤ)の手法ができて、入力層⇨隠れ層⇨出力層の順で処理されるようになりました。
層(レイヤ)の詳細は、「ディープラーニング」で記述します。

活性化関数

筆者は次のように理解しています。
①説明変数から決定できる方程式(y=axより複雑な式)が分かれば、微分によって極小値(あるいは極大値)が求められます。
②しかしながら、現実世界に無数にあるデータの種類ごとに方程式を決定することはできません。
③そこで、微分と同じ結果となる「損失関数」(後述します)の戻り値を最小になるように目的変数を求めるパラメータをトライ&エラーで収束させます。
④そのトライ&エラーの手法を活性化関数と呼んでいます。
⑤筆者の理解が間違っていたら後ほど修正します。
⑥筆者が学習していく過程で上述の理解は、あまりあたっていない様ですが、現段階では特に問題なさそうです。
⑦そもそも研究途中のようです。

ディープラーニング


① ニューラルネットワークを多層(マルチレイヤ)構造にしたものをディープラーニングと呼びます。
②つまり、ニューラルネットワークの隠れ層が複数あるものと考えて良さそうです。
③②によって、ニューラルネットワークだけの時代、説明変数として入力していた特徴量をコンピュータが自分で導き出せるようになりました。
④ しかし、モデルなどの設定方法が、たくさんあり、その組み合わせは膨大なものになります。
⑤ この記事では、できるだけ一般的な設定方法を選んで、設定を固定して組み合わせの数を減らします。
⑥ 尚、筆者が概念的に理解できない部分もあるのでご容赦ください。

ディープラーニングの種類

①ディープラーニングは、次のような種類と特性をもちます。
・DNN(ディープニューラルネットワーク)>隠れ層(レイヤ)を2層以上持つディープラーニングの基本形です。
・CNN(畳み込みニューラルネットワーク)>畳み込み層(レイヤ)とプーリング層(レイヤ)を含みます。画像認識に強いとされます。
・RNN(再帰型ニューラルネットワーク)>統計解析・音声認識・自然言語翻訳に強いとされます。既知のデータのパターン化が得意です。
・GAN(敵対性生成ネットワーク)>2つのネットワークを競わせることにより、学習を強化します。おそらく将棋や囲碁ソフトなどで、使用されます。
②①より、実質的にディープラーニングは大別してCNN、RNN、GANの3種類に分類されるようです。
kerasには、CNN・RNNが実装されています。
③ディープラーニングは、上記の派生型として、他にも種類が存在します。
④keras にも派生型が②以外にも実装されています。

人工知能による学習の結果の評価

① 損失関数と評価関数によって学習の確からしさを判断します。
② 損失関数と評価関数だけでは、評価できない「過学習」などの問題があるので、
理論的な注意、あるいは多くの試行実験が必要です。

損失関数(loss)

教師あり学習の場合だけ記述します。
① 正解値(実値)と予測値の差(の二乗の平均)を示す関数です。
② パラメータaを求めて、それぞれのxをy=axに代入したyが予測値です。
③ 正解値は学習用にあらかじめ設定した値です。
④ 通常、平均二乗誤差が使われるので、本サイトもそれに倣います。
⑤ 平均二乗誤差以外にもありますので、1通りの学習の後に試してみることをお勧めします。
⑥値がゼロに近いほど誤差が小さいことを示します。

例)
model.compile( loss='mean_squared_error' )

loss='mean_squared_error'が、平均二乗誤差の指定です。

評価関数(acc)

① 「acc」を使います。「acc」は、精度や確からしさを示し、%で値を返します。
② 100%に近い方が精度が高いことを示します。

例)
model.compile( loss='mean_squared_error',
               metrics=['acc'] )

評価時の注意

① 「過学習」を起こしている可能性があります。
② 「学習不足」の可能性があります。
③ その他、以下の2例のようなケースも存在します。

同じデータで学習

① 1つの同じデータを数万回コピーしたデータで学習した場合を考えます。
② おそらく、損失関数の戻り値は限りなくゼロに近く、評価関数の戻り値は限りなく100%に近くなることが、予測されます。
③ この学習内容に学習の外部から持ってきたデータ(説明変数)を与えても期待通りの予測値(目的変数)は得られません。
④ ①〜③から学習用のデータに正し過ぎるデータばかりを与えても人工知能は有益な学習をしないことが予測されます。

三角測量

30年以上前の筆者の専門分野「測量」からの例です。
① 「3辺の長さが与えられれば1つの三角形が決定される。」という法則が存在します。
② ①から3辺だけを観測(現地で測量する)すれば、誤差無しで、3頂点の位置が求まります。
③ 4辺を観測すると三角形が2個できて観測値(実測値)に誤差ができます。
この時、三角形の頂点を決定する計算に最小二乗法を使います。
④ そして、観測値は、信頼度を持ちます。
信頼度は、計算には使われませんが、再観測が必要になった時、どの辺を再観測すれば良いのかの指標になります。
⑤ 例えば、信頼度は三角形の形によって決まります。
正三角形が最も信頼度が高いとされ、狭角を含む三角形の信頼度は低いとされています。
⑥ 人工知能に学習させるデータにこの信頼度が応用できないかと考えています(人工知能への応用として学習させるデータの形というイメージになります。さて、学習データの形とはどんなものでしょうか?今後の課題です。)。
⑦ 蛇足ですが、GPSも三角測量の技法を使っています。

人工知能の学習のためのモデル構築

初期処理

① シーケンシャル( Sequential )モデルを使用します。

from keras.models import Sequential

model = Sequential()

最適化

① SGDを使用します。
パラメータは、適当です。
詳細は、オプティマイザ(最適化アルゴリズム)の利用方法を参照してください。

from keras import optimizers

sgd = optimizers.SGD( lr=0.01, decay=1e-6, momentum=0.9, nesterov=True )
model.compile( optimizer='sgd' )

層(レイヤ)の種類

①いくつかの 層(レイヤ) の種類が存在します。
②正則化や制約、畳み込み,活性化関数はこの 層(レイヤ) の一部です。

層(レイヤ) のリスト

全てのレイヤを網羅していませんので、詳細は次のページを参照してください。
コアレイヤ
Convolutionalレイヤー
活性化関数

コアレイヤ

Dense
Activation
Dropout
Flatten
Reshape

Convolutionalレイヤー

Conv2D

活性化関数レイヤ( Activation )の種類のリスト

tanh
softmax
relu

モデルの設定例

keras のモデル設定は、PYTHONでkerasを使うを参照してください。

keras の例題としてのデータセット

データセットについては、データセットを参照してください。

まとめ

①筆者も理論的あるいは概念的に理解できない部分が多くあります。
②設定する項目が多すぎて、1つのことを深掘りすると全体像が見えなくなります。
③人工知能(ディープラーニング)であろうとも、既存のプログラムと同じく「データありき」が基本だと思います。
④人工知能 の研究者や商用の開発者でない限り、ざっくりとした理解でじゅうぶんだと思います。
⑤多くの場合、アイディアとプログラムはセットになります。
⑥ざっくりと人工知能が理解できて、プログラムが動作するようになったら、小さなアイディアを見つけて(他の人からでも)、応用してみるのがお勧めです。
⑦データセットを処理する全体の流れのサンプルコードは、アイリスのデータセットで試すなどを参照してください。

Verified by MonsterInsights
タイトルとURLをコピーしました