かずおじです。Deeplearningの基礎となるニューラルネットワークについて個人的理解のもと、まずは「ニューラルネットワークとは」について簡単にまとめてみました。深くは記載しません。あくまで読者がイメージできるように書いているので、理解の参考としてご覧ください。
ニューラルネットワークをコーディングできるまでに筆者が理解したことまたは早く知りたかったことを書いていくよ〜
ニューラルネットワークとは
ニューラルネットワークとは、「神経網」という意味。どの参考書にも出てくるとは思うが、その人間の脳の神経細胞(ニューロン)の動きをモデルとした手法である。簡単にいうと「人間が何かを体験し、学習する。その学習した経験を元に脳が身体に指令を出す。」といったところを模している。
またニューラルネットワークは、機械学習の中の1つの手法である。ニューラルネットワークの中にDeep Learningがある。(簡単に言うと、Deep Learningはニューラルネットワークの構造をより複雑にしたもの。)
ニューラルネットワークモデルの基本
まず超基本的なことを超簡単に説明する。最初にも書いたが、あくまで読者にイメージをしてもらうことが目的であるため、参考程度にみてほしい。
回帰モデルと分類モデル
基本的にニューラルネットワークモデルだけに限らず、機械学習モデルには2つの種類がある。
回帰モデルは、入力されたデータから、数値を予測するモデル。
例えば、店の先月の売り上げデータから来月の利益率を予測するなど。予測するものが実際の数値(利益率や売り上げ金額など)の場合、回帰モデルと言える。ここで「え?わからない」と思う方は、まずそのまま以下の分類モデルまで一読してほしい。
分類モデルは、名の通り、入力されたデータを分類するモデル。
例えば、店の先月の売り上げデータから来月の利益率が20%を上回るかどうか(Yes/No)を判定するなど。Yes/No問題や多クラス分類問題の場合、分類モデルと言える。
学習とテスト
ニューラルネットワークモデルには、モデル構築時に必要な「学習」、モデル構築後にモデルを評価する「テスト」という工程がある。
学習は訓練とも表現される。これは人間のする学習と概念は似ている。「入力データから答えを考え、教師データ(正解データとも言われる)と比較し、間違っていれば考え方を修正する。」というイメージ。
例えば、九九の5の段を学習しているとする。その際、5×4=24と計算してしまった時に答えを見て、「あ、20なのか」と5×4の計算方法を考え直すだろう。それが学習である。
上で「考え方を修正する」と表現したが、ニューラルネットワークでは、実際には「一般的にパラメータと言われるものを更新(修正)する」処理になる。最終的に解きたい問題にパラメータが最適化されたモデルを完成させることが目的。ここで一つ注意として書いておくが、学習されるデータに偏りがあると目的のモデルは作り難い。例えば、九九を覚えたいのに、5の段ばかり覚えると、他の段ができないという現象と同じである。機械学習ではそれを過学習と言う。その場合、機械学習では、5の段しかできないポンコツモデルになってしまう。
テストはモデルの汎用性を評価するのに超必要な工程である。重要なポイントは以下。
- 学習データで使用したデータは使わない。
- パラメータの更新は行わない
あくまで学習を完了したモデル(学習済みモデルと言われる)が、過学習せずにうまく特徴を捉えられているか、を評価するために、学習データで使用していないデータを入力して、教師データと近いものになるかどうかを調査する。例えば、九九の1〜5の段を学習して、7の段を解けるかどうかを確認する、というイメージである。
重みとバイアス
前章で説明した「学習」で更新されるモデルのパラメータには重みとバイアスという2つのパラメータがある。私の場合、一次関数の公式をベースに理解している。
$$y=ax+b$$
この式中で、x=入力データ、y=モデルの出力とすると、a=重み、b=バイアスとイメージできる。学習時には、大量の入力データ(x)と教師データ(yの正解となるもの)を使用して、モデルの出力=教師データになるように、重み(a)とバイアス(b)を更新して最適化していくイメージとなる。
ニューラルネットワークモデルの構造
ここでも計算の詳細は説明せず、あくまでイメージを記載する。
ニューラルネットワークは、入力層、中間層(隠れ層)、出力層で構成される。上記のような図でよく表現される。重みとバイアスは層の間に存在し、図の中で言うと、入力層-中間層間、中間層-出力層間である。また出力層の値がモデルの出力値となる。
計算は前章で使用した一次関数で表現すると以下のようになる。
$$h=W_1*x+b_1$$
$$y=W_2*h+b_2$$
- x : 入力層の値(入力データ)
- h : 中間層の値
- y : 出力層の値
- W1 : 入力層-中間層の重み
- b1 : 入力層-中間層のバイアス
- W2 : 中間層-出力層の重み
- b2 : 中間層-出力層のバイアス
重みはW、バイアスはbとよく表現される。実際は、W1、W2、b1、b2は行列であるため、より複雑なモデルであるとイメージできる。
また図では中間層が一つしかないが、この中間層の数は任意で設定することが可能。基本的に中間層が一つというのはチュートリアルレベルのモデルであり、現実で採用されているようなモデルはもっと多くの中間層が使用されている。この中間層が多い多層と呼ばれるモデルをDeeplearningという。ただし、明確な定義はない。
おわりに
今回はニューラルネットワークをコーディングするまでの第一歩として私なりの理解をまとめてみました。引き続き書いていきます。